Fensterkontakt soll Timer auslösen

Begonnen von Dachlatte, 09 Februar 2025, 13:23:44

Vorheriges Thema - Nächstes Thema

Dachlatte

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.

Damian

([Badfenster] eq "offen") (set xxxxx message Badfenster offen)
attr Bad wait 600

Das reicht schon.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Dachlatte


rabehd

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".

 
Auch funktionierende Lösungen kann man hinterfragen.

jkriegl

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
Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Per

@Dachlatte: du meintest
([Badfenster] eq "offen")(IF ([Badfenster] eq "offen") (set xxxxx message Badfenster offen))

attr Bad wait 600

rabehd

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.
Auch funktionierende Lösungen kann man hinterfragen.

Per

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.

Damian

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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Dachlatte

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.

Damian

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"
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Dachlatte

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?

Per

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.