guten Morgen!
da mein Sonos-Modul wiederholt aussteigt und damit die Player nicht mehr über fhem zu steuern sind habe ich mir ein DOIF als "watchdog" gebaut. Nur leider löst dieser nicht zuverlässig aus. Kann mir jemand helfen!?
Internals:
DEF ([Sonos] eq "disabled")
(attr Sonos disable 1)
(deleteattr Sonos disable)
(set Sonos RescanNetwork)
(set Sonos RescanNetwork)
DOELSE
MODEL FHEM
NAME di_sonos_restart
NR 810
NTFY_ORDER 50-di_sonos_restart
STATE cmd_2
TYPE DOIF
READINGS:
2018-12-08 11:03:40 Device Sonos
2018-12-08 11:03:40 cmd 2
2018-12-08 11:03:40 cmd_event Sonos
2018-12-08 11:03:40 cmd_nr 2
2018-12-08 11:03:40 e_Sonos_STATE opened
2018-12-08 10:35:45 mode enabled
2018-12-08 11:03:40 state cmd_2
2018-12-08 10:37:14 wait_timer no timer
Regex:
attr:
cmdState:
wait:
0:
0
20
60
60
waitdel:
condition:
0 ::InternalDoIf($hash,'Sonos','STATE') eq "disabled"
devices:
0 Sonos
all Sonos
do:
0:
0 attr Sonos disable 1
1 deleteattr Sonos disable
2 set Sonos RescanNetwork
3 set Sonos RescanNetwork
1:
0
helper:
event LastProcessAnswer: 1544263420.2731
globalinit 1
last_timer 0
sleepdevice di_sonos_restart
sleepsubtimer 3
sleeptimer -1
timerdev Sonos
timerevent LastProcessAnswer: 1544263420.2731
triggerDev Sonos
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: Sonos
state: cmd_2
timerevents:
LastProcessAnswer: 1544263420.2731
timereventsState:
LastProcessAnswer: 1544263420.2731
triggerEvents:
LastProcessAnswer: 1544263420.2731
triggerEventsState:
LastProcessAnswer: 1544263420.2731
internals:
0 Sonos:STATE
all Sonos:STATE
itimer:
readings:
trigger:
uiState:
uiTable:
Attributes:
do always
wait 0,20,60,60
Moin,
ich würde der Ursache und nicht den Symptomen auf den Grund gehen.
Im Sonos Thread stehen so extrem viele verschiedene Dinge über mögliche Ursache auch mit Lösungen drinnen. Und Reinerlein ist super hilfsbereit
([Sonos] eq "disabled")
Sonos muss ein Event liefern, wenn STATE disabled wird oder bereits ist, sonst löst DOIF nicht aus, alternativ könntest Du auf das globale ATTR Event trigger falls
disable gesetzt wird, wenn Sonos aussteigt. Eine dritte Möglichkeit wäre mit einem Intervalltimer zu pollen.
Zitat von: Wuppi68 am 08 Dezember 2018, 11:13:51
ich würde der Ursache und nicht den Symptomen auf den Grund gehen.
damit habe ich schon so viel Zeit zugebracht und war leider nicht wirklich erfolgreich - jetzt brauch ich eine pragmatische Lösung! :- )
Zitat von: Ellert am 08 Dezember 2018, 12:24:50
alternativ könntest Du auf das globale ATTR Event trigger falls disable gesetzt wird
das klingt doch sinnvoll, aber wie frage ich das ab!?
Teste mal mit dem Attribut im DOIF:
checkReadingEvent 0
Zitat von: mike.d am 08 Dezember 2018, 12:29:38
damit habe ich schon so viel Zeit zugebracht und war leider nicht wirklich erfolgreich - jetzt brauch ich eine pragmatische Lösung! :- )
das klingt doch sinnvoll, aber wie frage ich das ab!?
Wie man einen Ereignistrigger formuliert ist in der Befehlsreferenz beschrieben https://commandref.fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Du könntest den Ereignistrigger aus dem Eventmonitor heraus erzeugen https://wiki.fhem.de/wiki/Event_monitor#Ger.C3.A4te_anlegen.2F.C3.A4ndern
Wenn Du DOIFtools verwendest, kannst Du den Eventmonitor in DOIF anzeigen lassen und in dem entsprechenden DOIF dann den Ereignistrigger in die bestehende Definition einfügen https://wiki.fhem.de/wiki/DOIFtools#Zugriff_auf_den_Event-Monitor_in_der_Detailansicht_des_DOIF
Das Ereignis kannst Du erzeugen indem Du das Attribut disable setzt.
Vielen Dank für den input - Ereigisstrigger kannte ich dann doch schon - nur nicht unter dem Namen! :D
Leider wird für das Gerät "Sonos" kein event erzeugt, wenn es auf disabled geht.
Ich probiere weiter!
Zitat von: mike.d am 09 Dezember 2018, 12:38:31
Vielen Dank für den input - Ereigisstrigger kannte ich dann doch schon - nur nicht unter dem Namen! :D
Leider wird für das Gerät "Sonos" kein event erzeugt, wenn es auf disabled geht.
Ich probiere weiter!
Es sollte aber ein globales Ereignis erzeugt werden, wenn das Attribut disabled auf 1 gesetzt wird, etwas in der Art
2018-12-09 13:06:46.765 Global global ATTR <Name des Gerätes> disable 1
Wenn nicht könntest Du es beim Modulentwickler ansprechen..
aber ist denn das das selbe Event, dass erzeigt wird, wenn der state auf disabled geht!?
Zitat von: mike.d am 09 Dezember 2018, 13:11:43
aber ist denn das das selbe Event, dass erzeigt wird, wenn der state auf disabled geht!?
Ich habe keine Ahnung von Sonos, das müsstest Du selbst wissen, denn Du willst das Attribut löschen, wenn STATE auf disabled geht
(deleteattr Sonos disable)
Warum, wenn nicht deshalb, weil beim Setzen des Attributes disable auch STATE auf disabled gesetzt wird.
Edit: Ich sehe gerade, Du setzt das Attribut selbst, dann funktioniert es nätürlich nicht.
Dann hilft es vielleicht zur Überwachung eine PRESENCE-Instanz auf das Sonosgerät zusetzen.
ich hab eine structure die den Status der player angibt - über diese kann ich es jetzt indirekt abgreifen.
Vielen Dank für die Unterstützung!