VDR mit MLD und dem Raspberry Pi 2

In diesem Artikel schildere ich den Aufbau eines VDRs auf Basis eines Raspberry Pi 2 und MLD.

Auswahl der Hardware

Dieser VDR – mittlerweile der siebte – soll den VDR 3 ablösen, der 2009 zusammengestellt wurde und mittlerweile in die Jahre gekommen ist und beispielsweise nicht HDTV tauglich ist. Das Gehäuse des alten VDRs ist zudem ein recht großes HTPC Gehäuse. Mit dem Erfolg des Rapberry Pi in den letzten Jahren ist so ein großes Gehäuse für diesen Zweck eigentlich nicht mehr notwendig. Die Idee ist daher, aufbauend auf dem Raspberry Pi durch entsprechende über USB angeschlossene Peripherie ein Nachfolgegerät zusammenzustellen. Nachteil dieses Ansatzes ist, dass man die Komponenten nicht mehr so einfach in ein gemeinsames Gehäuse packen kann. Da der Fernseher am vorgesehenen Standort über eine Befestigungsmöglichkeit für VESA-Wandhalterungen verfügt, kam die Idee auf, die komplette Hardware auf die Rückseite des Fernseher zu packen.

Als zentrale Steuereinheit kommt der Raspberry Pi 2, die zu diesem Zeitpunkt aktuellste Version des Raspberry Pi, zum Einsatz. Dazu ein passendes Netzteil mit 2A und eine SD-Karte mit 16GB und das zentrale System ist bereits komplett. Die SD-Karte kann auch problemlos deutlich kleiner sein, eine wirkliche Preisersparnis bringen kleinere SD-Karten bei einer Neuanschaffung jedoch nicht mehr.

Zum Speichern der Videoaufnahmen kommt eine externe Festplatte zum Einsatz. Da eine Stunde HD-Video locker mehrere Gigabyte Speicher benötigt, ist die SD-Karte des Systems nicht zum Speichern der Videos geeignet. Eine 3TB Festplatte bietet aktuell ein gutes Preis-Leistungsverhältnis. Für 90 Euro bekommt man sogar Unterstützung von USB 3.0, auch wenn der Raspberry Pi 2 damit nichts anfangen kann keine falsche Investition.

Da der VDR an eine Satellitenanlage angeschlossen wurde, habe ich mich für den DVB-S2 Receiver DVBSky S960 entschieden. Er wird von aktuellen Linux-System out-of-the Box unterstützt. Auch in der engeren Wahl war eine Technotrend TT-connect S2-4600 USB-Box dessen Linux-Support jedoch noch nicht ausgereift zu sein scheint. Mehr dazu im Abschnitt Probleme weiter unten in diesem Artikel.

Zusammen ergeben sich damit Kosten von ca. 200 Euro. Eine Tabelle aller Komponenten findet sich in meiner Bildergalerie.

Zusammenbau und Montage

Um alle Bauteile zusammenzuhalten bietet sich die Montage auf eine Holzplatte an, da ein spezielles Gehäuse auf der Rückseite des Fernsehers nicht unbedingt erforderlich ist. Im Abstand von 20cm wurden daher 6mm Bohrungen zur Befestigung an der Fernseherrückwand gebohrt und die Komponenten drumerhum auf der Holzplatte platziert. Bis auf das Gehäuse des Raspberry Pi weisen die Komponenten dabei keine spezielle Befestigungmöglichkeiten für eine Wandmontage auf. Die weiteren 5mm Bohrungen sind daher für Kabelbinder vorgesehen, die die Komponenten an Ort und Stelle fixieren sollen. Eine Aluschine sichert die Festplatte nochmal extra.

Installation von MLD

Softwareseitig entschied ich mich das erste mal für eine spezielle VDR Distribution anstatt auf einer “normalen” Linux-Distribution aufzubauen. MLD in der Version 5 hat dabei direkt beim Ausprobieren überzeugt, da das System sehr schnell lauffähig und an die eigenen Bedürfnisse angepasst war. Während der Installation können verschiedene Sets von Paketen installiert werden, die Auswahl fiel hier einfach auf rpi-default. Zusätzlich mussten noch die WLAN-Treiber nachinstalliert werden (Paket network-wireless-driver). Um später besondere Stromsparmechanismen nutzen zu können wurde außerdem das Paket hub-ctrl installiert. Dazu weiter unten mehr.

Nach dem Start der MLD Installation können fast alle Einstellungen sowohl über das OSD des VDR auf dem TV Bildschirm als auch über das Webinterface der Distribution verändert werden. So kann zum Beispiel die WLAN-Konfiguration dort bequem eingegeben werden. Ebenso kann dort die externe Festplatte als Massenspeicher für die Aufzeichnung von Videos ausgewählt und eingebunden werden.

Probleme

Im folgenden soll kurz auf einige Probleme eingegangen werden, mit denen ich konfrontiert war.

Automount der USB-Festplatte

Obwohl die extenerne Festplatte korrekt im MLD registriert war und MLD auch entsprechend einen Eintrag in der Datei /etc/fstab erstellt hatte, wurde die Datenpartition auf der Festplatte beim Systemstart nicht korrekt gestartet. Da der VDR deshalb sein Video-Verzeichnis nicht finden konnte, hing das System in einer Endlosschleife beim VDR-Start fest. Ein manuelles mount /mnt/data löste das Problem zwar für diesen Start und er VDR startete korrekt, beim nächsten Systemstart existierte dann jedoch wieder das gleiche Problem.

Trotz intensiver Suche konnte ich das Problem nicht näher eingrenzen, als Umgehungslösung wurde daher die Datei runvdr des VDR um ein mount /mnt/data ergänzt.

Kein Signal mit Technotrend DVB-Empfänger

Vor dem jetzigen DVB-Empfänger DVBSky S960 sollte eigentlich ein Technotrend TT-connect S2-4600 seinen Dienst tun. Auch dieser wurde vom Linux Kernel der MLD Distribution und deshalb auch dem VDR zwar einwandfrei erkannt, jedoch erschien beim Start des Systems weder Bild noch Ton. Erst nach einigen Kanalwechseln erschien plötzlich ein Bild und das System war normal und ohne Probleme nutzbar.

Auch hier konnte das Problem nicht mit letzter Sicherheit eingegrenzt werden, ich gehe jedoch von einem Bug im Treiber aus, der möglicherweise bereits behoben, jedoch noch nicht in der MLD Distribution enthalten war. Da sich das patchen des dvb MLD-Pakets als nicht trivial herausstellte, war der Wechsel des DVB-Empfängers letztlich die pragmatischere Wahl.

Fernbedienung

Der erste Versuch, den im DVBSky DVB-Empfänger bereits enthaltenen IR-Empfänger zu verwenden scheiterte. Der Empfänger wurde zwar korrekt vom System erkannt und die notwendigen Kernelmodule geladen. Auch konnte das System mit der beiligenden Fernbedienung gesteuert werden, nachdem manuell eine passende Mapping-Tabelle (ir-keytable) für die Fernbedienung erzeugt wurde. Jedoch kam es immer wieder zu doppelten Tastendrucken obwohl die Fernbedienungstaste nur kurz und einmal betätigt wurde. Das ganze lies sich per irw bequem auf der Kommandozeile beobachten. So machte das ganze keinen Spaß.

Im zweiten Versuch habe ich daher auf die “klassische” Art per Infrarot-Empfänger am Raspberry Pi GPIO zurückgegriffen, der mit der Funktion “Tasten entprellen” des MLD Webinterface (diese Option installiert das Paket lircd2uinput) problemlos funktionierte.

Verwendung der Logitech Harmony Universalfernbedienung

Nachdem die Fernbedienung prinzipiell funktionierte sollte das System jedoch nicht mit dem mitgelieferten Fernbedienung, sondern mit einer Logitech Harmony Universalfernbedienung steuerbar sein. Für diese Fernbedienung gibt es in dank dem Logitech Support eine spezielle “VDR-Konfiguration” unter dem Hersteller “KLS” und dem Gerätenamen “VDR 1.6”. Details dazu, inklusive einer passenden LIRC-Konfiguration finden sich auf der entsprechenden Seite im VDR-Wiki.

Im Unterschied zum Artikel mussten die einzelnen Tasten jedoch umbenannt werden, da jede Taste einen definierten Namen aufweisen muss. Aus Left wird so zum Beispiel KEY_LEFT.

Stromsparmodus

Um auch USB-Ports zu deaktivieren, bietet sich das Paket hub-ctrl an.

Ich habe zum Starten und Beenden des VDRs entsprechende Skripte erstellt, die aufgerufen werden:

#!/bin/sh
echo "QUIT" | nc localhost 6419
if [ $? != 0 ]; then
  tvservice -p
  hub-ctrl -h 0 -P 3 -p 1
  #echo 1 > /sys/devices/platform/bcm2708_usb/buspower
  sleep 10
  mount /mnt/data
  /etc/init.d/vdr start
  #/etc/init.d/network-wireless start
fi
#!/bin/sh
/etc/init.d/vdr stop
tvservice -o
#/etc/init.d/network-wireless stop
fsck -a /dev/sda1
umount /mnt/data
hdparm -y /dev/sda
hub-ctrl -h 0 -P 3 -p 0
#echo 0 > /sys/devices/platform/bcm2708_usb/buspower

Update 2018-11-18 - Neuinstallation mit MLD 5.4

Folgende Anpassungen wurden nach der Standardinstallation durchgeführt:

Fernbedienung

Kodierung der OneForAll Fernbedienung Ebene STB auf Code 1672

https://www.oneforall.de/urc-7980-smart-control-mit-app.html#support

0x0b00 KEY_0
0x0b01 KEY_1
0x0b02 KEY_2
0x0b03 KEY_3
0x0b04 KEY_4
0x0b05 KEY_5
0x0b06 KEY_6
0x0b07 KEY_7
0x0b08 KEY_8
0x0b09 KEY_9
0x0b20 KEY_PUP
0x0b21 KEY_PDOWN
0x0b22 KEY_ESC
0x0b32 KEY_REWIND
0x0b33 KEY_PAUSE
0x0b34 KEY_FASTFORWARD
0x0b35 KEY_PLAY
0x0b36 KEY_STOP
0x0b37 KEY_RECORD
0x0b40 KEY_RED
0x0b41 KEY_GREEN
0x0b42 KEY_YELLOW
0x0b43 KEY_BLUE
0x0b44 KEY_UP
0x0b45 KEY_DOWN
0x0b46 KEY_LEFT
0x0b47 KEY_RIGHT
0x0b48 KEY_OK
0x0b49 KEY_MENU
0x0b4a KEY_ESC
0x0b4b KEY_GUIDE
0x0b4c KEY_INFO
...
dtoverlay=gpio-ir,rc-map-name=rc-oneforall-1672
...
gpio_ir_recv * rc-oneforall-1672

Kein Bild wenn bei MLD Start Fernseher ausgeschaltet ist

http://mld -> Konfigurieren -> Konfiguration -> Xorg -> Bildschirm merken [x] / 50Hz [x] aktivieren

Außerdem in config.txt folgende Zeilen ergänzen (siehe https://www.raspberrypi.org/documentation/configuration/config-txt/video.md)

...
hdmi_group=1
hdmi_mode=19