Hallo
Da ich aktuell aus einem anderen Grund in meinem Fhem auf fehlersuche bin, bin ich hier rüber gestolpert.
Ich nutze freezemon und dort ist mir aufgefallen das eines meiner DOIFs sehr viele freezes verursacht.
2023-07-30 [Log]: s:12:07:37 e:12:07:39 f:2.802 d:tmr-DOIF_SleepTrigger(di.hyperion_schalter)
Device Count Time
di.hyperion_schalter 428 1185.151
Natürlich sehe ich das nicht als Fhleverhalten sondern als Fehler meinerseits wobei das DOIF ansonsten genau das tut was es soll.
Hier ist die definition des DOIFs:
defmod di.hyperion_schalter DOIF (([EG_WZ_AV_Receiver:state] eq "on") and ([?WOL_Shutdown_hyperion:state] eq "off"))\
({Log 3, "AV_Receiver ist an: Hyperion gestartet"}, set WOL_Shutdown_hyperion on)\
DOELSEIF (([EG_WZ_AV_Receiver:state] eq "off") and ([?WOL_Shutdown_hyperion:state] eq "on"))\
({Log 3, "AV_Receiver ist seit 5 Minuten aus: Hyperion ausgeschaltet"}, set WOL_Shutdown_hyperion off)
attr di.hyperion_schalter DbLogExclude .*
attr di.hyperion_schalter cmdpause 180:180
attr di.hyperion_schalter room Erdgeschoss->Wohnzimmer
attr di.hyperion_schalter wait 0:300
setstate di.hyperion_schalter cmd_1
setstate di.hyperion_schalter 2023-08-01 16:35:26 Device EG_WZ_AV_Receiver
setstate di.hyperion_schalter 2023-08-01 15:50:13 cmd 1
setstate di.hyperion_schalter 2023-08-01 15:50:13 cmd_event EG_WZ_AV_Receiver
setstate di.hyperion_schalter 2023-08-01 15:50:13 cmd_nr 1
setstate di.hyperion_schalter 2023-08-01 16:35:26 e_EG_WZ_AV_Receiver_state on
setstate di.hyperion_schalter 2022-09-22 12:06:42 e_WOL_Shutdown_hyperion_STATE off
setstate di.hyperion_schalter 2023-06-06 08:52:23 e_WOL_Shutdown_hyperion_state off
setstate di.hyperion_schalter 2023-06-06 08:53:31 mode enabled
setstate di.hyperion_schalter 2023-08-01 15:50:13 state cmd_1
setstate di.hyperion_schalter 2023-08-01 12:31:01 wait_timer no timer
und ein list:
Internals:
CFGFN /var/fhem/FHEM/EG_Wohnzimmer.cfg
DEF (([EG_WZ_AV_Receiver:state] eq "on") and ([?WOL_Shutdown_hyperion:state] eq "off"))
({Log 3, "AV_Receiver ist an: Hyperion gestartet"}, set WOL_Shutdown_hyperion on)
DOELSEIF (([EG_WZ_AV_Receiver:state] eq "off") and ([?WOL_Shutdown_hyperion:state] eq "on"))
({Log 3, "AV_Receiver ist seit 5 Minuten aus: Hyperion ausgeschaltet"}, set WOL_Shutdown_hyperion off)
FUUID 632c0cf9-f33f-a5a6-d914-b4fcb0219f0cb9a8
MODEL FHEM
NAME di.hyperion_schalter
NOTIFYDEV EG_WZ_AV_Receiver,global
NR 704
NTFY_ORDER 50-di.hyperion_schalter
STATE cmd_1
TYPE DOIF
VERSION 27740 2023-07-10 09:31:11
eventCount 125
READINGS:
2023-08-01 16:33:46 Device EG_WZ_AV_Receiver
2023-08-01 15:50:13 cmd 1
2023-08-01 15:50:13 cmd_event EG_WZ_AV_Receiver
2023-08-01 15:50:13 cmd_nr 1
2023-08-01 16:33:46 e_EG_WZ_AV_Receiver_state on
2022-09-22 12:06:42 e_WOL_Shutdown_hyperion_STATE off
2023-06-06 08:52:23 e_WOL_Shutdown_hyperion_state off
2023-06-06 08:53:31 mode enabled
2023-08-01 15:50:13 state cmd_1
2023-08-01 12:31:01 wait_timer no timer
Regex:
accu:
bar:
barAvg:
collect:
cond:
EG_WZ_AV_Receiver:
0:
state ^EG_WZ_AV_Receiver$:^state:
1:
state ^EG_WZ_AV_Receiver$:^state:
attr:
cmdState:
cmdpause:
180
180
wait:
0:
0
1:
300
waitdel:
condition:
0 (::ReadingValDoIf($hash,'EG_WZ_AV_Receiver','state') eq "on") and (::ReadingValDoIf($hash,'WOL_Shutdown_hyperion','state') eq "off")
1 (::ReadingValDoIf($hash,'EG_WZ_AV_Receiver','state') eq "off") and (::ReadingValDoIf($hash,'WOL_Shutdown_hyperion','state') eq "on")
devices:
do:
0:
0 {Log 3, "AV_Receiver ist an: Hyperion gestartet"}, set WOL_Shutdown_hyperion on
1:
0 {Log 3, "AV_Receiver ist seit 5 Minuten aus: Hyperion ausgeschaltet"}, set WOL_Shutdown_hyperion off
2:
helper:
NOTIFYDEV EG_WZ_AV_Receiver,global
event power: on,on,volumeStraight: -45,volume: 36,mute: off,input: hdmi1,inputName: FireTV,straight: on,enhancer: on,dsp: 5chstereo,3dCinemaDsp: auto,adaptiveDrc: auto,sleep: off,direct: off
globalinit 1
last_timer 0
sleepdevice EG_WZ_AV_Receiver
sleepsubtimer -1
sleeptimer -1
timerdev EG_WZ_AV_Receiver
timerevent power: on,on,volumeStraight: -45,volume: 36,mute: off,input: hdmi1,inputName: FireTV,straight: on,enhancer: on,dsp: 5chstereo,3dCinemaDsp: auto,adaptiveDrc: auto,sleep: off,direct: off
triggerDev EG_WZ_AV_Receiver
bm:
DOIF_Get:
cnt 2
dmx -1000
dtot 0
dtotcnt 0
mTS 01.08. 16:24:49
max 6.81877136230469e-05
tot 7.31945037841797e-05
mAr:
HASH(0x558c3918f1c0)
di.hyperion_schalter
?
DOIF_Notify:
cnt 87740
dmx -1000
dtot 0
dtotcnt 0
mTS 31.07. 14:40:54
max 0.103195905685425
tot 51.3594393730164
mAr:
HASH(0x558c3918f1c0)
HASH(0x558c38f9bcb0)
DOIF_Set:
cnt 331
dmx -1000
dtot 0
dtotcnt 0
mTS 31.07. 11:36:36
max 0.000372171401977539
tot 0.0158450603485107
mAr:
HASH(0x558c3918f1c0)
di.hyperion_schalter
?
timerevents:
power: on
on
volumeStraight: -45
volume: 36
mute: off
input: hdmi1
inputName: FireTV
straight: on
enhancer: on
dsp: 5chstereo
3dCinemaDsp: auto
adaptiveDrc: auto
sleep: off
direct: off
timereventsState:
power: on
state: on
volumeStraight: -45
volume: 36
mute: off
input: hdmi1
inputName: FireTV
straight: on
enhancer: on
dsp: 5chstereo
3dCinemaDsp: auto
adaptiveDrc: auto
sleep: off
direct: off
triggerEvents:
power: on
on
volumeStraight: -45
volume: 36
mute: off
input: hdmi1
inputName: FireTV
straight: on
enhancer: on
dsp: 5chstereo
3dCinemaDsp: auto
adaptiveDrc: auto
sleep: off
direct: off
triggerEventsState:
power: on
state: on
volumeStraight: -45
volume: 36
mute: off
input: hdmi1
inputName: FireTV
straight: on
enhancer: on
dsp: 5chstereo
3dCinemaDsp: auto
adaptiveDrc: auto
sleep: off
direct: off
internals:
perlblock:
readings:
all EG_WZ_AV_Receiver:state
trigger:
uiState:
uiTable:
Attributes:
DbLogExclude .*
cmdpause 180:180
room Erdgeschoss->Wohnzimmer
wait 0:300
Ich würde mich über Optimierungsvorschläge sehr freuen!
Gruß und Danke
Daniel
Dann nimm erstmal den set WOL_Shutdown_hyperion-Befehl jeweils raus und schaue noch mal. Wenn es besser aussieht, dann weißt du schon mal woher es kommt, sonst kannst du weiter abspecken.
Verstehe ich das dann richtig, dass das DOIF erst beendet ist wenn alle ausgelösten Befehle beendet sind? Und so lange wird Fhem blockiert?
So ein WOL dauert ja nun mal. Das Gegenteil dauert ja sogar noch länger sprich per ssh ein shutdown ausgelöst wird.
Zitat von: WhyTea am 02 August 2023, 11:51:47Verstehe ich das dann richtig, dass das DOIF erst beendet ist wenn alle ausgelösten Befehle beendet sind? Und so lange wird Fhem blockiert?
So ein WOL dauert ja nun mal. Das Gegenteil dauert ja sogar noch länger sprich per ssh ein shutdown ausgelöst wird.
So ist das. FHEM ist single-threaded. Wenn WOL keinen Fork macht, dann muss das Modul warten.
Vielen Dank! Damit erklärt sich alles und ich muss damit leben. ;)