Versuche Readings per MQTT als Json zu versenden

Begonnen von elo, 21 Januar 2020, 15:49:25

Vorheriges Thema - Nächstes Thema

elo


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.
--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

Beta-User

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})}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

hexenmeister

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.

elo

#3
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})}
--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

elo

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?
--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

elo

Funktioniert wie beschrieben, finde die Daten jetzt in der influxdb. Vielen Dank!
--
Raspi + FHEM 5.8 + HM-MOD-PCB + HM-LAN + HM-LC_Bl1PBU-FM + HM-LC-BL1-FM + HM-PB-2-WM + HM-LC-SW1-FM + HM-TC-IT-WM-W-EU + HM-CC-RT-DN