Funktionsweise der Sonos-Integration

Hallo. Nach dem ganzen Neuerungen-Update teste ich Gladys nochmal, bei der ich schon seit einiger Zeit ein Auge drauf habe. Ich habe damit angefangen, meine Sonos-Lautsprecher zu integrieren, und es scheint, dass es nicht funktioniert, weil die Lautsprecher in einem dedizierten VLAN sind, das sich von dem unterscheidet, in dem Gladys läuft? Hat jemand es geschafft, das mit dieser Konfiguration zum Laufen zu bringen? Der Scan zeigt keine Ergebnisse und soweit ich weiß, gibt es keine Möglichkeit, die IPs der Lautsprecher anzugeben?

Danke!

Hallo,

Ich habe das gleiche Problem auf meiner Seite :innocent:

Hallo,

Ich denke, du musst das mDNS-Protokoll (Multicast Domain Name System) zwischen deinen VLANs (Sonos und Gladys) auf deinem Router freigeben.

Ich dachte, die Sonos-Integration nutzt kein mDNS?

Hallo, vielleicht, aber es muss doch ein Protokoll zur automatischen Erkennung geben?

Hallo,

Ja, das scheint mit deiner Netzwerkkonfiguration übereinzustimmen.

Die aktuelle Sonos-Integration von Gladys verwendet die automatische SSDP/UPnP-Erkennung. Sie sendet also eine Multicast-Anfrage an 239.255.255.250:1900.

https://sonos.svrooij.io/sonos-communication

Mit Gladys und den Sonos-Geräten auf zwei verschiedenen VLANs wird dieses Multicast normalerweise nicht standardmäßig durch den Router weitergeleitet. Der Scan findet daher möglicherweise nichts, selbst wenn Gladys direkt mit den IP-Adressen der Lautsprecher kommunizieren darf.

Und tatsächlich, bei Betrachtung der aktuellen Integration erfolgt der Scan nur über InitializeWithDiscovery(): Es scheint keine Möglichkeit in Gladys zu geben, die IP-Adresse eines Lautsprechers manuell anzugeben.

Die von Gladys verwendete Sonos-Bibliothek ermöglicht es jedoch, von einem bekannten Gerät auszugehen, anstatt nur eine Netzwerkentdeckung durchzuführen. Das könnte also eine interessante Weiterentwicklung der Integration sein: die Möglichkeit, die IP-Adresse eines Sonos-Geräts manuell für Installationen mit VLAN anzugeben.

Kurzfristig wäre die andere Lösung, das Netzwerk so zu konfigurieren, dass SSDP korrekt zwischen den beiden VLANs weitergeleitet wird.

@David Ich werde an Sonos extern arbeiten, um die Verwaltung bekannter IP-Adressen sowie die Wiedergabe per URI hinzuzufügen. (Der Rest bleibt identisch zur nativen Version :slight_smile:
Ich bräuchte dich zum Testen @prohand du bist auch herzlich willkommen :slight_smile:

Gern geschehen :winking_face_with_tongue:

@prohand @David

Sagt mir, ob ihr damit eure Sonos findet :slight_smile:

https://ghcr.io/vincentbesseau/gladys-sonos:0.1.1

{
  "manifest_version": 1,
  "type": "device",
  "name": "Sonos",
  "description": {
    "en": "Control Sonos speakers locally, including VLAN setups, and play any content URI.",
    "de": "Steuern Sie Ihre Sonos-Lautsprecher lokal, einschließlich VLAN-Einstellungen, und spielen Sie jede Inhalts-URI ab."
  },
  "version": "0.1.1",
  "docker_image": "ghcr.io/vincentbesseau/gladys-sonos:0.1.1",
  "gladys_version": ">=4.86.0",
  "cover_image": "https://raw.githubusercontent.com/vincentBesseau/gladys-sonos/main/cover.jpg",
  "categories": [
    "multimedia"
  ],
  "transports": [
    "local"
  ],
  "network_discovery": [
    {
      "type": "ssdp",
      "st": "urn:schemas-upnp-org:device:ZonePlayer:1"
    }
  ],
  "config_schema": [
    {
      "key": "intro",
      "type": "section",
      "label": {
        "en": "Sonos, controlled locally",
        "de": "Sonos, lokal gesteuert"
      },
      "description": {
        "en": "This integration controls your Sonos speakers directly over your local network - no cloud account, no Sonos app login. It discovers them automatically (SSDP). If your Sonos speakers are on a different VLAN/subnet than Gladys, automatic discovery will not find them: fill in one known IP below instead, it is enough to recover the whole household.",
        "de": "Diese Integration steuert Ihre Sonos-Lautsprecher direkt über Ihr lokales Netzwerk - kein Cloud-Konto, keine Anmeldung in der Sonos-App. Sie entdeckt sie automatisch (SSDP). Wenn Ihre Sonos-Lautsprecher in einem anderen VLAN/Subnetz als Gladys sind, wird die automatische Erkennung sie nicht finden: Geben Sie stattdessen eine bekannte IP unten an, das reicht, um das gesamte Haushalt zu erfassen."
      }
    },
    {
      "key": "known_ips",
      "type": "string",
      "label": {
        "en": "Known IPs (VLAN fix)",
        "de": "Bekannte IPs (VLAN-Umgehung)"
      },
      "description": {
        "en": "One Sonos speaker IP is enough: this integration then asks it for your whole household's layout. Separate multiple entries with a comma or a new line.",
        "de": "Die IP eines Sonos-Lautsprechers reicht aus: Die Integration fragt ihn dann nach der Anordnung Ihres gesamten Haushalts. Trennen Sie mehrere Einträge durch ein Komma oder eine neue Zeile."
      },
      "placeholder": {
        "en": "192.168.10.21",
        "de": "192.168.10.21"
      }
    }
  ],
  "actions": [
    {
      "key": "scan_now",
      "label": {
        "en": "Scan for Sonos speakers",
        "de": "Nach Sonos-Lautsprechern suchen"
      },
      "timeout_seconds": 30
    }
  ]
}

Nachdem ich den TCP-Port 1400 öffnen musste, habe ich meine beiden Sonos-Lautsprecher:

Ich konnte es bisher nicht testen, weil die Kinder schlafen :innocent:

Sie haben hier denselben Namen, aber ich habe in der Sonos-App nachgeschaut und es ist dasselbe, ich muss später herausfinden, warum :sweat_smile:

Danke für die Entwicklung :wink:

Super, ich warte auf die Rückmeldung von @David :slight_smile:

@pierre-gilles Was denkst du, ist es besser, wenn ich einen PR an gladys mache? Oder sollen wir Sonos nativ als veraltet markieren?
Zur Info, ich habe bei Sonos zwei zusätzliche Felder hinzugefügt (aktuelle Musik) und Play URI. Die andere Änderung ist die Hinzufügung der bekannten IPs für die VLANs

Hallo,

Bei mir funktioniert die Entdeckung nicht mit einem einfachen Scan, aber es funktioniert, wenn ich die IP-Adressen der Lautsprecher angeben, auch aus einem anderen VLAN. Allerdings bekomme ich doppelt die Textfunktion? und es gibt nicht so viele Einstellungen wie in der HA-Integration (Basslautstärke usw).

Die „Now Playing“-Funktion funktioniert auch, zeigt aber zweimal den Namen des Lautsprechers an. Und übrigens habe ich für alle Lautsprecher den richtigen Namen. Allerdings verstehe ich nicht, wozu die Funktion „Play URI“ dient.

Das sind keine Probleme, er hat zwei Textfunktionen, das ist normal: „play uri“ und „current song“

Und was du doppelt siehst, ist die Funktionsweise von Gladys Device (Funktion)

@pierre-gilles Das ist nicht so einfach für jemanden, der von HA kommt

Die anderen Funktionen können später folgen, ich werde mich darum kümmern. Gehen wir es ruhig an ^^

Über eine Szene kannst du ihm eine URI wie z. B. von Spotify übergeben.

Ich habe einen PR bei Spotify gemacht, um auf bestimmte Daten zugreifen zu können, also seien wir geduldig ^^

So können wir über eine Szene eine Playlist, ein Musikstück usw. abspielen.

Das wäre nicht schlecht, das würde es ermöglichen, eine sanfte Weck-Playlist am Morgen zu senden…

Jedenfalls hatte ich gestern ein Problem und heute ist es gelöst. Man kann nicht sagen, dass meine Geduld auf die Probe gestellt wurde! Ein großes Dankeschön! Ich stehe gerne zur Verfügung, falls ich helfen kann.

Sonos intern sollte zugunsten einer externen Integration als veraltet markiert werden

Ich kümmere mich um das Bereitstellen des Sonos-Dienstes, danke (stellst du den alten als veraltet ein? Gibt es einen Mechanismus, um von dem alten zu dem neuen zu migrieren @pierre-gilles?

ps:
Die Sonos-Community ist verfügbar

Der PR für die Migration der Geräte ist hier: feat(sonos): migrate button + deprecated badge for the native integration by vincentBesseau · Pull Request #3089 · GladysAssistant/Gladys · GitHub

Es gibt jedoch eine Einschränkung des SDKs, das Szenenvolumen wird nie an eine externe Integration weitergegeben (das SDK überträgt nicht options.volume).
Die konkrete Auswirkung: Das Szenenvolumen für „auf einem Lautsprecher sprechen“ wird für jede externe Integration stillschweigend ignoriert, nicht nur für gladys-sonos — mit Links zu dem Sonos-PR und dem äquivalenten nativen Code zum Vergleich.
Ich habe dir ein Issue im SDK-Repo erstellt onSetValue has no way to receive per-call options (e.g. volume for play_notification) · Issue #33 · GladysAssistant/integration-sdk-js · GitHub