Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

Treibhaus

Signatur:
Raspberry 5 & NVMe + HM-Module für 3 Etagen (inkl  Garage/Garten) 
+BSC EnOcean TCM310 -Fensterkontakt,-Bewegungsmelder
+ 1-wired Temp-Sensoren + RHASSPY-Spracherkennung

Ralli

Ich weiß nicht, ob ihr es mitbekommen habt, daher hier noch einmal der Hinweis:

Stephan van Rooij hat nach langer Zeit noch einmal einen Hausputz gemacht und einige Korrekturen/Änderungen vorgenommen. Aktuell ist jetzt die Version 4.0.0-beta.7, die auch seit Release bei mir ohne Auffälligkeiten funktioniert und bei der vor allem auch zwei für mich persönlich nervige Fehler behoben sind.

https://www.npmjs.com/package/sonos2mqtt?activeTab=versions
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte OpenCCU (3.89.8.20260719) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.62), FBDECT, Siri und Alexa

binford6000

Zitat von: Ralli am 12 Juli 2026, 07:58:55Aktuell ist jetzt die Version 4.0.0-beta.7
Es scheint aber noch leider kein Docker Image zu geben.

Ralli

Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte OpenCCU (3.89.8.20260719) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.62), FBDECT, Siri und Alexa

50watt

Hallo Otto,

ich bin gerade von sonos2mqtt 3.x auf 4.0.0-beta.7 umgestiegen und dabei auf eine kleine Inkompatibilität in 99_sonos2mqttUtils.pm gestoßen.

Die Input-Erkennung verwendet aktuell noch die alten Reading-Namen:

  currentTrack_TrackUri
  enqueuedMetadata_UpnpClass

Mit sonos2mqtt 4.x kommen die Track-Metadaten bei mir inzwischen u.a. so an:

  currentTrack_trackUri
  currentTrack_upnpClass
  currentTrack_title
  currentTrack_artist
  currentTrack_album

Die alten CamelCase-Readings bleiben in FHEM zwar noch bestehen, werden aber nicht mehr aktualisiert. Dadurch kann z.B. das UserReading Input auf einem alten Zustand hängen bleiben bzw. nicht mehr getriggert werden.

Beispiel bei mir:

  currentTrack_TrackUri   -> letzter Stand 02.09.
  currentTrack_trackUri   -> aktuell

Analog bei Artist/Title/UpnpClass.

Ich würde deshalb die Input-Erkennung in 99_sonos2mqttUtils.pm auf die neuen Reading-Namen umstellen, mit Fallback auf die bisherigen Namen. Damit bleibt der Patch auch für ältere sonos2mqtt-Versionen kompatibel.

Mein Vorschlag:

--- a/contrib/AttrTemplate/99_sonos2mqttUtils.pm
+++ b/contrib/AttrTemplate/99_sonos2mqttUtils.pm
@@ -355,13 +355,31 @@
 if ($reading eq 'favlist'){
     return sonos2mqtt_getList ($name,'Favorites')
 }

 if ($reading eq 'Input') {
-   my $currentTrack_TrackUri = ReadingsVal($name,'currentTrack_TrackUri','');
-   return $currentTrack_TrackUri =~ 'x-rincon-stream'
-      ? 'LineIn': $currentTrack_TrackUri =~ 'spdif'
-      ? 'TV'    : (ReadingsVal($name,'enqueuedMetadata_UpnpClass','') eq 'object.item.audioItem.audioBroadcast' or $currentTrack_TrackUri =~ 'x-.*radio')
-      ? 'Radio' : 'Playlist'
+   # sonos2mqtt 4.x uses lower-case field names in track metadata.
+   # Keep the old CamelCase readings as fallback for compatibility
+   # with existing installations.
+   my $trackUri = ReadingsVal(
+      $name,
+      'currentTrack_trackUri',
+      ReadingsVal($name,'currentTrack_TrackUri','')
+   );
+
+   my $upnpClass = ReadingsVal(
+      $name,
+      'currentTrack_upnpClass',
+      ReadingsVal(
+         $name,
+         'enqueuedMetadata_upnpClass',
+         ReadingsVal($name,'enqueuedMetadata_UpnpClass','')
+      )
+   );
+
+   return 'LineIn' if $trackUri =~ /x-rincon-stream/i;
+   return 'TV'     if $trackUri =~ /spdif/i;
+   return 'Radio'
+      if $upnpClass eq 'object.item.audioItem.audioBroadcast'
+      || $trackUri =~ /x-.*radio/i;
+
+   return 'Playlist';
   }
 }

Zusätzlich müsste das UserReading der Speaker von

  Input:currentTrack_TrackUri.* {sonos2mqtt_ur($name,'Input')}

auf

  Input:currentTrack_trackUri.* {sonos2mqtt_ur($name,'Input')}

geändert werden, damit das Input-Reading auch mit sonos2mqtt 4.x wieder bei jeder Änderung aktualisiert wird.

Bei mir betrifft das alle Sonos-Speaker gleichermaßen.

Falls du möchtest, kann ich das auch noch gegen den aktuellen AttrTemplate-Stand als vollständigen diff vorbereiten/testen.

Viele Grüße
50watt
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x