2 IF-Abfragen nacheinander in einer DEF

Begonnen von locodriver, 28 September 2013, 17:04:58

Vorheriges Thema - Nächstes Thema

locodriver

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
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

betateilchen

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)


---
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

locodriver

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
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

locodriver

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
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

locodriver

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
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster