Raspberry Pi Medien PC

Anmerkung

Dieser Artikel ist veraltet und wird nicht weiter gepflegt. Es existiert eine neuere Version des Tutorials welche hier zu finden ist. Die Seite besteht somit nur noch aus historischen Gründen.

Seit Jahren verwende ich für die Medienwiedergabe im Wohnzimmer einen Medien PC, auch HTPC genannt. Verwendet wurde hier zuletzt ein PC mit Windows (zuletzt ein i3 mit SSD und Windows 10). Das früher verwendete Microsoft Media Center wurde durch Kodi ersetzt da ersteres keine Weiterentwicklung mehr erfahren hat.

Ziel war es nun, den PC durch einen Raspberry Pi zu ersetzen. Das sollte den Stromverbrauch gewaltig senken. Die bisher ca. 35 W sollten auf ca. 4,5 W gesenkt werden. Auch der benötigte Platz sollte wesentlich geringer ausfallen. Der HTPC steckte in einem Desktop-Mediengehäuse.

Während der HTPC manuell gestartet und am Ende des Filmabend manuell heruntergefahren wurde, so sollte das nun automatisch geschehen. Sobald Strom auf den Pi kommt soll dieser hochgefahren werden. Wenn der Strom wieder ausgeschaltet wird, soll dieser sauber heruntergefahren werden. Realisiert wird dies durch eine sog. USV+, einer Erweiterung für den Rasp Pi.

Versionshistorie

Diese Seite wurde bereits aktualisiert. Hier ist eine Auflistung der Änderungen, welche hinzugefügt wurden:

  • 2017-05-29: Initialversion
  • 2017-08-18: ArchARM Version eingefügt

Realisierung

Basis bildet ein Raspberry Pi 3 mit der o. g. USV+. Dazu kommen dann noch Kleinteile wie Gehäuse, Lüfter, Netzteil, SD-Karte, Akku, usw. (hier die Bestellliste von Reichelt). Insgesamt kostet das Projekt ca. 125 Euro. Bei Bedarf ist noch ein HDMI-Kabel notwendig

Als erstes kleben wir die zwei Kühlkörper (ein größer und ein kleiner) auf den Pi. Der zweite große Kühlkörper wird nicht benötigt. Ist dies erledigt, können wir die Platine in das Gehäuse legen. An zwei Ecken können wir nun Abstandshülsen rein schrauben über die wir später die USV+ befestigen (es sind die Ecken, bei der ein kleines Lock vorhanden ist und nicht der Stift).

Ist das geschafft, kann die USV+ Platine auf den Pi gesteckt werden. Das kann unter Umständen etwas straff gehen. Hat man aber auch diesen Punkt hinter sich gebracht, so schraubt man diese mit zwei Schrauben in den Abstandshülsen fest.
Der eigentlich schwierigste Teil ist das Gehäuse. Die Bohrungen für den Rasp Pi sind vorhanden. Für die USV+ werden jedoch weitere Öffnungen benötigt. Auf jeden fall wird ein Schlitz für das USB-Kabel, zwei kleine Löcher für das + und - Kabel der Stromzuführung zum Akku sowie ein größeres Loch für den manuellen Ausschalter (bohrt man dieses Loch nicht, wird der Pi immer sofort wieder heruntergefahren wenn der Treiber installiert ist). Hat man einen Batteriehalter mit Lochmontage, so müssen auch diese Löcher gebohrt werden.
Am Batteriehalter lötet man nun ein rotes (+) und ein weißes oder schwarzes Kabel (-) an. Diese sollten schon lang genug sein um problemlos später verlegt werden zu können. Bei mir befindet sich der Akkuhalter später oben auf der schmalen Seite des Gehäuses. Dort wird dieser dann auch von mir gleich aufgesteckt und die Stromzuführung durch die Bohrungen verlegt und an der USV+ angesteckt. Jetzt ist die Verkabelung an sich schon fast abgeschlossen. Vorsichtig kann das Gehäuse zusammengebaut werden. Hierbei muss auf die Kabel und auf den Taster geachtet werden.

Auf der USB-Karte kann nun ein Betriebssystem installiert werden. Ich habe hier Noobs verwendet und später Rapsbian (Einrichtung siehe unten). Auf der USB-Karte verwende ich Arch ARM als Distribution (siehe unten). Spezielle Mediencenter Distributionen wie LibreELEC können leider nicht verwendet werden. Diese sind in sich geschlossen und erlauben nicht das Installieren der notwendigen Funktionen für die USV+.

Mit eingesteckter SD-Karte kann man nun den Pi das erste mal starten. Bei der Einrichtung muss unter Umständen mehrmals neu gestartet werden. Deshalb hat es sich als Vorteil herausgestellt, anfänglich keinen Akku einzulegen. Somit kann durch einfaches ziehen der Stromversorgung der Pi neugestartet werden.

Bei der Installation hält man sich an die Anleitung wie diese vorgegeben wird. Ist diese abgeschlossen, dann kann man sich daran machen, die USV einzurichten. Hierzu gibt es direkt bei Reichelt eine Anleitung und auch der Treiber wird dort zum Download angeboten (Reichelt, Datenblätter & Download). Die Installation ist sehr einfach und hier folgt man einfach den Schritten.

Wichtig sind die Parameter, welche unter dem Punkt 4.1 beschrieben werden. Hier wird gesteuert, wie lang der Pi beim Verlust der Stromversorung noch aktiv gehalten wird und wann er mit welchen Befehl heruntergefahren wird. Auch wie lange die USV an sich noch aktiv bleibt kann hier eingestellt werden.

Sind alle Werte eingestellt so kann man den Akku einsetzen und den Pi einmal neustarten. Das gröbste ist bereits erledigt.

Kodi (Debian)

Anmerkung

Diese Anleitung ist zwischenzeitlich überholt. Mein System läuft inzwischen auf Arch ARM. Die aktualisierte Version ist weiter unten zu finden.

Mit apt-get install kodi kann nun einfach Kodi installiert werden. Hat man Pixel als Oberfläche mit installiert und möchte man dieses nutzen, so kann man Kodi danach direkt mit der Maus aufrufen. Alternativ kann man Kodi auch in den Autostart legen.

Ich verwende jedoch kein Pixel und auch so möchte ich nur Kodi starten. Ein normales X Windowsystem benötige ich nicht. Mir reicht also ein Windowmanager im Hintergrund aus damit ich einfach eine grafische Oberfläche habe. Hierzu verwende ich den meistens schon vorhandenen Openbox (ausserdem habe ich hier schon Erfahrungen durch LXDE welches ich auf meinen Desktopsystemen verwende).

Ein raspi-config erlaubt auch die Auswahl der Startumgebung. Unter “Enable Boot to Desktop/Scratch” kann man hier Openbox auswählen. Diesen Punkt wählen wir nun und nach einen Neustart sieht man eine schöne schwarze Desktopumgebung mit einer weißen Maus. Mehr gibt es hier nicht.

Um jetzt automatisch Kodi zu starten legen wir im Verzeichnis ~/.config/openbox eine Datei mit dem Namen autostart an. Diese hat folgenden Inhalt:

kodi-standalone

Jetzt bleibt eigentlich nur noch etwas Feintuning übrig. Kodi kann beendet werden was zu dem Problem führt, dass wir dann wieder auf einem schwarzen Bildschirm mit weißer Maus landen. Das ist wenig sinnig. Deswegen sollte mandiese Option ausblenden. Neustarten und Herunterfahren sind weiterhin ja möglich. Wird der Strom getrennt, so fährt das System automatisch herunter.

Hierzu ändern wir die Datei ~/.kodi/userdate/advancedsettings.xml und fügen folgendes ein:

<showexitbutton>false</showexitbutton>

Nach einem Neustart ist unser System nun fertig und kann den eigenen Wünschen entsprechend konfiguriert werden. Nimmt man den Strom weg (z. B. durch eine Steckdosenleiste), so sollte das System nach der angegebenen Zeit automatisch herunterfahren. Ist das Sytem heruntergefahren und erhält dieses erneut Strom, so sollte es neu gestartet werden.

Kodi (Arch ARM)

Ich bin ein Anhänger von ArchLinux und setzte diese Distribution auf allen meinen PCs und auch zwischenzeitlich auf immer mehr Server ein. Somit liegt es auch nahe, dem Pi auf Arch zu betreiben. Arch gibt es in einer angepassten Distribution für ARM PCs und nennt sich arch linux ARM. Für den von mir eingesetzten Pi3 gibt es zwei Editionen, die lauffähig sind. Zum einen ARMv7 (welches auch auf dem Pi2 funktioniert) und AArch64. Aufgrund der höheren Kompatibilität und der besseren Verfügbarkeit von Paketen habe ich mich für Ersteres entschieden. Auch wenn damit nicht alle Möglichkeiten des Pis voll ausgeschöpft werden.

Die Installation der Distribution ist sehr einfach und für jemanden, der etwas Erfahrung unter Linux hat innerhalb weniger Minuten durchgeführt. Ausgebremst wird man nur durch die Geschwindigkeit der SD-Karte. Die Anleitung wie man vorgeht, findet man direkt auf der Seite von arch linux arm für den Pi3 unter dem Reiter Installation.

Auch die Installation von Kodi ist kein Hexenwerk. Philipp Siedel hat auf seiner Webseite dazu eine Anleitung geschrieben, der man direkt folgen kann. Damit läuft auch schon Kodi. Wer jetzt noch einmal sagt, Arch sei kompliziert und umständlich der soll mal unter einer anderen Distribution das gleiche Ergebnis in der gleichen Zeit erzielen.

Etwas schwieriger ist die Einrichtung der PiUSV+. Die notwendige Software gibt es nur für Debian. Sie ist aber auch unter Arch lauffähig. Allerdings muss man das init.d-Skript in ein systemd-Skript umschreiben.

Der erste Schritt ist die Aktivierung des I2C-Busses. Die notwendigen Pakete und Schritte dazu sind im ArchWiki zu finden. Hier nur eine Kurzfassung ohne große Erklärungen.

  1. Installation der notwendigen Pakete: pacman -S i2c-tools lm_sensonrs
  2. Erweiterung der Datei /boot/config.txt um den Bootloader zu veranlassen, die I2C Funktion zu laden: dtparam=i2c_arm=on
  3. Laden der relevanten Kernelmodule durch Erweiterung der Datei /etc/modules-load.d/raspberrypi.conf:
    i2c-dev
    i2c-bcm2708

Nach einem reboot ist I2C verfügbar.

Als nächstes entpackt man am besten auf einem zweiten System die .deb Datei des Treibers. Dabei handelt es sich um ein .ar-Archiv. Die für uns wichtige Datei ist die data.tar, welche wir wiederum entpacken. In dem Archiv befindet sich die Datei ./usr/bin/piupsmon welche wir auf den Pi kopieren (zum Beispiel mit scp) und dort auch unter /usr/bin ablegen. Danach prüfen, ob die Datei ausführbar ist. Anschließend legen wir zwei Verzeichnisse an:

mkdir /etc/piupsmon
mkdir /opt/piupsmon

Ebenfalls aus dem Archiv kopieren wir aus etc/piupsmon die piupsmon.conf Datei auf den Pi in /etc/piupsmon. Das init.d-Skript kopieren wir von etc/init.d nach /opt/piupsmon.

Sind alle Dateien übertragen, editieren wir mit einem Editor das kopierte init.d-Skript unter /opt/piupsmon. Wir ersetzen alle Aufrufe vom piupsmon durch /usr/bin/piupsmon und auch den einen Aufruf von kill durch /usr/bin/kill. Nach dem speichern prüfen wir noch, ob das Skript ausführbar ist.

Danach gehen wir in das Verzeichnis /etc/systemd/system und legen eine neue Datei mit dem Namen piupsmon.service an. Die Datei ergänzen wir mit folgendem Inhalt:

[Unit]
Description=PiUPS Monitor for CW2. PiUPS+

[Service]
Restart=always
PIDFile=/var/run/piupsmon.pid
ExecStart=/usr/bin/piupsmon > /dev/null 2> /dev/null & \
 sleep 2 \
 if [ -f $PIDFile ]; then \
 return 0 \
 else \
 tail -1 /var/log/piupsmon.log \
 return 1 \
 fi
ExecStop=/opt/piupsmon/piupsmon stop

[Install]
WantedBy=multi-user.target
Anmerkung

Das Skript ist nicht optimal. Wer das Optimieren kann, der möge mir dies bitte mitteilen. Ich bin hier dann irgendwann daran gescheitert die Überprüfung in das Skript einzubauen bzw. Alternativ den Aufruf auszulagern.

Ist das ebenfalls erledigt, so starten wir den Service. Läuft dieser ohne Probleme, so aktivieren wir diesen dauerhaft.

systemctl start piupsmon.service
systemctl enable piupsmon.service

Unter Umständen macht es Sinn, die Konfiguration anzupassen. Ebenfalls sinnig ist das Überprüfen der USV+ durch das ziehen der Stromversorgung. Der Pi sollte sauber herunterfahren.

Somit ist die Einrichtung abgeschlossen. Wer übrigens bereits Konfigurationsdateien für Kodi hat, der findet das Homeverzeichnis des Benutzers unter /var/lib/kodi. Dort können dann unter .kodi die Dateien in die entsprechenden Ordner abgelegt werden.

Policy-Kit

Wenn Kodi gestartet wird und die Ausschalten und Neustart Buttons fehlen, dann fehlt auf dem System der Policy-Kit. Dieser muss dann einfach neu installiert werden und nach einem Neustart steht diese Funktionen zur Verfügung.

sudo pacman -S polkit

Kommentare: