ELSE macht mir das Leben schwer

Begonnen von cwagner, 12 Juli 2020, 17:26:33

Vorheriges Thema - Nächstes Thema

cwagner

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
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

cwagner

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
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

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
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Damian

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 
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MadMax-FHEM

Ok, ja in dem "speziellen Fall"...

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

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)