Moin,
ich versuche gerade ein DOIF für meine KWL Anlage zu basteln, aber irgendwie steh ich mal wieder auf dem Schlauch und das DOIF macht es nicht so, wie ich es eigentlich denke.
Ich habe momentan mal zum test SZ_Raumsensor:co2 auf über 4000ppm und eigentlich sollte das DOIF jetzt die Lüftung auf Stufe 3 schalten. Sie wechselt aber nur zwischen cmd_1 und cmd_5.
Wahrscheinlich habe ich wieder nur Klammern falsch gesetzt?
Über Hilfe wäre ich Dankbar.
Das DOIF:
(([WZ_Raumsensor:co2] > 450 and [WZ_Raumsensor:co2] < 800) or ([SZ_Raumsensor:co2] > 450 and [SZ_Raumsensor:co2] < 800) or ([Thermostat_BZ_Climate:humidity] < 65))
(set kwl 1)
DOELSEIF
(([WZ_Raumsensor:co2] > 800 and [WZ_Raumsensor:co2] < 1200) or ([SZ_Raumsensor:co2] > 800 and [SZ_Raumsensor:co2] < 1200) or ([Thermostat_BZ_Climate:humidity] > 65))
(set kwl 2)
DOELSEIF
(([WZ_Raumsensor:co2] > 1200) or ([SZ_Raumsensor:co2] > 1200) or ([Thermostat_BZ_Climate:humidity] > 75))
(set kwl 3)
DOELSEIF
([Garten.Temp:temperature] <= 15 and [Thermostat_WZ_Climate:measured-temp] >= 23)
(set kwl 0)
DOELSE
(set kwl 1)
List:
Internals:
DEF (([WZ_Raumsensor:co2] > 450 and [WZ_Raumsensor:co2] < 800) or ([SZ_Raumsensor:co2] > 450 and [SZ_Raumsensor:co2] < 800) or ([Thermostat_BZ_Climate:humidity] < 65))
(set kwl 1)
DOELSEIF
(([WZ_Raumsensor:co2] > 800 and [WZ_Raumsensor:co2] < 1200) or ([SZ_Raumsensor:co2] > 800 and [SZ_Raumsensor:co2] < 1200) or ([Thermostat_BZ_Climate:humidity] > 65))
(set kwl 2)
DOELSEIF
(([WZ_Raumsensor:co2] > 1200) or ([SZ_Raumsensor:co2] > 1200) or ([Thermostat_BZ_Climate:humidity] > 75))
(set kwl 3)
DOELSEIF
([Garten.Temp:temperature] <= 15 and [Thermostat_WZ_Climate:measured-temp] >= 23)
(set kwl 0)
DOELSE
(set kwl 1)
FUUID 5d0cf4bd-f33f-ae29-9778-64989c86a97f5693
MODEL FHEM
NAME di_kwlautomatik
NOTIFYDEV SZ_Raumsensor,Garten.Temp,Thermostat_BZ_Climate,global,Thermostat_WZ_Climate,WZ_Raumsensor
NR 182
NTFY_ORDER 50-di_kwlautomatik
STATE cmd_1
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-05-01 13:42:22 Device SZ_Raumsensor
2020-05-01 13:42:22 cmd 1
2020-05-01 13:42:22 cmd_event SZ_Raumsensor
2020-05-01 13:42:22 cmd_nr 1
2020-05-01 13:41:50 e_Garten.Temp_temperature 12.9
2020-05-01 13:42:22 e_SZ_Raumsensor_co2 4980.0
2020-05-01 13:42:07 e_WZ_Raumsensor_co2 665.0
2020-05-01 13:38:12 mode enabled
2020-05-01 13:42:22 state cmd_1
Regex:
accu:
cond:
Garten.Temp:
0:
1:
2:
3:
temperature ^Garten.Temp$:^temperature:
SZ_Raumsensor:
0:
co2 ^SZ_Raumsensor$:^co2:
1:
co2 ^SZ_Raumsensor$:^co2:
2:
co2 ^SZ_Raumsensor$:^co2:
Thermostat_BZ_Climate:
0:
humidity ^Thermostat_BZ_Climate$:^humidity:
1:
humidity ^Thermostat_BZ_Climate$:^humidity:
2:
humidity ^Thermostat_BZ_Climate$:^humidity:
Thermostat_WZ_Climate:
3:
measured-temp ^Thermostat_WZ_Climate$:^measured-temp:
WZ_Raumsensor:
0:
co2 ^WZ_Raumsensor$:^co2:
1:
co2 ^WZ_Raumsensor$:^co2:
2:
co2 ^WZ_Raumsensor$:^co2:
attr:
cmdState:
wait:
waitdel:
condition:
0 (::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 450 and ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') < 800) or (::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 450 and ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') < 800) or (::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') < 65)
1 (::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 800 and ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') < 1200) or (::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 800 and ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') < 1200) or (::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') > 65)
2 (::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 1200) or (::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 1200) or (::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') > 75)
3 ::ReadingValDoIf($hash,'Garten.Temp','temperature') <= 15 and ::ReadingValDoIf($hash,'Thermostat_WZ_Climate','measured-temp') >= 23
do:
0:
0 set kwl 1
1:
0 set kwl 2
2:
0 set kwl 3
3:
0 set kwl 0
4:
0 set kwl 1
helper:
DEVFILTER ^global$|^Garten.Temp$|^SZ_Raumsensor$|^WZ_Raumsensor$|^Thermostat_WZ_Climate$|^Thermostat_BZ_Climate$
NOTIFYDEV global|Garten.Temp|SZ_Raumsensor|WZ_Raumsensor|Thermostat_WZ_Climate|Thermostat_BZ_Climate
event co2: 4980.0
globalinit 1
last_timer 0
sleeptimer -1
timerdev SZ_Raumsensor
timerevent co2: 4980.0
triggerDev SZ_Raumsensor
timerevents:
co2: 4980.0
timereventsState:
co2: 4980.0
triggerEvents:
co2: 4980.0
triggerEventsState:
co2: 4980.0
internals:
readings:
all WZ_Raumsensor:co2 SZ_Raumsensor:co2 Thermostat_BZ_Climate:humidity Garten.Temp:temperature Thermostat_WZ_Climate:measured-temp
trigger:
uiState:
uiTable:
Attributes:
DbLogExclude .*
do always
room Lüftung
Moin, niemand eine Idee?
Zuviele runde Klammern, 'and' verbindet und muss nicht in Klammer.
D.h. Einmal die komplette Bedingung in runde Klammer und dann den Befehl in Klammer.
Nur bei komplexen Bedingungen kann es sein dass du Klammer in Klammer brauchst.
(a and b or c and d) (set x on) sollte reichen.
Moin, ich bin der Meinung das ich das schon probiert hatte, werde es aber noch einmal testen.
Nein hilft nicht wirklich, trotz co2 größer als 1200ppm bleibt er bei cmd_1.
Internals:
DEF ([WZ_Raumsensor:co2] > 450 and [WZ_Raumsensor:co2] < 800 or [SZ_Raumsensor:co2] > 450 and [SZ_Raumsensor:co2] < 800 or [Thermostat_BZ_Climate:humidity] < 65)
(set kwl 1)
DOELSEIF
([WZ_Raumsensor:co2] > 800 and [WZ_Raumsensor:co2] < 1200 or [SZ_Raumsensor:co2] > 800 and [SZ_Raumsensor:co2] < 1200 or [Thermostat_BZ_Climate:humidity] > 65)
(set kwl 2)
DOELSEIF
([WZ_Raumsensor:co2] > 1200 or [SZ_Raumsensor:co2] > 1200 or [Thermostat_BZ_Climate:humidity] > 75)
(set kwl 3)
DOELSEIF
([Garten.Temp:temperature] <= 15 and [Thermostat_WZ_Climate:measured-temp] >= 23)
(set kwl 0)
DOELSE
(set kwl 1)
FUUID 5d0cf4bd-f33f-ae29-9778-64989c86a97f5693
MODEL FHEM
NAME di_kwlautomatik
NOTIFYDEV Thermostat_BZ_Climate,Thermostat_WZ_Climate,WZ_Raumsensor,Garten.Temp,SZ_Raumsensor,global
NR 181
NTFY_ORDER 50-di_kwlautomatik
STATE cmd_1
TYPE DOIF
VERSION 21813 2020-04-30 10:05:47
READINGS:
2020-05-02 10:20:56 Device SZ_Raumsensor
2020-05-02 10:20:56 cmd 1
2020-05-02 10:20:56 cmd_event SZ_Raumsensor
2020-05-02 10:20:56 cmd_nr 1
2020-05-02 10:16:45 e_Garten.Temp_temperature 11
2020-05-02 10:20:56 e_SZ_Raumsensor_co2 1240.0
2020-05-02 10:18:07 e_WZ_Raumsensor_co2 765.0
2020-05-02 10:06:08 mode enabled
2020-05-02 10:20:56 state cmd_1
Regex:
accu:
cond:
Garten.Temp:
0:
1:
2:
3:
temperature ^Garten.Temp$:^temperature:
SZ_Raumsensor:
0:
co2 ^SZ_Raumsensor$:^co2:
1:
co2 ^SZ_Raumsensor$:^co2:
2:
co2 ^SZ_Raumsensor$:^co2:
Thermostat_BZ_Climate:
0:
humidity ^Thermostat_BZ_Climate$:^humidity:
1:
humidity ^Thermostat_BZ_Climate$:^humidity:
2:
humidity ^Thermostat_BZ_Climate$:^humidity:
Thermostat_WZ_Climate:
3:
measured-temp ^Thermostat_WZ_Climate$:^measured-temp:
WZ_Raumsensor:
0:
co2 ^WZ_Raumsensor$:^co2:
1:
co2 ^WZ_Raumsensor$:^co2:
2:
co2 ^WZ_Raumsensor$:^co2:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 450 and ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') < 800 or ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 450 and ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') < 800 or ::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') < 65
1 ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 800 and ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') < 1200 or ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 800 and ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') < 1200 or ::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') > 65
2 ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 1200 or ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 1200 or ::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') > 75
3 ::ReadingValDoIf($hash,'Garten.Temp','temperature') <= 15 and ::ReadingValDoIf($hash,'Thermostat_WZ_Climate','measured-temp') >= 23
do:
0:
0 set kwl 1
1:
0 set kwl 2
2:
0 set kwl 3
3:
0 set kwl 0
4:
0 set kwl 1
helper:
DEVFILTER ^global$|^Thermostat_BZ_Climate$|^Thermostat_WZ_Climate$|^SZ_Raumsensor$|^Garten.Temp$|^WZ_Raumsensor$
NOTIFYDEV global|Thermostat_BZ_Climate|Thermostat_WZ_Climate|SZ_Raumsensor|Garten.Temp|WZ_Raumsensor
event co2: 1240.0
globalinit 1
last_timer 0
sleeptimer -1
timerdev SZ_Raumsensor
timerevent co2: 1240.0
triggerDev SZ_Raumsensor
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: SZ_Raumsensor
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: SZ_Raumsensor
state: cmd_1
timerevents:
co2: 1240.0
timereventsState:
co2: 1240.0
triggerEvents:
co2: 1240.0
triggerEventsState:
co2: 1240.0
internals:
readings:
all WZ_Raumsensor:co2 SZ_Raumsensor:co2 Thermostat_BZ_Climate:humidity Garten.Temp:temperature Thermostat_WZ_Climate:measured-temp
trigger:
uiState:
uiTable:
Attributes:
DbLogExclude .*
do always
room Lüftung
Schon mal dein letztes "or" jeweils angeschaut!?
Also so wie ich das lese:
irgendwas größer UND irgendwas kleiner ODER irgendwas blablabla ODER Luftfeuchte kleiner als
EDIT: ich denke du willst doch eher: (das hier UND das hier) ODER (das hier UND das hier UND Luftfeuchte < 65)
EDIT: weil irgendwas ODER irgendwas ODER irgendwas wird wahr, sobald eines der irgendwas wahr wird... Also auch wenn NUR die Luftfeuchte kleiner als 65 ist...
D.h. sobald Luftfeuchte bzw. dein letztes OR (also ODER) wahr ist, gilt der Zweig als wahr...
Ich würde mir mal in Worten GENAU hinschreuben WAS sein MUSS und was NICHT SEIN SOLL/DARF...
Und dann noch mal die Logik mit and und or und Klammern zusammenbauen...
Gruß, Joachim
Ich werde es nachher mal ohne Luftfeuchtigkeit probieren und dafür einen extra Zweig machen.
Zitat von: Starsurfer am 02 Mai 2020, 10:51:48
Ich werde es nachher mal ohne Luftfeuchtigkeit probieren und dafür einen extra Zweig machen.
Warum extra Zweig!?
Warum nicht wie vorgeschlagen: hinschreiben (in Worten) was du willst bzw. WANN/Bedingungen du willst, dass etwas passiert...
...und das dann einfach "umsetzen"...
Aber: wie du willst... Dein DOIF ;)
Gruß, Joachim
Genau das habe ich im ersten doif oben gemacht, dachte ich zumindest
Dann schreib doch mal hier in Worten was du wolltest... ;)
Und extra Zweig für irgendwas macht eigentlich nur Sinn, wenn es von den anderen Bedingungsteilen unabhängig ist...
Und dann wäre das OR ja ok.
Dann heisst das aber: egal was vorher als Bedingung steht, sobald Luftfeuchte ist mir alles andere egal... ;)
Wenn es aber sein soll, dass es nur erfüllt sein soll, wenn Luftfeuchte einen bestimmten Wert hat, dann musst du das mit AND reinbringen.
Dann geht aber auch kein extra Zweig...
...außer: Luftfeuchte steht als Bedingung alleine, dann ist ein eigener Zweig sinnvoll, eigentlich sogar nötig...
Aber wie geschrieben: du musst wissen was es tun soll...
Gruß, Joachim
Ich pick mal die erste heraus:
(([WZ_Raumsensor:co2] > 450 and [WZ_Raumsensor:co2] < 800) or ([SZ_Raumsensor:co2] > 450 and [SZ_Raumsensor:co2] < 800) or ([Thermostat_BZ_Climate:humidity] < 65))
(WZ co2 im Bereich 450 - 800) oder (SZ co2 im Bereich 450 - 800) oder (Feuchte unter 65)
Eine der 3 Bedingungen muss wahr sein dann steht das DOIF in diesem Zweig - andere Zweige spielen keine Rolle mehr.
Du denkst es muss Zweig 3 sein? Schaun wir mal
(([WZ_Raumsensor:co2] > 1200) or ([SZ_Raumsensor:co2] > 1200) or ([Thermostat_BZ_Climate:humidity] > 75))
2020-05-01 13:42:07 e_WZ_Raumsensor_co2 665.0
Damit ist die zweite Bedingung im ersten Zweig war und DOIF bleibt in dem Zweig. Der Rest spielt keine Rolle.
Gruß Otto
Also ich versuche es mal zu erklären:
Wenn Co2 im Wohnzimmer oder im Schlafzimmer unter 800ppm ist und die Luftfeuchtigkeit unter 65% - dann Stufe 1
Wenn Co2 im Wohnzimmer oder im Schlafzimmer über 800ppm ist oder die Luftfeuchtigkeit über 65% - dann Stufe 2
Wenn Co2 im Wohnzimmer oder im Schlafzimmer über 1200ppm ist oder die Luftfeuchtigkeit über 75% - dann Stufe 3
Wenn Garten Temperatur unter oder gleich 15 Grad ist und die Wohnzimmer Temperatur gleich oder über 24 Grad sind - dann Stufe 0
Ich denke einen Fehler habe ich gefunden im ersten Zweig
gegenfrage, so oder so?
(Wenn Co2 im Wohnzimmer oder im Schlafzimmer unter 800ppm ist) und die Luftfeuchtigkeit unter 65% - dann Stufe 1
Wenn Co2 im Wohnzimmer oder (im Schlafzimmer unter 800ppm ist und die Luftfeuchtigkeit unter 65%) - dann Stufe 1
Im Zweifelsfall klammern Perl arbeitet von links nach rechts https://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity
Und immer im Kopf haben
Oder
0 0 - 0
0 1 - 1
1 0 - 1
1 1 - 1
Und
0 0 - 0
0 1 - 0
1 0 - 0
1 1 - 1
Zitat von: Otto123 am 02 Mai 2020, 11:56:50
gegenfrage, so oder so?
(Wenn Co2 im Wohnzimmer oder im Schlafzimmer unter 800ppm ist) und die Luftfeuchtigkeit unter 65% - dann Stufe 1
Wenn Co2 im Wohnzimmer oder (im Schlafzimmer unter 800ppm ist und die Luftfeuchtigkeit unter 65%) - dann Stufe 1
Im Zweifelsfall klammern Perl arbeitet von links nach rechts https://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity
Ich denke die erste Version sollte richtig sein
Und das mit UND Luftfeuchte hattest du nie ;)
Sondern immer ODER: also "egal Hauptsache Luftfeuchte" ;)
Gruß, Joachim
Dann so
((([WZ_Raumsensor:co2] > 450 and [WZ_Raumsensor:co2] < 800) or ([SZ_Raumsensor:co2] > 450 and [SZ_Raumsensor:co2] < 800)) and [Thermostat_BZ_Climate:humidity] < 65)
So jetzt noch einmal ein bißchen optimiert, aber ich verstehe das Prinzip einfach nicht. Bin wohl zu blöd dafür.
Wie man sieht ist [WZ_Raumsensor:co2] über 1200, er wechselt aber nicht nach cmd_3.
(([WZ_Raumsensor:co2] < 800 or [SZ_Raumsensor:co2] < 800) and [Thermostat_BZ_Climate:humidity] < 65)
(set kwl 1)
DOELSEIF
([WZ_Raumsensor:co2] > 800 and [WZ_Raumsensor:co2] < 1100 or [SZ_Raumsensor:co2] > 800 and [SZ_Raumsensor:co2] < 1100 or [Thermostat_BZ_Climate:humidity] > 65)
(set kwl 2)
DOELSEIF
([WZ_Raumsensor:co2] > 1100 or [SZ_Raumsensor:co2] > 1100 or [Thermostat_BZ_Climate:humidity] > 75)
(set kwl 3)
DOELSEIF
([Garten.Temp:temperature] <= 15 and [Thermostat_WZ_Climate:measured-temp] >= 23)
(set kwl 0)
DOELSE
(set kwl 1)
Internals:
DEF (([WZ_Raumsensor:co2] < 800 or [SZ_Raumsensor:co2] < 800) and [Thermostat_BZ_Climate:humidity] < 65)
(set kwl 1)
DOELSEIF
([WZ_Raumsensor:co2] > 800 and [WZ_Raumsensor:co2] < 1100 or [SZ_Raumsensor:co2] > 800 and [SZ_Raumsensor:co2] < 1100 or [Thermostat_BZ_Climate:humidity] > 65)
(set kwl 2)
DOELSEIF
([WZ_Raumsensor:co2] > 1100 or [SZ_Raumsensor:co2] > 1100 or [Thermostat_BZ_Climate:humidity] > 75)
(set kwl 3)
DOELSEIF
([Garten.Temp:temperature] <= 15 and [Thermostat_WZ_Climate:measured-temp] >= 23)
(set kwl 0)
DOELSE
(set kwl 1)
FUUID 5d0cf4bd-f33f-ae29-9778-64989c86a97f5693
MODEL FHEM
NAME di_kwlautomatik
NOTIFYDEV WZ_Raumsensor,SZ_Raumsensor,Garten.Temp,global,Thermostat_WZ_Climate,Thermostat_BZ_Climate
NR 181
NTFY_ORDER 50-di_kwlautomatik
STATE cmd_2
TYPE DOIF
VERSION 21813 2020-04-30 10:05:47
READINGS:
2020-05-02 16:42:39 Device SZ_Raumsensor
2020-05-02 16:42:39 cmd 2
2020-05-02 16:42:39 cmd_event SZ_Raumsensor
2020-05-02 16:42:39 cmd_nr 2
2020-05-02 16:42:09 e_Garten.Temp_temperature 14
2020-05-02 16:42:39 e_SZ_Raumsensor_co2 890.0
2020-05-02 16:39:23 e_WZ_Raumsensor_co2 1275.0
2020-05-02 16:38:31 mode enabled
2020-05-02 16:42:39 state cmd_2
Regex:
accu:
cond:
Garten.Temp:
0:
1:
2:
3:
temperature ^Garten.Temp$:^temperature:
SZ_Raumsensor:
0:
co2 ^SZ_Raumsensor$:^co2:
1:
co2 ^SZ_Raumsensor$:^co2:
2:
co2 ^SZ_Raumsensor$:^co2:
Thermostat_BZ_Climate:
0:
humidity ^Thermostat_BZ_Climate$:^humidity:
1:
humidity ^Thermostat_BZ_Climate$:^humidity:
2:
humidity ^Thermostat_BZ_Climate$:^humidity:
Thermostat_WZ_Climate:
3:
measured-temp ^Thermostat_WZ_Climate$:^measured-temp:
WZ_Raumsensor:
0:
co2 ^WZ_Raumsensor$:^co2:
1:
co2 ^WZ_Raumsensor$:^co2:
2:
co2 ^WZ_Raumsensor$:^co2:
attr:
cmdState:
wait:
waitdel:
condition:
0 (::ReadingValDoIf($hash,'WZ_Raumsensor','co2') < 800 or ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') < 800) and ::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') < 65
1 ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 800 and ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') < 1100 or ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 800 and ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') < 1100 or ::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') > 65
2 ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 1100 or ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 1100 or ::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') > 75
3 ::ReadingValDoIf($hash,'Garten.Temp','temperature') <= 15 and ::ReadingValDoIf($hash,'Thermostat_WZ_Climate','measured-temp') >= 23
do:
0:
0 set kwl 1
1:
0 set kwl 2
2:
0 set kwl 3
3:
0 set kwl 0
4:
0 set kwl 1
helper:
DEVFILTER ^global$|^Thermostat_BZ_Climate$|^WZ_Raumsensor$|^Garten.Temp$|^SZ_Raumsensor$|^Thermostat_WZ_Climate$
NOTIFYDEV global|Thermostat_BZ_Climate|WZ_Raumsensor|Garten.Temp|SZ_Raumsensor|Thermostat_WZ_Climate
event co2: 890.0
globalinit 1
last_timer 0
sleeptimer -1
timerdev SZ_Raumsensor
timerevent co2: 890.0
triggerDev SZ_Raumsensor
timerevents:
co2: 890.0
timereventsState:
co2: 890.0
triggerEvents:
co2: 890.0
triggerEventsState:
co2: 890.0
internals:
readings:
all WZ_Raumsensor:co2 SZ_Raumsensor:co2 Thermostat_BZ_Climate:humidity Garten.Temp:temperature Thermostat_WZ_Climate:measured-temp
trigger:
uiState:
uiTable:
Attributes:
DbLogExclude .*
do always
room Lüftung
Ich nutze ja DOIF nicht aber so wie ich es interpretiere:
Es kommt Trigger SZ-CO2 mit 890
Daher ist die 2te Bedingung von cmd2 WAHR (zwischen 800 und 1100), also korrekt cmd2
Bei DOIF war doch auch immer noch was mit Trigger und Statusabfrage...
EDIT: cmd3 kann bei diesem Trigger gar nicht WAHR werden... Weil (so verstehe ich DOIF [wenn man das so nennen will] die anderen Bedingungen doch auch Trigger/Eventabfragen sind!? Und es kommt ja immer nur EIN Event, oder!?
Gruß, Joachim
Die erste Bedingung würde ich komplett entfernen. Wenn nichts wahr wird setzt du sowieso auf 1!
Dann vertausche die Reihenfolge von 2 u. 3. wenn du nach dem höchsten Wert schalten möchtest.
Zitat von: frober am 02 Mai 2020, 17:01:59
Die erste Bedingung würde ich komplett entfernen. Wenn nichts wahr wird setzt du sowieso auf 1!
Dann vertausche die Reihenfolge von 2 u. 3. wenn du nach dem höchsten Wert schalten möchtest.
Werde ich mal testen. Danke
So scheint es jetzt zu funktionieren:
([WZ_Raumsensor:co2] > 1200 or [SZ_Raumsensor:co2] > 1200 or [Thermostat_BZ_Climate:humidity] > 75)
(set kwl 3)
DOELSEIF
([WZ_Raumsensor:co2] > 800 and [WZ_Raumsensor:co2] < 1200 or [SZ_Raumsensor:co2] > 800 and [SZ_Raumsensor:co2] < 1200 or [Thermostat_BZ_Climate:humidity] > 65)
(set kwl 2)
DOELSEIF
([Garten.Temp:temperature] <= 15 and [Thermostat_WZ_Climate:measured-temp] >= 23)
(set kwl 0)
DOELSE
(set kwl 1)
List
Internals:
DEF ([WZ_Raumsensor:co2] > 1200 or [SZ_Raumsensor:co2] > 1200 or [Thermostat_BZ_Climate:humidity] > 75)
(set kwl 3)
DOELSEIF
([WZ_Raumsensor:co2] > 800 and [WZ_Raumsensor:co2] < 1200 or [SZ_Raumsensor:co2] > 800 and [SZ_Raumsensor:co2] < 1200 or [Thermostat_BZ_Climate:humidity] > 65)
(set kwl 2)
DOELSEIF
([Garten.Temp:temperature] <= 15 and [Thermostat_WZ_Climate:measured-temp] >= 23)
(set kwl 0)
DOELSE
(set kwl 1)
FUUID 5d0cf4bd-f33f-ae29-9778-64989c86a97f5693
MODEL FHEM
NAME di_kwlautomatik
NOTIFYDEV Thermostat_BZ_Climate,WZ_Raumsensor,SZ_Raumsensor,Garten.Temp,global,Thermostat_WZ_Climate
NR 181
NTFY_ORDER 50-di_kwlautomatik
STATE cmd_1
TYPE DOIF
VERSION 21813 2020-04-30 10:05:47
READINGS:
2020-05-02 18:27:40 Device SZ_Raumsensor
2020-05-02 18:27:40 cmd 1
2020-05-02 18:27:40 cmd_event SZ_Raumsensor
2020-05-02 18:27:40 cmd_nr 1
2020-05-02 18:23:06 e_Garten.Temp_temperature 13.2
2020-05-02 18:27:40 e_SZ_Raumsensor_co2 865.0
2020-05-02 18:14:58 e_Thermostat_BZ_Climate_humidity 56
2020-05-02 18:26:44 e_WZ_Raumsensor_co2 1465.0
2020-05-02 17:53:04 mode enabled
2020-05-02 18:27:40 state cmd_1
Regex:
accu:
cond:
Garten.Temp:
0:
1:
2:
temperature ^Garten.Temp$:^temperature:
SZ_Raumsensor:
0:
co2 ^SZ_Raumsensor$:^co2:
1:
co2 ^SZ_Raumsensor$:^co2:
Thermostat_BZ_Climate:
0:
humidity ^Thermostat_BZ_Climate$:^humidity:
1:
humidity ^Thermostat_BZ_Climate$:^humidity:
Thermostat_WZ_Climate:
2:
measured-temp ^Thermostat_WZ_Climate$:^measured-temp:
WZ_Raumsensor:
0:
co2 ^WZ_Raumsensor$:^co2:
1:
co2 ^WZ_Raumsensor$:^co2:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 1200 or ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 1200 or ::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') > 75
1 ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') > 800 and ::ReadingValDoIf($hash,'WZ_Raumsensor','co2') < 1200 or ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') > 800 and ::ReadingValDoIf($hash,'SZ_Raumsensor','co2') < 1200 or ::ReadingValDoIf($hash,'Thermostat_BZ_Climate','humidity') > 65
2 ::ReadingValDoIf($hash,'Garten.Temp','temperature') <= 15 and ::ReadingValDoIf($hash,'Thermostat_WZ_Climate','measured-temp') >= 23
do:
0:
0 set kwl 3
1:
0 set kwl 2
2:
0 set kwl 0
3:
0 set kwl 1
helper:
DEVFILTER ^global$|^Thermostat_WZ_Climate$|^Garten.Temp$|^WZ_Raumsensor$|^SZ_Raumsensor$|^Thermostat_BZ_Climate$
NOTIFYDEV global|Thermostat_WZ_Climate|Garten.Temp|WZ_Raumsensor|SZ_Raumsensor|Thermostat_BZ_Climate
event co2: 865.0
globalinit 1
last_timer 0
sleeptimer -1
timerdev SZ_Raumsensor
timerevent co2: 865.0
triggerDev SZ_Raumsensor
timerevents:
co2: 865.0
timereventsState:
co2: 865.0
triggerEvents:
co2: 865.0
triggerEventsState:
co2: 865.0
internals:
readings:
all WZ_Raumsensor:co2 SZ_Raumsensor:co2 Thermostat_BZ_Climate:humidity Garten.Temp:temperature Thermostat_WZ_Climate:measured-temp
trigger:
uiState:
uiTable:
Attributes:
DbLogExclude .*
do always
room Lüftung
Wenn du meinst...
Warte bis humidity über 65 geht...
...oder über 75...
Dann sind die restlichen Bedingungen halt wieder "egal"...
Gruß, Joachim