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
Hallo Michael,
ist er immer 0? Du machst differential, da ändert sich offenbar derzeit nix? Alle anderen Werte gehen?
Gruß Otto
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
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.
Nein, es werden nur die beiden Werte ohne das "differential"-Reading ins Log verfrachtet.