Hallo,
kann man bei einem DOIF, das DOELSE weg lassen?
Der Hintergrund ist, dass ich für meine Kellerlüftungssteuerung fünf verschiedene DOIFs habe, welche bei unterschiedlich festgelegten Temperaturen/Luftfeuchtigkeit (Keller und Außen) dementsprechend verschieden ansprechen und auch verschieden lange den Lüfter laufen lassen. Fragen zur Steuerung im Allgemeinen habe ich hier schon öfters gestellt.
Das erste DOIF schaltet einen Lüfter ein, wenn die Bedingungen erfüllt sind. Wenn nicht, schaltet es den Lüfter aus.
Ein DOIF alleine würde funktionieren.
Das zweite DOIF überprüft aber seine Bedingungen ebenfalls (parallel).
Hier liegt wahrscheinlich das Problem.
Weil nämlich beim zweiten DOIF die Bedingungen in diesem Fall nicht zutreffen, schaltet es mit dem DOELSE den Lüfter aus.
Somit wird mir also der Lüfter ausgeschaltet, welcher eigenlich wegen dem erste DOIF (richtigerweise) noch weiter laufen sollte.
Bisher habe ich mir so beholfen, dass ich die DOIFS, welche derzeit nicht zutreffen, auf "disable" händisch gesetzt habe.
Ist natürlich umständlich und ich muß selber immer wieder schauen, welches gerade das richtige wäre.
Ist auch nicht gerade "smart" für ein Smarthome :-[.
Was wäre, wenn ich bei jedem DOIF das DOELSE weg lasse. Wenn also die Bedingung nicht zutrifft, soll nichts weiter gemacht werden.
Falls dies funktioniert, wäre dies das Einfachste für mich.
Hier die Lists von zwei DOIF:
Internals:
DEF ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]>8.5 and [HUESensor84:temperature]<=10)(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 900)(set HUEDevice7 on-for-timer 17) DOELSE (set HUEDevice11 off)
FUUID 61bcdea7-f33f-f59f-b9c1-6d3492ce084fd1cf
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_KALT
NOTIFYDEV HUESensor84,deltadewpoint,global
NR 129
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_KALT
STATE disabled
TYPE DOIF
VERSION 26444 2022-09-25 16:29:19
eventCount 30033
Helper:
DBLOG:
state:
DbLog:
TIME 1674372224.63503
VALUE disabled
READINGS:
2023-01-22 08:23:15 Device HUESensor84
2023-01-22 08:23:15 cmd 2
2023-01-22 08:23:15 cmd_event HUESensor84
2023-01-22 08:23:15 cmd_nr 2
2023-01-22 08:23:15 e_HUESensor84_temperature 8.26
2023-01-22 08:17:08 e_deltadewpoint_state 9.7
2023-01-22 08:23:44 last_cmd cmd_2
2023-01-22 08:23:44 mode disabled
2023-01-22 08:23:44 state disabled
2023-01-22 00:19:48 wait_timer no timer
Regex:
accu:
collect:
cond:
HUESensor84:
0:
temperature ^HUESensor84$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
cmdState:
repeatcmd:
7400
wait:
0:
0
20
920
1:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2.3 and ::ReadingValDoIf($hash,'HUESensor84','temperature')>8.5 and ::ReadingValDoIf($hash,'HUESensor84','temperature')<=10
do:
0:
0 set HUEDevice18 on-for-timer 17
1 set HUEDevice11 on-for-timer 900
2 set HUEDevice7 on-for-timer 17
1:
0 set HUEDevice11 off
helper:
NOTIFYDEV HUESensor84,deltadewpoint,global
event temperature: 8.26
globalinit 1
last_timer 0
sleepdevice HUESensor84
sleepsubtimer 0
sleeptimer -1
timerdev HUESensor84
timerevent temperature: 8.26
triggerDev HUESensor84
bm:
DOIF_Get:
cnt 13
dmx -1000
dtot 0
dtotcnt 0
mTS 05.02. 12:57:36
max 0.000232934951782227
tot 0.000790834426879883
mAr:
HASH(0x3796840)
TAUPUNKT_LUEFTUNG_KALT
?
DOIF_Notify:
cnt 31815
dmx -1000
dtot 0
dtotcnt 0
mTS 22.01. 08:17:09
max 0.527423858642578
tot 18.0940017700195
mAr:
HASH(0x3796840)
HASH(0x34a8648)
DOIF_Set:
cnt 133
dmx -1000
dtot 0
dtotcnt 0
mTS 22.01. 08:23:44
max 0.0273299217224121
tot 0.0571322441101074
mAr:
HASH(0x3796840)
TAUPUNKT_LUEFTUNG_KALT
disable
timerevents:
temperature: 8.26
timereventsState:
temperature: 8.26
triggerEvents:
temperature: 8.26
triggerEventsState:
temperature: 8.26
internals:
readings:
all deltadewpoint:state HUESensor84:temperature
trigger:
uiState:
uiTable:
Attributes:
do always
repeatcmd 7400
room Kellerlüftung
wait 0,20,920:0
List zwei:
Internals:
DEF ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]<=8.5 and [AUS_LUFTFEUCHTIGKEIT:temperature]>[HUESensor84:temperature])(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 480)(set HUEDevice7 on-for-timer 17) DOELSE (set HUEDevice11 off)
FUUID 6060ef63-f33f-f59f-0724-1fb6e7a4b53fc5e7
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_WINTER
NOTIFYDEV deltadewpoint,HUESensor84,AUS_LUFTFEUCHTIGKEIT,global
NR 100
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_WINTER
STATE disabled
TYPE DOIF
VERSION 26444 2022-09-25 16:29:19
eventCount 23691
Helper:
DBLOG:
state:
DbLog:
TIME 1674929228.11564
VALUE disabled
READINGS:
2023-01-28 19:06:38 Device HUESensor84
2023-01-28 19:06:38 cmd 2
2023-01-28 19:06:38 cmd_event HUESensor84
2023-01-28 19:06:38 cmd_nr 2
2023-01-28 19:06:09 e_AUS_LUFTFEUCHTIGKEIT_temperature -3.68
2023-01-28 19:06:38 e_HUESensor84_temperature 8.11
2023-01-28 18:58:41 e_deltadewpoint_state 12.4
2023-01-28 19:07:08 last_cmd cmd_2
2023-01-28 19:07:08 mode disabled
2023-01-28 19:07:08 state disabled
Regex:
accu:
collect:
cond:
AUS_LUFTFEUCHTIGKEIT:
0:
temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
HUESensor84:
0:
temperature ^HUESensor84$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
cmdState:
repeatcmd:
9000
wait:
0:
0
20
500
1:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2.3 and ::ReadingValDoIf($hash,'HUESensor84','temperature')<=8.5 and ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'HUESensor84','temperature')
do:
0:
0 set HUEDevice18 on-for-timer 17
1 set HUEDevice11 on-for-timer 480
2 set HUEDevice7 on-for-timer 17
1:
0 set HUEDevice11 off
helper:
NOTIFYDEV deltadewpoint,HUESensor84,AUS_LUFTFEUCHTIGKEIT,global
event battery: 100,batteryPercent: 100,reachable: 1,temperature: 8.11
globalinit 1
last_timer 0
sleeptimer -1
timerdev HUESensor84
timerevent battery: 100,batteryPercent: 100,reachable: 1,temperature: 8.11
triggerDev HUESensor84
bm:
DOIF_Get:
cnt 10
dmx -1000
dtot 0
dtotcnt 0
mTS 22.01. 11:13:45
max 8.98838043212891e-05
tot 0.000464439392089844
mAr:
HASH(0x3684db8)
TAUPUNKT_LUEFTUNG_WINTER
?
DOIF_Notify:
cnt 61633
dmx -1000
dtot 0
dtotcnt 0
mTS 28.01. 09:18:18
max 0.583838939666748
tot 573.331291675568
mAr:
HASH(0x3684db8)
HASH(0x2d71d90)
DOIF_Set:
cnt 1095
dmx -1000
dtot 0
dtotcnt 0
mTS 22.01. 19:39:58
max 0.0367300510406494
tot 0.199435472488403
mAr:
HASH(0x3684db8)
TAUPUNKT_LUEFTUNG_WINTER
disable
timerevents:
battery: 100
batteryPercent: 100
reachable: 1
temperature: 8.11
timereventsState:
battery: 100
batteryPercent: 100
reachable: 1
temperature: 8.11
triggerEvents:
battery: 100
batteryPercent: 100
reachable: 1
temperature: 8.11
triggerEventsState:
battery: 100
batteryPercent: 100
reachable: 1
temperature: 8.11
internals:
readings:
all deltadewpoint:state HUESensor84:temperature AUS_LUFTFEUCHTIGKEIT:temperature
trigger:
uiState:
uiTable:
Attributes:
do always
repeatcmd 9000
room Kellerlüftung
wait 0,20,500:0
Vielen Dank
Grüße Ruggy
Hallo Ruggy,
ja geht. Du solltest die sehr ausführliche Doku und die vielen Beispiele einmal lesen.
Warum machts Du das nicht mit einem DOIF mit DOELSEIF?
Viele Grüße
Jürgen
Die Commandref habe ich mir schon durchgelesen.
Leider ist mir trotzdem alles noch nicht so klar geworden. Mir wurde auch hier schon mal versucht dies zu erklären. Das schwierige ist für mich wie was zusammen hängt; DOIF, DOELSE, DOELSEIF, dann verschiedene Klammern (), []
Vor allem bei so vielen Verschachtelungen wie in meinen DOIFs
Meinst Du mit mit DOESLEIF, dass ich meine DOIFs zu einem DOIF zusammen fasse?
Etwa so (vorerst mit zwei)?
define Kellerlüftung_Taupunkt DOIF ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]>8.5 and [HUESensor84:temperature]<=10)(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 900)(set HUEDevice7 on-for-timer 17) DOELSEIF ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]<=8.5 and [AUS_LUFTFEUCHTIGKEIT:temperature]>[HUESensor84:temperature])(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 480)(set HUEDevice7 on-for-timer 17)
Eine Zeitlang habe ich in DOELSE einen Log eintrag gesetzt - um zu signalisieren das das DOIF durch ein Event getriggert wurde, aber keine Bedingung passte. Fand ich zum debuggen ganz hilfreich.
@Ruggy,
funktioniert denn Deine Definition wie gewünscht?
Ich habe zum testen mir häufug einen Dummy definiert, den ich dann in Abhängigkeit der BEdingungen mit einem Wert versorgt habe. So kann man erst einmal die Bedingungen testen. Wenn das alles passt, kann man die richtigen Befehl absetzen.
Viele Grüße
Jürgen
PS.: Für spezielle DOIF-Fragen sollten man das entsprechende Unterforum nutzen.
Zitat von: juemuc am 05 Februar 2023, 21:21:39
@Ruggy,
funktioniert denn Deine Definition wie gewünscht?
PS.: Für spezielle DOIF-Fragen sollten man das entsprechende Unterforum nutzen.
Ich glaube jetzt, dass es nicht so wie gewünscht funktoniert.
Laut den SVG-Plot schaltet sich der Lüfter aber mehrmals ein (siehe Anhang).
Folgende Temperatur-Werte und Taupunktwerte sind derzeit vorhanden (HUESensor84 ist im Keller). Eigentlich sollte das DOIF der Lüfter doch derzeit nicht einschalten.
e_AUS_LUFTFEUCHTIGKEIT_temperature
4.35
2023-02-17 11:31:13
e_HUESensor84_temperature
7.05
2023-02-17 10:28:05
e_deltadewpoint_state
3.2
2023-02-17 10:37:13
Folgendes DOIF wird laut state cmd_1 anscheindend aktiv
Internals:
DEF ([deltadewpoint:state]>2.3 and [HUESensor84:temperature]<=8.5 and [AUS_LUFTFEUCHTIGKEIT:temperature]>[HUESensor84:temperature])(set HUEDevice18 on-for-timer 17)(set HUEDevice11 on-for-timer 480)(set HUEDevice7 on-for-timer 17)
FUUID 6060ef63-f33f-f59f-0724-1fb6e7a4b53fc5e7
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_WINTER
NOTIFYDEV deltadewpoint,global,AUS_LUFTFEUCHTIGKEIT,HUESensor84
NR 125
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_WINTER
STATE cmd_1
TYPE DOIF
VERSION 27190 2023-02-07 19:11:02
eventCount 323
Helper:
DBLOG:
state:
DbLog:
TIME 1676625414.82009
VALUE cmd_1
READINGS:
2023-02-17 11:39:13 Device AUS_LUFTFEUCHTIGKEIT
2023-02-17 10:16:54 cmd 1.3
2023-02-17 10:16:54 cmd_event AUS_LUFTFEUCHTIGKEIT
2023-02-17 10:16:54 cmd_nr 1
2023-02-17 10:16:54 cmd_seqnr 3
2023-02-17 11:39:13 e_AUS_LUFTFEUCHTIGKEIT_temperature 4.73
2023-02-17 11:34:39 e_HUESensor84_temperature 7.04
2023-02-17 11:33:43 e_deltadewpoint_state 2.5
2023-02-05 16:40:23 mode enabled
2023-02-17 10:16:54 state cmd_1
2023-02-17 10:16:54 wait_timer 17.02.2023 12:46:54 cmd_1_1 AUS_LUFTFEUCHTIGKEIT
Regex:
accu:
bar:
collect:
cond:
AUS_LUFTFEUCHTIGKEIT:
0:
temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
HUESensor84:
0:
temperature ^HUESensor84$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
cmdState:
repeatcmd:
9000
wait:
0:
0
20
500
1:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>2.3 and ::ReadingValDoIf($hash,'HUESensor84','temperature')<=8.5 and ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')>::ReadingValDoIf($hash,'HUESensor84','temperature')
do:
0:
0 set HUEDevice18 on-for-timer 17
1 set HUEDevice11 on-for-timer 480
2 set HUEDevice7 on-for-timer 17
1:
helper:
NOTIFYDEV deltadewpoint,global,AUS_LUFTFEUCHTIGKEIT,HUESensor84
event temperature: 4.73
globalinit 1
last_timer 0
sleepdevice AUS_LUFTFEUCHTIGKEIT
sleepsubtimer 0
sleeptimer 0
timerdev AUS_LUFTFEUCHTIGKEIT
timerevent temperature: 7.37
triggerDev AUS_LUFTFEUCHTIGKEIT
bm:
DOIF_Get:
cnt 4
dmx -1000
dtot 0
dtotcnt 0
mTS 11.02. 21:41:53
max 4.50611114501953e-05
tot 0.000128030776977539
mAr:
HASH(0x503d4e8)
TAUPUNKT_LUEFTUNG_WINTER
?
DOIF_Notify:
cnt 9240
dmx -1000
dtot 0
dtotcnt 0
mTS 16.02. 21:20:12
max 0.0199840068817139
tot 17.8054039478302
mAr:
HASH(0x503d4e8)
HASH(0x471aa98)
DOIF_Set:
cnt 30
dmx -1000
dtot 0
dtotcnt 0
mTS 17.02. 11:30:20
max 0.000196933746337891
tot 0.00280284881591797
mAr:
HASH(0x503d4e8)
TAUPUNKT_LUEFTUNG_WINTER
?
timerevents:
temperature: 7.37
timereventsState:
temperature: 7.37
triggerEvents:
temperature: 4.73
triggerEventsState:
temperature: 4.73
internals:
perlblock:
readings:
all deltadewpoint:state HUESensor84:temperature AUS_LUFTFEUCHTIGKEIT:temperature
trigger:
uiState:
uiTable:
Attributes:
do always
repeatcmd 9000
room Kellerlüftung
wait 0,20,500:0