Hauptmenü

DOIF und Sonos

Begonnen von mike.d, 08 Dezember 2018, 11:06:44

Vorheriges Thema - Nächstes Thema

mike.d

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

Wuppi68

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
FHEM unter Proxmox als VM

Ellert

([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.

mike.d

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!?

Damian

Teste mal mit dem Attribut im DOIF:

checkReadingEvent 0

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

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.

mike.d

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!

Ellert

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..

mike.d

aber ist denn das das selbe Event, dass erzeigt wird, wenn der state auf disabled geht!?

Ellert

#9
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.

mike.d

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!