Wie kann mein Raspberry Pi meinen Samsung Fernseher ein- / ausschalten?


16

Ich möchte mein Samsung-Fernsehgerät ein- und ausschalten können, wenn das Himbeer-Pi über ein HDMI-Kabel an mein Fernsehgerät angeschlossen ist.

Mein Cousin hat das schon mit anderen Tv gemacht und es hat funktioniert, aber mit dem Samsung scheint es nicht zu funktionieren.

  • Was ist der einfachste Weg, dies zu tun?

  • Wie ist das möglich?

Danke für Ihre Hilfe!

Antworten:


12

Wie die Antwort von @ lenik besagt, muss Ihr Fernseher CEC unterstützen. Ich habe eine kompilierte Version von libcec installiert, die das Befehlszeilendienstprogramm cec-clientvon SourceForge mit den folgenden Befehlen enthielt :

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



UPDATE: 2017-02-27

Der obige Link zu SourceForge existiert nicht mehr. Nach diesem Artikel können Sie cec-clientmit dem folgenden Befehl installieren :

    sudo apt-get install cec-utils

Der Rest dieser Antwort sollte noch gültig sein.


Hier ist ein Thread auf raspberrypi.org , in dem die Verwendung der cec-clientBefehle zum Ausgeben erläutert wird .


Der Thread besagt, dass der folgende Befehl ein Samsung-Fernsehgerät erfolgreich eingeschaltet hat:

echo "on 0" | cec-client -s



Die folgenden Befehle ändern die Quelle von TV-Tuner zu Raspi HDMI:

echo "as" | cec-client -s

oder

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



Die folgenden Befehle konnten das Fernsehgerät nicht ausschalten:

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

oder

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 -sfunktioniert bei meinem Panasonic-Fernseher einwandfrei , obwohl der Vorgang danach zum Stillstand kommt und ich es musste kill -9.
Sparhawk

Verbindung ist unterbrochen.
jjmontes

@jjmontes Danke, ich habe die Antwort mit alternativen Informationen zur Installation aktualisiertcec-client
HeatfanJohn

Ich konnte meinen Samsung-Fernseher in den Standby-Modus versetzen. Ich habe die folgenden Einstellungen am Fernsehgerät geändert: Anwendung / AnyNet + (HDMI-CEC) / Setup / Automatisch ausschalten. Nachdem ich dies auf true gesetzt habe, geht das Fernsehgerät in den Standby-Modus, wenn ich Standby 0 sende.
Filhit

7

Sie benötigen ein Fernsehgerät, das das CEC- Protokoll (Consumer Electronics Control) über HDMI unterstützt. Vielleicht ist es eine gute Idee, in Ihrem TV-Handbuch oder auf der Website Ihres Unternehmens nach Einzelheiten zu suchen, und bei der Schnellsuche nach "TV_model + CEC" erhalten Sie möglicherweise einige Hinweise.

Wenn Ihr Fernsehgerät erst vor ein paar Jahren hergestellt wurde, besteht eine gute Chance, dass Sie erfahren, wie Sie CEC einrichten und aktivieren, aber bei älteren Modellen sind die Chancen nicht so gut.

Die Samsung CEC-Implementierung wird aufgerufen Anynet+. Möglicherweise versuchen Sie auch, danach zu suchen.


1
Ich stellte auch fest, dass ich XMBC starten musste, bevor HDMI-CEC funktionierte und der Fernseher lief.
Thorbjørn Ravn Andersen

4

Sie könnten so etwas wie eine TV-Fernbedienung mit einer IR-LED machen . Es gibt ein Tutorial über Adafruit, was Sie tun möchten. Hier ist ein weiterer Blogbeitrag zum selben Thema.

Hinweis: Sie müssen die GPIO-Pins verwenden. Ich bin mir nicht sicher, ob Sie nach einer Lösung gesucht haben, die sie verwendet hat oder nicht.


Sie benötigen eine IR-LED, keinen Sensor, um Befehle vom Pi an den Fernseher zu senden.
Gerben

1
@Gerben Bearbeitet, um zu beheben. Könnten Sie jetzt die Down-Abstimmung entfernen?
syb0rg

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

Dies wäre ein guter Hack, aber es gibt keine Möglichkeit, eine Rückmeldung zu erhalten, ob Ihre Signale das getan haben, was sie vermutlich tun würden. Auch die Reihenfolge der Optionen im Menü für die Quellenumschaltung hängt von der aktuellen Quelle ab.
EDV

4

Nachdem ich den cec-client gemäß der obigen Antwort von HeatfanJohn installiert habe, kann ich meinen Vizio E390i-A1 LED HDTV erfolgreich ein- und ausschalten. Ich habe ein Skript für die Community geschrieben:

Neue Datei erstellen über:

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

Fügen Sie Folgendes ein:

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

Mach es ausführbar:

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

Dann erstellen Sie Aliase:

vi /home/pi/.bashrc

Fügen Sie Folgendes hinzu:

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

Speichern, beenden, abmelden / anmelden (oder nur die .bashrc-Datei als Quelle verwenden). Jetzt können Sie den Fernseher mit "tvon" und "tvoff" ein- und ausschalten.

Jetzt können Sie einen nächtlichen Job planen, um den Fernseher auszuschalten, falls Sie einschlafen:

crontab -e

Fügen Sie Folgendes hinzu:

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

2

Ich habe auch ein paar Skripte geschrieben, um dabei zu helfen. Ich bin ein bisschen weiter gegangen als CaptainRewind, obwohl er einen guten Job gemacht hat. Dies ist nur ein Shell-Skript, das zur Steuerung meines Fernsehgeräts geschrieben wurde. Daher habe ich nichts eingefügt, das nicht unterstützt wird (z. B. Lautstärkeregelung und Kanalsteuerung; ich suche immer noch nach einer Möglichkeit, dies zu tun, ohne viel mehr zu kaufen Hardware) und es enthält Setup-spezifische Details wie "tv input raspi" als Synonym für "tv input 3", aber ich habe diese so belassen, dass Sie sehen können, wie Sie solche Anpassungen für sich selbst vornehmen können.

Sie können es problemlos verwenden Wenn Sie es in / usr / local / bin / tv ablegen, indem Sie Befehle wie "tv on" "tv off" oder "tv input 1" eingeben, oder Sie können es einfach in Ihr Ausgangsverzeichnis als tv ablegen. sh und benutze es direkt von dort.

Ich hoffe das hilft einigen Leuten.

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

Vielleicht möchten Sie es mit einer neueren Version von XBMC (jetzt Kodi ') wiederholen. Ich hatte mit meinem Samsung UE46F6500-Fernseher und OpenELEC (offiziell) Version: 5.95.3 mit Kodi mehr Glück, obwohl die CEC-Kontrolle nach dem Aufstellen meines Fernsehers verloren geht auf Standby schalten oder meinen Fernseher wieder einschalten:

Bereithalten:

Echo "Standby 0" | cec-client -s

Auf:

echo "on 0" | cec-client -s

Quelle ändern:

echo "as" | cec-client -s

Diese Funktionen entziehen Kodi jedoch die ausschließliche Kontrolle über die CEC-Schnittstelle, sodass Kodi nach einem dieser Befehle die CEC-Kontrolle verliert und die Fernbedienung nicht mehr funktioniert. Sie müssen Kodi neu starten, damit es wieder funktioniert:

systemctl neu starten kodi

Kodi (> = 13) verfügt über integrierte Funktionen CECToggleState, CECActivateSource, CECStandby Einige Leute arbeiten daran, diese CEC-Befehle mit diesen integrierten Funktionen über Python weiterzuleiten, oder suchen nach einer Möglichkeit, die CEC-Hardware im gemeinsam genutzten Modus zu öffnen: http://forum.kodi.tv/showthread.php?tid=207524 und https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in- Funktionen / 3638/4

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.