FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: pula am 20 November 2020, 12:14:41

Titel: [gelöst] MQTT2_device nur werte mit bestimmten Inhalten in readings schreiben
Beitrag von: pula am 20 November 2020, 12:14:41
Hallo,

wahrscheinlich steh ich grad auf dem Schlauch, aber ich habe auch mit verschiedenen Suchen nichts gefunden.

Ich habe ein OPnsense am laufen und das dort aktivierte telegraf schickt per mqtt Werte zu den verschiedenen definierten Interfaces.
Das sieht dann zb so aus:
opnsense/OPNsense.fritz.box/net {"fields":{"bytes_recv":42991672202,"bytes_sent":1348287572,"drop_in":0,"drop_out":0,"err_in":0,"err_out":0,"packets_recv":31389815,"packets_sent":11032161},"name":"net","tags":{"host":"OPNsense.fritz.box","interface":"vtnet1"},"timestamp":1605870670}

opnsense/OPNsense.fritz.box/net {"fields":{"bytes_recv":27482695844,"bytes_sent":532102094,"drop_in":0,"drop_out":56450,"err_in":0,"err_out":0,"packets_recv":20785545,"packets_sent":9347658},"name":"net","tags":{"host":"OPNsense.fritz.box","interface":"ovpnc3"},"timestamp":1605870670}

opnsense/OPNsense.fritz.box/net {"fields":{"bytes_recv":0,"bytes_sent":0,"drop_in":0,"drop_out":0,"err_in":0,"err_out":0,"packets_recv":0,"packets_sent":0},"name":"net","tags":{"host":"OPNsense.fritz.box","interface":"ovpns1"},"timestamp":1605870670}

Soweit so gut. Nun ist es aber so, daß Werte für verschiedene Interfaces unter dem gleichen topic kommen (kann man auch nicht umstellen soweit ich weiß).
Was in fhem mit einer einfachen readinglist
fhem:opnsense/OPNsense\x2efritz\x2ebox/net:.* { json2nameValue($EVENT) }passiert, ist daß hier die Werte des einen Interfaces mit den Werten des nächsten (in chronologischer Reihenfolge) überschrieben werden.
Hat jemand eine Idee, wie man die Werte in fhem vereinzeln oder zumindest nur die Werte eines bestimmten interfaces übernehmen lassen kann?

Danke im voraus und cheers,
Pula
Titel: Antw:MQTT2_device nur werte mit bestimmten Inhalten in readings schreiben
Beitrag von: Beta-User am 20 November 2020, 12:23:05
Na ja, da alles über denselben Topic kommt, ist es nicht ganz trivial, aber du kannst $EVENT in readingList per regex parsen und z.B. das, was nach "interface" kommt als Präfix für json2nameValue() verwenden.

Ein paar solcher "Vorbereitungs"-Beispiele kannst du in mqtt2.template (https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template) finden, wenn du darin nach "$EVENT =~" suchst, allerdings wird da "$1" teils sehr unterschiedlich genutzt.

Hoffe, das reicht als Schubs, sonst bitte nochmal nachfragen ;) .
Titel: Antw:MQTT2_device nur werte mit bestimmten Inhalten in readings schreiben
Beitrag von: pula am 20 November 2020, 12:42:46
Super, danke für den RASCHEN schubs!
so scheint es zu klappen:
fhem:opnsense/OPNsense\x2efritz\x2ebox/net:.* { $EVENT =~ 'vtnet0' ? json2nameValue($EVENT) : return }
Titel: Antw:MQTT2_device nur werte mit bestimmten Inhalten in readings schreiben
Beitrag von: Beta-User am 20 November 2020, 13:01:38
 :)

Hier noch die (ungetestete) Präfix-Variante für den universellen Einsatz (alles in einem Device):
opnsense/OPNsense\x2efritz\x2ebox/net:.* { $EVENT =~ m,interface...([^"]+), ? json2nameValue($EVENT, "${1}_" ) : return }
Wenn dich nur Teile interessieren, würde ich dir noch den 4. Parameter "filter" in json2nameValue() zum Test empfehlen ;) .
Titel: Antw:MQTT2_device nur werte mit bestimmten Inhalten in readings schreiben
Beitrag von: pula am 27 November 2020, 12:49:29
Erst jetzt gesehen....
Danke für das Statement!
Titel: Antw:MQTT2_device nur werte mit bestimmten Inhalten in readings schreiben
Beitrag von: Beta-User am 27 November 2020, 12:55:39
Gerne :) .

Falls das paßt, wäre eine Rückmeldung nett, dann baue ich es vielleicht in den "workshop (https://forum.fhem.de/index.php/topic,116162.0.html)" ein, sowas kommt sturkturell doch häufiger vor und hier ist es evtl. noch etwas einfacher nachzuvollziehen wie beim OpenMQTTGateway...

Ansonsten: [gelöst]?
Titel: Antw:MQTT2_device nur werte mit bestimmten Inhalten in readings schreiben
Beitrag von: pula am 28 November 2020, 01:40:51
kann das leider momentan nicht testen - daher auf gelöst....