Hallo,
ich will meinen überschüssigen Strom im Bad verbrauchen.
Ich habe mir ein DOIF gebastelt und denke, dass es so gehen soll.
Der zweite Zweig löst allerdings das "off" aus, obwohl es noch gar nicht in der Uhrzeit ist, wo es schalten soll.
Übersehe ich eine Klammer oder?
Der Zweig löst "richtig" aus, denn der Wert ist nicht erreicht. Doch wieso ignoriert er die Uhrzeit?
([handy_da:state] eq "present" and [Alarm:state] eq "off" and (([08:00 - 13:00|7] or [06:00 - 13:00|8]) and [Bad_Heizung:temperature] < 25 and [Solar_Nebenhaus_Shelly:power] < -40))
(set Bad_Heizung_Shelly on)
DOELSEIF
([handy_da:state] eq "present" and [Alarm:state] eq "off" and [13:10 - 21:00] and [Bad_Heizung:temperature] < 25 and [Torsten_Strom:Active_Power_calculated] < -300)
(set Bad_Heizung_Shelly on)
DOELSE
(set Bad_Heizung_Shelly off)
List vom DOIF:
Internals:
CFGFN
DEF ([handy_da:state] eq "present" and [Alarm:state] eq "off" and (([08:00 - 13:00|7] or [06:00 - 13:00|8]) and [Bad_Heizung:temperature] < 25 and [Solar_Nebenhaus_Shelly:power] < -40))
(set Bad_Heizung_Shelly on)
DOELSEIF
([handy_da:state] eq "present" and [Alarm:state] eq "off" and [13:10 - 21:00] and [Bad_Heizung:temperature] < 25 and [Torsten_Strom:Active_Power_calculated] < -300)
(set Bad_Heizung_Shelly on)
DOELSE
(set Bad_Heizung_Shelly off)
FUUID 6808accb-f33f-7e98-b881-087584f18c6f50a9
MODEL FHEM
NAME Badezimmer_Decken_Heizung
NOTIFYDEV Solar_Nebenhaus_Shelly,global,Alarm,Torsten_Strom,Bad_Heizung,handy_da
NR 593
NTFY_ORDER 50-Badezimmer_Decken_Heizung
STATE initialized
TYPE DOIF
VERSION 29460 2024-12-29 20:25:48
eventCount 157
.attraggr:
.attrminint:
READINGS:
2025-04-23 12:24:01 Device Torsten_Strom
2025-04-23 12:15:41 cmd 0
2025-04-23 12:23:05 e_Bad_Heizung_temperature 22.4
2025-04-23 12:23:03 e_Solar_Nebenhaus_Shelly_power -279.7
2025-04-23 12:24:01 e_Torsten_Strom_Active_Power_calculated -73.8 ( -4427 Ws = -1.23 Wh in 60 s )
2025-04-23 12:15:41 mode enabled
2025-04-23 12:15:41 state initialized
2025-04-23 12:15:41 timer_01_c01 24.04.2025 08:00:00|7
2025-04-23 12:15:41 timer_02_c01 23.04.2025 13:00:00|7
2025-04-23 12:15:41 timer_03_c01 24.04.2025 06:00:00|8
2025-04-23 12:15:41 timer_04_c01 23.04.2025 13:00:00|8
2025-04-23 12:15:41 timer_05_c02 23.04.2025 13:10:00
2025-04-23 12:15:41 timer_06_c02 23.04.2025 21:00:00
2025-04-23 12:24:01 wait_timer 23.04.2025 12:28:01 cmd_3 Torsten_Strom
Regex:
accu:
bar:
barAvg:
collect:
cond:
Alarm:
0:
state ^Alarm$:^state:
1:
state ^Alarm$:^state:
Bad_Heizung:
0:
temperature ^Bad_Heizung$:^temperature:
1:
temperature ^Bad_Heizung$:^temperature:
Solar_Nebenhaus_Shelly:
0:
power ^Solar_Nebenhaus_Shelly$:^power:
Torsten_Strom:
0:
1:
Active_Power_calculated ^Torsten_Strom$:^Active_Power_calculated:
handy_da:
0:
state ^handy_da$:^state:
1:
state ^handy_da$:^state:
attr:
cmdState:
wait:
0:
240
1:
240
2:
240
waitdel:
condition:
0 ::ReadingValDoIf($hash,'handy_da','state') eq "present" and ::ReadingValDoIf($hash,'Alarm','state') eq "off" and ((::DOIF_time($hash,0,1,$wday,$hms,"7") or ::DOIF_time($hash,2,3,$wday,$hms,"8")) and ::ReadingValDoIf($hash,'Bad_Heizung','temperature') < 25 and ::ReadingValDoIf($hash,'Solar_Nebenhaus_Shelly','power') < -40)
1 ::ReadingValDoIf($hash,'handy_da','state') eq "present" and ::ReadingValDoIf($hash,'Alarm','state') eq "off" and ::DOIF_time($hash,4,5,$wday,$hms) and ::ReadingValDoIf($hash,'Bad_Heizung','temperature') < 25 and ::ReadingValDoIf($hash,'Torsten_Strom','Active_Power_calculated') < -300
days:
0 7
1 7
2 8
3 8
do:
0:
0 set Bad_Heizung_Shelly on
1:
0 set Bad_Heizung_Shelly on
2:
0 set Bad_Heizung_Shelly off
helper:
NOTIFYDEV Solar_Nebenhaus_Shelly,global,Alarm,Torsten_Strom,Bad_Heizung,handy_da
event Purchased_Energy_A: 13555.96,Purchased_Energy_B: 26320.9,Returned_Energy_C: 60645.65,Purchased_Energy_S: 71592.98,Returned_Energy_S: 137462.06,Total_Energy_S: -65869.08,Active_Power_calculated: -73.8 ( -4427 Ws = -1.23 Wh in 60 s ),Active_Power_integrated: -78.3 (1 values),Active_Power_integratedNeg: 78.3 (4698 Ws = 1.31 Wh),kWh_Gesamt: -1350198280150415.2,kWh_Rein_Gesamt: 5794443338031510.0,kWh_Back_Gesamt: 7144641618181925.0
globalinit 1
last_timer 6
sleepdevice Torsten_Strom
sleepsubtimer 0
sleeptimer 2
timerdev Torsten_Strom
timerevent Purchased_Energy_A: 13555.96,Purchased_Energy_B: 26320.9,Returned_Energy_C: 60645.65,Purchased_Energy_S: 71592.98,Returned_Energy_S: 137462.06,Total_Energy_S: -65869.08,Active_Power_calculated: -73.8 ( -4427 Ws = -1.23 Wh in 60 s ),Active_Power_integrated: -78.3 (1 values),Active_Power_integratedNeg: 78.3 (4698 Ws = 1.31 Wh),kWh_Gesamt: -1350198280150415.2,kWh_Rein_Gesamt: 5794443338031510.0,kWh_Back_Gesamt: 7144641618181925.0
triggerDev Torsten_Strom
timerevents:
Purchased_Energy_A: 13555.96
Purchased_Energy_B: 26320.9
Returned_Energy_C: 60645.65
Purchased_Energy_S: 71592.98
Returned_Energy_S: 137462.06
Total_Energy_S: -65869.08
Active_Power_calculated: -73.8 ( -4427 Ws = -1.23 Wh in 60 s )
Active_Power_integrated: -78.3 (1 values)
Active_Power_integratedNeg: 78.3 (4698 Ws = 1.31 Wh)
kWh_Gesamt: -1350198280150415.2
kWh_Rein_Gesamt: 5794443338031510.0
kWh_Back_Gesamt: 7144641618181925.0
timereventsState:
Purchased_Energy_A: 13555.96
Purchased_Energy_B: 26320.9
Returned_Energy_C: 60645.65
Purchased_Energy_S: 71592.98
Returned_Energy_S: 137462.06
Total_Energy_S: -65869.08
Active_Power_calculated: -73.8 ( -4427 Ws = -1.23 Wh in 60 s )
Active_Power_integrated: -78.3 (1 values)
Active_Power_integratedNeg: 78.3 (4698 Ws = 1.31 Wh)
kWh_Gesamt: -1350198280150415.2
kWh_Rein_Gesamt: 5794443338031510.0
kWh_Back_Gesamt: 7144641618181925.0
triggerEvents:
Purchased_Energy_A: 13555.96
Purchased_Energy_B: 26320.9
Returned_Energy_C: 60645.65
Purchased_Energy_S: 71592.98
Returned_Energy_S: 137462.06
Total_Energy_S: -65869.08
Active_Power_calculated: -73.8 ( -4427 Ws = -1.23 Wh in 60 s )
Active_Power_integrated: -78.3 (1 values)
Active_Power_integratedNeg: 78.3 (4698 Ws = 1.31 Wh)
kWh_Gesamt: -1350198280150415.2
kWh_Rein_Gesamt: 5794443338031510.0
kWh_Back_Gesamt: 7144641618181925.0
triggerEventsState:
Purchased_Energy_A: 13555.96
Purchased_Energy_B: 26320.9
Returned_Energy_C: 60645.65
Purchased_Energy_S: 71592.98
Returned_Energy_S: 137462.06
Total_Energy_S: -65869.08
Active_Power_calculated: -73.8 ( -4427 Ws = -1.23 Wh in 60 s )
Active_Power_integrated: -78.3 (1 values)
Active_Power_integratedNeg: 78.3 (4698 Ws = 1.31 Wh)
kWh_Gesamt: -1350198280150415.2
kWh_Rein_Gesamt: 5794443338031510.0
kWh_Back_Gesamt: 7144641618181925.0
internals:
interval:
0 -1
1 0
2 -1
3 2
4 -1
5 4
intervalfunc:
localtime:
0 1745474400
1 1745406000
2 1745467200
3 1745406000
4 1745406600
5 1745434800
readings:
all handy_da:state Alarm:state Bad_Heizung:temperature Solar_Nebenhaus_Shelly:power Torsten_Strom:Active_Power_calculated
realtime:
0 08:00:00
1 13:00:00
2 06:00:00
3 13:00:00
4 13:10:00
5 21:00:00
time:
0 08:00:00
1 13:00:00
2 06:00:00
3 13:00:00
4 13:10:00
5 21:00:00
timeCond:
0 0
1 0
2 0
3 0
4 1
5 1
timer:
0 0
1 0
2 0
3 0
4 0
5 0
timers:
0 0 1 2 3
1 4 5
trigger:
triggertime:
1745406000:
localtime 1745406000
hash:
1745406600:
localtime 1745406600
hash:
1745434800:
localtime 1745434800
hash:
1745467200:
localtime 1745467200
hash:
1745474400:
localtime 1745474400
hash:
uiState:
uiTable:
Attributes:
wait 240:240:240
Vielen Dank schon einmal,
Hoffi
Ich habe die Uhrzeiten geändert/gestrichen.
Ich weiß zwar immer noch nicht, wo mein Gedankenfehler war, aber so läuft es erstmal für mich.
(([handy_da:state] eq "present" and [Alarm:state] eq "off" and [06:00-13:00] and [Bad_Heizung:temperature] < 25 and [Solar_Nebenhaus_Shelly:power] < -40 and [Torsten_Strom:Active_Power_S] < 50)
or
([handy_da:state] eq "present" and [Alarm:state] eq "off" and [13:10-21:00] and [Bad_Heizung:temperature] < 25 and [Torsten_Strom:Active_Power_S] < -300 ))
DOELSEIF
([Solar_Nebenhaus_Shelly:power] < -30 or [Torsten_Strom:Active_Power_S] > 50)
(set Bad_Heizung_Shelly off)
Zitat von: Thoffi1978 am 23 April 2025, 12:26:36DOELSE
(set Bad_Heizung_Shelly off)
Das DOELSE löst immer aus (m.W. wenn ein Trigger zutrifft wie z.B. temperature oder power...) wenn keine der vorherigen Bedingungen erfüllt sind. du hattest:
Wenn (handy_da und keine alarm un Uhrzeit und < 25° und power < -40)
--> mach an
Sonst Wenn ( ... ... )
--> mach an
und ansonsten (in allen übrigen Fällen)
--> mach aus
Daher wird ständig ausgeschalten und nur wenn alle Bedigungen des jeweiligen Zweigs zutreffen an.
Diesen Ausschaltzweig kannst du (so wie jetzt erfolgt) an Bedingungen knüpfen damit der nicht ständig auslöst.
Oft lohnt es sich in solchen Fällen die Logik umzudrehen, da sich damit häufig Bedinungen vereinfachen lassen.
Nach dem Motto "De-Morgan stirbt nie" helfen dir dabei die de-morganschen Gesetze (https://de.wikipedia.org/wiki/De-morgansche_Gesetze) ;)
Wird aber nicht durch das DOELSEIF gesagt, "löse nur aus, wenn so dann aus"?
Bei einem DOELSE heißt es dich "Wenn nicht wie oben, dann aus"
Oder bin ich da gerade völlig falsch vor?
Ja, DOELSEIF hat Bedingung(en).
Wenn das vorherige (DOELSE)IF Nicht zutrifft, prüfe die Bedingungen und wenn die zutrifft, wird ausgeführt.
So hattest du es ja bereits angepasst.
Ein DOELSE hat aber keine weiteren Bedingungen und wird immer ausgeführt wenn keine der vorherigen (DOELSE)IF zutrifft und das ist dann eben alles andere...
Und gerade wenn im IF viele Bedingungen mit und verknüpft vorkommen, genügt es wenn eine nicht mehr zutrifft und der DOELSE Zweig wird ausgeführt...