Rss

  • youtube
  • google

Fernseher über HDMI (CEC) per Raspberry PI steuern

Wie der begeisterte Bastler bestimmt schon gemerkt hat, kann man mit dem Raspberry PI so einige coole Geräte steuern.
So ist es vielleicht auch nützlich den Fernseher ansteuern zu können. Dafür braucht man generell kein Raspberry PI, sondern nur HDMI und ein CEC-fähigen Fernseher, Endgerät. CEC ist ein definiertes Steuerprotokoll, worüber sich Entertainment Geräte steuern lassen und so z.B. eingeschaltet, ausgeschaltet werden können.
Je nach Hersteller heißt das aber nicht immer CEC, sondern z.B. Anynet+ bei Samsung oder Bravia Theatre Sync bei Sony. Hier findet ihr noch einen ganz einfach geschrieben Artikel der CEC erklärt.

Mit der Software „cec-client“ könnt ihr unter einem Linux-Gerät euren Fernseher via HDMI steuern.
Ich beschreibe hier kurz die Installation und ein paar nützliche Befehle.

Schritt 1: Notwendige Abhängigkeiten installieren

sudo apt-get install autoconf build-essential git liblockdev1-dev libtool libudev-dev pkg-config 

Schritt 2: Quellcode herunterladen
Die Quellen für libcec bzw. cec-client sind offen verfügbar unter: https://github.com/Pulse-Eight/libcec.

git clone git://github.com/Pulse-Eight/libcec.git

Schritt 3: Konfigurieren

cd libcec/
./bootstrap
./configure --with-rpi-include-path=/opt/vc/include --with-rpi-lib-path=/opt/vc/lib --enable-rpi

Schritt 4: Kompilieren

make
sudo make install
sudo ldconfig

Schritt 5: Testen
Nun probieren wir aus, ob der cec-client denn funktioniert, er müsste den Raspberry PI erkennen.


pi@RPI ~ $ cec-client -l
Found devices: 1

device: 1
com port: RPI
vendor id: 2708
product id: 1001
firmware version: 1
type: Raspberry Pi

So und nun zum interessanten Teil: Fernseher per HDMI steuern.
Prüft ob an eurem Fernseher die HDMI-CEC Funktion eingeschaltet ist. Dies ist Standardmäßig nicht immer der Fall. In der Regel findet sich dies immer irgendwo unter Einstellungen -> System -> HDMI.

Fernseher per CEC-Client einschalten: 
Folgenden Befehl einfach über die Kommandozeile absetzen.

echo "on 0" | sudo cec-client -s -d 1

Das -s brauchen wir, damit der cec-client im „Single Command“ Mode arbeitet, und unseren Befehl per echo-pipe entgegen nimmt.
Das -d 1 setzt das Loglevel und sorgt für eine überschaubare Rückmeldung. Ihr könnt das ruhig mal weglassen und die komplette Ausgabe analysieren.

Fernseher per CEC-Client ausschalten:

echo "standby 0" | sudo cec-client -s -d 1

Power-Status per CEC-Client auslesen:

echo "pow 0" | sudo cec-client -s -d 1

Fernseher per CEC-Client auf HDMI1,HDMI2,HDMI3, usw. umschalten:

echo "tx 4F 82 10 00" | cec-client -s

Wofür das 4F steht weiß ich ehrlich gesagt nicht, die 82 steht für den „Active Source“ Befehl, die 10 ist bei meinem Sony Fernseher HDMI1, die 00 ist das Ziel als Broadcast.
Um auf HDMI4 umzuschalten wäre der Befehl also:

echo "tx 4F 82 40 00" | cec-client -s

Da muss man ein bisschen herumprobieren, kann je nach Fernseher etwas unterschiedlich sein.

Hilfreich kann folgende Seite sein: www.cec-o-matic.com, dort kann man sich die HDMI Befehle passend zusammenklicken.

Fernseher über HDMI (CEC) per Raspberry PI steuern

5 (100%) 1 vote

Comments (13)

  1. Steffen

    Hallo,

    zunächst herzlichen Dank für dieses Tutorial, funktioniert hervorragend. Genau danach habe ich gesucht 😉

    Bei mir ergab sich das Problem, dass die libbcm_host.so nicht gefunden wurde. Deshalb konnte die frisch compilierte libcec.so nicht geladen werden. Abhilfe schaffte eine selbst erstellte /etc/ld.so.conf.d/libbcm.conf mit einem Dreizeiler:

    # libbcm_host.so on raspberry is found here
    /opt/vc/lib
    /opt/vc/include

    Danach noch einmal ‚ldconfig‘ aufrufen, und alles läuft.

    Eine Frage noch: Ist das Fehlen des ’sudo‘ beim umschalten beabsichtig?

    Beste Grüße, Steffen

  2. Steffen

    Hallo,

    ein Bisschen Spielerei später (cec-o-matic machts möglich), habe ich herausgefunden, dass die „4F“ Source und Destination codiert. 4 steht hier für „Playback 1“ als Source und F steht für „Broadcast“ als Destination.

    Außerdem steht laut cec-o-matic nicht die ’10‘ als Adresse, sondern die ’10 00′, die in die physikalische Adresse 1.0.0.0 gewandelt wird.

    Beste Grüße, Steffen

  3. NCO

    Danke für das Tutorial.
    Das Umschalten der HDMI Kanäle kannste ich noch nicht.
    Allerdings hängt der cec-client mit:
    „command ‚active source‘ timeout“

    Habt ihr eine Idee warum?
    Bei mit wird übrigens nicht „Playback 1“ eingeblendet sondern „Recorder 1“ (Sony KDL-55W805B)

    Und noch etwas:
    Wie schaltet man auf den TV „Eingang“ um?
    Viele Grüße,
    NCO

  4. vimtut0r

    Vielen Dank fuer das Tutorial, leider sind die Installationsschritte outdatet:

    Ein Auszug aus der README.md:
    To compile libCEC on a new Raspbian installation, follow these instructions:
    `
    apt-get update
    apt-get install cmake liblockdev1-dev libudev-dev libxrandr-dev python-dev swig
    cd
    git clone https://github.com/Pulse-Eight/platform.git
    mkdir platform/build
    cd platform/build
    cmake ..
    make
    sudo make install
    cd
    git clone https://github.com/Pulse-Eight/libcec.git
    mkdir libcec/build
    cd libcec/build
    cmake -DRPI_INCLUDE_DIR=/opt/vc/include -DRPI_LIB_DIR=/opt/vc/lib ..
    make -j4
    sudo make install
    sudo ldconfig

    Cheers,

    vimtut0r

  5. MAD

    Hallo, danke für alles oben stehende.
    Ich habe soweit alles zum laufen gebracht, aber habe ein merkwürdiges Problem. Schalte ich den TV über CEC aus und wieder an, kann ich ihn nicht wieder in den Standby schalten.
    Manuelles an- und ausschalten bringt ebenfalls keine Besserung.
    Drücke ich allerdings auf der FB z.B. „nur“ die Return-Taste, kann ich den TV wieder über das CEC steuern. Allerdings wieder nur 1 „Zyklus“.
    Es erfordert also momentan eine Interaktion auf der FB. Ist so ein Problem bisher bekannt? Habe ich evtl etwas übersehen? Betreibe einen Toshiba am Pi. Danke schonmal für jegliche Hilfe.

    • Xtoph

      Hallo, nach „make -j4“ bekomme ich Fehlermeldungen:
      In file included from /home/pi/libcec/src/libcec/CECClient.cpp:35:0:
      /home/pi/libcec/src/libcec/CECClient.h:49:11: error: ‘shared_ptr’ in namespace ‘std’ does not name a type
      u.s.w.
      Was kann das sein?

  6. Jens

    Hallo ich wollte mal Fragen benötigt man hierzu auch den PulseEight CEC Adapter?
    Ich konnte jetzt nirgends was eindeutiges finden.

    gruß

  7. Anonymous

    Hex Liebe Leute
    Mein Problem ist, dass der cec-client meine Pi nicht findet, Konfiguration lief reibungslos nach der aktuellen Anleitung. Lösungen?

  8. jsan55

    Danke für den Beitrag. Hat bei mir gut funktioniert. Mit LGCommander konnte ich den Fernseher ausschalten aber leider nicht mehr einschalten. Mit einem Raspberrypi und der „libcnc“ konnte ich eine Lösung finden.
    Ich habe das wichtigste hier zusammengefasst.
    Rasperrypi CNC HDMI LGCommander LG-Smart TV mit Linux steuern
    http://www.pedaltreter.at/jsan/lgtv/LG_Smart_TV_CEC_en.html

  9. florian112

    Hallo zusammen,

    ich hoffe, mir kann einer helfen. Ich finde einfach nichts brauchbares. Ich habe einen Windows 10 PC und einen Samsung SmartTV. Dazu habe ich mir auch den HDMI-CEC Adapter von Pulse-Eight gekauft.

    Doch ich bekomme es einfach nicht hin, dass sich der TV einschaltet, wenn der PC aus den Ruhezustand geweckt wird.

    Wie schreibe ich so ein Skript für Windows? Und was brauche ich alles dafür?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.