FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: locodriver am 28 September 2013, 17:04:58

Titel: 2 IF-Abfragen nacheinander in einer DEF
Beitrag von: locodriver am 28 September 2013, 17:04:58
Hallo, nach einigen Versuchen habe ich folgenden Code "entwickelt", der aber noch nicht ganz das macht, was er soll:

*{sunset(0,"17:00","22:00")} {if ((Value("Rolaautomatik") eq "Ein") && (ReadingsVal("SZ_Rola","state","") =~ m /on/)){fhem "set SZ_Rola SoSchu";}if (ReadingsVal("Wetter_Borsdorf","fc1_low_c",0)<5) {fhem "set SZ_Rola Zu";}}

Folgendes ist beabsichtigt:
Zur festgelegten Zeit soll geprüft werden, ob der SZ_Rola oben ist:
Wenn nein -> es soll nichts passieren, da der Rola mit der Hand verfahren wurde.
Wenn ja -> Rola soll in SoSchu fahren (ca. 50%) und dann soll geprüft werden, ob die zu erwartende Tiefsttemp. unter 5°C sinken soll. Wenn ja -> Rola ganz zu; sonst in SoSchu lassen.

Ich will auf diese Weise alles in eine DEF packen, um nicht zu viele DEFs zu haben und den Überblick zu verlieren.

Bis jetzt passiert folgendes: Ist der Rola oben, dann werden die Entscheidungen nacheinander abgearbeitet und der Rola fährt in SoSchu bzw. ganz zu. Ist der Rola aber nicht ganz oben, so fährt er immer ganz zu.

Also stimmt etwas mit der "Klammerei" nicht. Funktioniert mein Denkansatz überhaupt so mit fhem oder lässt sich das doch nur mit zwei DEFs lösen?

Danke für Hinweise in die richtige Richtung.

Uwe
Titel: Aw: 2 IF-Abfragen nacheinander in einer DEF
Beitrag von: betateilchen am 28 September 2013, 17:19:33
Zitat von: locodriver schrieb am Sa, 28 September 2013 17:04Zur festgelegten Zeit soll geprüft werden, ob der SZ_Rola oben ist:
Wenn nein -> es soll nichts passieren, da der Rola mit der Hand verfahren wurde.
Wenn ja -> Rola soll in SoSchu fahren (ca. 50%) und dann soll geprüft werden, ob die zu erwartende Tiefsttemp. unter 5°C sinken soll. Wenn ja -> Rola ganz zu; sonst in SoSchu lassen.

Du denkst viel zu kompliziert. Mach Dir doch mal ein Schema, wie der logische Ablauf sein soll...
(ich mach das jetzt mal symbolisch, die Abfragen sind syntaktisch nicht korrekt!)

1. Bedingung: Rollladen oben? Ja: weiter, Nein: interessiert nicht.

Daraus ergibt sich die "Hauptabfrage":


if(Rollladen == oben)
{
...
}


2. Bedingung: Tiefsttemperatur < 5? Ja: Rolladen zu, Nein: Rolladen SoSchu

Daraus ergibt sich ganz einfach eine zweite Abfrage innerhalb der Hauptabfrage:


if(Rollladen == oben)
{
if(Tiefsttemp < 5) { set Rolladen zu } else { set Rolladen SoSchu }
}


Fertig :)

Und Deine Abfrage, ob die Automatik aktiv ist, gehört als Erweiterung in die Hauptabfrage.


(Ich weiss, es ginge sogar noch kürzer, aber ich wollte das Ganze übersichtlich und verständlich halten)


---
Titel: Aw: 2 IF-Abfragen nacheinander in einer DEF
Beitrag von: locodriver am 28 September 2013, 17:37:16
Hallo Betateilchen,

manchmal ist man wie vernagelt und kommt von der einmal entwickelten Idee einfach nicht mehr weg - gut, dass man hier immer den richtigen Tipp in die richtige Richtung bekommt.
Ich kann die Änderung erst morgen testen, da ich jetzt arbeiten "darf".
Der Code wäre dann wohl so:

*{sunset(0,"17:00","22:00")} {if ((Value("Rolaautomatik") eq "Ein") && (ReadingsVal("SZ_Rola","state","") =~ m /on/)) if (ReadingsVal("Wetter_Borsdorf","fc1_low_c",0)<5) {fhem "set SZ_Rola Zu";} else {fhem "set SZ_Rola SoSchu";}}


Danke und bis morgen

Uwe
Titel: Aw: 2 IF-Abfragen nacheinander in einer DEF
Beitrag von: betateilchen am 28 September 2013, 17:46:01
nein, da fehlt noch eine geschweifte Klammerebene nach der ersten Abfrage :)


*{sunset(0,"17:00","22:00")} {if ((Value("Rolaautomatik") eq "Ein") && (ReadingsVal("SZ_Rola","state","") =~ m /on/)) {if (ReadingsVal("Wetter_Borsdorf","fc1_low_c",0)<5) {fhem "set SZ_Rola Zu";} else {fhem "set SZ_Rola SoSchu";} } }


Ein paar runde Klammern hast Du zwar zuviel, die tun aber nicht weh.
Titel: Aw: 2 IF-Abfragen nacheinander in einer DEF
Beitrag von: locodriver am 01 Oktober 2013, 11:29:23
Irgendwie haut es noch nicht hin, ich bekomme jetzt diese Meldung:

2013.09.30 19:40:47 3: SZ_Rola_runter: Unknown command {if, try help.
Unknown command }, try help.
Unknown command }, try help.

Ich habe es auch mal mit Rola oben bzw. nicht oben versucht - immer das gleiche Ergebnis und der Rola bewegt sich nicht. Mit ein paar anderen Versuchen, die Klammern zu setzen bin ich auch nicht weiter gekommen.
Ich werde mich mal am langen WE damit beschäftigen, momentan komme ich nur über VPN auf mein System da ich nicht zu Hause bin.

Uwe
Titel: Aw: -gelöst- 2 IF-Abfragen nacheinander in einer DEF
Beitrag von: locodriver am 07 Oktober 2013, 11:33:35
Das WE hat geholfen...

*{sunset(0,"17:00","22:00")} {if ((Value("Rolaautomatik") eq "Ein") && (ReadingsVal("SZ_Rola","state","") =~ m /on/))  {if ((ReadingsVal("Wetter_Borsdorf","fc1_low_c",0)<9)) {fhem "set SZ_Rola Zu";} else {fhem "set SZ_Rola SoSchu";} } }

Ist aus der Def. kopiert und tut jetzt was es soll - schön, wenn man ein Erfolgserlebnis hat :-))

Uwe