Ich setze meinen aktuellen Stromverbrauch der Heizung mittels DOIF in meinem Device GPIO3 (Type RPI_GPIO).
([GPIO3:Counter])
(setreading GPIO3 actualElectricEnergy {(sprintf("%.3f",[GPIO3:actualElectricEnergy]+0.001))})
Dadurch sehe ich im Event Monitor zwar einen Eintrag, aber es wird nicht wirklich ein Event erzeugt. So ist es hier https://fhem.de/commandref_DE.html#setreading (https://fhem.de/commandref_DE.html#setreading) auch beschrieben. Allerdings benötige ich das Event, damit für mein DbLog ein Eintrag erzeugt wird.
Verwende ich
(sleep 0.1;setreading GPIO3 actualElectricEnergy {(sprintf("%.3f",[GPIO3:actualElectricEnergy]+0.001))})
bzw. ein "wait" im DOIF, wird über DbLog ein Datensatz geschrieben.
Kann mir jemand erklären oder auf eine Doku referenzieren, warum nur durch das sleep oder wait ein Event in Kombination mit setreading erstellt wird? Ist mein Vorgehen für das Logging mittel DOIF und DbLog richtig oder gibt es sinnvollere Umsetzungsmöglichkeiten?
Vielen Dank!
Das Counter-Reading in deinem GPIO-Device zählt ja schon.
Dann brauchst du doch nur ein userreading.
Etwa so:
energy:Counter.* {ReadingsVal($name,"Counter",0)/1000}
Mit event-on-change-reading erzeugst du dann das gewünchte event.
Zitat von: crusader link=topic=118775.msg1132105#msg1132105
Etwa so:
code]energy:Counter.* {ReadingsVal($name,"Counter",0)/1000}[/code]
So hatte ich das schon mal hinterlegt. Allerdings wurde dann der Wert "actualElectricEnergy" nicht zuverlässig berechnet, da die 0.001 immer mehrmals addiert wurden und damit zu ungenauen Ergebnissen führte. Kann das ich da bzgl. event-on-change-reading was nicht richtig konfiguriert habe. Kann mich da nicht mehr erinnern. Damals hatte ich dann auf DOIF umgestellt, was funktioniert hat.
Trotzdem würde mich technisch mal interessieren, warum das wait bzw. sleep zu einem Event führt.
ZitatTrotzdem würde mich technisch mal interessieren, warum das wait bzw. sleep zu einem Event führt.
weil fhem dann die events nicht mehr unterdrückt.
das unterdrücken der events ist ein sicherheitsfeature, um endlos-schleifen zu verhindern.