Das Steuern des TV-Geräts übernimmt der zuvor installierte cec-client. Über eine Pipe (|) leiten Sie dabei das von echo ausgegebene Kommando an den Client weiter. echo 'on 0' etwa weckt das Gerät mit der Device-Nummer 0 aus dem Standby. echo 'as' schaltet den HDMI-Eingang des Raspberry Pi aktiv, echo 'is' deaktiviert ihn wieder.
Die MeetID in den Zeilen 14 und 16 dürfen Sie frei setzen. Bei der Wahl der ID sollten Sie jedoch darauf achten, dass nicht zufällig Fremde in das Videotelefonat hineinplatzen. Geeignet ist zum Beispiel eine zufällige alphanumerische Zeichenkette, wie sie das Kommando xxd -l16 -ps /dev/urandom ausgibt. Zudem müssen Sie noch die IP-Adresse des WLAN-Routers in Zeile 12 anpassen, dasselbe gilt für die E-Mail-Adresse des Empfängers der Benachrichtung in Zeile 14.
Der Aufruf von Jitsi im Webbrowser in Zeile 16 übergibt eine Reihe von Parametern. config.prejoinPageEnabled=false verhindert die Abfrage, mit welchem Benutzernamen man dem Meeting beitreten will. Ohne Maus und Tastatur wäre das unmöglich zu beantworten. config.disableAP=true schaltet das Audio-Processing aus, vor allem, um die CPU des Raspberry Pi zu entlasten. config.noisyMicDetection=false verhindert das Erscheinen einer Warnmeldung, sobald das Mikrofonsignal verrauscht ist. config.video.height.ideal=240&config.video.width.ideal=360 reduziert die Videoauflösung, um den Prozessor des RasPi zu schonen.
In Internet-Foren ist oft zu lesen, dass exit am Ende eines Skripts, das ohnehin durchläuft, kein guter Stil sei. Aber beim Versuch ohne exit startete Chromium im Test nicht, und letztlich stört die Anweisung auch nicht wirklich.
Shutdown per Tastendruck
Damit steht der Verbindungsaufbau, es fehlt jedoch noch eine Routine, die das System ordentlich abschaltet. Die Großeltern sollen ja weder am Raspberry Pi noch am Fernseher etwas einstellen müssen.
Dazu montieren wir einen geeigneten Taster in das Gehäuse und verbinden ihn mit je einem Kabel mit den GPIO-Pins 5 und 9 (GND), um bei Tastendruck einen Durchgang herzustellen (Abbildung 2). An Pin 5 angeschlossen, startet der Taster den Raspberry Pi auch aus dem Ruhezustand, sofern der Mini-Rechner an einem Netzteil hängt (Abbildung 3). Diese Funktion ist werksseitig integriert, sie benötigt keine weitere Konfiguration [4].
Läuft der Raspberry Pi, soll der Taster einen Shutdown-Prozess einleiten, der den HDMI-Eingang des Fernsehers wieder inaktiv schaltet. Das wiederum sorgt in der Regel dafür, dass das TV-Gerät auf den zuletzt ausgewählten Sender umschaltet. Des Weiteren soll der Raspberry das Betriebssystem sicher herunterfahren, was das Beenden von Chromium und damit der Videokonferenz einschließt.
Hierzu muss das System den Pin 5 des GPIO durchgehend überwachen. Das erledigt das Python-Skript /home/pi/shutdown.py mit dem Inhalt aus Listing 8, das vor der grafischen Oberfläche gestartet werden soll. Das erledigt der Eintrag aus Listing 9 in die bereits vorhandene Datei /etc/rc.local. Den Aufruf tragen Sie in die vorletzte Zeile ein, vor dem abschließendem exit 0.
Listing 8
/home/pi/shutdown.py
# Shutdown-Skript
# Wartet auf LOW am Pin 5
import RPi.GPIO as GPIO
import os
GPIO.setmode(GPIO.BOARD)
# GPIO Pin 5 als Input mit Signal HIGH
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)
try:
while True:
# Wartet darauf, dass der Pin mit GND verbunden wird
GPIO.wait_for_edge(5, GPIO.FALLING)
# Raspberry Pi-Signal wird am TV ausgeschaltet
os.system("echo 'is' | cec-client -s -d 1")
# os.system("echo 'tx 10:9D:10:00' | cec-client -s -d 1")
# Ordentliches Herunterfahren, auch von Chromium
os.system("shutdown -h now")
except:
GPIO.cleanup()
Listing 9
/etc/rc.local
#!/bin/sh -e [...] python /home/pi/shutdown.py & exit 0
Achten Sie darauf das & am Schluss des Aufrufs des Python-Programms zu übernehmen, da das System sonst auf das Ende des Skripts wartet, was zum Einfrieren des Systems führen würde. Schließlich müssen Sie das Python-Skript noch mit sudo chmod +x /home/pi/shutdown.py ausführbar machen.
Außerdem sollten Sie einen Blick auf die Zeilen 16 und 17 des Listing 8 werfen. Nach der Spezifikation schaltet der CEC-Aufruf echo 'is' das HDMI-Signal inaktiv. In Kombination mit dem Sony-Bravia-Fernseher des Autors führte dieses Kommando jedoch nicht zum Ziel. Das TV-Gerät zeigte weiterhin das über HDMI eingespeiste Bild des Raspberry-Systems an. Der Weg, das Signal beim Fernseher durch einen mit dem Aufruf von echo 'tx 10:9D:10:00' abgesetzten CEC-Frame abzumelden, funktioniert hingegen.
Probieren Sie daher bei Problemen einen der beiden Aufrufe aus, indem Sie in einer Zeile die Raute # entfernen und in der anderen Zeile die Raute hinzufügen. Bei CEC kocht unglücklicherweise jeder Hersteller sein eigenes Süppchen. Oft funktioniert CEC auch nur bei neueren TV-Geräten wirklich zuverlässig.
Ein- und Ausgabegeräte
Um zu garantieren, dass das System den Ton immer über den Fernseher ausgibt und Audio von dem in die Webcam integrierten Mikrofon aufnimmt, tragen Sie die Audiogeräte fest in das System ein. Dazu lassen Sie sich die vom RasPi OS erkannten Ein- und Ausgabegeräte mit aplay -l beziehungsweise arecord -l anzeigen (Listing 10).







