Come può il mio Raspberry Pi accendere / spegnere la mia TV Samsung


17

Voglio essere in grado di accendere (e spegnere) la mia TV Samsung, il raspberry pi è collegato alla mia TV tramite un cavo HDMI.

Mio cugino lo ha già fatto con altre TV e ha funzionato, ma con Samsung sembra non funzionare.

  • Qual è il modo più semplice per farlo?

  • Com'è possibile?

Grazie per l'aiuto!

Risposte:


12

Come dice la risposta di @lenik, la tua TV deve supportare CEC. Ho installato una versione compilata di libcec che includeva l'utilità della riga di comando cec-clientda SourceForge usando i seguenti comandi:

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



AGGIORNAMENTO: 27/02/2017

Il link sopra a SourceForge non esiste più. Secondo questo articolo è possibile installare cec-clientutilizzando il seguente comando:

    sudo apt-get install cec-utils

Il resto di questa risposta dovrebbe essere ancora valido.


Ecco un thread su raspberrypi.org che discute l'uso dei cec-clientcomandi per emettere.


Il thread dice che il seguente comando ha acceso correttamente una TV Samsung:

echo "on 0" | cec-client -s



I seguenti comandi cambiano la sorgente dal sintonizzatore TV a Raspi HDMI:

echo "as" | cec-client -s

o

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



I seguenti comandi non hanno avuto successo nello spegnere la TV:

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'

1
FWIW echo "standby 0" | cec-client -sfunziona benissimo per la mia TV Panasonic, anche se il processo si blocca dopo, e ho dovuto kill -9farlo.
Sparhawk,

Il collegamento è interrotto.
jjmontes,

@jjmontes Grazie, ho aggiornato la risposta con informazioni alternative su come installarecec-client
HeatfanJohn

Sono stato in grado di mettere in standby la mia TV Samsung. Ho modificato le seguenti impostazioni sul televisore: Applicazione / AnyNet + (HDMI-CEC) / Impostazione / Spegnimento automatico. Dopo aver impostato questo su true, la TV andrà in standby quando invierò standby 0.
filhit

7

è necessario un televisore che supporti il ​​protocollo CEC (Consumer Electronics Control) su HDMI. potrebbe essere una buona idea consultare il manuale della TV o il sito Web dell'azienda per trovare i dettagli relativi al caso specifico, inoltre una rapida ricerca di "TV_model + CEC" potrebbe fornire alcuni suggerimenti.

fondamentalmente, se il tuo televisore è stato realizzato solo pochi anni fa, ci sono buone probabilità che tu possa trovare come impostare e abilitare CEC, ma per i modelli più vecchi le probabilità non sono così buone.

Viene chiamata l'implementazione Samsung CEC Anynet+, potresti provare a cercarla anche tu.


1
Ho anche scoperto che dovevo avviare XMBC prima che HDMI-CEC funzionasse e la tv continuasse.
Thorbjørn Ravn Andersen,

4

Potresti creare qualcosa come un telecomando della TV con un LED IR . C'è un tutorial su Adafruit su cosa ti piacerebbe fare. Ecco un altro post sul blog sullo stesso argomento.

Nota: dovrai usare i pin GPIO. Non sono sicuro che stavi cercando una soluzione che li usasse o meno.


Avresti bisogno di un led IR, non di un sensore, per inviare comandi alla TV dal Pi.
Gerben,

1
@Gerben Modificato per risolvere. Potresti rimuovere il voto negativo adesso?
Syb0rg

1
- (- 1) => +1 :-)
Gerben

Questo farebbe un buon trucco, ma non c'è modo di ottenere feedback se i tuoi segnali hanno fatto quello che avrebbero dovuto fare. Inoltre, l'ordine delle opzioni nel menu di commutazione della sorgente dipende dalla sorgente corrente.
EDP,

4

Dopo aver installato il client cec per la risposta di HeatfanJohn sopra, sono in grado di accendere / spegnere il mio HDTV LED Vizio E390i-A1. Ho scritto una sceneggiatura per la community:

Crea nuovo file tramite:

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

incollare quanto segue:

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

Renderlo eseguibile:

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

Quindi, creare alias:

vi /home/pi/.bashrc

aggiungere quanto segue:

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

Salva, esci, disconnetti / accedi (o semplicemente procurati il ​​tuo .bashrc). Ora puoi accendere o spegnere la TV usando "tvon" e "tvoff".

Ora puoi programmare un lavoro notturno per spegnere la TV nel caso in cui ti addormenti:

crontab -e

Aggiungi quanto segue:

00 03 * * * /opt/scripts/turntv.sh off

2

Ho anche scritto un paio di script per aiutare in questo. Sono andato un po 'oltre rispetto a CaptainRewind, sebbene abbia fatto un buon lavoro. Questo è solo uno script di shell scritto per controllare la mia TV, quindi non ho incluso nulla che non supporti (come i controlli del volume e dei canali; sto ancora cercando un modo per fare uno di questi senza acquistare molto extra hardware) e include dettagli specifici della configurazione come "tv input raspi", che è sinonimo di "tv input 3", ma li ho lasciati in modo che tu possa vedere come realizzare tali personalizzazioni per te stesso.

Puoi usarlo facilmente Se lo metti in / usr / local / bin / tv inviando comandi come "tv on" "tv off" o "tv input 1" o puoi semplicemente inserirlo nella tua home directory come tv. sh e usarlo direttamente da lì.

Spero che questo aiuti alcune persone.

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

0

Potresti voler riprovare con una versione recente di XBMC (ora chiamata Kodi ') Ho avuto più fortuna con la mia TV Samsung UE46F6500 e OpenELEC (ufficiale): 5.95.3 con Kodi, anche se il controllo CEC si perde dopo aver messo la mia tv per mettere in standby o riaccendere la tv:

Pausa:

echo "standby 0" | cec-client -s

Su:

echo "on 0" | cec-client -s

Cambia fonte:

echo "as" | cec-client -s

Tuttavia, queste funzioni portano il controllo esclusivo dell'interfaccia CEC lontano da Kodi, quindi Kodi perde il controllo CEC dopo uno di questi comandi e il telecomando smette di funzionare. Dovrai riavviare Kodi per farlo funzionare di nuovo:

systemctl riavvia kodi

Kodi (> = 13) ha funzioni integrate CECToggleState, CECActivateSource, CECStandby Alcune persone stanno lavorando per passare questi comandi cec tramite python usando queste funzioni integrate o cercando una possibilità per aprire l'hardware cec in modalità condivisa: http://forum.kodi.tv/showthread.php?tid=207524 e https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in- funzioni / 3638/4

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.