samsungctl, commander sa télé en ligne de commande

J’ai pas honte une seconde d’avoir cherché à remplacer (en partie) cette put$%* de télécommande, puis je suis toujours plus près d’un clavier ha ha ha. Je précise que c’est un usage d’appoint, j’irai pas naviguer avec samsungctl dans Netflix par exemple. Je m’en sers pour éteindre la télé, changer de chaîne, monter/descendre le son, mute/unmute, pause/play.

samsungctl est disponible sous licence MIT, les commits sont rares mais ça fonctionne. On commence par récupérer l’adresse IP de sa télé Samsung (qu’on a connecté au réseau), je pense que le plus simple/rapide (comprendre sans se bouger le cul du canapé) reste nmap -sP 192.168.1.1/24 qui vous retournera les périphériques connectés à votre réseau local (à adapter à votre réseau, ip a est votre ami). Ensuite pour afficher les informations de votre télé http://adresseiptv:7676/rcr/ chez moi on obtient ceci.

<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:sec="http://www.sec.co.kr/dlna" xmlns:dlna="urn:schemas-dlna-org:device-1-0">
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>
  <device>
    <deviceType>urn:samsung.com:device:RemoteControlReceiver:1</deviceType>
    <friendlyName>[TV] TV</friendlyName>
    <manufacturer>Samsung Electronics</manufacturer>
    <manufacturerURL>http://www.samsung.com/sec</manufacturerURL>
    <modelDescription>Samsung DTV RCR</modelDescription>
    <modelName>UE50KU6070</modelName>
    <modelNumber>1.0</modelNumber>
    <modelURL>http://www.samsung.com/sec</modelURL>
    <serialNumber>46720804VBA</serialNumber>
    <UDN>uuid:f1a61e6a-2cf7-41c2-bd70-de72f6cb6f89</UDN>
    <sec:deviceID>SHCHC2SRFO2RS</sec:deviceID>
    <sec:ProductCap>Resolution:1920X1080,Tizen,Y2016</sec:ProductCap>
    <serviceList>
      <service>
        <serviceType>urn:samsung.com:service:MultiScreenService:1</serviceType>
        <serviceId>urn:samsung.com:serviceId:MultiScreenService</serviceId>
        <controlURL>/RCR/control/MultiScreenService</controlURL>
        <eventSubURL>/RCR/event/MultiScreenService</eventSubURL>
        <SCPDURL>MultiScreenService.xml</SCPDURL>
      </service>
    </serviceList>
    <sec:Capabilities>
        <sec:Capability name="samsung:multiscreen:1" port="8001" location="/ms/1.0/"/>
    </sec:Capabilities>
  </device>
</root>

Ce qui nous intéresse est le modelName : UE50KU6070. On voit ici les modèles supportés par samsungctl en s’aidant du code modèle de la doc Samsung. Ma télé est supportée, Series K année 2016. Donc dans mon cas on pip3 install samsungctl websocket-client puis on teste avec samsungctl --host adresseiptv --method websocket KEY_VOLUP. La télé va vous demander une confirmation pour le périphérique qui essaie de se connecter, vous validez.

J’utilise ces Key codes : KEY_ENTER (enter/pause/unpause), KEY_VOLDOWN (baisser le volume), KEY_VOLUP (augmenter le volume), KEY_MUTE (mute/unmute), KEY_POWER (extinction de la télé, il n’est pas possible de l’allumer car elle n’est alors pas connectée au réseau), KEY_0 à KEY_9 (changer de chaînes). Il y en a davantage.

Maintenant on tape samsungctl --host adresseiptv --method websocket KEY_MUTE. Pour juste avoir à taper samsungctl KEY_MUTE on renseigne dans ~/.config/samsungctl.conf.

{
	"host": "adresseiptv",
	"method": "websocket"
}

Euh… trop long et compliqué alors on va se faire une fonction qu’on placera dans ~/.bashrc.

tv() {
	case $1 in
		-) samsungctl KEY_VOLDOWN;;
		+) samsungctl KEY_VOLUP;;
		[1-9] | [1-9][0-9]) samsungctl KEY_${1:0:1} KEY_${1:1:1};;
		bfm) samsungctl KEY_1 KEY_5;;
		mute) samsungctl KEY_MUTE;;
		off) samsungctl KEY_POWER;;
		pause | enter) samsungctl KEY_ENTER;;
	esac
}

Usage : tv - (baisser le volume), tv + (augmenter le volume), tv mute (mute/unmute), tv bfm (changer la chaîne sur 15), tv 10 (changer la chaîne sur 10), tv pause ou tv enter (enter/pause/unpause). Pour rappel KEY_${1:0:1} KEY_${1:1:1} encore le Parameter Expansion de Bash !

Pourquoi ? Pour toutes les fois où femme « couve » la télécommande (je te dis que tu es assise dessus !), pour toutes les fois où elle laisse le son des pubs (mute !!), pour toutes les fois où il a fallu se lever (victoire de la flemme par ko !), parce que ça n’a pas de prix de voir son gosse se demander comment il fait papa pour éteindre la télé sans la télécommande (mais papa !).

Vus : 499
Publié par blog-libre : 133