FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: cwagner am 12 Juli 2020, 17:26:33

Titel: ELSE macht mir das Leben schwer
Beitrag von: cwagner am 12 Juli 2020, 17:26:33
Ein DOIF steuert bei mir die Verschattung, die aber nur im Sommer unterwünschte Hitze raushalten soll:

{
if ([$SELF:Solar] and [?08:00-12:00] and [?DI_Sommer_Winter] eq "Sommer")
{set_Exec("R_on",300,'fhem_set("ROLL_Schlafzimmer 66");set_State ("Verschattung")')}
else {del_Exec("R_on");fhem_set("ROLL_Schlafzimmer 0");set_State ("normal")}
}


wobei "Solar" ein DOIF_Readings ist:
Solar:([Umweltsensor:SolarStrahlung:d]> 150)


Nun habe ich beobachtet, dass der else-Zweig immer dann auslöst, wenn sich Solar auch am Nachmittag ändert. Er versucht also immer wieder den Rollladen im Schlafzimmer hochzuziehen, obwohl er ihn zuvor gar nicht runtergelassen hat, die Zeit nicht passt und  die Bedingung "Sommer" nicht zutrifft. Optisch ist alles in Ordnung - aber das veräterische Klicken des Relais verräts (und die Timestamps der Readings).

Wo ist mein logischer Fehler bei diesem Konstukt?

Ratlose Grüße
Christian
Titel: Antw:ELSE macht mir das Leben schwer
Beitrag von: MadMax-FHEM am 12 Juli 2020, 17:47:08
Ich hab's mir jetzt nicht im Detail angesehen...

ABER: else wirkt halt immer, wenn getriggert wird und EINES (weil and) der if-Bedingungen nicht erfüllt ist...

Denn: else prüft ja nichts sondern führt halt aus, wenn if nicht wahr ist...

Gruß, Joachim
Titel: Antw:ELSE macht mir das Leben schwer
Beitrag von: cwagner am 12 Juli 2020, 18:23:03
Zitat von: MadMax-FHEM am 12 Juli 2020, 17:47:08
ABER: else wirkt halt immer, wenn getriggert wird und EINES (weil and) der if-Bedingungen nicht erfüllt ist...

Denn: else prüft ja nichts sondern führt halt aus, wenn if nicht wahr ist...
heißt also, den ELSE-Zweig müsste ich als zweites IF bauen.

Danke, Joachim, für den schnellen Anstoß.

Christian
Titel: Antw:ELSE macht mir das Leben schwer
Beitrag von: Damian am 12 Juli 2020, 19:05:09
Also, wenn es ein DOIF-Reading ist, dann gibt es nur einen Trigger von Solar, wenn sich der Zustand ändert, sonst nicht.

Ich habe bei mir die Sonneneinstrahlung (on/off) über ein zentrales DOIF mit wait definiert, um häufiges Wechseln des Zustands zu verhindern.
Titel: Antw:ELSE macht mir das Leben schwer
Beitrag von: cwagner am 12 Juli 2020, 19:21:47
Zitat von: Damian am 12 Juli 2020, 19:05:09
Also, wenn es ein DOIF-Reading ist, dann gibt es nur einen Trigger von Solar, wenn sich der Zustand ändert, sonst nicht.

Genau das scheint mein Problem zu sein, heute hatten wir über Stunden Sonne/Wolken, sodass der Schwellwert immer wieder unter- und überschritten wurde. Mit dem set_exec im Ausführungsfall verhindere ich da auch allzu häufige Reaktion und war der Auffassung, dass außerhalb der mit AND verknüpften Zeit gar nichts geschieht. Doch ELSE wird als Alternative offenbar immer getriggert, wenn $SELF:Solar sich ändert.

Christian
Titel: Antw:ELSE macht mir das Leben schwer
Beitrag von: MadMax-FHEM am 12 Juli 2020, 20:58:38
Zitat von: cwagner am 12 Juli 2020, 18:23:03
heißt also, den ELSE-Zweig müsste ich als zweites IF bauen.

Danke, Joachim, für den schnellen Anstoß.

Christian

Ein zweites IF wäre eher ein elsif...

Gruß, Joachim
Titel: Antw:ELSE macht mir das Leben schwer
Beitrag von: Damian am 12 Juli 2020, 21:35:11
Zitat von: MadMax-FHEM am 12 Juli 2020, 20:58:38
Ein zweites IF wäre eher ein elsif...

Gruß, Joachim

bringt nichts, wenn ständig getoggelt wird, daher wie schon geschrieben Toggeln durch größere Verzögerung im separaten DOIF eliminieren.

Ich bin schon lange vom automatischen Rauf- und Runterfahren weg und fahre nur ein mal am Tag herunter, inzwischen generalisiert für alle Rollläden mit Visualisierung, einzeln abschaltbar bzw. konfigurierbar: https://forum.fhem.de/index.php/topic,111266.msg1070423.html#msg1070423 
Titel: Antw:ELSE macht mir das Leben schwer
Beitrag von: MadMax-FHEM am 12 Juli 2020, 21:42:51
Ok, ja in dem "speziellen Fall"...

Ich wollte nur anmerken statt einem zweiten if wenn ein elsif... ;)

Gruß, Joachim