ich komm leider gar nicht weiter mit dem Abbruch eines DOIF.
Er soll überprüfen, ob mein Siebträger tatsächlich heizt indem er die Temperatur nach 5min checkt.
Mein Ansatz:
Internals:
CFGFN ./FHEM/00_fhem_7_devices.cfg
DEF ([Kaffeemaschine] eq "on" and ([Kaffeemaschine:temperature] < 40))
(set pushmsg msg 'Siebträger' 'Siebträger heizt nicht!' 'mike' 0 ' ')
(set Sonos_Kueche Speak 10 de 'Achtung! Der Siebtraeger heitzt nicht!')
({Log 1, "Siebtraeger heizt nicht. Aktuelle Temperatur: " . [Kaffeemaschine:temperature]})
DOELSEIF ([Kaffeemaschine] eq "on" and ([Kaffeemaschine:temperature] > 40))(
{Log 1, "Siebtraeger heizt gut. Aktuelle Temperatur: " . [Kaffeemaschine:temperature]})
MODEL FHEM
NAME di_KaffeemaschineHeiztNicht
NR 598
NTFY_ORDER 50-di_KaffeemaschineHeiztNicht
STATE cmd_2
TYPE DOIF
READINGS:
2018-09-15 09:20:58 Device Kaffeemaschine
2018-09-15 09:25:57 cmd 2
2018-09-15 09:25:57 cmd_event Kaffeemaschine
2018-09-15 09:25:57 cmd_nr 2
2018-09-15 09:20:58 e_Kaffeemaschine_STATE off
2018-09-13 22:11:34 mode enabled
2018-09-15 09:25:57 state cmd_2
2018-09-15 09:25:57 wait_timer no timer
Regex:
attr:
cmdState:
wait:
0:
420
1:
300
waitdel:
condition:
0 InternalDoIf($hash,'Kaffeemaschine','STATE') eq "on" and (ReadingValDoIf($hash,'Kaffeemaschine','temperature') < 40)
1 InternalDoIf($hash,'Kaffeemaschine','STATE') eq "on" and (ReadingValDoIf($hash,'Kaffeemaschine','temperature') > 40)
devices:
0 Kaffeemaschine
1 Kaffeemaschine
all Kaffeemaschine
do:
0:
0 set pushmsg msg 'Siebträger' 'Siebträger heizt nicht!' 'mike' 0 ' '
1 set Sonos_Kueche Speak 10 de 'Achtung! Der Siebtraeger heitzt nicht!'
2 {Log 1, "Siebtraeger heizt nicht. Aktuelle Temperatur: " . [Kaffeemaschine:temperature]}
1:
0 {Log 1, "Siebtraeger heizt gut. Aktuelle Temperatur: " . [Kaffeemaschine:temperature]}
2:
helper:
event schalter: on
globalinit 1
last_timer 0
sleepdevice Kaffeemaschine
sleepsubtimer -1
sleeptimer -1
timerdev Kaffeemaschine
timerevent schalter: on
triggerDev Kaffeemaschine
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: Kaffeemaschine
state: cmd_2
timerevents:
schalter: on
timereventsState:
schalter: on
triggerEvents:
schalter: on
triggerEventsState:
schalter: on
internals:
0 Kaffeemaschine:STATE
1 Kaffeemaschine:STATE
all Kaffeemaschine:STATE
itimer:
readings:
0 Kaffeemaschine:temperature
1 Kaffeemaschine:temperature
all Kaffeemaschine:temperature
trigger:
uiState:
uiTable:
Attributes:
do always
wait 420:300
Leider bricht er die wait-time nicht ab, wenn die Temperatur über 40°C steigt.
Kann mir jemand weiterhelfen!?
do resetwait
vielen Dank.... das zusammen mit event-on-change-reading auf die Temperatur hat das Problem gelöst.
DOIF bleibt zu komplex für meinen Kopf! :D
Zitat von: mike.d am 15 September 2018, 18:51:24
DOIF bleibt zu komplex für meinen Kopf! :D
Es gibt auch die Möglichkeit DOIF im Perl-Modus zu betreiben, dann entfallen die meisten steuernden Attribute und man kann das Verhalten selbst gestalten.
Zitat von: Ellert am 16 September 2018, 10:16:08
Es gibt auch die Möglichkeit DOIF im Perl-Modus zu betreiben, dann entfallen die meisten steuernden Attribute und man kann das Verhalten selbst gestalten.
siehe: https://forum.fhem.de/index.php/topic,84969.msg836657.html#msg836657
Es steht jetzt in der Doku auch:
ZitatDer Perl-Modus kommt weitgehend ohne Attribute aus, er ist aufgrund seiner Flexibilität, der Möglichkeit strukturiert zu programmieren und seiner hohen Performance insb. bei umfangreichen Automatisierungsaufgaben dem FHEM-Modus vorzuziehen.