Comment mon Raspberry Pi peut-il allumer / éteindre mon téléviseur Samsung

17

Je veux pouvoir allumer (et éteindre) mon téléviseur Samsung, le raspberry pi est connecté à mon téléviseur via un câble HDMI.

Mon cousin l'a déjà fait avec d'autres téléviseurs et cela a fonctionné, mais avec le Samsung semble ne pas fonctionner.

  • Quelle est la manière la plus simple de faire ça?

  • Comment est-ce possible?

Merci de votre aide!

Esteban
la source

Réponses:

12

Comme le dit la réponse de @ lenik, votre téléviseur doit prendre en charge CEC. J'ai installé une version compilée de libcec qui comprenait l'utilitaire cec-clientde ligne de commande de SourceForge à l'aide des commandes suivantes:

wget http://sourceforge.net/projects/selfprogramming/files/libCEC.deb/libcec_2.1.0-1_armhf.deb/download -O libcec_2.1.0-1_armhf.deb

sudo dpkg -i libcec_2.1.0-1_armhf.deb



MISE À JOUR: 2017-02-27

Le lien ci-dessus vers SourceForge n'existe plus. Selon cet article, vous pouvez installer cec-clientà l'aide de la commande suivante:

    sudo apt-get install cec-utils

Le reste de cette réponse devrait toujours être valide.


Voici un fil sur raspberrypi.org qui explique comment utiliser les cec-clientcommandes to pour émettre.


Le fil dit que la commande suivante a réussi à allumer un téléviseur Samsung:

echo "on 0" | cec-client -s



Les commandes suivantes changent la source du tuner TV en Raspi HDMI:

echo "as" | cec-client -s

ou

echo "tx 1f 82 30 00" | cec-client -s



Les commandes suivantes n'ont pas réussi à éteindre le téléviseur:

echo "tx 10 36" | cec-client -s 

ou

echo "standby 0" | cec-client -s

standby 0
DEBUG: [ 56474] << putting 'TV' (0) in standby mode
TRAFFIC: [ 56476]   << 10:36
DEBUG: [ 56477] sending data: len = 1, payload = 10:36
DEBUG: [ 56538] received data: header:00020001 p0:00003610 p1:00000000 p2:00000000 p3:00000000 reason:1
DEBUG: [ 56539] command transmitted
DEBUG: [ 56660] received data: header:00040002 p0:04360001 p1:00000000 p2:00000000 p3:00000000 reason:2
TRAFFIC: [ 56661]   >> 01:00:36:04
NOTICE: [ 56661]    >> TV (0) -> Recorder 1 (1): feature abort ( 0)
DEBUG: [ 56661] marking opcode 'standby' as unsupported feature for device 'TV'
HeatfanJohn
la source
1
FWIW echo "standby 0" | cec-client -sfonctionne très bien pour mon téléviseur Panasonic, bien que le processus s'arrête après, et je devais le faire kill -9.
Sparhawk
Le lien est rompu.
jjmontes
@jjmontes Merci, j'ai mis à jour la réponse avec des informations alternatives sur la façon d'installercec-client
HeatfanJohn
J'ai pu mettre mon téléviseur Samsung en veille. J'ai modifié le paramètre suivant sur le téléviseur: Application / AnyNet + (HDMI-CEC) / Configuration / Arrêt automatique. Après avoir défini la valeur true, le téléviseur se mettra en veille lorsque j'enverrai le mode veille 0.
filhit
7

vous avez besoin d'un téléviseur prenant en charge le protocole CEC (Consumer Electronics Control) via HDMI. il peut être judicieux de consulter le manuel de votre téléviseur ou le site Web de votre entreprise pour trouver des détails concernant votre cas particulier. Une recherche rapide de "TV_model + CEC" peut vous donner quelques conseils.

en gros, si votre téléviseur est fabriqué il y a quelques années à peine, il y a de fortes chances que vous trouviez comment configurer et activer CEC, mais pour les modèles plus anciens, les chances ne sont pas si bonnes.

L'implémentation de Samsung CEC est appelée Anynet+, vous pouvez également essayer de la rechercher.

lenik
la source
1
J'ai également constaté que je devais démarrer XMBC avant que HDMI-CEC ne fonctionne et que la télévision continue.
Thorbjørn Ravn Andersen
4

Vous pourriez faire quelque chose comme une télécommande de télévision avec une LED IR . Il y a un tutoriel sur Adafruit sur ce que vous aimeriez faire. Voici un autre article de blog sur le même sujet.

Remarque: vous devrez utiliser les broches GPIO. Je ne sais pas si vous cherchiez une solution qui les utilisait ou non.

syb0rg
la source
Vous auriez besoin d'une LED IR, pas d'un capteur, pour envoyer des commandes au téléviseur depuis le Pi.
Gerben
1
@Gerben Modifié pour corriger. Pourriez-vous supprimer le vote négatif maintenant?
syb0rg
1
- (- 1) => +1 :-)
Gerben
Cela ferait un bon hack, mais il n'y a aucun moyen d'obtenir des commentaires si vos signaux ont fait ce qu'ils supposaient faire. L'ordre des options dans le menu de commutation de source dépend également de sa source actuelle.
EDP
4

Après avoir installé le client cec selon la réponse ci-dessus de HeatfanJohn, je suis en mesure de mettre sous / hors tension mon téléviseur HD LED Vizio E390i-A1. J'ai écrit un script pour la communauté:

Créez un nouveau fichier via:

mkdir /opt/scripts; vi /opt/scripts/turntv.sh

collez ce qui suit:

#!/bin/bash
#Written by CaptainRewind for the RaspberryPi community
#Modify as needed
#Updated 2014-01-22:
#Now includes full path to cec-client (for cron purposes)
#Also includes "input" command to switch TV Input to RaspberryPi

action=${1}

cecBin="/usr/local/bin/cec-client"

onCommand='echo "on 0" | ${cecBin} -s'
offCommand='echo "standby 0" | ${cecBin} -s'
inputCommand='echo "as" | ${cecBin} -s'

do_on()
{
eval ${onCommand} > /dev/null 2>&1
}

do_off()
{
eval ${offCommand} > /dev/null 2>&1
}

do_input()
{
eval ${inputCommand} > /dev/null 2>&1
}

case ${action} in

        on)
                do_on
                exit 0
                ;;

        off)
                do_off
                exit 0
                ;;

        input)
                do_input
                exit 0
                ;;

        *)
                echo $"Usage: $0 {on|off|input}"
                exit 1
                ;;

esac

Rendez-le exécutable:

sudo chmod +x /opt/scripts/turntv.sh

Ensuite, créez des alias:

vi /home/pi/.bashrc

ajoutez ce qui suit:

alias tvon="/opt/scripts/turntv.sh on"
alias tvoff="/opt/scripts/turntv.sh off"
alias input="/opt/scripts/turntv.sh input"

Enregistrez, quittez, fermez la session / ouvrez une session (ou sourcez simplement votre .bashrc). Vous pouvez maintenant allumer ou éteindre le téléviseur en utilisant "tvon" et "tvoff".

Vous pouvez maintenant planifier un travail de nuit pour éteindre le téléviseur au cas où vous vous endormez:

crontab -e

Ajoutez ce qui suit:

00 03 * * * /opt/scripts/turntv.sh off
CaptainRewind
la source
2

J'ai également écrit quelques scripts pour vous aider. Je suis allé un peu plus loin que CaptainRewind, même s'il a fait du bon travail. Ceci est juste un script shell écrit pour contrôler mon téléviseur, donc je n'ai inclus aucun élément qu'il ne prend pas en charge (comme les contrôles de volume et de canal; je cherche toujours un moyen de faire l'un ou l'autre sans acheter beaucoup plus) matériel) et il inclut des détails spécifiques à la configuration tels que "tv input raspi" étant synonyme de "tv input 3" mais je les ai laissés pour que vous puissiez voir comment faire de telles personnalisations par vous-même.

Vous pouvez l'utiliser facilement Si vous le placez dans / usr / local / bin / tv en émettant des commandes telles que "tv on" "tv off" ou "tv input 1" ou vous pouvez simplement le mettre dans votre répertoire personnel comme tv. sh et l'utiliser directement à partir de là.

J'espère que cela aidera certaines personnes.

#!/bin/bash
# must be called with a parameter
# tv.sh [command]
# will send the associated command to the TV over CEC.

if [ $# -lt 1 ] #Check to see if at least one parameter was supplied
then
  echo "Must be called with the command to send to the television"
  echo "Examples include on, off, and input."
  echo "example: " $0 "input PC"        # $0 is the name of the program
  echo "For help, use: " $0 " -? "
  exit 1
fi

case $1 in
  "-?")       echo "Supported commands include: on, off, status, as,"
              echo "input [source]" ;;
  ## begin list of commands.
  ## most of these came from http://www.cec-o-matic.com/
  ## more can be added, including proprietary commands.
  "on")       echo "on 0" | cec-client -s ;;
  "off")      echo "standby 0" | cec-client -s ;;
  "status")   echo "pow 0" | cec-client -s |grep "power status:" ;;
  "as")       echo "as" | cec-client -s ;;
  "input")
  if [ $# -ge 2 ]       # if there were 2 or more parameters
  then
    case $2 in          # check the second one
        # NOTE: These must all be broadcast to work. (2nd nibble must be F)
      "1")      echo "tx 1F 82 10 00" | cec-client -s ;;
      "bluray") echo "tx 1F 82 10 00" | cec-client -s ;; # same as 1
      "2")      echo "tx 1F 82 20 00" | cec-client -s ;;
      "3")      echo "tx 1F 82 30 00" | cec-client -s ;;
      "pc")     echo "tx 1F 82 30 00" | cec-client -s ;; # same as 3
      "raspi")  echo "tx 1F 82 30 00" | cec-client -s ;; # same as 3
      "4")      echo "tx 1F 82 40 00" | cec-client -s ;;
    esac
  else
    echo "input needs a second parameter"
    echo "usage: " $0 " input [input name]"
    echo "input name is 1-4, bluray, pc, or raspi"
  fi
  ;;  # end of the input case

  *) echo $1 "is not a recognized parameter. " $0 " -? for a list." ;;
esac
exit 0
Tarcas
la source
0

Vous voudrez peut-être réessayer avec une version récente de XBMC (maintenant appelée Kodi ') J'ai eu plus de chance avec mon téléviseur Samsung UE46F6500 et OpenELEC (officiel) Version: 5.95.3 avec Kodi, bien que le contrôle CEC soit perdu après avoir mis mon téléviseur pour mettre en veille ou rallumer mon téléviseur:

Etre prêt:

echo "standby 0" | cec-client -s

Sur:

écho "sur 0" | cec-client -s

Changer la source:

écho "comme" | cec-client -s

Cependant, ces fonctions retirent le contrôle exclusif de l'interface CEC à Kodi, donc Kodi perd le contrôle CEC après l'une de ces commandes et la télécommande cesse de fonctionner. Vous devrez redémarrer Kodi pour le faire fonctionner à nouveau:

systemctl restart kodi

Kodi (> = 13) a des fonctions intégrées CECToggleState, CECActivateSource, CECStandby Certaines personnes travaillent pour passer ces commandes cec via python en utilisant ces fonctions intégrées, ou cherchent une possibilité d'ouvrir le matériel cec en mode partagé: http://forum.kodi.tv/showthread.php?tid=207524 et https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in- fonctions / 3638/4

sgiebels
la source