Hauptmenü

DOIF bricht nicht ab...

Begonnen von mike.d, 15 September 2018, 09:44:43

Vorheriges Thema - Nächstes Thema

mike.d

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!?

Ellert


mike.d

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

Ellert

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.

Damian

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