Funcionamiento de la integración de Sonos

¡Hola! Después de la avalancha de novedades, estoy probando de nuevo Gladys, en la que llevo tiempo echando un ojo. Empecé intentando integrar mis altavoces Sonos y parece que no funciona porque los altavoces están en un VLAN dedicado, distinto del que usa Gladys. ¿Alguien ha conseguido que funcione con esta configuración? El escaneo no da ningún resultado y, que yo sepa, no hay manera de especificar las IPs de los altavoces.

¡Gracias!

Hola,

Tengo el mismo problema por mi parte :innocent:

Hola,

Creo que debes permitir el protocolo mdns entre tus VLANs (Sonos y Gladys) en tu router.

Creía que la integración de Sonos no usaba mdns.

Hola, quizá entonces, pero debe haber algún protocolo de descubrimiento automático, ¿no?

Hola,

Sí, esto parece coherente con tu configuración de red.

La integración actual de Sonos de Gladys utiliza el descubrimiento automático SSDP/UPnP. Por lo tanto, envía una solicitud multicast a 239.255.255.250:1900.

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

Con Gladys y los Sonos ubicados en dos VLAN diferentes, este multicast generalmente no atraviesa el enrutador por defecto. Por lo tanto, el escaneo puede no encontrar nada, incluso si Gladys está autorizado a comunicarse directamente con las IP de los altavoces.

Y efectivamente, al revisar la integración actual, el escaneo solo pasa por InitializeWithDiscovery(): no parece haber posibilidad en Gladys de ingresar manualmente la IP de un altavoz.

Sin embargo, la biblioteca Sonos utilizada por Gladys permite partir de un dispositivo conocido en lugar de realizar solo un descubrimiento de red. Por lo tanto, podría ser una evolución interesante de la integración: permitir ingresar manualmente la IP de un Sonos para instalaciones con VLAN.

A corto plazo, la otra solución sería configurar la red para reenviar correctamente el SSDP entre los dos VLAN.

@David Voy a trabajar en Sonos externamente para añadir la gestión de IPs conocidas, además de la reproducción por URI. (El resto será idéntico al nativo :slight_smile:
Voy a necesitar de ti para probar @prohand también eres bienvenido :slight_smile:

¡Con mucho gusto! :winking_face_with_tongue:

@prohand @David

Díganme si con esto encuentran sus Sonos :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.",
    "es": "Controla los altavoces Sonos localmente, incluidos los ajustes de VLAN, y reproduce cualquier URI de contenido."
  },
  "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",
        "es": "Sonos, controlado localmente"
      },
      "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.",
        "es": "Esta integración controla tus altavoces Sonos directamente en tu red local - sin cuenta en la nube, sin iniciar sesión en la aplicación Sonos. Los descubre automáticamente (SSDP). Si tus altavoces Sonos están en un VLAN/subred diferente a Gladys, el descubrimiento automático no los encontrará: en su lugar, introduce una IP conocida a continuación, con eso basta para recuperar toda la instalación."
      }
    },
    {
      "key": "known_ips",
      "type": "string",
      "label": {
        "en": "Known IPs (VLAN fix)",
        "es": "IPs conocidas (solución VLAN)"
      },
      "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.",
        "es": "La IP de un solo altavoz Sonos es suficiente: esta integración luego le pide la disposición de toda tu instalación. Separa múltiples entradas con una coma o una nueva línea."
      },
      "placeholder": {
        "en": "192.168.10.21",
        "es": "192.168.10.21"
      }
    }
  ],
  "actions": [
    {
      "key": "scan_now",
      "label": {
        "en": "Scan for Sonos speakers",
        "es": "Buscar altavoces Sonos"
      },
      "timeout_seconds": 30
    }
  ]
}

Después de abrir el puerto 1400 en TCP, tengo mis dos altavoces Sonos:

No he podido probarlo todavía porque los niños están durmiendo :innocent:

Tienen el mismo nombre aquí, pero lo he verificado en la aplicación Sonos y es lo mismo, tendré que mirar por qué más tarde :sweat_smile:

Gracias por el desarrollo :wink:

¡Genial! Espero la respuesta de @David :slight_smile:

@pierre-gilles ¿Crees que es mejor que haga una PR hacia gladys? ¿O que marquemos sonos como deprecated de forma nativa?

Por cierto, he añadido en sonos dos campos adicionales (música actual) y play uri. El otro cambio es la adición de las IPs conocidas para los VLAN

Hola,

Por mi parte, el descubrimiento no funciona con un simple escaneo, pero sí funciona especificando las IPs de los altavoces, incluso desde otro VLAN. Sin embargo, me da dos veces la función de texto ¿? y no proporciona tantas configuraciones como la integración de HA (gravedad de los bajos, etc).

La función de reproducción actual también funciona, pero muestra dos veces el nombre del altavoz. Además, tengo el nombre correcto para todos los altavoces. Sin embargo, no entiendo para qué sirve la función de reproducción URI.

No son preocupaciones, tiene dos funciones de texto, es normal play uri y current song

Y lo que ves duplicado es el funcionamiento de gladys device (función)

@pierre-gilles no es tan simple para alguien que viene de ha

Las otras funciones pueden llegar más adelante, lo miraré. Vamos con calma ^^

A través de una escena puedes pasarle una URI tipo Spotify, por ejemplo.

Hice un PR en Spotify para tener acceso a ciertos datos, seamos pacientes ^^

Así, a través de una escena podremos reproducir una lista de reproducción, una canción, etc.

No está mal, eso permitiría enviar una lista de reproducción para despertarse suavemente por la mañana…

En todo caso, ayer tenía un problema y hoy está resuelto. ¡No se puede decir que mi paciencia haya sido puesta a prueba! ¡Muchas gracias! Estoy a disposición si puedo ayudar, con mucho gusto.

Sonos interno debe quedar obsoleto en favor de una integración externa

Me encargo de desplegar entonces este servicio de Sonos, gracias (¿pasas el antiguo a deprecated? ¿Hay un mecanismo para migrar el antiguo al nuevo @pierre-gilles?

ps:
La comunidad de Sonos está disponible

La PR para migrar los dispositivos está aquí: feat(sonos): migrate button + deprecated badge for the native integration by vincentBesseau · Pull Request #3089 · GladysAssistant/Gladys · GitHub

Sin embargo, hay una limitación del SDK, el volumen de la escena nunca llega a una integración externa (el SDK no transmite options.volume).
El impacto concreto: el volumen de la escena para « hablar en un altavoz » se ignora silenciosamente para cualquier integración externa, no solo para gladys-sonos — con los enlaces a la PR de Sonos y el código nativo equivalente en comparación.
Te he abierto un issue en el repositorio del SDK onSetValue has no way to receive per-call options (e.g. volume for play_notification) · Issue #33 · GladysAssistant/integration-sdk-js · GitHub