Gazous Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 Bonjour, Je vous propose un petit tutoriel qui m’a permis de pouvoir contourner un problème qui m’ennuyais profondément… Comment allumer ma TV connectée Samsung en veille de manière fiable et économique depuis ma HC2 ? En effet, je dispose d’une TV Samsung modèle UE55D8000 qui a l’avantage comme la plupart des TV connectées de disposer d’une API de pilotage en IP afin de pouvoir la télécommander depuis un smartphone ou autre. Un plugin Fibaro permet d’ailleurs de piloter une TV Samsung. Oui mais voilà , car il y a toujours un Mais… En IP, on peut contrôler la quasi totalité des fonctions de la TV à l’exception d’une, la fonction ON. Pourquoi ? Et bien tout simplement car Samsung a choisi de faire en sorte que la TV, en veille n’a plus de stack IP active et n’est donc plus à l’écoute des requêtes de commandes qui se solderons par un Timeout. Peut-être que depuis ceci a évolué et que les nouveaux modèles sont maintenant à l'écoute même en veille mais ce n'est pas le cas de mon modèle. Le seul point positif à tout ça, c’est que la consommation de la TV en veille est nulle. C’est déjà ça mais avec une prise commandée on aurait pu contourner cela pour économiser de l’énergie la nuit par exemple. Si j’avais une FreeBox Revolution, le problème ne se poserait pas puisque cette dernière est compatible HDMI-CEC et qu’on peut la paramétrer pour que la mise en route de la FreeBox allume la TV. Malheureusement, la LiveBox Play que j’ai la "chance" de posséder ne gère pas les commandes HDMI-CEC, ce qui m’a par ailleurs amené à rédiger un autre tuto permettant de mieux la dompter : TV Commande LiveBox Play Bref, partant de là , j’ai étudié les différentes solutions qui s’offraient à moi : 1) Utiliser un boitier Infrarouge pilotable en IP : je ne suis pas trop fan de cela car il devra être posé dans mon salon à un endroit visible, nécessitant une alimentation, le tout pour un usage unique sachant que je contrôle tous mes autres équipements par radio ou IP. Bof... 2) Utiliser un boitier spécifique contrôlable en IP et disposant de sorties HDMI CEC ou RS232. En cherchant bien, il existe des boitier spécialisés qui proposent ce type de fonctions mais cela rester onéreux pour simplement allumer une TV 3) Utiliser mon RPI qui lui est déjà dans mon meuble TV raccordé à mon ampli avec kodi. C’est naturellement cette 3ième option que j’ai choisi de mettre en oeuvre non seulement pour le côté pratique et aussi pour économique car dans mon cas, cela n’a nécessité aucun investissement Prérequis : - Un RPI1 ou RPI2 (j’ai fait le test avec les 2 et ça fonctionne) - Quelques notions système unix pour savoir installer une distribution et exécuter les commandes qui vont bien Principe : 1) le RPI est raccordé en HDMI à la TV ou à l’ampli si vous en avez un, peu importe. 2) le RPI dispose d’une adresse IP fixe sur votre réseau (réservation d’IP sur votre routeur) 3) une commande standard HDMI-CEC va nous permettre de donner un ordre d’allumage à destination de la TV. On utilise pour cela la lib-cec 4) pour exécuter cette commande depuis la HC2, ce qui est la principale difficulté, je vous propose une petite API PHP que j’ai écrite Je vais donc dans ce tuto vous donner les clés pour configurer votre RPI correctement et vous fournir le code de l’API de contrôle PHP. En bonus, j’ai ajouté à cette API 2 fonctions pratiques qui vont vous permettre d’éteindre ou de rebooter proprement votre RPI depuis la HC2. Etapes à suivre : 1) Installez une distribution linux sur votre RPI1 ou 2 (Raspbian pour faire simple) 2) Installez la lib-cec en suivant un tuto comme celui-ci : https://github.com/Pulse-Eight/libcec/issues/84 Vous pouvez-vérifier que votre installation est correcte en testant les commandes suivantes : echo "on 0" | cec-client -s echo "standby 0" | cec-client -s Vous aurez compris que la première doit allumer la TV et la seconde l'éteindre. 3) Installez apache et php en suivant ce tuto : https://www.raspberrypi.org/documentation/remote-access/web-server/apache.md Une fois que vous avez installé tout ça et que tout tourne correctement, voici ce qu’il vous reste à faire. 4) régler des petits problèmes de droits qui vont permettre au serveur apache du RPI d’exécuter des commandes CEC. Pour cela, exécutez ces 3 commandes: sudo chmod 777 /var/www sudo chmod 777 /dev/vchiq sudo usermod -G video -a www-data 5) Maintenant, nous allons donner à apache le privilège de pouvoir exécuter des commandes en tant que root mais sans mot de passe. Ce n’est pas recommandé en terme de sécurité sur un serveur web à risque mais dans notre cas, cela ne pose pas de problème. Pour cela, saisissez la commande sudo visudo Puis éditer le fichier pour ajouter les lignes suivantes en bleu ci-dessous # User privilege specification root ALL=(ALL:ALL) ALL www-data ALL=(ALL) NOPASSWD:/usr/local/bin/cec-client www-data ALL=(ALL) NOPASSWD:/bin/echo www-data ALL=(ALL) NOPASSWD:/sbin/shutdown 6) Dernière petite manipulation et après s’en est fini pour les commandes. Par défaut, lorsque votre RPI va démarrer, il va exécuter une commande HDMI-CEC d’allumage de la TV durant sa phase de boot. Ce n’est pas pour notre cas d’usage le comportement souhaité. Imaginez un coupure de courant en votre absence. La TV s’allumerait automatiquement au re-démarrage… si comme moi vous avez automatisé l’allumage de l’ampli, box TV etc… cela peut vite devenir ennuyeux… Voici ce qu’il faut faire pour éviter cela. Exécutez la commande suivante qui permet d’éditer la configuration de démarrage de votre RPI : sudo nano /boot/config.txt Vous allez normalement trouver la ligne suivante hdmi_ignore_cec_init=1 à dé-commenter en retirant le # en début de ligne. Sinon, ajoutez là au fichier et enregistrez le. 7) Installation de l’API PHP Nous allons ici déployer sur le serveur apache de votre RPI des fichiers PHP qui vont nous permettre d’exécuter à distance les commandes CEC ou autre. Pour cela : - allez dans /var/www et créez un répertoire à nommer selon votre convenance « cec » par exemple - copiez dans ce répertoire les fichiers php fournis ci-dessous tv_on.php tv_off.php shutdown.php reboot.php 8) Tests : le moment de vérité. Bon maintenant on va voir si tout a bien été installé et configuré… Sur votre ordinateur, ouvrez un navigateur et testez l’URL suivante, TV éteinte : http://<ip-de-mon-RPI>/cec/tv_on.php Normalement, votre TV doit s’allumer. Si ce n’est pas le cas, ne paniquez pas, il doit y avoir un erreur à récupérer quelque part pour comprendre ce qui ne va pas. 9) Intégration sur la HC2 (ou HCL) : vous l’avez compris, maintenant que cela fonctionne rien de plus simple que d’exécuter un GET comme ceci par exemple pour allumer la TV depuis la HC2 RPI = Net.FHttp("<ip-de-mon-RPI>", 80) response = RPI:GET("/cec/tv_on.php") fibaro:debug(response) A titre d’illustration, je vous joint un Virtual Device et ses icônes, personnalisé à mes besoins qui me permet de gérer la mise en route/veille de l’ensemble des équipements situés dans mon meuble TV. Télévision.vfib Et les icônes correspondant à ma TV Samsung J'espère que ce tuto vous rendra service. En ce qui me concerne, il tourne depuis environ 10 mois sans aucun plantage et me permet d'allumer la TV automatiquement le soir lorsque mon épouse rentre à la maison ou dès que quelqu'un allume la LiveBox. 8
Julien Lemare Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 Merci !! à‡a peut être utile ^^, Je suis justement sur l'allumage automatique. Même pour moi qui ai une Bbox révolution, la TV accroché au mur c'est pas pratique de tirer 8 mètres de cable HDMI C'est pénible cette orientation de Samsung de bloqué cette fonction. Enfin bloquer :-) En tout cas cool et merci encore une fois
Gazous Posté(e) le 7 septembre 2015 Auteur Signaler Posté(e) le 7 septembre 2015 J'ai aussi ma TV accrochée au mur mais j'ai fait une saignée qui va jusqu'au meuble situé juste en dessous et dans lequel se trouvent tous mes équipements. Du coup j'ai uniquement besoin de câbles de 2m environ et comme j'ai un ampli, un seul câble HDMI vers la TV suffit.
Julien Lemare Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 Sympa le petit coin ;-) Pour ma part j'ai aucun meuble en dessous car il y a un écran qui descend devant et un meuble gênerait sa descente Envoyé depuis la Station Spatiale Internationale
Gazous Posté(e) le 7 septembre 2015 Auteur Signaler Posté(e) le 7 septembre 2015 Ha oui je vois. Moi j'attends de pouvoir acheter l'appartement d'à côté pour faire une salle de projection
Julien Lemare Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 Je ne peux que te le souhaiter. On voit mal sur cette photo. Mais ça donne une idée. Envoyé depuis la Station Spatiale Internationale
kiwi Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 Le seul problème c'est que avec un port HDMI utilisé le PI ne sort plus de son sur son jack 3,5 Sinon j'aurais fait ca aussi
mprinfo Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 On sent les membres du mois qui ce tire la bourre... lol 1
Julien Lemare Posté(e) le 7 septembre 2015 Signaler Posté(e) le 7 septembre 2015 c'est pas mieux de sortir sur HDMI plutôt que sur du stéréo comme le 3.5 ?
Gazous Posté(e) le 7 septembre 2015 Auteur Signaler Posté(e) le 7 septembre 2015 Je ne vois pas en quoi c'est un problème kiwi ? Quel interrêt d'utiliser le jack ? Tu utilises peut-être ton RPI pour diffuser de la musique en jack ?
kiwi Posté(e) le 8 septembre 2015 Signaler Posté(e) le 8 septembre 2015 L'intérêt c'est pour le TTS (voir un autre article que j'ai fait) pour faire l'annonce vocale des trucs qui se passent dans maison Parce, allumer la TV, annoncer "attention les volets se ferment" et l'éteindre...
Gazous Posté(e) le 8 septembre 2015 Auteur Signaler Posté(e) le 8 septembre 2015 A creuser mais il doit certainement y avoir un moyen de forcer ton TTS sortir sur le JACK...
Gazous Posté(e) le 8 septembre 2015 Auteur Signaler Posté(e) le 8 septembre 2015 Forcer audio vers jack -> sudo amixer cset numid=3 1 Forcer audio vers hdmi -> sudo amixer cset numid=3 2 Audio en mode auto -> sudo amixer cset numid=3 0
Julien Lemare Posté(e) le 8 septembre 2015 Signaler Posté(e) le 8 septembre 2015 Impec alors ;-) Au moins de 2 solutions àun probleme ^^, Envoyé depuis la Station Spatiale Internationale
CaptainIgloo Posté(e) le 9 septembre 2015 Signaler Posté(e) le 9 septembre 2015 https://github.com/SeraphicCorp/http-commands
jared Posté(e) le 10 septembre 2015 Signaler Posté(e) le 10 septembre 2015 Ca fait un moment que j'utilise cette méthode pour piloter ma tv. Si vous voulez d'autres commandes (type changer de source...) je peux fournir. Par contre Gazous dans ton module tu utilises un switch pour obtenir le statut ON/OFF de la TV je comprend pas pourquoi tu ne le fais pas aussi via CEC ??
Gazous Posté(e) le 10 septembre 2015 Auteur Signaler Posté(e) le 10 septembre 2015 Bonjour jared, Les commandes se trouvent facilement avec une simple recherche. Le but de ce tuto n'est pas de contrôler toutes les commandes de la TV puisque une fois en route elle est accessible en HTTP et donc directement depuis la HC2, ce qui est plus optimisé. Le but est d'apporter ici une solution pour mettre en route une TV en veille depuis la HC2 ce qui était mon problème. Concernant l'utilisation du switch pour obtenir le statut de la TV, c'est surtout pour détecter un allumage manuel (via la télécommande) de celle-ci en détectant une consommation électrique. La même chose en CEC ne se ferait pas aussi simplement et nécessiterait de passer par le RPI alors que là j'ai directement l'information.
fdp2 Posté(e) le 10 septembre 2015 Signaler Posté(e) le 10 septembre 2015 @jared, si tu as des exemples de commandes que tu utilise je suis preneur. Je n'ai pas encore etudier la solution mais cela m'intéresse de voir les utilisations possible Envoyé de mon SM-G900F en utilisant Tapatalk
jared Posté(e) le 12 septembre 2015 Signaler Posté(e) le 12 septembre 2015 Je comprend que c'est un mieux d'utiliser un switch mais en utiliser un juste pour ca, je trouve que ca fait cher !! Autre remarque : toutes les TV ne sont pas controlable en http... Sinon j'utilise quelques commandes que j'avais rassemblé dans le fichier php : <?php if(isset($_GET['command'])){ if ($_GET['command'] == "on") { exec('echo "on 0" | cec-client -s 2>&1', $output); print_r($output); } else if ($_GET['command'] == "off") { exec('echo "standby 0" | cec-client -s 2>&1', $output); print_r($output); } else if ($_GET['command'] == "hdmi1") { exec('echo "tx 1F 82 10 00" | cec-client -s 2>&1', $output); print_r($output); } else if ($_GET['command'] == "hdmi2") { exec('echo "tx 1F 82 20 00" | cec-client -s 2>&1', $output); print_r($output); } else if ($_GET['command'] == "hdmi3") { exec('echo "tx 1F 82 30 00" | cec-client -s 2>&1', $output); print_r($output); } else if ($_GET['command'] == "mute") { exec('echo "tx 40 44 43" | cec-client -s 2>&1', $output); print_r($output); } else if ($_GET['command'] == "volup") { exec('echo "tx 40 44 41" | cec-client -s 2>&1', $output); print_r($output); } else if ($_GET['command'] == "voldown") { exec('echo "tx 40 44 42" | cec-client -s 2>&1', $output); print_r($output); } else if ($_GET['command'] == "state") { exec('echo "pow 0" | cec-client -s -d 1|grep power 2>&1', $output); $json = implode("\n", $output); if (strpos($json, "on") == true) { echo "1"; } else { echo "0"; } } } ?> 2
Gazous Posté(e) le 12 septembre 2015 Auteur Signaler Posté(e) le 12 septembre 2015 Ha ouimais tunsais j'ai une multiprise zwave dans le meuble TV et il y a 6 prises donc tout est dessus Pour ceux qui n'ont pas,de TV contrôlable en HTTP il,faudrait faire un VD qui implémente toutes les commandes HDMI CEC :-)
jorderic Posté(e) le 12 décembre 2015 Signaler Posté(e) le 12 décembre 2015 @gazous: Salut, je te remercie pour ton tuto que j'ai suivi avec attention. J'arrive a utiliser les commandes CEC directement avec le RPI mais pas avec les commandes php... usr/local/bin/cec-client n'existe pas chez moi c'est : /usr/bin/cec-client ou /usr/bin/cecc-client Je n'arrive pas àtrouver l'erreur... Une idée peut être? Merci d'avance
Gazous Posté(e) le 12 décembre 2015 Auteur Signaler Posté(e) le 12 décembre 2015 Salut, ce n'est pas grave ça veut dire que ton cec-client s'est installé dans /usr/bin/cec-client Pour le cecc-client, c'est à priori une erreur d'installation. Pour que tes commandes en php fonctionne tu devrais essayer de remplacer www-data ALL=(ALL) NOPASSWD:/usr/local/bin/cec-client par www-data ALL=(ALL) NOPASSWD:/usr/bin/cec-client Tu l'as peut-être déjà fait ?
jorderic Posté(e) le 13 décembre 2015 Signaler Posté(e) le 13 décembre 2015 oui et pour être sur j'ai testé: # User privilege specification root ALL=(ALL:ALL) ALL www-data ALL=(ALL) NOPASSWD:/usr/local/bin/cec-client www-data ALL=(ALL) NOPASSWD:/usr/bin/cec-client www-data ALL=(ALL) NOPASSWD:/usr/bin/cecc-client www-data ALL=(ALL) NOPASSWD:/usr www-data ALL=(ALL) NOPASSWD:/bin www-data ALL=(ALL) NOPASSWD:/sbin www-data ALL=(ALL) NOPASSWD:/bin/echo www-data ALL=(ALL) NOPASSWD:/sbin/shutdown
jorderic Posté(e) le 15 décembre 2015 Signaler Posté(e) le 15 décembre 2015 @gazous: Désolé de te relancer mais quand penses tu? Je n'arrive toujours pas àfaire de commande en http....
Gazous Posté(e) le 15 décembre 2015 Auteur Signaler Posté(e) le 15 décembre 2015 Salut, pas de soucis. Est-ce que ton serveur apache tourne bien ?
Messages recommandés