FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tommi ratlos am 26 Juli 2019, 10:48:47

Titel: Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 10:48:47
Hallo zusammen,

versuche gerade ein Notify zu erstellen das auslöst wenn Sonos STATE nicht opened ist.
Internals:
   DEF        127.0.0.1:4711 30 8 5
   DELAYTIME  5
   DeviceName 127.0.0.1:4711
   FD         24
   FUUID      4cecbb34-f33a-c08c-1994-064ff9b01da7d401
   INTERVAL   30
   NAME       Sonos
   NOTIFYDEV  global
   NR         378
   NTFY_ORDER 50-Sonos
   PARTIAL   
   STATE      opened
   TYPE       SONOS
   WAITTIME   8
   READINGS:

Notify:
Sonos:.* {
{Log 3, "NTFY_Sonos_Watch EVENT:$EVENT"};;
}


Allerdings gibs es kein EVENT opened es scheint nur beim ändern von "attr disable 0 nach 1"  DISCONNECTED CONNECTED zu geben.

Sonos:STATE:.* {
{Log 3, "NTFY_Sonos_Watch EVENT:$EVENT"};;
}

bringt keinen Logeintrag.

Hintergrund ist das Sonos manchmal die Verbindung verliert und das Notify automatisch disabled 0 und wieder 1 setzen soll.

Wo habe ich meinen Gehirnknoten?

Gruß
Thomas
Titel: Antw:Notify Sonos STATE
Beitrag von: det. am 26 Juli 2019, 11:17:01
STATE groß geschrieben ist ein Internal und nicht für notify gedacht.  Nimm mal state, das ist ein Reading auf das Du triggern kannst.
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 11:41:27
ZitatSonos:state:.* {
   {Log 3, "NTFY_Sonos_Watch EVENT:$EVENT"};;
}
auch nix selbst bei
ZitatSonos:.* {
   {Log 3, "NTFY_Sonos_Watch EVENT:$EVENT"};;
}
taucht kein "opened" auf.

Titel: Antw:Notify Sonos STATE
Beitrag von: Beta-User am 26 Juli 2019, 11:52:24
Wenn es keine Events gibt, gibt es keine Trigger...

Ergänzend: "state" ist sowieso besonders (da gibt es "ein Attribut" für, schau mal in die commandref zu notify). Aber das ist hier nicht der Grund, sondern die Abwesenheit von Events. Kurz: Dieses Problem kann man (vorbehaltlich eventueller Einstellmöglichkeiten dazu aus dem SONOS-Modul) m.E. durch einen Eventhandler auf das "Sonos" nicht direkt lösen, sondern muß ggf. auf Presence-Mechanismen uä. zurückgreifen.
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 11:59:31
Danke dann muss ich das wohl anders angehen.
Das Reading LastProcessAnswer "LastProcessAnswer: Enthält den letzten Zeitpunkt einer Datenübertragung vom SubProzess zum FHEM-Modul." könnte mich weiterbringen.
LastProcessAnswer: 1564134714
Muss noch mal in mich gehen.
Titel: Antw:Notify Sonos STATE
Beitrag von: TomLee am 26 Juli 2019, 12:54:04
Hallo,

das DOIF (https://forum.fhem.de/index.php/topic,101405.msg948952.html#msg948952), das nicht wenige nutzen, nimmt doch auch state ?, da hat sich noch keiner über fehlende Events beschwert.

Blöde Frage : Hast du denn den Player mal kurz vom Netz genommen oder einen restart gemacht oder oder .... das das notify überhaupt hätte triggern können ?

Ich komm da nicht ganz mit würde das aber gerne verstehen  ;D

Gruß

Thomas
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 12:58:49
Hallo,

der Player macht das auch, nur das Sonos Modul selbst anscheinend nicht.
Titel: Antw:Notify Sonos STATE
Beitrag von: Beta-User am 26 Juli 2019, 13:01:21
Zu diesem speziellen Modul kann ich nichts sagen, das kann und will ich nicht verstehen, für mich sieht das dortige DOIF so aus, als würde da der STATE nichttriggernd abgefragt (? vorneweg) und nur zu einer bestimmten Uhrzeit die Verbindung erneuert. (Warum nimmt man da kein at?...)

Jedenfalls bei notify und ein paar anderen Event-Handlern ist es erforderlich, dass man ihm mitteilen muß, wenn man Events aus dem Reading "state" haben will.

Und da es andere Readings zu geben scheint, wäre schon interessant, wieso das Log-notify nicht getriggert wird. Die sind jedenfalls lt. Code triggern gesetzt.
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 13:07:18
Hallo,

ist wohl ein Missverständnis.
Sonos:.* {
   {Log 3, "NTFY_Sonos_Watch EVENT:$EVENT"};;
}

triggert Events, anscheinend wird State aber nicht getriggert.

Gruß
Thomas
Titel: Antw:Notify Sonos STATE
Beitrag von: Beta-User am 26 Juli 2019, 13:09:10
Zeig mal ein list von dem Sonos-Ding...

Und nochmal: "state" ist bei notify besonders. Du hast in die cref geschaut und weißt zwischenzeitlich, welches Attribut ich meine...?
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 13:12:28
Hier das ListInternals:
   DEF        127.0.0.1:4711 30 8 5
   DELAYTIME  5
   DeviceName 127.0.0.1:4711
   FD         18
   FUUID      5cecbb54-f33f-c08c-1924-088bb9f01da7d401
   INTERVAL   30
   NAME       Sonos
   NOTIFYDEV  global
   NR         378
   NTFY_ORDER 50-Sonos
   PARTIAL   
   STATE      opened
   TYPE       SONOS
   WAITTIME   8
   READINGS:
     2019-07-23 22:51:45   AllPlayer       ['Sonos_Bad','Sonos_Kueche','Sonos_Schlafzimmer','Sonos_Schlafzimmer_RF','Sonos_Wohnzimmer']
     2019-07-23 22:51:45   AllPlayerCount  5
     2019-07-23 22:51:34   AllPlayerNotBonded ['Sonos_Bad','Sonos_Kueche','Sonos_Schlafzimmer','Sonos_Wohnzimmer']
     2019-07-23 22:51:34   AllPlayerNotBondedCount 4
     2019-07-26 13:09:42   LastProcessAnswer 1564139382
     2019-07-26 01:43:19   LastProcessRestart 2019-07-26 01:43:19
     2019-07-26 01:43:19   LastProcessRestartCount 4
     2019-05-28 06:45:47   LineInPlayer    []
     2019-07-24 18:51:42   MasterPlayer    ['Sonos_Kueche','Sonos_Wohnzimmer']
     2019-07-24 18:51:42   MasterPlayerCount 2
     2019-07-26 13:01:32   MasterPlayerNotPlaying ['Sonos_Wohnzimmer']
     2019-07-26 13:01:32   MasterPlayerNotPlayingCount 1
     2019-07-26 13:01:32   MasterPlayerPlaying ['Sonos_Kueche']
     2019-07-26 13:01:32   MasterPlayerPlayingCount 1
     2019-07-23 22:51:04   MusicServicesList {####GEKÜRZT####}
     2019-07-25 02:23:08   MusicServicesListVersion RINCON_347E5C98F44501400:87
     2019-07-26 13:00:17   OFFLINE         1, attr Sonos disable 1
     2019-07-26 01:05:12   ShareIndexInProgress 0
     2019-07-26 13:09:33   ZoneGroupState  <####GEKÜRZT###>
     2019-07-26 13:01:26   state           opened
Attributes:
   DbLogExclude .*
   disable    0
   room       1_A_Sonos_lab,1_LAB,Sonos
   targetSpeakDir /daten/SonosSpeak
   targetSpeakFileTimestamp 1
   targetSpeakMP3FileDir /daten/SonosSpeak
   targetSpeakURL //192.168.115.81/SonosSpeak
   verbose    1
Titel: Antw:Notify Sonos STATE
Beitrag von: Damian am 26 Juli 2019, 13:14:15
Zitat von: Tommi ratlos am 26 Juli 2019, 13:07:18
Hallo,

ist wohl ein Missverständnis.
Sonos:.* {
   {Log 3, "NTFY_Sonos_Watch EVENT:$EVENT"};;
}

triggert Events, anscheinend wird State aber nicht getriggert.

Gruß
Thomas

Wenn das Sonos-Device Events erzeugt, dann kannst du einfach den Status wie folgt abfragen:

define di_Sonos DOIF ([Sonos] eq "open") (....)


Auszug aus der Commanderf zu DOIF:

ZitatAnwendungsbeispiel: Einfache Ereignissteuerung, "remotecontrol" ist hier ein Device, es wird in eckigen Klammern angegeben. Ausgewertet wird der Status des Devices - nicht das Event.

define di_garage DOIF ([remotecontrol] eq "on") (set garage on) DOELSEIF ([remotecontrol] eq "off") (set garage off)

Das Modul wird getriggert, sobald das angegebene Device hier "remotecontrol" ein Event erzeugt. Das geschieht, wenn irgendein Reading oder der Status von "remotecontrol" aktualisiert wird. Ausgewertet wird hier der Zustand des Status von remotecontrol nicht das Event selbst. ...


Titel: Antw:Notify Sonos STATE
Beitrag von: TomLee am 26 Juli 2019, 13:30:31
Sry, nachdenken vorm schreiben wär schon angedacht.
Das mit dem DOIF ist nur eine Statusabfrage und den Player vom Netz nehmen war Schwachsinn.



Weshalb jetzt umschwencken auf DOIF
Wenn du jetzt im Notify Empfänger das Attribut addStateEvent setzt und im SONOS-Modul einmal DEF und direkt wieder modify Sonos verbindet sich das Modul neu und es gibt in state ein Event und in deinem Log sollte auch was stehen.
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 15:21:44
Hallo nochmal,

habe mir erstmal mit einem AT und einem Dummy geholfen. Jetzt triggert eben der dummy.
Internals:
   CFGFN     
   COMMAND    {
my $DMYSTATE;;
$DMYSTATE = InternalVal('Sonos','STATE','0');;
fhem("setstate DMY_Sonos $DMYSTATE");;
fhem("trigger DMY_Sonos $DMYSTATE");;
}
   DEF        +*00:00:32 {
my $DMYSTATE;;
$DMYSTATE = InternalVal('Sonos','STATE','0');;
fhem("setstate DMY_Sonos $DMYSTATE");;
fhem("trigger DMY_Sonos $DMYSTATE");;
}
   FUUID      5d3aeb0b-f33f-c08c-f2ef-b55432ec1845045b
   NAME       AT_Sonos_Watch
   NR         817
   NTM        15:18:37
   PERIODIC   yes
   RELATIVE   yes
   REP        -1
   STATE      Next: 15:18:37
   TIMESPEC   00:00:32
   TRIGGERTIME 1564147117.42749
   TRIGGERTIME_FMT 2019-07-26 15:18:37
   TYPE       at
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1564142347.09735
           VALUE      Next
   READINGS:
     2019-07-26 15:18:05   state           Next: 15:18:37
Attributes:
   DbLogExclude .*
   room       1_A_Sonos_lab,AT,Sonos
Titel: Antw:Notify Sonos STATE
Beitrag von: Beta-User am 26 Juli 2019, 15:44:19
 :o Warum setzt du nicht einfach nur das bereits genannte Attribut beim notify?
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 15:58:37
Hi,

meinst du addStateEvent? Das Device bringt einfach keinen state event oder es ist zu heiß für mich ;D
Titel: Antw:Notify Sonos STATE
Beitrag von: Beta-User am 26 Juli 2019, 16:03:50
Es gibt nach deinem List ein Reading "state". Es ist also ziemlich wahrscheinlich, dass das notify reagieren würde, wenn du das Attribut setzt. Kann aber natürlich auch sein, dass der Modulautor diesen Teil deaktiviert hat, dann ginge das nicht, aber das wäre die Ausnahme...

Hast du es denn ausgetestet?
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 16:17:24
Getestet:
Internals:
   CFGFN     
   DEF        Sonos:.* {
{Log 3, "#################################NTFY_Sonos_TEST $EVENT"};;
}
   FUUID      5d3b0900-f33f-c08c-8d31-ea695bddbb6750c6
   NAME       NTFY_Sonos_Watch_test
   NOTIFYDEV  Sonos
   NR         1183
   NTFY_ORDER 50-NTFY_Sonos_Watch_test
   REGEXP     Sonos:.*
   STATE      2019-07-26 16:08:24
   TRIGGERTIME 1564150104.95179
   TYPE       notify
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1564150016.39406
           VALUE      active
   READINGS:
     2019-07-26 16:08:12   state           active
Attributes:
   DbLogExclude .*
   addStateEvent 1
   room       1_A_Sonos_lab,Sonos


Sonos Status auf disabled gesetzt und wieder enabled.
Logfile:
2019.07.26 16:12:37.722 3: #################################NTFY_Sonos_TEST LastProcessAnswer: 1564150357
2019.07.26 16:13:06.097 3: #################################NTFY_Sonos_TEST LastProcessAnswer: 1564150386
2019.07.26 16:13:06.374 3: #################################NTFY_Sonos_TEST LastProcessAnswer: 1564150386
2019.07.26 16:13:06.478 3: #################################NTFY_Sonos_TEST LastProcessAnswer: 1564150386
2019.07.26 16:14:04.795 3: #################################NTFY_Sonos_TEST DISCONNECTED
2019.07.26 16:15:31.485 3: #################################NTFY_Sonos_TEST CONNECTED
2019.07.26 16:15:34.188 3: #################################NTFY_Sonos_TEST LastProcessAnswer: 1564150534

Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 16:29:29
Hallo,

sehe gerade das ich nicht der einzige bin https://forum.fhem.de/index.php/topic,46058.msg937508.html#msg937508 (https://forum.fhem.de/index.php/topic,46058.msg937508.html#msg937508)
Titel: Antw:Notify Sonos STATE
Beitrag von: Beta-User am 26 Juli 2019, 16:35:12
?

Wenn ich den Test richtig lese, klappt es mit addStateEvent und dem loggen (oder was auch immer du als Reaktion haben willst).
In dem anderen Thread ging es um einen anderen EventHandler, und der tickt eben etwas anders, bitte diese Dinge nicht einfach vermischen.
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 26 Juli 2019, 16:40:08
Hi,

es geht ja nicht um das loggen, sondern ich benötige einen trigger wenn der state NICHT "opened" ist um einen reconnect auszulösen.
State scheint aber keinen Event auszulösen.
Titel: Antw:Notify Sonos STATE
Beitrag von: Beta-User am 26 Juli 2019, 16:49:02
Dann wäre doch interessant, wie sich der state entwickelt, wenn tatsächlich disconnected wird. Dazu fehlt bisher sowohl ein list wie das, was ggf. im Eventmonitor (nicht) stattfindet.

Alternativ: Wenn du schon ein at bemühst, kannst du mit dem gleich die InternalVal-Abfrage machen und ggf. mit einem schlichten Perl-if den reconnect auslösen... Der Umweg über den Trigger-Dummy kannst du dir mE. jedenfalls sparen.
Titel: Antw:Notify Sonos STATE
Beitrag von: Tommi ratlos am 27 Juli 2019, 07:08:58
Morgen,

state wird richtig angezeigt und ändert sich auch korrekt löst aber eben kein event aus. Somit kann ein notify oder doif nicht darauf reagieren. Das wird auch der Grund sein warum hier https://forum.fhem.de/index.php/topic,46058.msg937508.html#msg937508 (https://forum.fhem.de/index.php/topic,46058.msg937508.html#msg937508) auch ein AT genutzt wird. Werde mal im Multimedia bereich fragen evtl. kann der Entwickler das ja ändern.

Gruß
Thomas