FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Hanjo am 29 April 2021, 21:30:41

Titel: Alter von Reading effizient überprüfen
Beitrag von: Hanjo am 29 April 2021, 21:30:41
Hallo,

Ich möchte bei meiner Jalousie den Zustand (fährt hoch, fährt runter, angehalten) erkennen. Als sinnvollen Input kann ich dazu lediglich den status heranziehen (0% = geöffnet / 100% = geschlossen). Meine Logik ist

Derzeit sieht meine Lösung so aus:
defmod Jalousie.UpdateMotor DOIF ([JalousieOst:status:d] == 0 or [JalousieOst:status:d] == 100 or [+10] and [JalousieOst:status:sec] > 10) (
setreading JalousieOst motor stop
) DOELSEIF ([JalousieOst:status:diff] > 0) (
setreading JalousieOst motor down
) DOELSEIF ([JalousieOst:status:diff] < 0) (
setreading JalousieOst motor up
)


Ich bin damit aber nicht wirklich zufrieden, da ich einen Trigger benötige, der alle zehn Sekunden überprüft, ob der status älter als zehn Sekunden ist. Ohne do always löst das DOIF zwar nicht erneut aus, aber der Timer läuft halt trotzdem permanent.

Gibt es hier eine elegantere Lösung?

Danke & Gruß
Hanjo
Titel: Antw:Alter von Reading effizient überprüfen
Beitrag von: cwagner am 30 April 2021, 07:48:54
Eine Anregung wäre das Attribut oldreadings auf status in Verbindung mit event-on-change-reading für status. status ändert sich dann nur, wenn Jalousie in Bewegung ist. Den Status würde ich als Trigger nehmen und vergleichen, ob das vorherige Reading größer oder kleiner ist. Mit event-on-change-reading sorgst Du auch dafür, dass in Dein System entlastet wird von redundanten Aktualisierungen.

Herzliche Grüße

Christian