[Intégration externe] Samsung Smart TV

Bonjour à tous,

Je viens de publier une intégration externe pour piloter les TV Samsung (Tizen, modèles 2016 et suivants) depuis Gladys, entièrement en local : pas de compte Samsung, rien qui passe par le cloud. Elle devrait être disponible dans le store d’ici 1 heure.

: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

Ce qu’elle expose

  • Power — extinction, et rallumage par Wake-on-LAN
  • Volume — un vrai curseur 0-100 %, avec le niveau relu sur la TV
  • Volume + / − et Sourdine
  • Source — TV, HDMI, et les applications installées quand la TV les déclare

La TV est trouvée toute seule : un scan depuis l’onglet Découverte et elle apparaît sous son nom.

Technique

Le choix technique qui m’a surpris

Je pensais tout faire passer par le WebSocket de la télécommande, comme le fait Home Assistant. Problème : ce canal ne transporte que des touches. Il peut envoyer « volume + », mais il ne sait ni régler un niveau, ni le lire. Impossible d’avoir un curseur de volume fiable avec ça.

La solution était ailleurs : ces TV exposent un MediaRenderer UPnP dont le service RenderingControl répond… sans aucune authentification. Volume absolu et sourdine en lecture et écriture, sans appairage.

Du coup l’intégration combine trois canaux, chacun pour ce qu’il fait de mieux : l’API REST de la TV pour l’état allumé/éteint, l’UPnP pour le volume et la sourdine, et le WebSocket uniquement pour les touches — le seul qui demande l’autorisation à l’écran, une fois pour toutes.

Deux réglages à connaître côté TV

  1. À la première commande, la TV affiche une demande d’autorisation : acceptez-la à l’écran, ça n’arrive qu’une fois.
  2. Pour le rallumage, il faut activer le réveil réseau (Paramètres → Général → Réseau → Paramètres experts → Activer avec mobile). En Wi-Fi, la TV coupe entièrement son interface réseau en veille et aucun paquet ne peut plus l’atteindre. En Ethernet c’est fiable.

Retours bienvenus

Testée sur une UE55AU7025KXXC. Les autres modèles Tizen devraient fonctionner, mais je suis preneur de retours — notamment sur la liste des applications, que mon modèle 2021 refuse de communiquer (seules TV et HDMI apparaissent, ce qui reste utilisable).

Je viens d’installer cette intégration, ma TV Samsung UE55JU6800 est bien découverte, pas d’autorisation demandée au départ, et malheureusement rien ne fonctionne !


Si pas d’autorisation, aucune modification ne fonctionnera. Tu peux m’envoyer les logs de l’onglet Journaux ?

[2026-09-28T16:59:58.702Z] [INFO] Démarrage de l'intégration de la Samsung Smart TV..```.
[2026-09-28T16:59:58.844Z] [INFO] [gladys-sdk] connecté à Gladys (http://172.30.0.1:80)
[2026-09-28T17:14:21.272Z] [INFO] onScanRequest -> balayage du réseau
[2026-09-28T17:14:26.288Z] [INFO] [discovery] SSDP : 2 réponses, 2 hôtes distincts à identifier
[2026-09-28T17:14:28.292Z] [INFO] [discovery] 1 téléviseur Samsung identifié
[2026-09-28T17:14:28.296Z] [INFO] [samsung:remote] Aucun jeton d'appairage pour 192.168.1.17 : la TV demandera d'autoriser "Gladys"
[2026-09-28T17:15:03.225Z] [INFO] onConfigUpdated -> nouvelle configuration reçue
[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] Aucun jeton d'appairage pour 192.168.1.17 : la TV demandera d'autoriser "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] Aucun jeton d'appairage pour 192.168.1.17 : la TV demandera d'autoriser "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] connexion à Gladys perdue (code de fermeture 1006)
[2026-09-28T18:13:17.350Z] [WARN] [gladys-sdk] non connecté à Gladys (ws://172.30.0.1:80), nouvelle tentative dans 1000 ms (tentative 1)
[2026-09-28T18:13:18.354Z] [ERROR] [gladys-sdk] erreur de websocket sur ws://172.30.0.1:80: connect ECONNREFUSED 172.30.0.1:80
[2026-09-28T18:13:18.355Z] [WARN] [gladys-sdk] non connecté à Gladys (ws://172.30.0.1:80), nouvelle tentative dans 2000 ms (tentative 2)
[2026-09-28T18:13:20.355Z] [ERROR] [gladys-sdk] erreur de websocket sur ws://172.30.0.1:80: connect ECONNREFUSED 172.30.0.1:80
[2026-09-28T18:13:20.355Z] [WARN] [gladys-sdk] non connecté à Gladys (ws://172.30.0.1:80), nouvelle tentative dans 4000 ms (tentative 3)
[2026-09-28T18:13:24.361Z] [ERROR] [gladys-sdk] erreur de websocket sur ws://172.30.0.1:80: connect ECONNREFUSED 172.30.0.1:80
[2026-09-28T18:13:24.361Z] [WARN] [gladys-sdk] non connecté à Gladys (ws://172.30.0.1:80), nouvelle tentative dans 8000 ms (tentative 4)
[2026-09-28T18:13:31.706Z] [INFO] SIGTERM reçu -> arrêt progressif
[2026-09-28T18:13:32.091Z] [INFO] Démarrage de l'intégration Samsung Smart TV...
[2026-09-28T18:13:32.402Z] [INFO] [gladys-sdk] connecté à 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

Merci pour les logs et les captures.

J’ai trouvé la cause principale : ta TV est une UE55JU6800, et le « J » veut dire qu’elle date de 2015. L’intégration vise les modèles Tizen de 2016 et après. Les gammes H et J (2014-2015) utilisent un autre protocole pour la télécommande, un protocole chiffré avec appairage par code PIN, que l’intégration ne gère pas. C’est pour ça qu’aucune demande d’autorisation n’apparaît : la TV accepte la connexion mais ignore les touches envoyées. Tout ce qui passe par les touches ne peut donc pas marcher chez toi : volume + / −, source et extinction.

En revanche, une partie fonctionne : ton test de connexion lit bien le volume (9 %), donc la TV répond sur son API REST et en UPnP. Le curseur de volume et la sourdine passent par ce canal UPnP, donc ils devraient marcher.

Les logs ne montrent aucune erreur, et c’est un défaut de l’intégration : quand une commande échoue, l’erreur n’est pas écrite dans le journal. Je vais corriger ça, et ça servira à tout le monde pour les prochains diagnostics.

Ok, ma télé est trop vieille !
Et le curseur de volume et la sourdine ne fonctionnent toujours pas

Si tu veux proposer une Pull Request pour ajouter la compatibilité pour les vieilles TV, tu es le bienvenu. C’est plus facile avec le matériel.

« proposer une PR » : ça veut dire faire une demande de fonctionnalité ?

La PR c’est plutôt du code modifié sur github, ce serait toi qui proposerais les nouvelles fonctionnalités directement dans le code de l’intégration.

ah oui, mais malheureusement je n’en suis pas encore là ! Je ne peux être qu’un modeste testeur