Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

Begonnen von Otto123, 31 Mai 2020, 18:30:55

Vorheriges Thema - Nächstes Thema

Ralli

#1305
Für einen Sonos Move:


<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="/xml/review.xsl"?><ZPSupportInfo><LocalBatteryStatus>
<Data name="Health">GREEN</Data>
<Data name="Level">100</Data>
<Data name="Temperature">NORMAL</Data>
<Data name="PowerSource">SONOS_CHARGING_RING</Data>
</LocalBatteryStatus><!-- SDT: 0 ms --></ZPSupportInfo>


Für einen Sonos Roam:


<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="/xml/review.xsl"?><ZPSupportInfo><LocalBatteryStatus>
<Data name="Health">GREEN</Data>
<Data name="Level">80</Data>
<Data name="Temperature">NORMAL</Data>
<Data name="PowerSource">SONOS_CHARGING_RING</Data>
</LocalBatteryStatus><!-- SDT: 0 ms --></ZPSupportInfo>


"hubecker" hat bereits ein Issue aufgemacht: https://github.com/svrooij/node-sonos-ts/issues/176
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

Ralli

#1306
@Otto:

Die 99_sonos2mqttUtils.pm habe ich wie folgt minimal ergänzt, um beim Einschalten eines/mehrerer Alarms/Alarme auch noch die Lautstärke mitgeben zu können (eines meiner Kinder regelt die gerne über die Sonos-App wieder runter 8)):


...
if ($cmd eq 'alarm') {
   my $annex = "";
   $arr[-1] =~ /^[Vv]olume.([0-9]+)$/;
   if (defined($1)) {
      $annex .= ',"Volume":'.$1;
      pop @arr;
   }
   my $acmd = lc shift @arr;
   my $ids = shift @arr //return 'all|id[,id]|json missing, usage alarm enable|disable|update all|id[,id]|json';
   my %t=('enable'=>'true','disable'=>'false');
   if ($acmd eq 'update') {
      fhem(qq(set $bridge setalarm $ids));
      return '';
   } elsif ($acmd eq 'enable' or $acmd eq 'disable') {
       if ($ids eq "all") { $ids = ReadingsVal($NAME,"AlarmListIDs","")}
       for (split ',',$ids) {
         fhem(qq(set $bridge setalarm {"ID":$_,"Enabled":$t{$acmd}$annex}));
       }
     return '';
   }
} else {return 'usage alarm enable|disable|update all|id[,id]|json'}
}
...


Damit ist ein Kommando wie


set MQTT2_RINCON_xxxxx alarm enable all volume=10


möglich. Vielleicht magst du das ja ergänzen. Die Lösung mit $annex .= habe ich deswegen gewählt, weil dies m.E. einen generischen Ansatz darstellt, über den man auch ggf. noch weitere Modifier mit einbauen könnte.
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

viegener

Ich bekomme bei mir keine Playlist (als Favoriten) zum Laufen. Sowohl Playlists aus Spotify oder lokale Sonos-PLaylists, die als Sonos-Favoriten definiert sind können gestartet werden.

Hat das jemand gelöst?

Ich vermute, dass der Aufruf folgendermassen ablaufen sollte:
set <sonos-mqtt-device> play Playlist <name der playlist>
Problem ist mit diesem Aufruf gibt es einen Fehler:

2023.06.06 10:05:44.071 1: ERROR evaluating my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $EVTPART2=   $evalSpecials->{'%EVTPART2'};my $NAME=   $evalSpecials->{'%NAME'};{sonos2mqtt($NAME,$EVENT)}: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/99_sonos2mqttUtils.pm line 194.

Dieser lässt sich vermutlich darauf zurückführen, dass in den Utils versucht wird ein Reading "Playlists" zu durchsuchen nach dem entsprechenden Eintrag - dieses existiert aber nicht



Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

viegener

Zitat von: Otto123 am 06 Juni 2023, 17:39:49bist Du denn danach vorgegangen und hast das Reading erstellt?
https://wiki.fhem.de/wiki/Sonos2mqtt#Listen_der_Favoriten_Radios_und_Playlist_erstellen

Guter Hinweis - Danke !
Ich hatte das nur für Favoriten gemacht, da ich auch die Playlists als Favoriten angelegt habe.

Zusatzfrage: Sollte das auch mit sonos-PLaylists gehen, wenn diese spotify-Listen sind?
Bei mir kommt dann in den error readings folgendes:
     2023-06-06 23:08:19   error_Action    AddURIToQueue
     2023-06-06 23:08:19   error_Fault     UPnPError
     2023-06-06 23:08:19   error_FaultCode s:Client
     2023-06-06 23:08:19   error_UpnpErrorCode 804
     2023-06-06 16:26:55   error_UpnpErrorDescription Illegal MIME-Type
     2023-06-06 23:08:19   error_name      SonosError


Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Otto123

Ich verwende spotify nicht...
Die Behandlung der Favoriten, Playlist usw. ist mehr gefrickelt als gut gelöst - sorry. Da ändert sich bei Sonos auch immer wieder was.
Wann kommt der Fehler? Beim einlesen der Playlist oder beim abspielen?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

viegener

Zitat von: Otto123 am 07 Juni 2023, 07:10:55Ich verwende spotify nicht...
Die Behandlung der Favoriten, Playlist usw. ist mehr gefrickelt als gut gelöst - sorry. Da ändert sich bei Sonos auch immer wieder was.
Wann kommt der Fehler? Beim einlesen der Playlist oder beim abspielen?

Der Fehler kommt, wenn ich per "set <mqtt-device> play Playlist <name der playlist>" das "Laden" auslöse - das nachfolgende play habe ich dnn gar nicht mehr gesendet.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Otto123

Und ist das bei jeder Playlist oder bloß wenn spotify in der Playlist ist?
Was liefert er zurück wenn Du das in die FHEM Kommandozeile wirfst
{sonos2mqtt('<mqtt-device>','play Playlist <name der playlist>')}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

viegener

Ich habe es jetzt gelöst. Ich habe die Playlist aus Sonos gelöscht und dann im Sonos-Controller über den Spotify-Account zur Playlist navigiert. Dann über den Eintrag "Add to Sonos Playlist" eine neue PLaylist in Sonos mit dem gleichen Namen angelegt. Leider geht dabei die Verbindung zu Spotify verloren (es wird wohl eine getrennte Kopie erzeugt).

Ich habe dabei auch nochmal meine verschiedenen Versuche gelöscht und dabei festgestellt, dass das Problem wohl etwas anders gelagert ist. Und auch meine Beschreibung oben nicht ganz korrekt. Das Problem ist eigentlich nicht das Abspielen der spotify PLaylist über "play Playlist" sondern, dass die spotify-Playlists sich nur als Favoriten in sonos ablegen lassen und die Favoriten nicht spielbar sind. Als Playlists lassen sie sich wohl in Sonos nur als Kopien (s.o.) anlegen.

Es ist halt etwas verwirrend, dass Sonos-Playlists (wo die Titelliste lokal in Sonos geführt wird) funktionieren aber Spotify-Playlisten, die sich in Sonos als Favoriten anlegen lassen bei mir nicht funktionieren. Der obengenannte Fehler kam eigentlich wenn die Spotify-Playlist als Sonos-Favorit abgespielt werden soll.

Also habe ich Deinen Befehl jetzt nochmals entsprechend abgewandelt:

{sonos2mqtt('<mqtt-device>','play Favorite <name der playlist>')}
Ergebnis:

sonos/RINCON_949F3E5815AE01400/control { "command": "setavtransporturi", "input": "x-rincon-cpcontainer:10062a6cspotify:playlist:5DHDTX3GdisuhzKty2eOfu?sid=9&flags=10860&sn=1"}
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Miami

#1314
Hallo,
Ich habe sonos2mqtt eingerichtet und es funktioniert gut, aber leider werden bei mir damit nicht immer die Cover in FHEM angezeigt.
Ich verwende fast ausschließlich meine Musikbibliothek auf einem NAS (Fritzbox-NAS-Funktion).

Ich habe festgestellt, dass bei Dateinamen mit Apostroph, das Cover in FHEM nicht angezeigt wird, z.B. bei Janet Jackson - That's The Way Love Goes.mp3:
Im Reading currentTrack_AlbumArtUri des Players ist &apos; enthalten, es muss aber durch %2527 ersetzt werden:
Also habe ich in der 99_sonos2mqttUtils.pm nach der Zeile
my $cover = ReadingsVal($name,'currentTrack_AlbumArtUri','');folgende Zeile ergänzt:
$cover =~ s/&apos;/%2527/gm; # Code für Apostroph ersetzenKlappt nun wunderbar auch bei Dateinamen mit Apostroph.

Leider werden die Cover auch nicht angezeigt, wenn der Dateiname (runde) Klammern enthält. Die durch %2527 bzw. %2528 zu ersetzen hilft nicht.
Hat jemand eine Idee, woran das liegen könnte?
(Heute erneut getestet, und es funktioniert auch bei Dateien mit Klammern, hatte vermutlich zu viel rumprobiert)

Otto123

@viegener Die Behandlung von Favoriten und Playlisten in meiner sono2mqttutils ist unterschiedlich, weil die Abbildung in Sonos unterschiedlich ist. Das kann gut sein, dass es so nicht perfekt ist. Die packen manches (ich glaube vor allen Playlists) als eine Art "container" in einen weiteren "container".
Am Anfang hatte es mal genügt einfach eine uri zu starten (dein return als Beispiel) bei Playlisten muss man die queue bearbeiten. Wenn jetzt playlisten in Favoriten liegen, müsste man das vielleicht wieder getrennt behandeln. Oder es findet sich mal noch ein universeller Weg. Mühsam das Ganze, ich finde da aktuell keine Zeit.

@Miami Bei mir funktionieren Cover mit Apostroph (Deezer). Kann sein, dass das Problem in der Kodierung der Bibliothek in deiner NAS zustande kommt und besser dort gelöst werden könnte?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Miami

#1316
Zitat von: Otto123 am 09 Juni 2023, 10:55:16@Miami Bei mir funktionieren Cover mit Apostroph (Deezer). Kann sein, dass das Problem in der Kodierung der Bibliothek in deiner NAS zustande kommt und besser dort gelöst werden könnte?

In FHEM steht im Player-Device im Reading currentTrack_AlbumArtUri z.B.:
http://192.168.178.70:1400/getaa?u=x-file-cifs%3a%2f%2ffritz.box%2fnas%2fMusik%2fTom%2520Petty%2520-%2520I%2520Won&apos;t%2520Back%2520Down.mp3&v=13Fhem zeigt kein Cover an, auch der Internet-Browser nicht, wenn ich es in seine Adresszeile kopiere.

Ersetze ich den Apostroph, zeigt auch der Browser das Cover an:
http://192.168.178.70:1400/getaa?u=x-file-cifs%3a%2f%2ffritz.box%2fnas%2fMusik%2fTom%2520Petty%2520-%2520I%2520Won%2527t%2520Back%2520Down.mp3&v=13Ich vermute daher, dass sonos2mqtt oder 99_sonos2mqttUtils.pm das falsch im Reading ablegt, denn die Sonos-App (iOS) und VLC (Windows) haben keine Probleme mit den Covern im meinen mp3-Dateien, auch nicht mit dehnen mit Apostroph.

Otto123

Zitat von: Miami am 09 Juni 2023, 18:21:37Ich vermute daher, dass sonos2mqtt oder 99_sonos2mqttUtils.pm das falsch im Reading ablegt
Die Readings werden direkt von der Funktion json2nameValue() übernommen und eingetragen. die Utils spielt an der Stelle nicht mit.
Soweit ich sehe ist der MQTT Datenstrom noch korrekt, da steht ' einfach als Zeichen drin, also:
Zitatwon't%2520be
d.h. sonos2mqtt liefert auch richtig.

Ich muss mal tiefer eintauchen :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

m8ichael

Hallo zusammen,

ich bekomme den "Unterbau" sonos2mqtt irgendwie nicht persistent zum Laufen. Generell bin ich nach Anleitung vorgegangen, dann läuft auch alles, allerdings übersteht die Installation keinen Neustart meines Systems.

Konkret betreibe ich sonos2mqtt auf meinem Raspberry Pi mittels pm2, wobei ich auf der Benutzerebene "pi" mittels

pm2 start sonos2mqtt -- --mqtt mqtt://<IP>:1883

den Prozess starte. Dieser läuft auch

┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ sonos2mqtt         │ fork     │ 0    │ online    │ 0%       │ 16.1mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

allerdings erhalte ich nach einem Reboot des Geräts dort mittels pm2 list nur noch die folgene Anzeige:

┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ 127.0.0            │ fork     │ 7    │ online    │ 0%       │ 42.6mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

Danach ist sonos2mqtt nicht mehr nutzbar. Die Konfiguration habe ich natürlich mittels "pm2 save" zwischenzeitlich gespeichert.

Hat jemand einen Tipp, wo bei mir der Knoten ist?

Viele Grüße

Michael

Miami

Hast Du kein Notify "n_pm2_sonos" angelegt?
Lies (nochmal) den Abschnitt Autostart von sonos2mqtt mit FHEM im Wiki (https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#Sonos2Mqtt)