MQTT2_CLIENT Device updates unterdrücken

Begonnen von rogerknop, 13 Januar 2023, 09:21:18

Vorheriges Thema - Nächstes Thema

rogerknop

Hallo,
ich habe verschiedene Zähler über MQTT an fhem angebunden.
Manchmal wird allerdings von den Zählern ein ErrorCode gesendet.
Genau in diesem Fall möchte ich das Update des eigentlichen Wertes auf 0 verhindern, da sonst auch die Werte in meinem statistics Device falsch berechnet werden.
Gibt es hier die Möglichkeit die eingehenden Events abzufangen und das Update zu verhindern?
Danke & Grüße,
Roger

rudolfkoenig


Otto123

Hallo Roger,

Du willst am IO bestimmte Nachrichten abfangen und verwerfen, so dass sie nicht zum MQTT2_DEVICE gelangen?

Geht das eventuell hiermit?
ZitatrawEvents <topic-regexp>
send all messages as events attributed to this MQTT2_CLIENT instance. Should only be used, if there is no MQTT2_DEVICE to process the topic.

Liest sich allerdings so, als ob es auf topics beschränkt ist und die Werte keine Rolle spielen?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rogerknop

Hallo Otto,
ja so lese ich es auch und ausserdem ist ja noch die Abhängigkeit zwischen 2 Werten.
Also wenn ErrorCode = OK, dann schreibe die Werte x, y und z aus der Nachricht in das Device.
Im Fehlerfall keine Änderung der Werte.
Danke & Grüße,
Roger

Otto123

Am DEVICE selbst geht es über userReadings (ich wüsste nicht wie es am CLIENT über userReadings gehen kann und ob Rudi das wirklich gemeint hat?) oder Du greifst in der readingList selbst den Event ab und behandelst den mit einer Logik. Beispiel aus der tasmota Ecke:
tele/tasmota_5E32CA/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rogerknop

Also im Prinzip in einem Notify die neuen Werte prüfen und x, y und z in weitere UserReadings schreiben nur falls kein Fehler aufgetaucht ist.
Und dann das statistics entsprechend auf die UserReadings umsetzen.
Korrekt?

Otto123

userReadings ist ein attribute direkt am Device und braucht kein extra notify
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

Ich meinte userReadings fuer MQTT2_DEVICE.
Im readingsList fuer das MQTT2_DEVICE geht es auch, ist aber ein bisschen Hack, im Sinne dass es nicht offensichtlich ist.

rogerknop

#8
OK ich glaube ich habe es verstanden.
Das userReadings setze ich in Abhängigkeit von ErrorCode und statistics switche ich auf das userReadings.
DANKE! Wieder mal super Support hier :-)
Grüße, Roger