Ich habe folgendes Problem und hätte gern einen Stupser in die richtige Richtung. Wenn das Fenster offen ist und zudem die Temperatur im Raum kleiner als X°C, dann soll alle zehn Minuten eine EMail geschickt werden. Wenn das Fenster wieder zu ist, dann soll keine Email mehr rausgehen. Das habe ich jetzt so entworfen:
defmod SchlafzimmerDoif DOIF (([Schlafzimmerfenster:state] eq "open") and ([Schlafzimmer:temperatur] < 11))
(defmod MailSchlafzimmerfensterOffen at +*00:12:00 {DebianMail("<Adresse>","Fenster offen!","Das Fenster im Schlafzimmer ist seit zwölf Minuten offen! Dort sind es jetzt ".sprintf("%.0f°C",ReadingsVal("Schlafzimmer","Temperature",""))." und das ist KALT. Bitte schließen.","/opt/fhem/www/snapshots/SchlafzimmerFensterOffen.jpg")})
DOELSEIF ([Schlafzimmerfenster:state] eq "closed") (delete MailSchlafzimmerfensterOffen)
Ist das so ok? Wenn das Gerät nicht angelegt wurde (weil die Temperatur nicht tief genug war), dann löst "delete MailSchlafzimmerfensterOffen" ja eine Fehlermeldung aus!
Ich setze zum ersten Mal ein komplexeres DOIF ein...
defmod SchlafzimmerDoif DOIF (([Schlafzimmerfenster:state] eq "open") and ([Schlafzimmer:temperatur] < 11)
{DebianMail(...der Roman...)}
attr SchlafzimmerDoif repeatcmd 600
attr SchlafzimmerDoif wait 600
Wenn das Fenster frühzeitig geschlossen wird, wird dann kein Roman gesendet?
Zitat von: andies am 11 Juni 2018, 06:25:57
Wenn das Fenster frühzeitig geschlossen wird, wird dann kein Roman gesendet?
Nw. richtig, da das DOIF auf cmd_2 springen wird, und der Timer wait 600 damit abgebrochen wird.
Wenn die Temperatur wieder über 11 kommt, genauso.
Aber teste mal ;)
Zitat von: amenomade am 11 Juni 2018, 10:03:26Nw. richtig, da das DOIF auf cmd_2 springen wird, und der Timer wait 600 damit abgebrochen wird.
Dafür fehlt in deinem Beispiel aber cmd_2. Also einfach
DOELSE dranhängen.
Zitat von: amenomade am 11 Juni 2018, 00:36:53...der Roman...
;D ;D ;D
Nein, in DOIFs mit einziger Bedingung ohne do always braucht man kein leeres DOELSE. DOIF macht das selbst (implizit).
Aber weh tut es nicht ;)
Zitat von: amenomade am 11 Juni 2018, 12:20:36
Nein, in DOIFs mit einziger Bedingung ohne do always braucht man kein leeres DOELSE. DOIF macht das selbst (implizit).
Aber weh tut es nicht ;)
So ist es - steht auch in der Commandref. Ansonsten könnte DOIF bei solch einer Definition nur einmal schalten, weil es aus cmd1 nicht mehr herauskäme ;)
Bist Du sicher dass das Reading "temperatur" und nicht "temperature" heisst? Ist Schlafzimmer ein Dummy oder device?
Gruß Sascha
Gesendet von meinem SM-T560 mit Tapatalk
Ist ein device, HM-MOD-Sec plus angeschlossenes wemos mit DTH-22.