Hallo zusammen,
ich habe endlich meine Weisshaupt Therme (leider mit CAN und nicht mit EBUS) über einen langen Umweg (mittels Homeassistant https://github.com/dm82m/hass-WEM-Portal (https://github.com/dm82m/hass-WEM-Portal) und versenden der Daten über MQTT) in's FHEM gebracht.
Im Homeassistant versende ich (mangels tieferer Erfahrung mit HASS und JSON) jeden Wert einzeln:
data_template:
payload_template: '{{ states.sensor.aussentemperatur.state }}'
topic: hass/heizung/aussentemperatur
service: mqtt.publish
data_template:
payload_template: '{{ states.sensor.system_status.state }}'
topic: hass/heizung/system_status
service: mqtt.publish
.
.
Diese Werte kommen in meinem MQTT2_DEVICE Heizug aktuell mit folgendem Readingslist an:
attr Heizung devicetopic hass/heizung
attr Heizung readingList
$DEVICETOPIC/aussentemperatur:.* aussentemperatur
$DEVICETOPIC/system_status:.* system_status
.
.
Gibt es da ein einfaches Regex mit dem man das readingList einkürzen kann?
Gruß
Alex
Schick die zwei Name/Value-Paare auf einem Topic, wenn möglich ?
So in der Art, abgeleitet von den Beispielen hab mich dazu nicht eingelesen, einfach ins Blaue:
payload_template: '{{ states.sensor.aussentemperatur.state,states.sensor.system_status.state }}'
topic: hass/heizung/state
Wenn so ein Json-Objekt mit zwei Name/Value-Paaren geschickt wird ist mein Verständnis das nur ein Readinglist-Eintrag von nöten wäre, der dann automatisch angelegt wird mit $DEVICETOPIC/state:.* json2nameValue($EVENT,'',$JSONMAP) }
Vielen Dank für den Schubs in die richtige Richtung, nach etwas herumexperimentieren habe ich es folgendermaßen gelöst:
HomeAssistant:
data_template:
topic: hass/heizung
payload: "{
\"aussentemperatur\": \"{{ states.sensor.aussentemperatur.state }}\",
\"status\": \"{{ states.sensor.system_status.state }}\",
.
.
}"
service: mqtt.publish
Und FHEM:
attr Heizung devicetopic hass/heizung
attr Heizung readingslist $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
Wie von mir vorgeschlagen und von dir gezeigt:
Zitatattr Heizung readingslist $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
wurde das Device/die readingList aber nicht automatisch angelegt oder ?
Mir hat die Frage/der Faden im Verständnis auch etwas weiter geholfen, bin der Meinung automatisch würde ein ReadingList mit deinem jetzigen Json mit json2nameValue($EVENT) angelegt werden.
Du kannst die Namen ja beinflussen, dann brauchst die Option $JSONMAP (die Möglichkeit andere Namen zu vergeben) auch nicht.
Wenn im Value der Aussentemperatur nur numerische Werte stehen kannst dir die Hochkomma und das escapen dieser sparen, im Json werden numerische Werte ohne Hochkomma angegeben, das gleiche bei system_status (vermute aber mal da steht ein String drin), dann in Hochkommata.
Du hast Recht,
$DEVICETOPIC:.* { json2nameValue($EVENT) }
reicht hier bereits.
Was die Hockommatas angeht, habe ich Fehlermeldungen auf der Json Seite bekommen, ausgelöst durch Strings wie den vom Status. Daraufhin habe ich mit mosquitto_sub die Struktur der anderen Nachrichten im MQTT angeschaut umd gesehen dass die Strings in Hochkommas müssen, daher habe ich erstmal alles damit versehen :-) .