[Bash] Contrôle TV Sony
Publié : 25 mai 2016, 22:53
Bonjour à tous,
Je ne sais pas si ce post est au bon endroit mais ayant pas mal galèré à mettre ça en place je me suis dit que partager la méthode serait une bonne idée.
Le postulat de base est de contrôler une TV Sony sous Android TV (je n’ai pas testé avec des TV plus anciennes) sur le réseau grâce à l’API Sony.
À noter que je ne suis pas du tout un expert en code et que je me suis servi de ce que j’ai glané sur internet puis je l’ai adapté à mes besoins.
À noter également que je suis sous OS X et que les commandes terminal ne seront peut-être pas les mêmes suivant les OS.
1 / Configurer le contrôle IP sur la TV
Dans un premier temps, sur la TV, accéder au menu Paramètres —> Réseau —> Réglage du réseau domestique —> Contrôle IP.
Dans le menu Authentification choisissez Clé normale et pré-partagée.
Ensuite, dans le menu Clé pré-partagée définissez-la par 0000. Si vous souhaitez modifier ce code, il faudra également le changer dans le script.
Je ne sais pas si ça a une importance mais dans le menu Simple Contrôle IP j'ai selectionné Oui.
2 / Les commandes
Les commandes sont définies par un code IRCC du type AAAAAQAAAAEAAAAHAw== associé à chaque action. Pour obtenir une liste de ces commandes créez un script shell print_ircc_codes.sh contenant ce code :
Exécutez-le dans un terminal par le bais de la commande :
Voici une capture d’écran du résultat en exemple :
Une commande IRCC est surlignée en exemple.
3 / Le script
De ce que j’ai compris, les commandes fonctionnent sur des données XML envoyées via une requête HTTP POST.
Il faut donc créer un scipt shell pour chaque action en changeant le code IRCC dans celui-ci.
Voici le code :
En plus d’adapter le code IRCC n’oubliez pas de changer l’adresse par celle de votre TV (lui attribuer une IP fixe est fortement recommandé).
4 / Intégration dans Domoticz
D’abord il faut changer les permissions du script pour éviter d’avoir une erreur 32256.
Dans un terminal il faut donc exécuter la commande :
Et puis ensuite on fait comme d’habitude. On créé un interrupteur à base de dummy puis en action on ou off on appelle le script par :
Voilà, désolé pour la tartine. J'espère avoir été clair.
Enjoy !
Je ne sais pas si ce post est au bon endroit mais ayant pas mal galèré à mettre ça en place je me suis dit que partager la méthode serait une bonne idée.
Le postulat de base est de contrôler une TV Sony sous Android TV (je n’ai pas testé avec des TV plus anciennes) sur le réseau grâce à l’API Sony.
À noter que je ne suis pas du tout un expert en code et que je me suis servi de ce que j’ai glané sur internet puis je l’ai adapté à mes besoins.
À noter également que je suis sous OS X et que les commandes terminal ne seront peut-être pas les mêmes suivant les OS.
1 / Configurer le contrôle IP sur la TV
Dans un premier temps, sur la TV, accéder au menu Paramètres —> Réseau —> Réglage du réseau domestique —> Contrôle IP.
Dans le menu Authentification choisissez Clé normale et pré-partagée.
Ensuite, dans le menu Clé pré-partagée définissez-la par 0000. Si vous souhaitez modifier ce code, il faudra également le changer dans le script.
Je ne sais pas si ça a une importance mais dans le menu Simple Contrôle IP j'ai selectionné Oui.
2 / Les commandes
Les commandes sont définies par un code IRCC du type AAAAAQAAAAEAAAAHAw== associé à chaque action. Pour obtenir une liste de ces commandes créez un script shell print_ircc_codes.sh contenant ce code :
Code : Tout sélectionner
#!/bin/sh
set -e
cd $(dirname $0)
if [ "$1" = "" ]; then
echo "Usage: $0 <TV_IP>"
exit 1
fi
curl --silent -XPOST http://$1/sony/system -d '{"method":"getRemoteControllerInfo","params":[],"id":10,"version":"1.0"}' | python -m json.tool
Code : Tout sélectionner
sh print_ircc_codes.sh adresse.ip.de.votre.tvUne commande IRCC est surlignée en exemple.
3 / Le script
De ce que j’ai compris, les commandes fonctionnent sur des données XML envoyées via une requête HTTP POST.
Il faut donc créer un scipt shell pour chaque action en changeant le code IRCC dans celui-ci.
Voici le code :
Code : Tout sélectionner
#!/bin/sh
set -e
cmd="<?xml version=\"1.0\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:X_SendIRCC xmlns:u=\"urn:schemas-sony-com:service:IRCC:1\"><IRCCCode>AAAAAQAAAAEAAAAvAw==</IRCCCode></u:X_SendIRCC></s:Body></s:Envelope>"
code=$(curl -w "%{http_code}" --silent -XPOST http://192.168.1.107/sony/IRCC -d "$cmd" -H 'Content-Type: text/xml; charset=UTF-8' -H 'SOAPACTION: "urn:schemas-sony-com:service:IRCC:1#X_SendIRCC"' -H "X-Auth-PSK: 0000" -o /dev/null )
4 / Intégration dans Domoticz
D’abord il faut changer les permissions du script pour éviter d’avoir une erreur 32256.
Dans un terminal il faut donc exécuter la commande :
Code : Tout sélectionner
chmod +x votrescript.shCode : Tout sélectionner
script:///chemin/du/fichier/votrescritpt.shVoilà, désolé pour la tartine. J'espère avoir été clair.
Enjoy !