¿Cómo puede mi Raspberry Pi encender / apagar mi televisor Samsung?

17

Quiero poder encender (apagar) mi TV Samsung, la Raspberry Pi está conectada a mi TV a través de un cable HDMI.

Mi primo ya hizo esto con otro televisor y funcionó, pero con el Samsung parece que no funciona.

  • ¿Cuál es la forma más fácil de hacer esto?

  • ¿Cómo es esto posible?

¡Gracias por tu ayuda!

Esteban
fuente

Respuestas:

12

Como dice la respuesta de @lenik, su televisor debe ser compatible con CEC. Instalé una versión compilada de libcec que incluía la utilidad de línea de comandos cec-clientde SourceForge usando los siguientes comandos:

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



ACTUALIZACIÓN: 2017-02-27

El enlace de arriba a SourceForge ya no existe. De acuerdo con este artículo , puede instalarlo cec-clientcon el siguiente comando:

    sudo apt-get install cec-utils

El resto de esta respuesta aún debería ser válida.


Aquí hay un hilo en raspberrypi.org que analiza el uso de los cec-clientcomandos para emitir.


El hilo dice que el siguiente comando encendió con éxito un televisor Samsung:

echo "on 0" | cec-client -s



Los siguientes comandos cambian la fuente del sintonizador de TV a Raspi HDMI:

echo "as" | cec-client -s

o

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



Los siguientes comandos no tuvieron éxito al apagar el televisor:

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

o

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
fuente
1
FWIW echo "standby 0" | cec-client -sfunciona bien para mi televisor Panasonic, aunque el proceso se detiene después, y tuve que kill -9hacerlo.
Sparhawk
El enlace está roto.
jjmontes
@jjmontes Gracias, actualicé la respuesta con información alternativa sobre cómo instalarcec-client
HeatfanJohn
Pude poner en espera mi televisor Samsung. He cambiado la siguiente configuración en el televisor: Aplicación / AnyNet + (HDMI-CEC) / Configuración / Apagado automático. Después de configurar esto como verdadero, la televisión se
pondrá
7

necesita un televisor que admita el protocolo CEC (Consumer Electronics Control) a través de HDMI. puede ser una buena idea consultar el manual de su TV o el sitio web de la compañía para encontrar detalles sobre su caso particular, también la búsqueda rápida de "TV_model + CEC" puede darle algunos consejos.

Básicamente, si su televisor se fabricó hace solo unos años, existe una buena posibilidad de que encuentre la forma de configurar y habilitar CEC, pero para los modelos más antiguos, las posibilidades no son tan buenas.

Se llama la implementación de Samsung CEC Anynet+, puede intentar buscar eso también.

lenik
fuente
1
También descubrí que necesitaba iniciar XMBC antes de que HDMI-CEC funcionara y la televisión se encendiera.
Thorbjørn Ravn Andersen
4

Podrías hacer algo así como un control remoto de TV con un LED IR . Hay un tutorial sobre Adafruit sobre lo que le gustaría hacer. Aquí hay otra publicación de blog sobre el mismo tema.

Nota: Tendrá que usar los pines GPIO. No estoy seguro de si estaba buscando una solución que los usara o no.

syb0rg
fuente
Necesitaría un LED IR, no un sensor, para enviar comandos a la TV desde el Pi.
Gerben
1
@Gerben Editado para arreglar. ¿Podría eliminar el voto negativo ahora?
syb0rg
1
- (- 1) => +1 :-)
Gerben
Esto sería un buen truco, pero no hay forma de obtener retroalimentación si sus señales hicieron lo que deberían hacer. Además, el orden de las opciones en el menú de cambio de fuente depende de su fuente actual.
EDP
4

Después de instalar el cliente cec según la respuesta anterior de HeatfanJohn, puedo encender / apagar con éxito mi Vizio E390i-A1 LED HDTV. Escribí un guión para la comunidad:

Crear nuevo archivo a través de:

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

pegar en lo siguiente:

#!/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

Hazlo ejecutable:

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

Luego, crea alias:

vi /home/pi/.bashrc

agregue lo siguiente:

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

Guardar, salir, cerrar sesión / iniciar sesión (o simplemente obtener su .bashrc). Ahora puede encender o apagar el televisor con "tvon" y "tvoff".

Ahora puede programar un trabajo nocturno para apagar el televisor en caso de que se quede dormido:

crontab -e

Agregue lo siguiente:

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

También escribí un par de guiones para ayudar con esto. Fui un poco más lejos que CaptainRewind, aunque hizo un buen trabajo. Este es solo un script de shell escrito para controlar mi TV, por lo que no incluí nada que no sea compatible (como controles de volumen y de canal; todavía estoy buscando una manera de hacer cualquiera de estos sin comprar mucho más hardware) e incluye detalles específicos de la configuración, como "tv input raspi" es sinónimo de "tv input 3", pero los dejé para que pueda ver cómo hacer esas personalizaciones por sí mismo.

Puede usarlo fácilmente si lo coloca en / usr / local / bin / tv emitiendo comandos como "tv on" "tv off" o "tv input 1" o simplemente puede ponerlo en su directorio de inicio como tv. sh y úsalo directamente desde allí.

Espero que esto ayude a algunas personas.

#!/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
fuente
0

Es posible que desee volver a intentarlo con una versión reciente de XBMC (ahora llamada Kodi '). He tenido mejor suerte con mi televisor Samsung UE46F6500 y OpenELEC Versión (oficial): 5.95.3 con Kodi, aunque el control CEC se perdió después de poner mi televisor estar en espera o volver a encender mi televisor:

Colocarse:

echo "en espera 0" | cec-client -s

En:

echo "en 0" | cec-client -s

Cambiar fuente:

echo "como" | cec-client -s

Sin embargo, estas funciones le quitan el control exclusivo de la interfaz CEC a Kodi, por lo que Kodi pierde el control CEC después de cualquiera de estos comandos y el control remoto deja de funcionar. Deberá reiniciar Kodi para que vuelva a funcionar:

systemctl reiniciar kodi

Kodi (> = 13) tiene funciones incorporadas CECToggleState, CECActivateSource, CECStandby Algunas personas están trabajando para pasar estos comandos cec a través de python usando estas funciones incorporadas, o buscan la posibilidad de abrir el hardware cec en modo compartido: http://forum.kodi.tv/showthread.php?tid=207524 y https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in- funciones / 3638/4

sgiebels
fuente