Como meu Raspberry Pi pode ativar / desativar minha TV Samsung

17

Quero poder ligar (e desligar) minha TV Samsung, o raspberry pi está conectado à minha TV através de um cabo HDMI.

Meu primo já fez isso com outra TV e funcionou, mas com a Samsung parece não funcionar.

  • Qual é a maneira mais fácil de fazer isso?

  • Como isso é possível?

Obrigado pela ajuda!

Esteban
fonte

Respostas:

12

Como a resposta da @ lenik diz, sua TV precisa suportar o CEC. Eu instalei uma versão compilada do libcec que incluía o utilitário de linha de comando cec-clientdo SourceForge usando os seguintes 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



ATUALIZAÇÃO: 27-02-2017

O link acima para o SourceForge não existe mais. De acordo com este artigo, você pode instalar cec-clientusando o seguinte comando:

    sudo apt-get install cec-utils

O restante desta resposta ainda deve ser válido.


Aqui está um tópico no raspberrypi.org que discute o uso dos cec-clientcomandos para emitir.


A discussão diz que o seguinte comando ativou com êxito uma TV Samsung:

echo "on 0" | cec-client -s



Os seguintes comandos alteram a fonte de sintonizador de TV para Raspi HDMI:

echo "as" | cec-client -s

ou

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



Os seguintes comandos não tiveram êxito ao desligar a TV:

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
fonte
1
O FWIW echo "standby 0" | cec-client -sfunciona bem para minha TV Panasonic, embora o processo pare depois, e eu precisei kill -9disso.
Sparhawk
Link quebrado.
jjmontes
@jjmontes Obrigado, atualizei a resposta com informações alternativas sobre como instalar #cec-client
HeatfanJohn
Consegui aguentar minha TV Samsung. Alterei a seguinte configuração na TV: Aplicativo / AnyNet + (HDMI-CEC) / Configuração / Desligamento automático. Depois que eu definir isso como verdade, TV vai para modo de espera quando eu enviar standby 0.
filhit
7

você precisa de um aparelho de TV compatível com o protocolo CEC (Consumer Electronics Control) sobre HDMI. pode ser uma boa ideia consultar o manual da TV ou o site da empresa para encontrar detalhes sobre o seu caso específico. Também a pesquisa rápida por "TV_model + CEC" pode fornecer algumas dicas.

basicamente, se o seu aparelho de TV for fabricado há apenas alguns anos, há uma boa chance de você descobrir como configurar e ativar o CEC, mas para modelos mais antigos as chances não são tão boas.

A implementação do Samsung CEC é chamada Anynet+, você pode tentar procurar por isso também.

lenik
fonte
1
Também descobri que precisava iniciar o XMBC antes que o HDMI-CEC funcionasse e a TV continuasse.
Thorbjørn Ravn Andersen
4

Você poderia criar algo como um controle remoto de TV com um LED IR . Há um tutorial sobre o Adafruit sobre o que você gostaria de fazer. Aqui está outro post de blog sobre o mesmo assunto.

Nota: Você precisará usar os pinos GPIO. Não tenho certeza se você estava procurando uma solução que os utilizasse ou não.

syb0rg
fonte
Você precisaria de um led IR, não um sensor, para enviar comandos para a TV a partir do Pi.
Gerben 31/07/2013
1
@Gerben Editado para corrigir. Você pode remover a votação para baixo agora?
syb0rg 31/07
1
- (- 1) => +1 :-)
Gerben 31/07
Isso seria um bom truque, mas não há como obter feedback se seus sinais fizeram o que eles deveriam fazer. Além disso, a ordem das opções no menu de comutação de fonte depende da fonte atual.
EDP
4

Depois de instalar o cec-client de acordo com a resposta acima da HeatfanJohn, posso ligar / desligar minha HDTV Vizio E390i-A1 LED. Eu escrevi um script para a comunidade:

Crie um novo arquivo via:

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

cole o seguinte:

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

Torne executável:

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

Em seguida, crie aliases:

vi /home/pi/.bashrc

adicione o seguinte:

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

Salve, saia, efetue logoff / logon (ou apenas obtenha seu .bashrc). Agora você pode ligar ou desligar a TV usando "tvon" e "tvoff".

Agora você pode agendar um trabalho noturno para desligar a TV, caso caia no sono:

crontab -e

Adicione o seguinte:

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

Também escrevi alguns scripts para ajudar nisso. Fui um pouco mais longe que o CaptainRewind, embora ele tenha feito um bom trabalho. Este é apenas um script de shell escrito para controlar minha TV, então não incluí nada que não seja compatível (como controles de volume e canal; ainda estou procurando uma maneira de fazer uma dessas opções sem comprar muito mais hardware) e inclui detalhes específicos da configuração, como "tv input raspi", sendo sinônimo de "tv input 3", mas eu os deixei para que você possa ver como fazer essas personalizações para si mesmo.

Você pode usá-lo facilmente Se você o colocar em / usr / local / bin / tv, emitindo comandos como "tv on" "tv off" ou "tv input 1" ou você pode simplesmente colocá-lo em seu diretório pessoal como tv. sh e use-o diretamente de lá.

Espero que isso ajude algumas pessoas.

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

Você pode querer tentar novamente com uma versão recente do XBMC (agora chamada Kodi '). Tive melhor sorte com minha TV Samsung UE46F6500 e a OpenELEC (versão oficial): 5.95.3 com Kodi, embora o controle CEC seja perdido depois de colocar minha TV. em espera ou ligando minha TV novamente:

Modo de espera:

eco "espera 0" | cec-client -s

Em:

eco "em 0" | cec-client -s

Alterar fonte:

eco "como" | cec-client -s

No entanto, essas funções retiram o controle exclusivo da interface CEC do Kodi; portanto, o Kodi perde o controle CEC após qualquer um desses comandos e o controle remoto para de funcionar. Você precisará reiniciar o Kodi para fazê-lo funcionar novamente:

systemctl restart kodi

O Kodi (> = 13) possui as funções integradas CECToggleState, CECActivateSource, CECStandby Algumas pessoas estão trabalhando para passar esses comandos cec via python usando essas funções internas ou procurando uma possibilidade de abrir o hardware cec no modo compartilhado: http://forum.kodi.tv/showthread.php?tid=207524 e https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in- funções / 3638/4

sgiebels
fonte