FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Invers am 07 April 2014, 12:56:04

Titel: kann man in einem AT ein IF benutzen?
Beitrag von: Invers am 07 April 2014, 12:56:04

Ich will mein Türschloss steuern und hab mir zum Test erst einmal eine Lampe geschnappt.
Problem:
Wenn der Türkontakt zu geht und keiner abschliesst, soll nach 10 Sekunden die Tür automatisch verschlossen werden.
Das funktionierte auch bereits. Dann habe ich bedacht, dass ja innerhalb der 10 Sekunden jemand die Tür wieder öffnen könnte und somit abgeschlossen werden würde, obwohl die Tür noch auf ist.
Um das zu verhindern wollte ich den AT noch einmal nach Ablauf der 10 Sekunden prüfen lassen, ob die Tür wirklich noch zu ist.
Das habe ich mit  folgendem Code probiert:
Tuerkontakt.* IF (([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked") or ([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked (uncertain)"))(define atSchlossZu at +00:00:10 if ([Tuerkontakt] eq "closed")(set Stehlampe on-for-timer 5))
Das funktioniert aber nicht.

Frage 1:
Geht das so gar nicht, dass man in einem AT ein IF verarbeitet, oder ist nur mein Code falsch?
Frage 2:
Falls es nicht so funktioniert, wie wäre dann eine funktionierende Lösung machbar?

Titel: Antw:kann man in einem AT ein IF benutzen?
Beitrag von: Damian am 07 April 2014, 13:19:58
Zitat von: Invers am 07 April 2014, 12:56:04
Das habe ich mit  folgendem Code probiert:
Tuerkontakt.* IF (([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked") or ([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked (uncertain)"))(define atSchlossZu at +00:00:10 if ([Tuerkontakt] eq "closed")(set Stehlampe on-for-timer 5))
Geht das so gar nicht, dass man in einem AT ein IF verarbeitet, oder ist nur mein Code falsch?

Warum sollte es nicht gehen, FHEM-IF wird groß geschrieben und nicht klein (siehe dein zweiter IF-Befehl).

Gruß

Damian
Titel: Antw:kann man in einem AT ein IF benutzen?
Beitrag von: Invers am 07 April 2014, 13:33:38
IF-Schreibweise habe ich korrigiert. Ist beim 100sten Versuch schiefgegangen. :-)

Geht aber trotzdem nicht. Die Lampe geht gar nicht erst an.

Dieser Code ohne AT mit IF funktioniert hingegen:
Tuerkontakt.* IF (([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked") or ([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked (uncertain)"))(define atSchlossZu at +00:00:10 set Stehlampe on-for-timer 5)
Titel: Antw:kann man in einem AT ein IF benutzen?
Beitrag von: Damian am 07 April 2014, 15:15:06
Zitat von: Invers am 07 April 2014, 13:33:38
IF-Schreibweise habe ich korrigiert. Ist beim 100sten Versuch schiefgegangen. :-)

Geht aber trotzdem nicht. Die Lampe geht gar nicht erst an.

Dieser Code ohne AT mit IF funktioniert hingegen:
Tuerkontakt.* IF (([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked") or ([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked (uncertain)"))(define atSchlossZu at +00:00:10 set Stehlampe on-for-timer 5)
Wenn die Lampe nicht angeht und keine Fehlermeldung im Log zu sehen ist, dann ist Bedingung im zweiten IF nicht erfüllt.

Dann probieren mal nur den zweiten IF in der Kommandozeile aus.

Gruß

Damian
Titel: Antw:kann man in einem AT ein IF benutzen?
Beitrag von: Invers am 07 April 2014, 15:51:22
Eingegeben:
IF ([Tuerkontakt] eq "closed")(set Stehlampe on-for-timer 5)
funktioniert alleine. Aber komplett nicht.
Titel: Antw:kann man in einem AT ein IF benutzen?
Beitrag von: Damian am 07 April 2014, 16:04:53
Zitat von: Invers am 07 April 2014, 15:51:22
Eingegeben:
IF ([Tuerkontakt] eq "closed")(set Stehlampe on-for-timer 5)
funktioniert alleine. Aber komplett nicht.
Das würde bedeuten, dass at in Kombination mit einem FHEM -Befehl nicht funktioniert - das glaube ich nicht.

Gruß

Damian
Titel: Antw:kann man in einem AT ein IF benutzen?
Beitrag von: Invers am 07 April 2014, 16:33:30
Kann das sein, dass mit den Klammer im ersten teil beim or etwas nicht stimmt?
Ich habe schon den ganzen Tag rumprobiert. Sitze immernoch dran.
Titel: Antw:kann man in einem AT ein IF benutzen?
Beitrag von: Damian am 07 April 2014, 17:09:22
Zitat von: Invers am 07 April 2014, 16:33:30
Kann das sein, dass mit den Klammer im ersten teil beim or etwas nicht stimmt?
Ich habe schon den ganzen Tag rumprobiert. Sitze immernoch dran.

Wenn z. B.

Tuerkontakt.* IF (([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked") or ([Tuerkontakt] eq "closed" and [Schloss] eq "unlocked (uncertain)"))(define atSchlossZu at +00:00:10 IF (1) (set Stehlampe on-for-timer 5))

funktioniert, dann weißt du, dass du syntaktisch alles richtig gemacht hast. Wenn du dann IF (1) gegen IF ([Tuerkontakt] eq "closed") austauschst und es nicht funktioniert, dann ist Tuerkontakt zum Zeitpunkt der Abfrage nicht closed. Es ist aber auch klar, dass wenn atSchlossZU noch vom letzten Mal definiert ist - define scheitert.

Du kannst auch die Verzögerung z. B. auf eine Minute erhöhen und in FHEM schauen, ob atSchlossZU korrekt definiert wird, bevor es zuschlägt. Und immer wieder nach Meldungen im Log schauen.

Ich habe bei mir diverse IF´s in Kombination mit at, die allesamt funktionieren.

Gruß

Damian
Titel: Antw:kann man in einem AT ein IF benutzen?
Beitrag von: Invers am 07 April 2014, 18:03:25
Ich bin deinem Beispiel gefolgt. Es scheint tatsächlich so zu sein, dass das AT nie zuschlagen kann.
Ich werde nun einen Umweg gehen und einefach eine Dummy auslösen und in diesem das AT unterbringen.
Mal sehen, ob da klappt.

Hab vielen Dank für deine Hilfe.