Hauptmenü

DOIF mag mein set $SELF nicht?

Begonnen von holle75, 08 Dezember 2019, 12:56:02

Vorheriges Thema - Nächstes Thema

holle75

Kann mir jemand sagen, warum in diesem Falle unten das set $SELF cmd_4 ignoriert wird? state bleibt immer im jeweiligen Fall.

([([Astro:SunRise]+[00:30])])
(set Container_FEEDER_Chicken on-for-timer 100, set $SELF cmd_4)
DOELSEIF ([12:00] and [Container_ROLLADEN_Chicken_UpDown_03] eq "level_0")
(set Container_FEEDER_Chicken on-for-timer 100, set $SELF cmd_4)
DOELSEIF ([([Astro:CustomTwilightEvening]-[00:40])])
(set Container_FEEDER_Chicken on-for-timer 100, set $SELF cmd_4)
DOELSE ()


Danke!

Frank_Huber

Dann poste doch bitte mal ein list anstatt der nackten DEF.

Gesendet von meinem S60 mit Tapatalk


holle75

das list:

Internals:
   DEF        ([([Astro:SunRise]+[00:30])])
(set Container_FEEDER_Chicken on-for-timer 100, set $SELF cmd_4)
DOELSEIF ([12:00] and [Container_ROLLADEN_Chicken_UpDown_03] eq "level_0")
(set Container_FEEDER_Chicken on-for-timer 100, set $SELF cmd_4)
DOELSEIF ([([Astro:CustomTwilightEvening]-[00:40])])
(set Container_FEEDER_Chicken on-for-timer 100, set $SELF cmd_4)
DOELSE ()
   FUUID      5d598e73-f33f-6bb4-84fb-ebfcf7068c09df73
   MODEL      FHEM
   NAME       ChickenCoopFeederDOIF
   NOTIFYDEV  Astro,global,Container_ROLLADEN_Chicken_UpDown_03
   NR         868
   NTFY_ORDER 50-ChickenCoopFeederDOIF
   STATE      cmd_2
   TYPE       DOIF
   VERSION    20500 2019-11-12 17:54:48
   READINGS:
     2019-12-08 12:00:00   cmd             2
     2019-12-08 12:00:00   cmd_event       timer_2
     2019-12-08 12:00:00   cmd_nr          2
     2019-12-08 09:16:44   mode            enabled
     2019-12-08 12:00:00   state           cmd_2
     2019-12-08 09:16:44   timer_01_c01    09.12.2019 07:59:00
     2019-12-08 12:00:00   timer_02_c02    09.12.2019 12:00:00
     2019-12-08 09:16:44   timer_03_c03    08.12.2019 16:12:00
   Regex:
     accu:
     cond:
       Container_ROLLADEN_Chicken_UpDown_03:
         1:
           &STATE     ^Container_ROLLADEN_Chicken_UpDown_03$
     itimer:
       Astro:
         itimer:
           CustomTwilightEvening ^Astro$:^CustomTwilightEvening:
           SunRise    ^Astro$:^SunRise:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
     1          ::DOIF_time_once($hash,1,$wday) and ::InternalDoIf($hash,'Container_ROLLADEN_Chicken_UpDown_03','STATE') eq "level_0"
     2          ::DOIF_time_once($hash,2,$wday)
   days:
   do:
     0:
       0          set Container_FEEDER_Chicken on-for-timer 100, set ChickenCoopFeederDOIF cmd_4
     1:
       0          set Container_FEEDER_Chicken on-for-timer 100, set ChickenCoopFeederDOIF cmd_4
     2:
       0          set Container_FEEDER_Chicken on-for-timer 100, set ChickenCoopFeederDOIF cmd_4
     3:
       0         
   helper:
     DEVFILTER  ^global$|^Astro$|^Container_ROLLADEN_Chicken_UpDown_03$
     NOTIFYDEV  global|Astro|Container_ROLLADEN_Chicken_UpDown_03
     event      timer_2
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   
     timerevent timer_2
     triggerDev
     timerevents:
       timer_2
     timereventsState:
       timer_2
     triggerEvents:
       timer_2
     triggerEventsState:
       timer_2
   internals:
     all         Container_ROLLADEN_Chicken_UpDown_03:STATE
   interval:
   intervalfunc:
   localtime:
     0          1575874740
     1          1575889200
     2          1575817920
   realtime:
     0          07:59:00
     1          12:00:00
     2          16:12:00
   time:
     0          ([Astro:SunRise]+[00:30])
     1          12:00:00
     2          ([Astro:CustomTwilightEvening]-[00:40])
   timeCond:
     0          0
     1          1
     2          2
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1
     2           2
   triggertime:
     1575817920:
       localtime  1575817920
       hash:
     1575874740:
       localtime  1575874740
       hash:
     1575889200:
       localtime  1575889200
       hash:
   uiState:
   uiTable:
Attributes:
   devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1:general_an@green:disable cmd_2:general_an@blue:disable cmd_3:general_an@green:disable cmd_4:general_an@yellow:disable
   group      System_2
   room       System,ChickenCoop
   sortby     002

amenomade

Und was soll set $SELF cmd_4 genau bewirken?  In cmd_4 gibt est nichts zu tun.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Vielleicht ein Denkfehler?

Bedingung1 wird wahr => Befehle 1 werden verarbeitet, davon das "set... cmd_4": die Befehle vom 4. Zweig werden ausgeführt.
Erst dann wird der Zustand des DOIFs gesetzt... und zwar auf cmd_1
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

holle75

Mmh, dann eher ein Verständnisfehler. Ich ging davon aus, dass ich ein DOIF mit "set $SELF cmd_x" auch in den "state cmd_X" zwingen kann. Inkl. dann Ausführung von den Befehlen von "cmd_X".

Wie mache ich das ansonsten?

Um die Idee dahinter zu erklären: ich brauche cmd_4 für die farbliche Gestaltung als "gerade nicht aktiv" (im Gegensatz zu 1,2,3).

holle75

#6
zwar ein sehr anderer Weg, aber das gewünschte Ergebnis erzielt (und irgendwie einfach wenn man drauf kommt):

([([Astro:SunRise]+[00:30])])
(set Container_FEEDER_Chicken on-for-timer 100)
DOELSEIF ([12:00] and [Container_ROLLADEN_Chicken_UpDown_03] eq "level_0")
(set Container_FEEDER_Chicken on-for-timer 100)
DOELSEIF ([([Astro:CustomTwilightEvening]-[00:40])])
(set Container_FEEDER_Chicken on-for-timer 100)
DOELSEIF ([Container_FEEDER_Chicken] eq "off") ()


trotzdem würde mich interessieren, wie man einen state erzwingen kann ... falls es eine Möglichkeit gibt.

Frank_Huber

#7
State erzwingen:
Ein doif reading in den einzelnen Zweigen setzen.
StateFormat nutzen.

Oder evtl mit cmdState.

Gesendet von meinem S60 mit Tapatalk

Ellert

Zitat von: holle75 am 08 Dezember 2019, 14:49:18
Mmh, dann eher ein Verständnisfehler. Ich ging davon aus, dass ich ein DOIF mit "set $SELF cmd_x" auch in den "state cmd_X" zwingen kann. Inkl. dann Ausführung von den Befehlen von "cmd_X".

Wie mache ich das ansonsten?

Um die Idee dahinter zu erklären: ich brauche cmd_4 für die farbliche Gestaltung als "gerade nicht aktiv" (im Gegensatz zu 1,2,3).
Der set-Befehl auf $SELF muss von der Ausführung des DOIF entkoppelt werden, z.B. mit sleep oder einem temporären at.

sleep 1;set $SELF cmd_x

holle75


Per

Plan C:
([([Astro:SunRise]+[00:30])])
(set Container_FEEDER_Chicken on-for-timer 100) ()
DOELSEIF ([12:00] and [Container_ROLLADEN_Chicken_UpDown_03] eq "level_0")
(set Container_FEEDER_Chicken on-for-timer 100) ()
DOELSEIF ([([Astro:CustomTwilightEvening]-[00:40])])
(set Container_FEEDER_Chicken on-for-timer 100) ()
attr cmdState xxx State1,off|State2,off|State3,off