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
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
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
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.
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
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
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
Ok, ja in dem "speziellen Fall"...
Ich wollte nur anmerken statt einem zweiten if wenn ein elsif... ;)
Gruß, Joachim