[TUTORIEL] Piloter TV Samsung 2019

Hello,
Je viens de faire l’acquisition d’une TV Samsung UN50RU7100 (Série 7 de 2019, avec système Tizen). J’ai passé pas mal de temps pour trouver une solution pour la piloter. Maintenant que ca marche, je vous partage ma solution en espérant qu’elle puisse être utile à certains.

OBJECTIF:

  • Piloter depuis Jeedom ma télé,
  • En premier lieu l’allumage et l’extinction,
  • Si possible au delà…

RESULTATS:

  • Pilotage ON/OFF de la télé,
  • Simulation de la plupart des boutons de la télécommande (volume +/-, mute, chaines, pavé numérique, source, etc…),
  • Possibilité de répéter une touche plusieurs fois (par ex 3 appuis sur la touche volume).

LIMITATIONS (non exhaustif):

  • On ne peut pas spécifier un niveau de volume précis,
  • On ne peut pas récupérer l’état de la télé (source, niveau de volume, etc…).
    Note: Pour savoir si la TV est ON ou OFF, j’utilise le Plugin NETWORK afin de la pinguer simplement.
  • On ne peut pas allumer la télé avec ce script
    Note: Pour allumer la télé, une commande WOL suffit (votre tv doit être branchée sur le LAN en filaire). J’utilise le Plugin NETWORK pour cela.

PRINCIPE:

  • Utilisation de l’API de la télé avec le script Python « samsungtv.py » samsungtv · PyPI.
    Note: Avant de choisir cette solution, j’avais essayé « samsungctl » sans succès. Pourtant leur fonctionnement parait similaire…
  • Scénario Jeedom qui appelle un script Jeedom (Plugin SCRIPT) avec les commandes à passer; ce dernier appelle un shell qui lance le script Python.

PREREQUIS:

  • python3 installé sur votre machine Jeedom,
  • plugin Jeedom script.

INSTALLATION:

  • Rendez-vous sur samsungtv · PyPI et installez le programme
    Note: Le script principal est installé sous /home/VOTRE_USER/.local/lib/python3.5/site-packages/samsungtv/remote.py
  • Creez un fichier « test.py » avec l’exemple donné sur le site. Naturellement, renseignez l’IP de votre télé.
from samsungtv import SamsungTV
tv = SamsungTV('192.168.xxx.xxx')
tv.power() # toggle power
  • Lancez ce script en ligne de commande. Vous devriez recevoir une notification de demande d’acces sur la télé. Acceptez.
  • La télé doit s’eteindre (car c’est la commande que vous lui avez passé). Le script affiche un token en retour; chez moi, c’est une suite de chiffres de type « 14371920 »
  • Editez le fichier « remote.py » et renseignez le token à la ligne 14:
def __init__(self, host, token='14371920', port=8002, name='SamsungTvRemote'):
  • Amusez-vous à modifier votre « test.py » avec les différentes commandes possibles (cf « remote.py » pour les connaitre).
  • Dans notre cas, nous allons utiliser la commande « tv.send_key(arg1,arg2) » afin de passer au script les commandes arg1 (la touche de la telecommande) et arg2 (le nombre d’appui de la touche) qui viendront de notre scénario Jeedom.

INTREGRATION JEEDOM:
Il y a sans doute plus simple/propre/optimisé mais voilà ce que j’ai mis en place:

  • Un fichier de commmande « controlTV.py » qui va permettre de passer les commandes du script Jeedom vers « remote.py ». Vous pouvez le stocker sous « /home/VOTRE_USER/ »:
import sys
sys.path.append('/home/VOTRE_USER/.local/lib/python3.5/site-packages')
from samsungtv import SamsungTV
tv = SamsungTV('192.168.xxx.xxx')
arg1 = sys.argv[1]
if len(sys.argv) > 2:
        arg2 = int(sys.argv[2])
        tv.send_key(arg1,arg2)
else:
        tv.send_key(arg1)
  • Ce script python est appelé par un script Jeedom qui appelle un shell bash (dans mon cas controlTV.sh):

#!/bin/bash
echo $1
IFS=':' read -r arg1 arg2 <<< "$1"
echo $arg1
echo $arg2
if [ -z "$arg2" ]
then
        sudo python3 /home/VOTRE_USER/controlTV.py $arg1
else
        sudo python3 /home/VOTRE_USER/controlTV.py $arg1 $arg2
fi
exit 0
  • Ce script Jeedom est appelé par un scénario qui lui envoie les paramètres dans un message du type « COMMANDE:NOMBRE_APPUI » (ex. « KEY_VOLUP:3 » pour 3 appuis sur la touche volume+)

  • Note: La touche KEY_POWER permet d’éteindre la télé mais pas de l’allumer. Pour allumer la télé, j’utilise la commande « wake on lan » (avec l’adresse MAC de la tv) que l’on peut trouver dans le plugin NETWORK de Jeedom

NEXT STEP:

  • Cette télé est compatible Smartthings et peut être pilotée via l’application sur téléphone en wifi. J’aurai aimé arriver à utiliser cette fonctionnalité; mais je n’ai pas trouvé de moyen pour piloter ma télé Samsung via Smarthings (sans avoir à acheter un hub Smarthings, évidemment). Si vous savez m’aider, je suis preneur de vos solutions.

En espérant rajouter une petite pierre de plus à l’édifice de notre bien beau Jeedom…
Bye.

1 « J'aime »

Bercolly a developpé un plugin pour le teles et il en pilote pas mal

Salut,
Sinon il y a des possibilités hdmi-cec avec les raspberry. Par exemple, j’ai une livebox qui n’est pas compatible hdmi-cec, et j’utilise un raspberry connecté sur la télé pour allumer et éteindre mon ampli et ma télé une fois la livebox allumée/éteinte. Ça me permet de n’utiliser qu’une télécommande.
Pour ça j’utilise un petit script python et un scénario sur jeedom.

Merci pour vos réponse. Ce que je souhaiterais faire, pour remplacer cette manière de faire, et l’unifier avec le pilotage de la barre de son, c’est de piloter ces 2 périphériques via le protocole Smartthings (sans hub propriétaire, bien entendu, et idéalement depuis un Pi).

Salut,
Est ce qu’avec cette solution tu as le retour d’état des chaines, des sources et sorties hp ou hdmi ?

Hello, non, rien du tout.
J’ai personnellement besoin uniquement de savoir si la télé est ON ou OFF et pour cela, je la pingue…
Si je pouvais les piloter comme des objets Smartthings, je pense que j’aurai bien mieux que çà.

Merci de ton retour.
J’arrive pas à trouver mon bonheur pour les retour d’etat. Tant pis.

@Ekinox bonjour,
Est ce que tu prévois un jour une évolution avec le retour détat stp?

Hello

Serait t-il possible de faire le meme pour HISENSE ?
fonctionnant sous Vidaa

J’ai trouvé ceci :

Hello, non, désolé, ce n’est pas prévu. J’arrive à faire ce que je souhaite et çà me suffit’
La piste la meilleure est de creuser la piste « smartthings » si ta télé est compatible. Le problème c’est que je ne sais pas comment piloter du smarthings sans module propriétaire… Si tu as une idée, je regarderai. Cela m’interesse pour la TV et la barre de son (les 2 compatibles Smartthings).

Hello Mikael,
Si le script python dont tu as donné le lien fonctionne avec ta télé, tu peux réutiliser la même mécanique que moi. Pour toi, un seul argument sera passé en commande (le nom de la touche); soit tu gardes mon exemple de script, soit tu peux le simplifier. Si tu as besoin d’aide, reviens vers moi, plutôt en privé.
Ensuite, ton programme pyhton permet de récupérer l’état de ta TV (volume et source). Là, c’est très différent de mon exemple mais ça reste peu complexe à mettre en oeuvre (kkes lignes dans un script): un script shell qui appelle ton script python et qui met à jour 2 infos dans un virtuel Jeedom. Jeedom le lancera à la demande ou régulièrement (toutes les minutes par ex.). Là encore, dispo pour t’aider.

je sais pas si ca peut t’aider mais j’ai testé samsungTVconnectivity (c’est ce qu’a mis Bercolly pour tester sa TV) et quand je lance le test j’obtiens ça :

Received : Connected to wss://192.xxxxxx:8002/api/v2/channels/samsung.remote.control?name=VGl6ZW5UdkNvbm5leGlvbg== successfully
/----------------------------------------------------------------------------------------------------------------------------------------------------/
Received : {« data »:{« clients »:[{« attributes »:{« name »:« VGl6ZW5UdkNvbm5leGlvbg== »},« connectTime »:1585248619312,« deviceName »:« VGl6ZW5UdkNvbm5leGlvbg== »,« id »:« xxxxxxxxxxxxx »,« isHost »:false}],« id »:« xxxxxxxxxxxxxx-3b323c94df84 »,« token »:« xxxxxxx »},« event »:« ms.channel.connect »}

/----------------------------------------------------------------------------------------------------------------------------------------------------/
Received : {« data »:{« update_type »:« ed.edenApp.update »},« event »:« ed.edenTV.update »}

/----------------------------------------------------------------------------------------------------------------------------------------------------/
Received : {« data »:{« update_type »:« ed.edenApp.update »},« event »:« ed.edenTV.update »}

/----------------------------------------------------------------------------------------------------------------------------------------------------/

Il y a bien un retour je suppose.
Pour info je ne suis pas développeur. Docn pour moi c’est du chinois lol

Hello, de ce que je comprends, l’utilitaire que tu utilises permet au développeur du plugin de vérifier si ta télé est compatible. Ce n’est qu’un outil de test et il ne me permet pas de répondre à ton besoin. Donc:

  • la bonne nouvelle: ta télé est compatible avec ce plugin; donc, il y a bien un moyen pour toi de récupérer l’état de ta Samsung (j’imagine que le plugin le fait).
  • la mauvaise nouvelle: je ne sais pas avec quel outil/protocole il utilise pour arriver à faire çà. Çà doit se trouver sur et net mais je n’ai pas trouvé qd j’ai cherché à faire çà en décembre dernier…

Eh bien non le plugin ne fait pas le retour d’etat Hélas j’ai demandé avant de l’acheter.
Donc pas de bonne nouvelle lol.
Tant pis mon ampli restera allumé quand je suis sur la source de la tnt.
Merci quand même.

pour ton retour d’état, tu peux mettre une prise avec suivi de conso. ça te permet ainsi de savoir si c’est allumé :wink:
enfin moi, j’ai fait comme cela :grin:

oui c’est une idée. Mais pour savoir si la tv est allumé j’utilise le plugin network :wink: .
Je souhaite le retour d’état quand la tv est en mode tuner TNT comme ça je pourrais éteindre l’ampli et basculer la tv en mode haut parleur.

Bonjour,

Merci pour ce partage, j’ai une question j’ai édité le fichier remote.py avec le token.
Mais a chaque execution, j’ai la demande d’autorisation sur la tv et le token change. Pourtant je retrouve bien SamsungTvRemote dans les périphériques autorisé pour ma tv. J’ai mis les autres token sans succès.

Auriez-vous une idée ? Je ne souhaite pas autorisé tous les périphériques (seulement ceux que j’ai autorisé une première fois).

Merci de votre aide

J’ai trouvé il faut modifier le script controlTV.py et ajouter le token en paramètre.
ligne : tv = SamsungTV(‹ 192.168.xxx.xxx ›, ‹ xxxxxxxx ›)

Voici le script complet :

import sys
sys.path.append('/home/VOTRE_USER/.local/lib/python3.5/site-packages')
from samsungtv import SamsungTV
tv = SamsungTV('192.168.xxx.xxx', 'xxxxxxxx')
arg1 = sys.argv[1]
if len(sys.argv) > 2:
        arg2 = int(sys.argv[2])
        tv.send_key(arg1,arg2)
else:
        tv.send_key(arg1)

Bonjour,

Je me permet de réagit à ce topic car je me pose une question.

Est-ce que l’on peut envoyer une notification à une TV Samsung et si oui comment?

Merci

Hello, l’API que je propose d’utiliser dans ce tuto « simule » la télécommande (appui sur des touches) uniquement. Pas de notification. Essaie de chercher sur le Net une API qui permet cela et j’essaierai de t’aider à l’implémenter.