UserReadings werden nicht ins FileLog geschrieben

Begonnen von MichaelO, 26 Juli 2017, 18:52:40

Vorheriges Thema - Nächstes Thema

MichaelO

Moin,

ich hab ein Problem mit UserReadings, die ich nicht ins FileLog bekomme.

Ich habe ein DOIF, dieses triggert, wenn der S0-Counter (Doppelzähler, einer für Wasser, einer für Strom) ein Event generiert. Dann werden im DOIF einige UserReadings auf Stand gebracht: aktueller Zählerstand und Momentanverbrauch. Ich möchte nun den Rohwert des Counters, sowie die beiden UserReadings in ein FileLog schreiben und daraus später einen Plot erstellen. Irgendwie bekomme ich aber das Reading für den Momentanverbrauch nicht geloggt. Kann hier wer helfen?

Das FileLog:
Internals:
   CFGFN
   DEF        ./log/wasser-%Y-%m.log DB_OWCounter:counters.B:.*|di_Wasserverbrauch:momentanverbrauch:.*|di_Wasserverbrauch:zaehlerstand:.*
   NAME       FileLog_Wasser_M
   NOTIFYDEV  DB_OWCounter,di_Wasserverbrauch
   NR         1959
   NTFY_ORDER 50-FileLog_Wasser_M
   REGEXP     DB_OWCounter:counters.B:.*|di_Wasserverbrauch:momentanverbrauch:.*|di_Wasserverbrauch:zaehlerstand:.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/wasser-2017-07.log
   logfile    ./log/wasser-%Y-%m.log
   READINGS:
     2017-07-26 18:50:35   linesInTheFile  25
Attributes:
   room       9.7_LogFiles


Das DOIF:
Internals:
   CFGFN
   DEF        ([DB_OWCounter:counters.B])
()
   NAME       di_Wasserverbrauch
   NR         1654
   NTFY_ORDER 50-di_Wasserverbrauch
   STATE      Zählerstand: 49.574 m³<br/>Momentanverbrauch: 0.0 l/h
   TYPE       DOIF
   READINGS:
     2017-07-26 18:41:35   Device          DB_OWCounter
     2017-07-26 18:41:35   cmd             1
     2017-07-26 18:41:35   cmd_event       DB_OWCounter
     2017-07-26 18:41:35   cmd_nr          1
     2017-07-26 18:41:35   e_DB_OWCounter_counters.B 278
     2017-07-26 18:41:35   momentanverbrauch 0
     2017-07-26 18:41:35   state           cmd_1
     2017-07-26 18:41:35   zaehlerstand    49.574
   condition:
     0          ReadingValDoIf($hash,'DB_OWCounter','counters.B')
   devices:
     0           DB_OWCounter
     all         DB_OWCounter
   do:
     0:
       0
     1:
   helper:
     event      counters.A: 6709317,counters.B: 278,Stromverbrauch: 7280.007,Leistungsaufnahme: 399.9004537637,Tagesverbrauch: 6.33999999999924,Ferrariszaehler: 29914.107
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   DB_OWCounter
     timerevent counters.A: 6709317,counters.B: 278,Stromverbrauch: 7280.007,Leistungsaufnahme: 399.9004537637,Tagesverbrauch: 6.33999999999924,Ferrariszaehler: 29914.107
     triggerDev DB_OWCounter
     timerevents:
       counters.A: 6709317
       counters.B: 278
       Stromverbrauch: 7280.007
       Leistungsaufnahme: 399.9004537637
       Tagesverbrauch: 6.33999999999924
       Ferrariszaehler: 29914.107
     timereventsState:
       counters.A: 6709317
       counters.B: 278
       Stromverbrauch: 7280.007
       Leistungsaufnahme: 399.9004537637
       Tagesverbrauch: 6.33999999999924
       Ferrariszaehler: 29914.107
     triggerEvents:
       counters.A: 6709317
       counters.B: 278
       Stromverbrauch: 7280.007
       Leistungsaufnahme: 399.9004537637
       Tagesverbrauch: 6.33999999999924
       Ferrariszaehler: 29914.107
     triggerEventsState:
       counters.A: 6709317
       counters.B: 278
       Stromverbrauch: 7280.007
       Leistungsaufnahme: 399.9004537637
       Tagesverbrauch: 6.33999999999924
       Ferrariszaehler: 29914.107
   internals:
   itimer:
   readings:
     0           DB_OWCounter:counters.B
     all         DB_OWCounter:counters.B
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   do         always
   stateFormat {sprintf("Zählerstand: %.3f m³<br/>Momentanverbrauch: %.1f l/h", ReadingsVal("di_Wasserverbrauch","zaehlerstand","?"),ReadingsVal("di_Wasserverbrauch","momentanverbrauch","?")) }
   userReadings zaehlerstand { ReadingsVal("DB_OWCounter","counters.B",0)/1000.0+49.296; }, momentanverbrauch differential { 3600*ReadingsVal("DB_OWCounter","counters.B",0); }



Danke
Michael

Otto123

Hallo Michael,

ist er immer 0? Du machst differential, da ändert sich offenbar derzeit nix? Alle anderen Werte gehen?

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

MichaelO

Hi Otto,

der Wert war zum Zeitpunkt des Listig=0, weil kein Wasser lief. Die Werte kommen alle 3 Minuten, so dass "Momentanverbrauch" etwas missverständlich ist. Aber auch wenn dort ein Wert <> 0 steht, landet nichts im Log. Komischerweise werden beim Träger durch den Counter alle möglichen Readings in dem DOIF rot, also geändert angezeigt. Nur der mit differential erzeugte Wert bleibt grau. Wenn ich dann einen Browser-Refresh mache, sehe ich den neuen Wert auch beim differential Reading.

Ich hab auch schon event-on-change und on-update ausprobiert, dann wird nur noch der Rohwert des Counters geloggt. Irgendwie stehe ich auf dem Schlauch.

Gruß
Michael

Otto123

#3
Mach mal das Semikolon am Ende des userreadings weg. Braucht man dort nicht, aber ob es das ist?

Zitatdifferential: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet, falls der Unterschied unter eine Sekunde liegt.

Oder nimm doch dort mal was anderes, monotonic z.B.
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

MichaelO

Nein, es werden nur die beiden Werte ohne das "differential"-Reading ins Log verfrachtet.