Da die Libcec von der Firma Pulse-Eight stammt, taucht dieser Name als Hersteller beim Pi auf. Ebenfalls ersichtlich ist, dass nicht jede Firma den Standard komplett implementiert, so liefert der Samsung-Fernseher nicht die CEC-Version und der Denon-Receiver nicht die Sprache.
Geben Sie h im Client ein, erhalten Sie eine Liste der unterstützten Befehle. Manche brauchen ein Argument, so etwa on: Mit on 0 schalten Sie den Fernseher (Nummer 0) ein. Analog schalten Sie das TV-Gerät mit standby 0 wieder ab.
Weitere interessante Befehle sind mute, volup, voldown zum Steuern der Lautstärke sowie as, um die aktive Quelle (active source) zu setzen. Aktiviert sich der Pi auf diese Weise, sollte der AV-Receiver den Eingang vom Fernseher auf den Pi umschalten.
Trotz seiner rudimentären Fähigkeiten gibt es Beispiele im Netz, die mit dem Clientprogramm per Skript die angeschlossenen Geräte steuern. Einfacher zum Programmieren ist aber eine ordentliche Programmiersprache, und hier hat sich Python auf dem Pi als leicht zu lernender Quasistandard etabliert.
Installation
Die Libcec ist eine dynamische Bibliothek, sie eignet sich nur zum Programmieren in C++. Die entsprechenden Header finden sich im Paket libcec-dev. Bevorzugen Sie Python, braucht es eine Python-Bibliothek, die die C++-Schnittstelle nach Python übersetzt.
Naheliegend wäre hier das Paket python-libcec, allerdings handelt es sich dabei um ein Dummy-Paket, das keinen nützlichen Inhalt enthält. Das dazugehörige Projekt ist de facto tot, und es erschließt sich nicht, warum das Paket überhaupt noch in den Repositories steckt.
Das Libcec-Projekt [2] dagegen enthält eine komplette Implementation einer Python-Schicht, das Debian-Projekt (und somit Raspbian) ignoriert diesen Teil aber aus unerfindlichen Gründen. Bleibt also die Installation aus dem Quellcode. Das klingt schlimmer als es ist – das Herunterladen, Kompilieren und Einspielen der Software braucht selbst auf einem schwachen Pi Zero nur eine gute Viertelstunde.
Zuerst sollten Sie die oben installierten Pakete libcec und cec-utils wieder entfernen (Listing 1). Anschließend kopieren Sie das Skript aus Listing 2 in die neu zu erstellende Datei mk-libcec, machen die Datei ausführbar und rufen Sie dann mit Root-Rechten auf (Listing 3). Achten Sie darauf, dass Sie sich für diese Kommandos immer in demselben Verzeichnis befinden. Speichern Sie das Skript daher am einfachsten im Home-Verzeichnis.
Listing 1
$ sudo apt remove libcec cec-utils $ sudo apt autoremove
Listing 2
#!/bin/bash
# Notwendige Pakete installieren
sudo apt-get update
sudo apt-get -y install git cmake libudev-dev libxrandr-dev python-dev swig
# Platform-Basis installieren
cd
git clone https://github.com/Pulse-Eight/platform.git
mkdir platform/build
cd platform/build
cmake ..
make
sudo make install
# libcec für Python 2.7 installieren
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 \
-DPYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython2.7.so.1.0 \
-DPYTHON_INCLUDE_DIR=/usr/include/python2.7 \
..
#make -j4
make
sudo make install
sudo ldconfig
Listing 3
$ chmod +x mk-libcec $ sudo ./mk-libcec |& tee mk-libcec.log
Das Konstrukt |& sorgt dafür, dass Ausgabe und Fehlermeldungen sowohl auf dem Bildschirm sowie zum Nachlesen in der Logdatei mk-libcec.log landen. Falls Sie einen RasPi 2 oder RasPi 3 verwenden, kommentieren Sie die Zeile 27 aus und die Zeile 26 ein (der Parameter -j4 verteilt das Kompilieren auf alle vier Kerne der CPU). Falls Sie Ihr Programm in Python 3 implementieren, löschen Sie die Zeilen 23 und 24.
Das Skript installiert in den Zeilen 4 und 5 zuerst eine Reihe von Entwicklungspaketen. Die Kommandos ab den Zeilen 9 und 18 laden die Teile des Projekts herunter, konfigurieren sie für die Umgebung (das cmake entspricht dem klassischen configure), werfen den Compiler an und installieren die Ergebnisse.
In der Logdatei mk-libcec.log lesen Sie bei Bedarf die Details nach, auftretende Warnungen dürfen Sie in aller Regel ignorieren. Das Skript basiert in weiten Teilen auf der mit der Libcec mitgelieferten Variante. Diese finden Sie in libcec/docs/README.raspberrypi.md.
CEC mit Python
Nach diesen Vorarbeiten steht der Implementation der CEC-Steuerung mit Python nichts mehr im Weg. Je nach Projekt sehen die Details anders aus, aber im Prinzip gleichen sich die Schritte immer. Zuerst registriert sich das Programm am Bus. Anschließend sendet es aktiv Kommandos oder reagiert auf diese oder Tastendrücke einer Fernbedienung.






