FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: elo am 21 Januar 2020, 15:49:25

Titel: Versuche Readings per MQTT als Json zu versenden
Beitrag von: elo am 21 Januar 2020, 15:49:25

Ziel: telegraf soll sie in eine influxdb speichern.

Verwende MQTT und MQTT_GENERIC_BRIDGE damit ein Wandthermostat HM-TC-IT-WM-W-EU seine Werte versenden kann.

attr HM_418B2D_Climate mqttPublish measured-temp|desired-temp|humidity:topic={"fhem/$device"} measured-temp|desired-temp|humidity:qos=1 measured-temp|desired-temp|humidity:retain=0

Im mosquitto kommt das Topic und die Werte an aber ohne Bezug zum $name und eben nicht als json.

Wenn ich es um "json:expression={toJSON({name=>$name,value=>$value})}" ergänze ändert sich daran leider nichts.

Was ich gerne hätte wäre: fhem/HM_418B2D_Climate Message: {"measured-temp":"21.7"}

Was mache ich falsch? Vielen Dank im Voraus.
Titel: Antw:Versuche Readings per MQTT als Json zu versenden
Beitrag von: Beta-User am 21 Januar 2020, 17:08:59
Zitat von: elo am 21 Januar 2020, 15:49:25
Wenn ich es um "json:expression={toJSON({name=>$name,value=>$value})}" ergänze ändert sich daran leider nichts.
In der commandref ist da immer ein "!" dabei. Würde die Erweiterung daher (ungetestet!) so gestalten:
.*!json:expression={toJSON({name=>$name,value=>$value})}
Titel: Antw:Versuche Readings per MQTT als Json zu versenden
Beitrag von: hexenmeister am 21 Januar 2020, 21:40:57
Nein, nicht "json:expression=..." sondern <reading>:expression. Also measured-temp|desired-temp|humidity:expression=... Oder gleich *:expression=...
Das "!" dient einem anderen Zweck: damit kann man mehrere regeln dem gleiche Reading zuordnen (z.B. ein Reading an zwei Topics senden). Alles, was nach dem ! kommt, dient nur der Unterscheidung, ist aber nicht Teil der Reading-Namen.
Titel: Antw:Versuche Readings per MQTT als Json zu versenden
Beitrag von: elo am 23 Januar 2020, 11:11:51
Perfekt, funktioniert! Vielen Dank!

attr HM_418B2D_Climate mqttPublish measured-temp|desired-temp|humidity:topic={"fhem/$device"} measured-temp|desired-temp|humidity:qos=1 measured-temp|desired-temp|humidity:retain=0 measured-temp|desired-temp|humidity:expression={toJSON({$name=>$value})}
Titel: Antw:Versuche Readings per MQTT als Json zu versenden
Beitrag von: elo am 23 Januar 2020, 13:49:05
fhem/HM_418B2D_Climate {"desired-temp":"22.5"}
fhem/HM_418B2D_Climate {"humidity":"43"}
fhem/HM_418B2D_Climate {"measured-temp":"21.8"}

Telegraf erwartet scheinbar, dass Zahlenwerte "float" nicht in Hochkommata "quoted" übergeben werden.

Darauf kann ich in fhem keinen Einfluss nehmen oder?
Titel: Antw:Versuche Readings per MQTT als Json zu versenden
Beitrag von: Beta-User am 23 Januar 2020, 13:58:19
Na ja, es sollte gehen, die toJSON-Funktion manuell nachzubilden, ist ja nichts mehrdimensionales...
Ungetestet etwa in der Art:
expression={"{\"$name\":".$value."}"}Kann sein, dass du die inneren Klammern auch noch escapen mußt.
Titel: Antw:Versuche Readings per MQTT als Json zu versenden
Beitrag von: elo am 23 Januar 2020, 14:50:13
Funktioniert wie beschrieben, finde die Daten jetzt in der influxdb. Vielen Dank!