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.
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
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
Für aktuelle libcec version:
https://github.com/Pulse-Eight/libcec/issues/77#issuecomment-127234020
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
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
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.
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?
Du musst deinen gcc compiler updaten.
Hallo ich wollte mal Fragen benötigt man hierzu auch den PulseEight CEC Adapter?
Ich konnte jetzt nirgends was eindeutiges finden.
gruß
Nein 🙂
Hex Liebe Leute
Mein Problem ist, dass der cec-client meine Pi nicht findet, Konfiguration lief reibungslos nach der aktuellen Anleitung. Lösungen?
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
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?