Gelöst: userreading erzeugt unerwünschten Filelog 0 Eintrag

Begonnen von romakrau, 04 November 2023, 07:05:50

Vorheriges Thema - Nächstes Thema

romakrau

Hallo zusammen,
ich möchte zur Unterscheidung in einem Graphen Werte mit gleichlautendem Reading aus verschiedenen Devices mittels userreading eindeutig machen.

attr Depot_US event-on-change-reading US_depot_value
attr Depot_US userReadings US_depot_value { ReadingsVal("Depot_US","depot_value",0) }

Ich erhalte im Filelog allerdings immer einen unerwünschten Nullwert:

2023-11-04_06:54:27 Depot_US US_depot_value: 0
2023-11-04_06:54:27 Depot_US US_depot_value: 2728.89


Wie kann ich das verhindern.

Gruß Roman

Otto123

#1
Guten Morgen,

Vermutung: das Device wird mehrfach aktualisiert, beim ersten Trigger kann der Wert nicht ausgelesen werden und wird deshalb durch Dein default = 0 gesetzt.
Mögliche Abhilfe: definiere für das userReadings einen genauen trigger (und nimm für Zahlen ReadingsNum() ). Da Du im gleichen Device liest kannst Du die Variable $name verwenden, das macht den Code flexibler:
attr Depot_US userReadings US_depot_value:depot_value:.* { ReadingsNum($name,"depot_value",0) }
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

Wzut

beim event-on-change-reading ist das Reading US_depot_value angegeben, beim userReading nur noch depot_value.
IMHO fehlt da das US_ , dadurch wird immer die angegebene default 0 genommen und geloggt .....
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

romakrau

Hallo Otto,

dein Code erzeugt leider kein userreading. Wenn ich das userreading einkürze auf
attr Depot_US US_depot_value { ReadingsNum($name,"depot_value",0) }erzeugt mir das 3 Logeinträge.
2023-11-04_17:31:39 Depot_US US_depot_value: 2728.89
2023-11-04_17:31:40 Depot_US US_depot_value: 0
2023-11-04_17:31:40 Depot_US US_depot_value: 2728.89

Otto123

Du hast das Problem nicht verstanden. Und ich kann nur spekulieren, weil ich nicht weiß um welches gerät es sich handelt.
Ich empfehle zum besseren Verständnis die Verwendung des Eventmonitors

Zitat commandref
ZitatuserReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:
<reading>[:<trigger>] [<modifier>] { <perl code> }
Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).
Der Hinweis von Wzut ist auch gut, durch Deinen event-on-change-reading Eintrag erzeugst Du für den von mir empfohlenen Trigger keinen Event mehr. Der ist aber notwendig. Also ändere:
attr Depot_US event-on-change-reading US_depot_value,depot_value
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

romakrau

#5
Guten Morgen Otto,
das Problem liegt wohl darin das die Trigger intern und extern im Modul unterschiedlich getriggert werden. Ich habe "depot_value" in event-on-change-reading aufgenommen nd der Spuk ist vorbei. Zusätzlich habe ich die Namensähnlichkeit im User Reading geändert, damit der regex nicht auf dumme Gedanken kommt. Das Ganze sieht jetzt so aus:
attr Depot_US event-on-change-reading US_wert,depot_value
attr Depot_US userReadings US_wert:depot_value.* { ReadingsNum($name,"depot_value",0) }
Der Event Monitor zeigte in allen Fällen die Events an die zum Logging führten, war also keine Hilfe.
Gruß Roman

Otto123

Zitat von: romakrau am 05 November 2023, 09:11:15Der Event Monitor zeigte in allen Fällen die Events an die zum Logging führten, war also keine Hilfe.
Richtig angewendet hättest Du gesehen, dass Dein Modul die Erzeugung des userReadings mehrfach getriggert hat, nicht nur wenn sich der Wert ändert, den Du auslesen willst. ;) Und dabei unter Umständen zu einem Zeitpunkt, wo Dein Reading nicht gelesen werden kann.
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