FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Damian am 14 September 2020, 22:25:07

Titel: neues Feature: wiederholende Ausführungstimer mit Bedingung
Beitrag von: Damian am 14 September 2020, 22:25:07
Ich habe die set_Exec-Funktion um eine Bedingung zur Wiederholung erweitert. Die Syntax lautet:

set_Exec(<timerName>, <seconds>, <perlCode>,<condition>)

<condition> ist eine Bedingung zur Wiederholung des Timers

Beispiel 1

Wenn Alarm ausgelöst wird, soll eine Benachrichtigung gesendet werden und alle 60 Sekunden wiederholt werden, solange Alarmanlage auf "on" steht.

DOIF {[Alarm];fhem("send Benachrichtigung Alarm");set_Exec("timer",60,'fhem("send Benachrichtigung Alarm")','ReadingsVal("Alarmananlage","state","on") eq "on"')}

Beispiel 2

Wenn Taster auslöst, Lampe auf on schalten und noch zwei mal im Abstand von 5 Sekunden wiederholt auf on schalten.

DOIF {[Taster];fhem_set"lampe on";set_Exec("timer",5,'fhem_set("lampe on")','$count<2')}

alternativ:

DOIF {[Taster];set_Exec("timer",'$count ? 5:0','fhem_set("lampe on")','$count<3')}

$count ist eine interne Variable, die bei jedem Durchlauf um eins erhöht wird.

Beispiel 3

Wenn Fenster geöffnet wird, dann soll eine Benachrichtigung erfolgen, dabei soll die Benachrichtigung bis zu 10 mal jeweils um weitere 60 Sekunden verzögert werden: erste Benachrichtigung nach 5 Minuten, zweite Benachrichtigung nach weiteren 6 Minuten, dritte Benachrichtigung nach weiteren 7 Minuten usw.

DOIF {if ([window:state] eq "open") {
   set_Exec("timer",'300+$count*60','fhem("echo speak Fenster schließen")','$count<9')
} else {
  del_Exec("timer")
}
}


Die neue DOIF-Version wird demnächst nach erfolgreichen Tests eingecheckt.

Edit: Da die Parameter seconds und condition per eval ausgewertet werden, können beliebige Perlkonstrukte dort vorkommen (package DOIF)

Als condition könnte man z. B. auch definieren 'ReadingsVal("Alarmananlage","state","on") eq "on" and $count < 10'
Titel: Antw:neues Feature: wiederholende Ausführungstimer mit Bedingung
Beitrag von: Damian am 17 September 2020, 17:32:37
neue DOIF-Version wurde eingecheckt. Morgen per update verfügbar, bitte neue Doku zu set_Exec beachten: https://fhem.de/commandref_DE.html#DOIF_set_Exec