FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Dachlatte am 09 Februar 2025, 13:23:44

Titel: Fensterkontakt soll Timer auslösen
Beitrag von: Dachlatte am 09 Februar 2025, 13:23:44
Hallo,
ich möchte ein DOIF erstellen welches nach öffnen des Fensters einen Timer auslöst (10min)und danach prüft ob das Fenster noch offen ist, wenn ja dann Nachricht schicken.
immo hab ich so eingestellt:
([Badfenster] eq "offen")() DOELSEIF ([Badfenster] eq "offen") (set xxxxx message Badfenster offen)

attr Bad wait 600

funktioniert leider so nicht.
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Damian am 09 Februar 2025, 13:44:22
([Badfenster] eq "offen") (set xxxxx message Badfenster offen)
attr Bad wait 600

Das reicht schon.
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Dachlatte am 09 Februar 2025, 15:01:53
Danke
ich werde probieren
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: rabehd am 09 Februar 2025, 15:26:59
Zitat von: Dachlatte am 09 Februar 2025, 13:23:44([Badfenster] eq "offen")() DOELSEIF ([Badfenster] eq "offen") (set xxxxx message Badfenster offen)
Zur Erklärung:
Ein DOIF geht der Reihe nach vor, wenn die Bedingung eines Zweiges zutrifft, dann werden die folgenden Zweige nicht mehr geprüft.
2 Zweige mit der gleichen Bedingung machen keinen Sinn.
Dein DOIF wird immer im ersten Zweig enden und dort steht "tue nichts".

 
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: jkriegl am 09 Februar 2025, 17:04:07
So etwas funbktioniert seit Jahren ([TFK_WC:state] eq "open") ((set myfritz ring 610,612 5),{Log 3, "WC-Fenster Alarm";;}) DOELSE ({Log 3, "WC-Fenster zu";;})
und wait 900,
sowie für Wiederholungen: do resetwait, repeatcmd 600 und repeatsame 3
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Per am 09 Februar 2025, 17:29:55
@Dachlatte: du meintest
([Badfenster] eq "offen")(IF ([Badfenster] eq "offen") (set xxxxx message Badfenster offen))

attr Bad wait 600
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: rabehd am 09 Februar 2025, 17:42:16
Zitat von: Per am 09 Februar 2025, 17:29:55@Dachlatte: du meintest
([Badfenster] eq "offen")(IF ([Badfenster] eq "offen") (set xxxxx message Badfenster offen))

attr Bad wait 600

Was keinen Sinn macht.
Wenn Badfenster offen, prüfe ob Badfenster offen, falls ja, dann schicke eine Meldung das das Fenster offen ist.

Damian's Vorschlag ist völlig ausreichend, da eine Änderung der Bedingung das wait abbricht.
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Per am 10 Februar 2025, 06:22:28
Zitat von: rabehd am 09 Februar 2025, 17:42:16Was keinen Sinn macht.
Doch.

Zitat von: rabehd am 09 Februar 2025, 17:42:16Wenn Badfenster offen, prüfe ob Badfenster offen, falls ja, dann schicke eine Meldung das das Fenster offen ist.
Genau, aber erst nach 10 min. So wie vom TO gewünscht.

Zitat von: rabehd am 09 Februar 2025, 17:42:16Damian's Vorschlag ist völlig ausreichend, da eine Änderung der Bedingung das wait abbricht.
Viele Wege führen nach Rom. Außerdem ging es mir darum zu zeigen, wie die Idee des TO umgesetzt werden kann.
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Damian am 10 Februar 2025, 09:04:10
Zitat von: Per am 10 Februar 2025, 06:22:28
Zitat von: rabehd am 09 Februar 2025, 17:42:16Was keinen Sinn macht.
Doch.

Zitat von: rabehd am 09 Februar 2025, 17:42:16Wenn Badfenster offen, prüfe ob Badfenster offen, falls ja, dann schicke eine Meldung das das Fenster offen ist.
Genau, aber erst nach 10 min. So wie vom TO gewünscht.


Naja, man sollte schon den einfachen Weg aufzeigen und nicht einen unnötig komplizierten. Das ist ja gerade die Stärke von DOIF.

Wenn nach 10 Minuten Fenster offen ist, dann wird ja auch ohne zusätzliche IF-Abfrage die Meldung 10 Minuten später ausgegeben.

Wenn nach 10 Minuten das Fenster nicht mehr offen ist, dann hat DOIF schon längst in den imaginären ELSE-Fall geschaltet: cmd2. Auch in diesem Fall macht die IF-Abfrage keinen Sinn, weil sie ohnehin nicht zum Tragen kommt.

Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Dachlatte am 10 Februar 2025, 10:43:17
Hallo und danke für eure Hilfe

Zitat von: Damian am 09 Februar 2025, 13:44:22([Badfenster] eq "offen") (set xxxxx message Badfenster offen)
attr Bad wait 600

Das reicht schon.

Das habe ich ausprobiert aber es funktioniert so nicht.
Die Meldung kommt nach 10min auch wenn das Fenster inzwischen zu ist.
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Damian am 10 Februar 2025, 10:52:55
Zitat von: Dachlatte am 10 Februar 2025, 10:43:17Das habe ich ausprobiert aber es funktioniert so nicht.
Die Meldung kommt nach 10min auch wenn das Fenster inzwischen zu ist.


Dann stimmt mit deiner Abfrage etwas nicht, wenn das Fenster nicht offen ist, dann kann [Badfenster] eq "offen" nicht wahr sein.

Ich würde grundsätzlich nicht auf den Status abfragen, sondern auf das Reading state:

[Badfenster:state] eq "offen"
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Dachlatte am 10 Februar 2025, 14:20:24
Danke,
Ja es funktioniert.
Das Problem ist bzw. war die eingestellte Zeit von 10 min.
Der Fensterkontakt ist ein Fritzdect.
Wenn in fhem der aktuelle status angezeigt wird vergehen ca.5min.
Fhem merkt alo frühestens nach 10min das das Fenster wieder zu ist.
Da kommt aber schon meine Meldung (Badfenster offen) ::)
Jetzt meine Nachfrage: kann die Abfrage von 5min auf eine Min. verkürzt werden?
Titel: Aw: Fensterkontakt soll Timer auslösen
Beitrag von: Per am 10 Februar 2025, 16:33:58
Zitat von: Dachlatte am 10 Februar 2025, 14:20:24Jetzt meine Nachfrage: kann die Abfrage von 5min auf eine Min. verkürzt werden?
Das ist aber kein DOIF Problem mehr, sondern eins der Fritzbox, also solltest du das auch dort anfragen.