FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: MadFred am 10 September 2015, 21:37:10

Titel: Code Review benötigt
Beitrag von: MadFred am 10 September 2015, 21:37:10
Hallo zusammen,
Ich möchte ein Rollo nur dann herunter fahren, wenn die Tür geschlossen ist. Das wird über homematic Türgriffsensor ermittelt. Wenn die Tür offen ist, merke ich mir das dann in einem Dummy.
Funktioniert leider nur nicht. :'( Irgendwie finde ich den Fehler nicht. Daher die Bitte um ein  Review.



*22:27:00 {
my $tuerstatus = ReadingsVal("ez_se_tu","state","Ersatz");
fhem("set test $tuerstaus");
if("$tuerstatus" eq "closed")
{
fhem("set ez_ro_tu runter");
}
elsif
{
fhem("set ez_du_tu_status pending");
}
}



Danke schon mal
Titel: Antw:Code Review benötigt
Beitrag von: MadFred am 10 September 2015, 21:40:13
Zur Info

+*00:01:00 {
my $test = ReadingsVal("ez_se_tu","state","Ersatz");
fhem("set test $test");
}

Funktioniert
Titel: Antw:Code Review benötigt
Beitrag von: Bennemannc am 10 September 2015, 21:53:20
Hallo,

bei mir ist es ein Fensterkontakt der die Türe überwacht. Ich habe das einfach als IF im at Befehl eingebaut.

at *{sunset("CIVIL",0,"17:30","22:00")} IF ([Fensterkontakt_01] eq "closed") (set Rollo_01 0)

Ich Speicher den Zustand allerdings nicht. Wenn man später erst die Türe schließt, muss man das Rollo von Hand fahren. Man könnte als Else einen Dummy setzen und mit einem Notify das schließen registrieren und dann runterfahren.

Gruß Christoph
Titel: Antw:Code Review benötigt
Beitrag von: Amenophis86 am 10 September 2015, 23:51:26
fangen wir mal vorne an:

1. Hast du einen Tippfehler. In Zeile 3 fehlt ein t => fhem("set test $tuerstaTus");

2. Hast du "off" in "runter" gewechselt, dass FHEM den Befehl "runter" erkennt, oder ist "runter" der offizielle Befehl zum schließen des Rollos?

3. Dann wäre die Frage warum gibt es Test? Ist das nur zum testen gewesen, oder soll dies eine Funktion haben?

3. Als vereinfachte Variante würde ich dir folgendes vorschlagen mit einem DOIF:

define Tuer_Zu DOIF ([Türgriff] eq "closed" and [22:27]) (Befehl Rollo runter) DOELSE (Befehl Rollo oben)
attr Tuer_Zu do always


Als Alternative kannst du jetzt noch einstellen, dass der Rolle auch dann runterfährt, wenn die Tür später geschlossen wurde. Dazu musst du nur noch überlegen wann der späteste Zeitpunkt dafür sein soll. Hier im Beispiel geht um 06:00 Uhr der Rollo wieder hoch bzw. zwischen 22:27 und 06:00 Uhr der Rolle runter, wenn die Tür geschlossen wurde oder bereits zu ist:

define Tuer_Zu DOIF ([Türgriff] eq "closed" and [22:27-06:00]) (Befehl Rollo runter) DOELSE (Befehl Rollo oben)
Mehr dazu findest du hier: http://fhem.de/commandref_DE.html#DOIF (http://fhem.de/commandref_DE.html#DOIF)
Titel: Antw:Code Review benötigt
Beitrag von: Virsacer am 11 September 2015, 11:39:45
Zitat von: MadFred am 10 September 2015, 21:37:10

*22:27:00 {
my $tuerstatus = ReadingsVal("ez_se_tu","state","Ersatz");
fhem("set test $tuerstaus");
if("$tuerstatus" eq "closed")
{
fhem("set ez_ro_tu runter");
}
elsif
{
fhem("set ez_du_tu_status pending");
}
}


Wenn du ein "elsif" verwendest, musst du dahinter auch eine Bedingung angeben - ansonsten "else" ;)
Titel: Antw:Code Review benötigt
Beitrag von: MadFred am 16 September 2015, 21:00:13
Soda bin ich wieder, hatte leider keine Zeit eure Tipps vorher zu testen.
Erst einmal herzlichen Dank für Eure hilfe.
Ich hab es jetzt mit DOIF gemacht und das funktionierte sofort.
Ich habe auch die anderen Anmerkungen mal ausprobiert, bin aber nicht auf einen grünen Zweig gekommen...
Hmm, naja. Hätte mich zwar schon interessiert, aber wenn es so funktioniert, warum nicht.

ALSO DANKE an alle :) :) :)