[Integración externa] Samsung Smart TV

¡Hola a todos,

Acabo de publicar una integración externa para controlar las TV Samsung (Tizen, modelos 2016 y posteriores) desde Gladys, completamente local: sin cuenta de Samsung, nada que pase por la nube. Debería estar disponible en la tienda en aproximadamente 1 hora.

:backhand_index_pointing_right: GitHub - cicoub13/gladys-samsung-tv: Gladys Assistant integration to control Samsung Smart TVs (Tizen) over the local network: power, volume, mute and input source. · GitHub

Lo que ofrece

  • Encendido/Apagado — apagado y encendido por Wake-on-LAN
  • Volumen — un control deslizante real del 0-100 %, con el nivel leído en la TV
  • Volumen + / − y Silencio
  • Fuente — TV, HDMI, y las aplicaciones instaladas cuando la TV las declara

La TV se encuentra automáticamente: un escaneo desde la pestaña Descubrimiento y aparece bajo su nombre.

Técnica

La elección técnica que me sorprendió

Pensé que todo pasaría por el WebSocket del mando a distancia, como hace Home Assistant. Problema: este canal solo transporta teclas. Puede enviar «volumen +», pero no sabe ni ajustar un nivel, ni leerlo. Es imposible tener un control deslizante de volumen fiable con esto.

La solución estaba en otro lugar: estas TV exponen un MediaRenderer UPnP cuyo servicio RenderingControl responde… sin ninguna autenticación. Volumen absoluto y silencio en lectura y escritura, sin emparejamiento.

Por lo tanto, la integración combina tres canales, cada uno para lo que hace mejor: la API REST de la TV para el estado encendido/apagado, el UPnP para el volumen y el silencio, y el WebSocket solo para las teclas — el único que requiere autorización en pantalla, una vez para siempre.

Dos ajustes a conocer en la TV

  1. Al primer comando, la TV muestra una solicitud de autorización: acéptala en pantalla, solo ocurre una vez.
  2. Para el encendido, hay que activar el despertar por red (Configuración → General → Red → Configuración avanzada → Activar con móvil). En Wi-Fi, la TV corta completamente su interfaz de red en espera y ningún paquete puede alcanzarla. En Ethernet es fiable.

Comentarios bienvenidos

Probado en un modelo UE55AU7025KXXC. Los otros modelos Tizen deberían funcionar, pero estoy abierto a comentarios — especialmente sobre la lista de aplicaciones, que mi modelo de 2021 se niega a comunicar (solo aparecen TV y HDMI, lo cual sigue siendo utilizable).

Acabo de instalar esta integración, mi TV Samsung UE55JU6800 es bien detectada, no se solicita autorización al principio, ¡y lamentablemente nada funciona!


Si no hay autorización, ninguna modificación funcionará. ¿Puedes enviarme los registros de la pestaña de Registros?

[2026-09-28T16:59:58.702Z] [INFO] Iniciando la integración de Samsung Smart TV..```.
[2026-09-28T16:59:58.844Z] [INFO] [gladys-sdk] conectado a Gladys (http://172.30.0.1:80)
[2026-09-28T17:14:21.272Z] [INFO] onScanRequest -> escaneando la red
[2026-09-28T17:14:26.288Z] [INFO] [discovery] SSDP: 2 respuestas, 2 hosts distintos para identificar
[2026-09-28T17:14:28.292Z] [INFO] [discovery] 1 televisor Samsung identificado
[2026-09-28T17:14:28.296Z] [INFO] [samsung:remote] No hay token de emparejamiento para 192.168.1.17: el TV pedirá autorizar "Gladys"
[2026-09-28T17:15:03.225Z] [INFO] onConfigUpdated -> nueva configuración recibida
[2026-09-28T17:18:31.517Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-up = 1
[2026-09-28T17:18:32.427Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-up = 1
[2026-09-28T17:18:32.964Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-up = 1
[2026-09-28T17:18:35.785Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:18:43.367Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:18:58.980Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 27
[2026-09-28T17:18:59.535Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 22
[2026-09-28T17:19:00.033Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 13
[2026-09-28T17:19:02.653Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 91
[2026-09-28T17:19:02.888Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 90
[2026-09-28T17:19:05.445Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 75
[2026-09-28T17:19:14.709Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 55
[2026-09-28T17:19:21.747Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-down = 1
[2026-09-28T17:19:23.009Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-down = 1
[2026-09-28T17:19:24.087Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-down = 1
[2026-09-28T17:19:24.745Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-down = 1
[2026-09-28T17:19:25.238Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-down = 1
[2026-09-28T17:19:27.063Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:19:30.658Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:power = 0
[2026-09-28T17:19:32.191Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:power = 1
[2026-09-28T17:19:32.192Z] [INFO] [television] Wake-on-LAN -> 78:bd:bc:f4:c4:e8
[2026-09-28T17:19:41.709Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:power = 0
[2026-09-28T17:19:41.710Z] [INFO] [samsung:remote] No hay token de emparejamiento para 192.168.1.17: el TV pedirá autorizar "Gladys"
[2026-09-28T17:19:44.965Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:source = key:KEY_TV
[2026-09-28T17:19:44.966Z] [INFO] [samsung:remote] No hay token de emparejamiento para 192.168.1.17: el TV pedirá autorizar "Gladys"
[2026-09-28T17:19:46.954Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:source = key:KEY_HDMI
[2026-09-28T17:21:23.583Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:21:25.731Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-up = 1
[2026-09-28T17:21:27.442Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-down = 1
[2026-09-28T17:21:30.179Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 69
[2026-09-28T17:23:02.930Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:23:04.898Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-up = 1
[2026-09-28T17:23:10.572Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:power = 1
[2026-09-28T17:23:10.572Z] [INFO] [television] Wake-on-LAN -> 78:bd:bc:f4:c4:e8
[2026-09-28T17:24:03.567Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:24:07.778Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:24:12.642Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-up = 1
[2026-09-28T17:24:16.912Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-up = 1
[2026-09-28T17:24:17.716Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume-up = 1
[2026-09-28T17:24:20.329Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:volume = 70
[2026-09-28T17:24:29.172Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:power = 1
[2026-09-28T17:24:29.172Z] [INFO] [television] Wake-on-LAN -> 78:bd:bc:f4:c4:e8
[2026-09-28T17:29:58.311Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:power = 1
[2026-09-28T17:29:58.311Z] [INFO] [television] Wake-on-LAN -> 78:bd:bc:f4:c4:e8
[2026-09-28T17:30:14.295Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:43:36.828Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1
[2026-09-28T17:43:43.447Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:power = 1
[2026-09-28T17:43:43.447Z] [INFO] [television] Wake-on-LAN -> 78:bd:bc:f4:c4:e8
[2026-09-28T17:43:47.272Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:power = 0
[2026-09-28T18:13:17.349Z] [WARN] [gladys-sdk] conexión a Gladys perdida (código de cierre 1006)
[2026-09-28T18:13:17.350Z] [WARN] [gladys-sdk] no conectado a Gladys (ws://172.30.0.1:80), reintentando en 1000 ms (intento 1)
[2026-09-28T18:13:18.354Z] [ERROR] [gladys-sdk] error de websocket en ws://172.30.0.1:80: connect ECONNREFUSED 172.30.0.1:80
[2026-09-28T18:13:18.355Z] [WARN] [gladys-sdk] no conectado a Gladys (ws://172.30.0.1:80), reintentando en 2000 ms (intento 2)
[2026-09-28T18:13:20.355Z] [ERROR] [gladys-sdk] error de websocket en ws://172.30.0.1:80: connect ECONNREFUSED 172.30.0.1:80
[2026-09-28T18:13:20.355Z] [WARN] [gladys-sdk] no conectado a Gladys (ws://172.30.0.1:80), reintentando en 4000 ms (intento 3)
[2026-09-28T18:13:24.361Z] [ERROR] [gladys-sdk] error de websocket en ws://172.30.0.1:80: connect ECONNREFUSED 172.30.0.1:80
[2026-09-28T18:13:24.361Z] [WARN] [gladys-sdk] no conectado a Gladys (ws://172.30.0.1:80), reintentando en 8000 ms (intento 4)
[2026-09-28T18:13:31.706Z] [INFO] Recibido SIGTERM -> apagado sin errores
[2026-09-28T18:13:32.091Z] [INFO] Iniciando la integración de Samsung Smart TV...
[2026-09-28T18:13:32.402Z] [INFO] [gladys-sdk] conectado a Gladys (http://172.30.0.1:80)
[2026-09-28T18:23:35.508Z] [INFO] onSetValue <- ext:ext-cicoub13-gladys-samsung-tv:tv:uuid:16ff9aea-547a-4c53-a0e2-dd0240a7f1f7:mute = 1

Gracias por los registros y las capturas.

He encontrado la causa principal: tu TV es una UE55JU6800, y la « J » indica que es de 2015. La integración está dirigida a los modelos Tizen de 2016 y posteriores. Las series H y J (2014-2015) usan otro protocolo para el control remoto, un protocolo cifrado con emparejamiento por código PIN, que la integración no maneja. Por eso no aparece ninguna solicitud de autorización: la TV acepta la conexión pero ignora las teclas enviadas. Por lo tanto, todo lo que pasa por las teclas no puede funcionar en tu caso: volumen + / −, fuente y apagado.

Por otro lado, una parte funciona: tu prueba de conexión lee bien el volumen (9 %), por lo que la TV responde en su API REST y en UPnP. El control deslizante de volumen y el mudo pasan por este canal UPnP, por lo que deberían funcionar.

Los registros no muestran ningún error, y es un defecto de la integración: cuando un comando falla, el error no se escribe en el registro. Voy a corregir eso, y eso será útil para todos en los próximos diagnósticos.

¡Vaya, mi tele es demasiado vieja!
Y el control de volumen y el silenciador no funcionan

Si quieres proponer una Pull Request para añadir compatibilidad con las viejas TV, eres bienvenido. Es más fácil con el hardware.

¿« proponer una PR » significa hacer una solicitud de funcionalidad?

La PR es más bien código modificado en GitHub, serías tú quien propondría las nuevas funcionalidades directamente en el código de integración.

¡Ah, sí! Pero, desafortunadamente, ¡todavía no he llegado allí! Solo puedo ser un humilde probador.