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
STATE groß geschrieben ist ein Internal und nicht für notify gedacht. Nimm mal state, das ist ein Reading auf das Du triggern kannst.
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.
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.
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.
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
Hallo,
der Player macht das auch, nur das Sonos Modul selbst anscheinend nicht.
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.
Hallo,
ist wohl ein Missverständnis.
Sonos:.* {
{Log 3, "NTFY_Sonos_Watch EVENT:$EVENT"};;
}
triggert Events, anscheinend wird State aber nicht getriggert.
Gruß
Thomas
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...?
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
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. ...
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.
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
:o Warum setzt du nicht einfach nur das bereits genannte Attribut beim notify?
Hi,
meinst du addStateEvent? Das Device bringt einfach keinen state event oder es ist zu heiß für mich ;D
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?
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
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)
?
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.
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.
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.
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