Sonos: Neue Version

Begonnen von Reinerlein, 14 Juli 2020, 20:03:34

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo zusammen,

ich habe eine neue Version hochgeladen. Es sind ein paar Features und Bugfixes enthalten, aber auch erweiterte Logausgaben für den IsAlive-Checker der Playerüberprüfung.
Damit hoffe ich dem eigentlichen Problem besser auf die Schliche kommen zu können...

Changelog:

  • Sonos Arc (S19) zu den Playern mit Optischer Eingangswahl hinzugefügt.
  • Der Gruppenname wird jetzt mit Umlauten belassen, und es werden Räume mit den Zonennamen angelegt.
  • ControlPoint: Logausgaben für Such-Antworten erweitert.
  • Bei der Erkennung, ob ein SubProzess läuft, gab es noch einen Fehler bei der Überprüfung der Serverantwort.
  • Bei einem Fehler in der IsAlive-Prozedur wurde u.U. die Sendeverarbeitung nicht wieder freigegeben. Dafür wurden jetzt zusätzliche Logausgaben eingebaut.
  • Neuer Setter "PlayT", um zwischen Abspielen und Pausieren umzuschalten.
  • Bei der Playerbutton-Leiste wurden Play und Pause auf einen Button reduziert und der Mute-Button wird bzgl. des Zustands farbig eingefärbt (Mute-An: Dunkelrot, Mute-Aus: Standardfarbe)
Wie immer: ab sofort im Subversion oder ab Morgen per update...

Grüße
Reinerlein

Ralli

Gruß,
Ralli

Proxmox 8.1 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.6.20240316) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

juemuc

Hallo Reinerlein,

es besteht der Verdacht, dass das Sonos-Modul nicht das aktuell definierte Logfile verwendet.  :-[ Kannst Du das bitte prüfen.  ;D
Ich erzeuge täglich ein neues Logfile "./log/fhem-%Y-%m-%d.log"
Sonos schreibt aber seine Daten in das erste verfügbare File, was zu unschönen Effekten führt  8)

2020.07.17 22:34:37 2: HMCCU: [HMCCU3 : 812] HMCCU: Found no devices to update
2020.07.17 22:34:55 1: PERL WARNING: Use of uninitialized value in hash element at fhem.pl line 1712.
2020.07.18 14:06:12 1: SONOS1: Service-subscribing not possible due to missing TransportService
2020.07.18 14:06:13 1: SONOS1: Service-subscribing not possible due to missing TransportService
2020.07.18 14:06:43 1: SONOS1: Couldn't load data from URL(https://api.classicalarchives.com/smapi/presentationmap.xml) 1: 500 Status read failed:
2020.07.18 18:47:45 1: SONOS1: Service-subscribing not possible due to missing TransportService
2020.07.18 18:47:45 1: SONOS1: Service-subscribing not possible due to missing TransportService
2020.07.18 18:48:14 1: SONOS1: Couldn't load data from URL(https://api.classicalarchives.com/smapi/presentationmap.xml) 1: 500 Status read failed:
2020.07.18 20:13:07 1: SONOS1: Couldn't load data from URL(https://api.classicalarchives.com/smapi/presentationmap.xml) 1: 500 Status read failed:
2020.07.19 14:02:42 1: SONOS1: Service-subscribing not possible due to missing TransportService
2020.07.19 14:02:43 1: SONOS1: Service-subscribing not possible due to missing TransportService


Viele Grüße
Jürgen

PS.: Das liegt aus meiner Sicht nicht an der neuen Version  :) sondern besteht schon länger
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Reinerlein

Hi Jürgen,

also, der Fhem-Modulteil,verwendet natürlich die ganz normale "Log3"-Prozedur, die von fhem.pl bereitgestellt wird (bzw. "Log" als Fallback).

Der SubProzess schreibt entweder einfach mittels "print" auf "STDOUT" raus, oder, wenn "SubProcessLogfileName" angegeben wurde, dorthin (dort gibt es keine Wechselmechanik, da es nur für kurzzeitige Debug-Zwecke gedacht ist/war).
Fhem hat dann eine Umlenkung von STDOUT in das aktuelle Logfile...

Eine andere Möglichkeit habe ich dort ja auch nicht, oder?

Jetzt weiß ich nicht, ob fhem die Möglichkeit hätte, diese Umlenkung beim Wechsel der Logdatei mit nachzuziehen...
Initial passieren tut das in "redirectStdinStdErr()", aber eben nur einmal beim Start...
Ich könnte mir denken, dass beim Wechsel des Standard-Logfiles das mitgezogen werden kann... Das gilt aber ja allgemein für alle Ausgaben aller Module, die auf "STDERR" oder "STDOUT" ausgegeben werden.

Grüße
Reiner

juemuc

Hallo Reiner,

danke für die Info. Es ist halt merkwürdig, dass nur die Sonos-Ausgaben in dem "alten" Logfile landen. Alle anderen Logeinträge sind im Logfile mit dem aktuellen Tagesdatum. Es wird nur nach einem FHEM-Neustart wieder das aktuelle Logfile auch vom Sonos-Modul verwendet. Es schein so, dass das Sonos-Modul den Logfilewechsel um Mitternacht nicht mitbekommt.

Ich kenne mich leider in der Thematik nicht aus. Ich sehe nur das Ergebnis  8) Vielleicht kann hier ein anderer Modulbetreuer weiterhelfen. Soll ich mal auf die Suche gehen?

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

juemuc

Hallo Reinerlein,

habe heute diesen Eintrag im Log gefunden.

2020.07.26 04:28:49 1: PERL WARNING: Argument "" isn't numeric in numeric ne (!=) at ./FHEM/00_SONOS.pm line 1599.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Reinerlein

Hi Jürgen,

was hat das System denn gerade gemacht? Weißt du das zufällig?
Eigentlich wird da nur die aktuelle Tracknumner mit der vorherigen verglichen...
Komisch, dass da ein Wert leer ist.

Grüße
Reinerlein

awel

Hallo Reinerlein,

hier eine weitere Fehlermeldung im Log nach einem Neustart von Fhem:
2020.07.31 08:10:30 1: SONOS4: Restore-Thread gestartet. Warte auf Arbeit...
Use of uninitialized value $updateItem in pattern match (m//) at ./FHEM/00_SONOS.pm line 6091, <$client> line 8.
Use of uninitialized value $updateItem in pattern match (m//) at ./FHEM/00_SONOS.pm line 6091, <$client> line 8.


Danke und viele Grüße
Achim

Reinerlein

Hi Achim,

hmmm... da hat sich dein Player gemeldet, gibt aber keine Antwort auf Fragen. In diesem Fall war die Frage, welche Softwareversion verwendet wird...

Ist das vielleicht ein Nicht-Sonos-Player?
Gibt es im Log eine Ausgabe der ControlPoint?
Beginnt mit ControlPoint: Receive Search-Response:

Wenn ja, dann post doch mal alle diese Log-Einträge. Dann sehen wir vielleicht, was sich dort meldet...

Grüße
Reiner

Kurt77

Zitat von: Reinerlein am 14 Juli 2020, 20:03:34
  • Neuer Setter "PlayT", um zwischen Abspielen und Pausieren umzuschalten.
Hallo Reinerlein,
danke für diese Erweiterung! Sehr hilfreich.

Gruß,
Kurt

juemuc

Zitat von: Reinerlein am 26 Juli 2020, 23:36:30
Hi Jürgen,

was hat das System denn gerade gemacht? Weißt du das zufällig?
Eigentlich wird da nur die aktuelle Tracknumner mit der vorherigen verglichen...
Komisch, dass da ein Wert leer ist.

Grüße
Reinerlein

Hallo Reinerlein

Leider kann ich das nicht sagen.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

aherby

Hallo Reinerlein,

danke dass du immer weiter das Sonos Modul anpasst.
Ich versuche gerade folgendes umzusetzen:
Im Tablet UI den Sleep-Timer als Countdown (Zahlenwert oder Balken) anzeigen zu lassen.
Leider fehlt aktuel ein entsprechendes Reading über die Restlaufzeit.

Wird bei den Sonos-Player der Sleep-Timer gesetzt, erhält man auch in allen
Sonos S2-Apps die Restlaufzeit (minutengenau) als Info.
Ich hatte vorher nie so auf den Sleeptimer geachte.
Ist dir bei der Anpassung etwas entsprechendes aufgefallen?
Oder siehst du ggf die Chance die Funktion in deinem Modul mit aufzunehmen?

Wenn ich was mit meinen Sonos-Player testen soll einfach schreiben.

Dankeschön
FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

Reinerlein

Hi aherby,

es gibt doch das Reading SleepTimer, womit du zusammen mit dessen Timestamp die jetzt noch gültige Restzeit berechnen und anzeigen lassen kannst.
Was vermisst du da denn noch?

Grüße
Reinerlein

aherby

Hallo Reinerlein,

ja stimmt kann man auch für jeden Sonos Player ausrechnen.

Gehoffte hatte ich, dass man über die Sonos-App /Player die Restzeit auslesen kann.
Ein mehr oder weniger sinnhafter Kurztest brachte folgendes:
Ich hatte über ein Gerät mit der App den Sleeptimer gesetzt. Die Restlaufzeit wird ja auch in jeder anderen Sonos S2-App angezeigt.
Selbst dann wenn auf einem anderen Gerät eine völlig falsche Uhrzeit und oder Datum eingestellt ist.
Leider ist mein Rechner mit Wiresharke nicht aktiv. Sonst hätte ich mal geschaut ob ich durch Zufall was endecke
oder hast du ggf eine Stelle wo ich suchen könnte?

Vielleicht hatte ich auch geholft, dass du es mit ins Modul aufnimmst.
So könnte jeder Fhem-Benutzer (ohne weitere "Abfragen") auch leicht folge Fhem-Aktionen wie schalte dies und jenes ein / aus umsetzen.

Gruß aherby
FHEM 6.0 auf Raspberry Pi 4b 4GB, RaspberryMatic auf Raspi3b mit Charly-Funkmodul, ZigeeBridge mt deCONZ... . Homematic mittels HMCCU, Sonos 3xS1, 1xS6 (Play5 in der 2te Generation), 1xS9 (Soundbar), 1x SonosSub
1-Wire® to I2C host interface with ESD mit DS18B/S20.

Reinerlein

Hi aherby,

Ich verstehe nicht ganz, worauf du hinauswillst...
das Reading enthält entweder eine Rest-Zeit, dann ist ein Sleeptimer gesetzt, oder "off", dann ist keiner gesetzt. Natürlich kannst du in Fhem darauf ein Notify o.ä. setzen. Und natürlich ist das ein Timer pro Masterplayer (also pro abspielendem Player)... nicht für das zentrale Device.
Und Uhrzeiten deines Fhem sollten stimmen...

Ausrechnen der Ablauf-Uhrzeit (darauf achten, dass das nur berechnet werden kann, wenn der Wert nicht auf "off" steht):
my $sleeptimerTS = SONOS_GetTimeSeconds(ReadingsVal('Player', 'SleepTimer', 0)) + SONOS_GetTimeFromString(ReadingsTimestamp('Player', 'SleepTimer', undef);
my $sleeptimerString = SONOS_GetTimeString($sleeptimerTS);
(ungetestet, da am Strand :) )

Für eine ständige Aktualisierung musst du Fhem-Events mit dem Berechnungsergebnis erzeugen, z.B. mittels DOIF oder einem at...

Grüße
Reinerlein