Neue Sonos-Version

Begonnen von Reinerlein, 12 März 2017, 14:53:33

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo zusammen,

nun wo die Version wieder stabil läuft, endlich der Check-In :)

Kurzform:
- Einige Problembehebungen bei instabilen Netzwerksituationen
- Relativangaben bei set CurrentTrackPosition
- Cover Downloadtimeout unter Linux-Systemen
- Readings für die Anzeige, welcher Favorit- / Playlist- / Radioeintrag gerade den Titel verursacht hat
- Reading für die Feststellung, ob gerade eine Spotifydirect-Wiedergabe aktiv ist

Außerdem habe ich im Wiki meine Umsetzung einer Sonos-Integration in FTUI beschrieben.

Hier die Änderungen im Detail:

  • NotifyFn und NotifyDev werden nun im Define des Moduls festgelegt (anstatt wie vorher im Initialize). Dadurch sollten deutlich weniger Notify-Anfragen beim Modul ankommen.
  • Es gibt nun einen Set-Befehl "RefreshShareIndex" zum Aktualisieren der Bibliothek und ein Reading "ShareIndexInProgress", welches angibt, ob eine Aktualisierung gerade in Ausführung ist.
  • Die Fehlermeldung beim Verbinden zum Device wurde um die Zieladresse erweitert.
  • Es gibt drei neue Readings, die sich auf Spotify-Direct-Play beziehen: DirectControlClientID, DirectControlIsSuspended und DirectControlAccountID
  • Man kann beim Setzen der Titelposition nun auch relative Angaben machen, also z.B. '+0:00:15' oder auch '+10%'. Geht natürlich auch mit '-'.
  • Man kann beim Setzen der Titelposition nun auch eine ganze Zahl als Sekundenangabe  machen. Dabei gehen auch Relativangaben
  • Beim Cover-Download wird nun ein Standard_Timeout von 5s verwendet, sodass ein fehlender Player keine Blockade mehr verursachen sollte. Dafür gibt es auch ein neues Attribut 'coverLoadTimeout', womit dieser Wert eingestellt werden kann. Das ganze geht nur für Nicht-Windows-Systeme, da der Timeout über einen Alarm realisiert wird.
  • Wenn während eines Subscriptions-Renews ein Timeout-Fehler auftreten sollte, wird nun der Discovery-Prozess neu angestartet, um sicherzustellen, daß der Player wieder gefunden und neu initialisiert wird.
  • In der ControlPoint.pm wurde eine Sicherheitsabfrage eingebaut, wenn total verstümmelte Pakete beim SSDP-Recover ankommen.
  • Es gibt ein neues Reading "currentEnqueuedTransportURI", welches den TransportURI des hinzugefügten Paketes enthält, aus welchem der Titel gerade abgespielt wird (z.B. der Identifier der Spotify-Playliste)
  • Es gibt ein neues Reading "currentFavouriteName", welches versucht den "currentEnqueuedTransportURI" in den Favoriten zu finden, und enthält dann den gefundenen Favoritennamen. Dazu müssen die Favoriten einmal mittels "get FavouritesWithCover" ermittelt worden sein, und im Reading "Favourites" bereitstehen.
  • Es gibt ein neues Reading "currentPlaylistName", welches versucht den "currentEnqueuedTransportURI" in den Playlisten zu finden, und enthält dann den gefundenen Playlistnamen. Dazu müssen die Playlisten einmal mittels "get PlaylistsWithCover" ermittelt worden sein, und im Reading "Playlists" bereitstehen.
  • Es gibt ein neues Reading "currentRadioName", welches versucht den "currentEnqueuedTransportURI" in den Radios zu finden, und enthält dann den gefundenen Radionamen. Dazu müssen die Radios einmal mittels "get RadiosWithCover" ermittelt worden sein, und im Reading "Radios" bereitstehen.

Falls noch Unschärfen in Bezug auf Commandref oder Wiki existieren sollten, bitte eine kurze Info an mich. Da war ziemlich viel aufzuarbeiten...

Morgen per update, ab jetzt per SVN...

Grüße
Reinerlein

DeeSPe

#1
Leider hängt sich mein FHEM seit dem Update gerade eben immer wieder beim Start auf.
Ich nehme an es liegt am Sonos Modul:
Use of uninitialized value $_[0] in concatenation (.) or string at /usr/share/perl5/XML/Parser/Lite.pm line 168, <$client> line 8.
Can't use an undefined value as a HASH reference at ./FHEM/00_SONOS.pm line 1273.

An dieser Stelle endet immer das Log.
Da hilft wohl vorerst nur ein Restore.

Gruß
Dan

EDIT: Nach Restore von 00_SONOS.pm läuft mein FHEM wieder.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Reinerlein

Hallo Dan,

das ist schon komisch. Ich verwende gar keinen XML-Parser, da ich alles selber per regulären Ausdrücken aus den XML-Strukturen parse.
In der Zeile 1273 wird versucht, auf das Reading "Radios" zuzugreifen, und wenn dieses nicht definiert ist, wird ein sauberer Leerzustand angenommen. Etwas ähnliches passiert auch in den Zeilen 1262 und 1251 für Favoriten und Playlists.
Dieser Fehler kann eigentlich nur kommen, wenn du bereits ein Reading "Radios" hast, dort aber kein Perl-Hash drinsteht.
Wie auch immer sollte das Perl eigentlich nicht anhalten...

Was hast du denn noch alles beim Restore zurückgesetzt?

Grüße
Reiner

DeeSPe

Zitat von: Reinerlein am 13 März 2017, 08:59:52
Hallo Dan,

das ist schon komisch. Ich verwende gar keinen XML-Parser, da ich alles selber per regulären Ausdrücken aus den XML-Strukturen parse.
In der Zeile 1273 wird versucht, auf das Reading "Radios" zuzugreifen, und wenn dieses nicht definiert ist, wird ein sauberer Leerzustand angenommen. Etwas ähnliches passiert auch in den Zeilen 1262 und 1251 für Favoriten und Playlists.
Dieser Fehler kann eigentlich nur kommen, wenn du bereits ein Reading "Radios" hast, dort aber kein Perl-Hash drinsteht.
Wie auch immer sollte das Perl eigentlich nicht anhalten...

Was hast du denn noch alles beim Restore zurückgesetzt?

Grüße
Reiner

Moin Reiner,

ich habe einzig und allein die 00_SONOS.pm restored.
Danach hat FHEM wieder normal gestartet.
Leider bin ich das nächste Mal erst heute Nacht zu hause an meinem FHEM um weitere Tests/Informationen zu liefern.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

fhem-challenge

#4
Zitat von: DeeSPe am 13 März 2017, 08:12:33
Leider hängt sich mein FHEM seit dem Update gerade eben immer wieder beim Start auf.
Ich nehme an es liegt am Sonos Modul:
Use of uninitialized value $_[0] in concatenation (.) or string at /usr/share/perl5/XML/Parser/Lite.pm line 168, <$client> line 8.
Can't use an undefined value as a HASH reference at ./FHEM/00_SONOS.pm line 1273.

An dieser Stelle endet immer das Log.
Da hilft wohl vorerst nur ein Restore.

Gruß
Dan

EDIT: Nach Restore von 00_SONOS.pm läuft mein FHEM wieder.


Exakt bei mir auch. FHEM steht nach dem lade von 00_SONOS.pm ...

2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant (".977 Jazz Music") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("1radio.mk - The Wave Smooth Jazz") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("24 Hour Jazz") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("ABONNI Caf\351 - Soulside Radio "...) in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("AceRadio.Net - The Smooth Jazz C"...) in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Best Smooth Jazz") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Calm Radio - Smooth Jazz") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Chayz Jazz Lounge") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Chroma Radio Jazz Smooth") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Cool Jazz Florida") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("GotRadio Jazz So Smooth") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Jazz Moods Radio") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("LIPSapp.com SmoothFLL Radio") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Radio Art - Smooth Jazz") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Relaxing Jazz Radio") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Smooth 93.7") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Smooth Choice") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("Smooth Jazz Buzz") in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("SmoothJazz.com Global Radio (KJA"...) in void context at (eval 558) line 1.
2017.03.13 10:49:40 1: PERL WARNING: Useless use of a constant ("The Seabreeze") in void context at (eval 558) line 1.
Can't use string ("eurosmoothjazz") as a HASH ref while "strict refs" in use at /opt/fhem/FHEM/00_SONOS.pm line 1273.




Viele Grüße!

Andreas

Reinerlein

Hi,

also, den Fehler mit dem "can't use undefined value as Hash" kann ich nachstellen, wenn ich im Reading "Radios" am Player Text stehen habe, der keinen Hash repräsentiert (ich habe z.B. einfach mal einen "." gesetzt).
Dann bricht der Bulkupdate mit der bekannten Fehlermeldung mitten drin ab...
Anscheinend mag Fhem das gar nicht, wenn da noch ein Bulkupdate unabgeschlossen ist. In meinem Fall war das Reading immer leer, oder enthielt einen gültigen Hash. In beiden Fällen klappt das :)

Ich baue da mal ein bißchen zusätzliche Prüfung ein...

Grüße
Reinerlein

Reinerlein

Hallo zusammen,

sooo, ich habe da ein Fehlerhandling drumherum gebaut, sodass Fhem nicht mehr beeinflußt werden sollte...

Ab Morgen per Update, oder ab sofort per SVN...

Grüße
Reinerlein

DeeSPe

Zitat von: Reinerlein am 13 März 2017, 14:24:58
Hallo zusammen,

sooo, ich habe da ein Fehlerhandling drumherum gebaut, sodass Fhem nicht mehr beeinflußt werden sollte...

Ab Morgen per Update, oder ab sofort per SVN...

Grüße
Reinerlein

Vielen Dank Reiner für die schnelle Erweiterung.
Werde morgen früh testen ob es funktioniert.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Masterfunk

Hallo Reiner,

habe nach Deinem Beispiel im Wiki meine FTUI Anzeige "umgebaut" und auf meine Bedürfnisse angepasst (Siehe Bild).

Das was jetzt noch fehlt, ist das sich die "Current TrackPosition" automatisch aktualisiert.
Wie kann ich das anstellen?

Gruß Detlef



Reinerlein

Hi Detlef,

ich hatte das über ein wiederkehrendes DOIF gemacht:

define Sonos_Wohnzimmer_RefreshCurrentTrackPosition DOIF ([Sonos_Wohnzimmer:transportState] eq "PLAYING" and [Sonos_Wohnzimmer:currentNormalAudio] eq 1) (get Sonos_Wohnzimmer CurrentTrackPosition) DOELSE
attr Sonos_Wohnzimmer_RefreshCurrentTrackPosition cmdState on|off
attr Sonos_Wohnzimmer_RefreshCurrentTrackPosition devStateIcon off:taster_ch_aus_rot:on on:taster_ch_an_gruen:off set_.*:ampel_gelb
attr Sonos_Wohnzimmer_RefreshCurrentTrackPosition do always
attr Sonos_Wohnzimmer_RefreshCurrentTrackPosition wait 15

Leider ist FHEM damit echt beschäftigt, sodass ich das nicht wirklich empfehlen kann.

Am Besten wäre so ein sekündlicher Javascript-Timer, mit dem man den Balken im FTUI immer eine Sekunde weiterschiebt, und wenn das Reading "currentTrackPosition" aktualisiert wird, wird die Position des Balken korrigiert.
Wenn die Wiedergabe gestoppt wird, wird der Timer angehalten (das Reading currentTrackPosition wird in diesen Momenten nochmal korrekt aktualisiert).

Leider kenne ich mich da zuwenig aus, wie man einen Slider an ein Reading bindet und trotzdem per Javascript "weiterschiebt".

Reiner

Nobby1805

Ich habe es bei mir etwas anders formuliert und habe den Eindruck, dass die Belastung von FHEM nicht besonders hoch ist
Ich habe allerdings keine Ahnung wo der genau Unterschied liegt

define refreshPositionWohnzimmer DOIF ([+8] and [Sonos_Wohnzimmer:transportState] eq "PLAYING") (get Sonos_Wohnzimmer currentTrackPosition)
attr refreshPositionWohnzimmer do always
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

Reinerlein

Hi Nobby,

das läuft auf das gleiche raus (halt nur mit kürzerem Intervall :) ).

Mit Belastung meinte ich die Verarbeitung der Kette:
FHEM -> SonosModul -> SonosSubProzess -> Sonosplayer -> Antwort vom Sonosplayer -> Antwort vom SonosSubProzess -> Event in FHEM

Insgesamt ist/war mein FHEM damit sehr gut Grundausgelastet, weswegen ich das erstmal wieder deaktiviert hatte...

Aber das muss ja jeder selber beurteilen und abschätzen, das kommt ja schließlich auch auf die Rahmenbedingungen wie Hardware u.ä. an...

Grüße
Reiner

DeeSPe

Moin Reiner,

hab soeben das Update installiert.
Heute gibt soweit keine offensichtliche Probleme.

Vielen Dank für den Fix.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Mitch

Also bei mir hat der Update gestern ohne Probleme geklappt, aber ich habe immer noch das Problem, dass der Sonos Dienst plötzlich (ohne das Sonos benutzt wird) auf über 50% CPU Last schießt und dann mein fhem komplett abstürzt.
FHEM im Proxmox Container

Reinerlein

Hallo Mitch,

da wirst du mal den LogLevel am Sonos-Device auf 5 stellen müssen, um zu schauen, was er eigentlich gerade versucht zu machen.
Aber Achtung: Da kommen sehr große Logdateien heraus...

Grüße
Reinerlein