Mit 'toJSON' kann man das z.B: so erledigen (habe zum Testen ein HM Wandthermostet verwendet, Prinzip ist jedoch das selbe):
desired-temp|measured-temp!json:topic={"test/thermostat/json"}
desired-temp|measured-temp!json:expression={toJSON({"temperature"=>ReadingsVal($device,'measured-temp', undef),
"desired-temp"=>ReadingsVal($device,'desired-temp', undef),
"battery"=>{"state"=>ReadingsVal($device,'battery', undef),
"voltage"=>ReadingsVal($device,'batteryLevel', undef)}})}
Hier wird ein HASH im HASH erzeugt und an toJSON übergeben.
Ergebniss unter dem Topic 'test/thermostat/json'
{
"battery": {
"state": "ok",
"voltage": "2.7"
},
"desired-temp": "21.0",
"temperature": "21.5"
}
Ich weiß nicht ob Homeassistant mit den Strings bei Zahlenwerten in JSON klarkommt, denke aber schon.
Auch eine Lösung nur auf der Seite von HASS müsste möglich sein, den kann man ja recht flexibel umbiegen, wie die Werte zu interpretiren sind (templates).
Achtung! Beim testen habe ich noch ein Bug in MQTT_GENERIC_BRIDGE gefunden. Betrifft AUswertung in expressions bei mehreren eineinander gelegten geschweiften Klammern. Hier hat die Variablenersetzung nur zum Teil funktioniert. Die Korrektur kommt morgen per Update, alternativ kann man die angehängte Datei nehmen.
Update:
Ausprobiert in HASS - kommt wunderbar mit Strings statt Zahlen klar.
sensor:
- platform: mqtt
name: "test"
state_topic: "test/thermostat/json"
value_template: "{{ value_json.temperature }}"