[gelöst] DOIF wird nicht ausgeführt.

Begonnen von bommel-bs, 27 März 2023, 12:41:45

Vorheriges Thema - Nächstes Thema

bommel-bs

HAllo,

ich habe folgendes DOIF:
define di_SchlafZimmer_Rollo DOIF ([{sunset("NAUTIC","0","16:00","22:30")}])\
    (set SchlafZimmer_Rolladen_Links pct 0;;\
     sleep 5;;\
     set SchlafZimmer_Rolladen_Tuer pct 0;;\
     sleep 5;;\
     set SchlafZimmer_Rolladen_Rechts pct 0;;)
attr di_SchlafZimmer_Rollo room 99_System
#   CFGFN     
#   DEF        ([{sunset("NAUTIC","0","16:00","22:30")}])
#    (set SchlafZimmer_Rolladen_Links pct 0;
#     sleep 5;
#     set SchlafZimmer_Rolladen_Tuer pct 0;
#     sleep 5;
#     set SchlafZimmer_Rolladen_Rechts pct 0;)
#   FUUID      6419ead9-f33f-78f8-f787-cc3b1a2dcfc0b6f3
#   MODEL      FHEM
#   NAME       di_SchlafZimmer_Rollo
#   NOTIFYDEV  global
#   NR         5128
#   NTFY_ORDER 50-di_SchlafZimmer_Rollo
#   STATE      cmd_1
#   TYPE       DOIF
#   VERSION    27262 2023-02-21 19:36:39
#   eventCount 8
#   READINGS:
#     2023-03-21 19:52:23   cmd             1
#     2023-03-21 19:52:23   cmd_event       timer_1
#     2023-03-21 19:52:23   cmd_nr          1
#     2023-03-25 21:10:46   mode            enabled
#     2023-03-21 19:52:23   state           cmd_1
#     2023-03-26 21:01:50   timer_01_c01    27.03.2023 21:03:45
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#   attr:
#     cmdState:
#     waitdel:
#   condition:
#     0          ::DOIF_time_once($hash,0,$wday)
#   days:
#   do:
#     0:
#       0          set SchlafZimmer_Rolladen_Links pct 0;      sleep 5;      set SchlafZimmer_Rolladen_Tuer pct 0;      sleep 5;      set SchlafZimmer_Rolladen_Rechts pct 0;
#     1:
#   helper:
#     NOTIFYDEV  global
#     event      timer_1
#     globalinit 1
#     last_timer 1
#     sleeptimer -1
#     timerdev  
#     timerevent timer_1
#     triggerDev
#     timerevents:
#       timer_1
#     timereventsState:
#       timer_1
#     triggerEvents:
#       timer_1
#     triggerEventsState:
#       timer_1
#   hmccu:
#   interval:
#   intervalfunc:
#   localtime:
#     0          1679943825
#   realtime:
#     0          21:03:45
#   time:
#     0          {sunset("NAUTIC","0","16:00","22:30")}
#   timeCond:
#     0          0
#   timer:
#     0          0
#   timers:
#     0           0
#   triggertime:
#     1679943825:
#       localtime  1679943825
#       hash:
#   uiState:
#   uiTable:
#
setstate di_SchlafZimmer_Rollo cmd_1
setstate di_SchlafZimmer_Rollo 2023-03-21 19:52:23 cmd 1
setstate di_SchlafZimmer_Rollo 2023-03-21 19:52:23 cmd_event timer_1
setstate di_SchlafZimmer_Rollo 2023-03-21 19:52:23 cmd_nr 1
setstate di_SchlafZimmer_Rollo 2023-03-25 21:10:46 mode enabled
setstate di_SchlafZimmer_Rollo 2023-03-21 19:52:23 state cmd_1
setstate di_SchlafZimmer_Rollo 2023-03-26 21:01:50 timer_01_c01 27.03.2023 21:03:45

Leider wird bei dem DOIF nur die Zeit für cmd 1 jeden Tag neu gesetzt aber nicht ausgeführt.

Wo ist mein Gedankenfehler?

Viele Grüße
Stefan

Damian

Du musst das do always-Attribut setzen, damit es jeden Tag ausgeführt wird. Statt sleep solltest du das Attribut wait verwenden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bommel-bs

Hallo Damian,

danke. Mal sehen, ob die Rolladen heute Abend schließen. Wie oft wird das DOIF ohne always ausgeführt?

Viele Grüße
Stefan

Damian

Zitat von: bommel-bs am 27 März 2023, 14:35:56Hallo Damian,

danke. Mal sehen, ob die Rolladen heute Abend schließen. Wie oft wird das DOIF ohne always ausgeführt?

Viele Grüße
Stefan

Immer (always) wenn der Timer zuschlägt. Umgekehrt gesagt, wird ohne do always nur einmal ausgeführt, bis ein anderer Zweig ausgeführt wurde - also wenn sich der Zustand des Moduls geändert hat. So etwas steht in der Einleitung zum DOIF: https://fhem.de/commandref_DE.html#DOIF
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bommel-bs

Hallo Damian,
Danke

Zitat von: Damian am 27 März 2023, 14:04:16Du musst das do always-Attribut setzen, damit es jeden Tag ausgeführt wird. Statt sleep solltest du das Attribut wait verwenden.

das war es.

Viele Grüße
Stefan