Mittels DOIF EP-WM55 Status Display steuern

Begonnen von merasil, 25 Januar 2018, 12:11:09

Vorheriges Thema - Nächstes Thema

merasil

Hallo ihr,

irgendwie hab ich mich verrannt und komme nicht mehr weiter. Vielleicht sehe ich den Wald auch vor lauter Bäumen nicht.

Folgendes Problem:
Ich möchte das Display (mittlere 3 Zeilen) meines HM-Dis-EP-WM55 mit einem DOIF steuern.
Es soll Anzeigen ob die Kellertür offen ist, ob im EG irgendein Fenster offen ist und ob der Alarm scharf ist oder nicht

1. und 3. ist relativ einfach. Das mit den Fenstern konnte ich mittels structure lösen. Jetzt habe ich bei der Tür und bei den Fenstern aber das Problem, dass jedes Mal wenn ein Fenster, oder die Tür geöffnet wird eine Aktualisierung des Displays stattfindet. Das dürfte ziemlich auf die Lebensdauer der Batterien gehen vermute ich mal, weshalb ich den Status erst aktualisieren möchte wenn ein Fenster oder die Tür länger als 1 Minute geöffnet ist.

Mein bisheriges DOIF:
define testDO DOIF ([KG_D1:state:sec] < 5)
((set OG_SZ_S1_Dis displayEP K.Tuer,[KG_D1:state]::))
DOELSEIF ([myTestAlarm:state:sec] < 5)
((set OG_SZ_S1_Dis displayEP :Alarm,[myTestAlarm:state]:))
DOELSEIF ([EG_Fenster_Status:state:sec] < 5)
((set OG_SZ_S1_Dis displayEP ::Fenster,[EG_Fenster_Status:state]))


KG_D1 ist die Kellertür
EG_Fenster_Status das structure

Habt ihr irgendwelche Ideen? Gerne auch mit mehreren DOIFs oder NOTIFYs
Ich habe mir selbst überlegt, dass man sowas wie ein last_state in das structure einführt und das dann abfragt anstatt den state.
Dafür hab ich mir testweise ein DOIF gebaut, was aber irgendwie nicht triggert... nur wenn ich checkall ausführe.

define testdo DOIF ([myTestAlarm:state:sec] > 10 and [myTestAlarm:state] ne [myTestAlarm:last_state])
(setreading myTestAlarm last_state [myTestAlarm:state])


Logik ist, dass wenn myTestAlarm den state ändert, wird 10s (die Zeit kann dann beliebig erhöht werden) gewartet ob sich nochmal was am state ändert. "Nach" den 10s wird überprüft ob der last_state und state ungleich sind. Wenn ja wird last_state auf state gesetzt und triggert, sodass man mit dem anderen DOIF darauf zugreifen kann.
Leider passiert dabei gar nichts. Ich vermute mal, weil es nicht so funktioniert wie ich es mir wünsche (10s warten) sondern das er zum Zeitpunkt des on/off schaut ob das Event 10s her ist.

Damian

solche Abfragen:

([KG_D1:state:sec] < 5)

sind üblicherweise nicht sinnvoll, denn die Bedingung wird ausgewertet, wenn D1 triggert und dann ist das Alter des Readings state gleich Null.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

merasil


Ellert

Mit normalem Trigger ohne :sec, dafür wait und do resetwait.

merasil

Sorry :( ich bin noch nicht so weit in FHEM, als das ich mit so knappen Antworten schon was anfangen kann. Kannst du mir ein Beispiel dazu machen?

Ellert

Zitat von: merasil am 25 Januar 2018, 13:16:49
Sorry :( ich bin noch nicht so weit in FHEM, als das ich mit so knappen Antworten schon was anfangen kann. Kannst du mir ein Beispiel dazu machen?
Beispiele findest Du in der deutschsprachigen Befehlsreferenz zu DOIF, schau Dir die Attributübersicht (wait, do resetwait) und das Inhaltsverzeichnis (Ereignissteuerung über Auswertung von Events) an, das sollte Dich weiter bringen.