Sonos Modul state Event

Begonnen von Tommi ratlos, 27 Juli 2019, 07:50:49

Vorheriges Thema - Nächstes Thema

Tommi ratlos

Hallo,

ist es richtig das bei der Statusänderung des Sonos Moduls kein Event ausgelöst wird, auf das ein Notify oder DOIF reagieren kann?

Hin und wieder kommt es vor das die Verbindung verloren geht und ein Notify, DOIF oder Watchdog auf "not opened" reagieren könnte. Ich habe gesehen das hier einen Workaround mit einem AT gibt, auf die Statusänderung zu reagieren wäre eleganter.

Noch besser wenn das Modul von selber einen Reconnect machen würde, mit einem Attribut oder bei der Definition könnte man das Verhalten steuern, z.B. wie oft ein Reconnect versucht werden soll (0 ohne Limit bis nn).

Gruß
Thomas
Pi 3 CUNX868 mit 433 Pigator.

Tommi ratlos

Hallo,

habe mir erst mal mit einer Funktion geholfen. Ist sicher nicht Perfekt.
AT
Internals:
   CFGFN     
   COMMAND    {
SonosWatch();;
}
   DEF        +*00:00:45 {
SonosWatch();;
}


sub SonosWatch()
{
my $DISABLED = AttrVal('Sonos', "disable", -1);
my $SONSTATE = InternalVal('Sonos','STATE', 0);
my $OFFLINE  = ReadingsVal('Sonos','OFFLINE', 0);
my $OFFCNT   = $OFFLINE + 1;
my $RETRYS   = 3;
#Log3('SonosWatch', 3, "SonosWatch OFFLINE=".$OFFLINE." DISABLE=".$DISABLED." STATE=".$SONSTATE."");

#wenn offline und noch nicht disabled
if ( ($DISABLED == 0) and ($OFFLINE == 0) and ($SONSTATE ne "opened") )
{
fhem("attr Sonos disable 1");
fhem("setreading Sonos OFFLINE 1");
Log3('SonosWatch', 3, "SonosWatch OFFLINE!");
return;
}

#wenn offline und disabled wieder enablen
if ( ($DISABLED == 1) and ($OFFLINE ==1) and ($SONSTATE ne "opened") )
{
fhem("attr Sonos disable 0");
return;
}

#wenn wieder online
if ( ($DISABLED == 0) and ($OFFLINE > 1) and ($SONSTATE eq "opened") )
{
fhem("setreading Sonos OFFLINE 0");
Log3('SonosWatch', 3, "SonosWatch ONLINE.");
return;
}

#wenn etwas schief geht beim n versuch nochmal
if ( ($DISABLED == 0) and ($OFFLINE >= 1) and ($SONSTATE ne "opened") )
{
fhem("setreading Sonos OFFLINE ".$OFFCNT."");
if ($OFFLINE > $RETRYS)
{
fhem("attr Sonos disable 1");
}
return;
}

#wenn offline und disabled wieder enablen
if ( ($DISABLED == 1) and ($OFFLINE > $RETRYS) and ($SONSTATE ne "opened") )
{
fhem("attr Sonos disable 0");
fhem("setreading Sonos OFFLINE 1");
return;
}

}
Pi 3 CUNX868 mit 433 Pigator.