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!
Dann poste doch bitte mal ein list anstatt der nackten DEF.
Gesendet von meinem S60 mit Tapatalk
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
Und was soll set $SELF cmd_4 genau bewirken? In cmd_4 gibt est nichts zu tun.
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
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).
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.
State erzwingen:
Ein doif reading in den einzelnen Zweigen setzen.
StateFormat nutzen.
Oder evtl mit cmdState.
Gesendet von meinem S60 mit Tapatalk
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
Danke euch
Plan C (https://fhem.de/commandref_DE.html#cmdState):
([([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