Plot-Abriss vermeiden: Unterschied zwischen den Versionen
Zeile 52: | Zeile 52: | ||
== Bekannte Probleme == | == Bekannte Probleme == | ||
Das Modul dewpoint fügt dem state eines device den zusatz "D: xx" hinzu. Timing-abhängig kann dies zu "verwurschtelten" Darstellungen führen. Die Verwendung von addLog in Verbindung mit dewpoint ist daher nicht empfohlen. | Das Modul dewpoint fügt dem state eines device den zusatz "D: xx" hinzu. Timing-abhängig kann dies zu "verwurschtelten" Darstellungen führen. Die Verwendung von addLog in Verbindung mit dewpoint ist daher nicht empfohlen. | ||
addLog funktioniert nicht mit HMS-Sensoren, weil im Log keine Einträge hinzugefügt werden. Den Grund weiss ich aber (noch ) nicht, sobald ich was rausfinde oder wenn jemand was weiss, ergänze ich. Diese Liste ist nicht vollständig oder ausschließlich. | |||
== Implementierung == | == Implementierung == |
Version vom 30. Oktober 2013, 00:57 Uhr
Motivation
Bei Nutzung des Attributs event-on-change werden Log-Einträge nur bei Werteänderung geschrieben. Dies führt a) zum Abriss der Logs zum Ende des alten und zum Beginn des neuen Tages b) zu inadäquat langen Pausen zwischen Logeinträgen, z.B. für actuator, der zB in den Wintermonaten bei Anwesenheit durchgängig 100%, bei Abwesenheit durchgängig 0% betragen kann. Der Wechsel zwischen diesen Werten wird mit langen Flanken dargestellt.
Funktionsweise
Die Routine addLog fügt zu definierten Zeitpunkten Einträge im Log hinzu. Dadurch sollen die o.g. Effekte vermieden werden. Zusätzliche Einträge sind mit dem Anhang "<< addLog" gekennzeichnet. Der Aufruf erfolgt sinnvollerweise aus einem at. Üblich ist der Aufruf für alle Geräte bzw. readings, für die "event-on-change" gesetzt ist.
Die Routine hat zwei Aufrufparameter:
addLog(<devicename>, <reading>)
Beispiele aus fhem.cfg
### jede Stunde einen Eintrag für FHT actuator define a_actuator at +*01:00 {addLog("ez_FHT","actuator")} attr a_actuator room 99_System
addLog für mehrere devices in einem "Makro" zusammenfassen:
define addLog notify addLog {addLog("ez_Aussensensor","state");;addLog("ez_FHT","actuator");;addLog("ez_FHT","measured-temp");;addLog("MunichWeather","humidity");;addLog("MunichWeather","pressure");;addLog("MunichWeather","temperature");;addLog("MunichWeather","wind_chill");;} attr addLog room 99_System
### Hier ist ein trigger des o.g. notify verwendet, um nicht in beiden at-defines alle Aufrufe listen zu müssen. define a_midnight1 at *23:59 trigger addLog attr a_midnight1 room 99_System define a_midnight2 at *00:01 trigger addLog attr a_midnight2 room 99_System # Alternativ können auch die Einzelaufrufe direkt im at erfolgen, zB # define a_midnight_before at *23:59 {addLog("device","reading")}
Log-Beispiele
2012-11-04_23:46:28 ez_Aussensensor T: 9.4 H: 78.5 2012-11-04_23:59:00 ez_Aussensensor T: 9.4 H: 78.5 << addLog 2012-11-04_23:59:00 ez_FHT actuator: 0% << addLog 2012-11-04_23:59:00 ez_FHT measured-temp: 17.4 << addLog 2012-11-05_00:01:00 ez_Aussensensor T: 9.4 H: 78.5 << addLog 2012-11-05_00:01:00 ez_FHT actuator: 0% << addLog 2012-11-05_00:01:00 ez_FHT measured-temp: 17.4 << addLog 2012-11-05_00:24:31 ez_FHT actuator: 0% << addLog 2012-11-05_00:42:32 ez_Aussensensor T: 9.1 H: 78.1 2012-11-05_16:02:59 ez_Aussensensor T: 10.3 H: 65.9 2012-11-05_16:05:56 ez_Aussensensor T: 10.2 H: 66.3 2012-11-05_16:21:47 ez_Aussensensor T: 10.2 H: 66.3 << addLog 2012-11-05_16:21:48 ez_FHT actuator: 100% << addLog 2012-11-05_16:21:48 ez_FHT measured-temp: 18.5 << addLog 2012-11-05_16:30:26 ez_FHT measured-temp: 18.7 2012-11-05_16:44:18 ez_Aussensensor T: 9.9 H: 65.8
Nebeneffekte
addLog verwendet die Funktion trigger. Für fhem ist das gleichwertig mit dem Eintreffen eines Funktelegramms. Es werden also ggf. alle notifies ausgeführt, die für das relevante Gerät abzuarbeiten sind. Dies ist wohl zu bedenken, bevor man addLog verwendet.
Bekannte Probleme
Das Modul dewpoint fügt dem state eines device den zusatz "D: xx" hinzu. Timing-abhängig kann dies zu "verwurschtelten" Darstellungen führen. Die Verwendung von addLog in Verbindung mit dewpoint ist daher nicht empfohlen.
addLog funktioniert nicht mit HMS-Sensoren, weil im Log keine Einträge hinzugefügt werden. Den Grund weiss ich aber (noch ) nicht, sobald ich was rausfinde oder wenn jemand was weiss, ergänze ich. Diese Liste ist nicht vollständig oder ausschließlich.
Implementierung
Die Routine wird in die lokale Programmdatei integriert, z.B. 99_myUtils.pm, siehe 99_myUtils_anlegen. Nach dem hineinkopieren bitte daran denken, ein reload 99_myUtils.pm durchzuführen. Auf Fehlermeldungen im fhem.log achten.
#### Log-abriss vermeiden # called by # define addLog notify addLog {addLog("ez_Aussensensor","state");addLog("ez_FHT","actuator");\ # addLog("MunichWeather","humidity");addLog("MunichWeather","pressure");\ # addLog("MunichWeather","temperature");addLog("MunichWeather","wind_chill");} # define a_midnight1 at *23:59 trigger addLog # define a_midnight2 at *00:01 trigger addLog sub addLog($$) { my ($logdevice, $reading) = @_; # device and reading to be used my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading"); if ($reading =~ m,state,i) { fhem "trigger $logdevice $logentry << addLog"; } else { fhem "trigger $logdevice $reading: $logentry << addLog"; } }