Dreambox und Synology – automatisches Ein- und Ausschalten bei Aufnahmen

So langsam nimmt das vernetzte Heim hier immer mehr Form an: Waren es früher noch zwei, drei PCs die man per Kabel aneinander gehängt hat sieht das inzwischen bei uns ein bisschen komplexer aus.

Lange Rede, kurzer Sinn: Unter anderem hängen hier eine Dreambox DM800 SE als Sat-Receiver (Gemini 3) und eine Synology DiskStation DS410 als NAS im Netzwerk. Anfangs hatte ich noch eine USB-Festplatte an der Dreambox hängen, aber wozu hat man schon ein NAS da stehen? 😉

Grundsätzlich ist das auch kein Problem. Immerhin laufen beide Systeme auf Basis von Linux – und beide können NFS.

Damit ist der erste Schritt einfach:

NFS aktiviert man auf der DiskStation im Control Panel unter Win/Mac/NFS, und dann gibt man im Shared Folder Manager noch einer Freigabe die entsprechenden NFS-Privileges:

Auf der Dreambox nutzen wir AutoFS. In meinem Image kann ich dazu einfach mittels der blauen Taste in’s Blue Panel gehen, dann auf „Einstellungen“ und zuletzt auf den „Automount Editor“. Dirt fügt man dann die Daten von der DiskStation ein:

Alternativ kann man sich auch per SSH auf der Dreambox einloggen und die Daten in der Datei /etc/auto.network eintragen:

Vincent -fstype=nfs,rw,nolock,soft,tcp,rsize=8192,wsize=8192 192.168.##.##:/volume1/dreambox

Dann stellt man noch die entsprechenden Aufnahmepfade ein (MENU -> Einstellungen -> System -> Aufnahmepfade). Bei mir heisst das NFS-Share Vincent, deshalb mounted AutoFS das ganze unter /media/net/Vincent

So weit so gut, damit landen Aufnahmen der Dreambox auf dem NAS.

Für alles weitere musste ich dann anfangen zu basteln:

Die DS410 braucht im Betrieb (bei drehenden Festplatten) 40 Watt. Wird das NAS nicht verwendet, dann fahren die Festplatten in den Ruhezustand herunter und der Stromverbrauch sinkt auf 20 Watt. Ist auf den ersten Blick okay, aber wenn man es hochrechnet, dann kostet – bei 20 Cent pro kWh – der 24-Stunden Betrieb des NAS zwischen 35 und 70 Euro im Jahr. Mal abgesehen davon, dass es Energieverschwendung ist und wir vermutlich ein Kernkraftwerk abschalten könnten wenn jeder von uns 20 Watt sparen würde.

Das ganze kann man dann noch weiter Richtung Null senken, wenn man das Gerät ganz herunterfährt. Aus diesem „heruntergefahrenen“ Zustand beherrscht die DiskStation WakeOnLan, kann also über einen Weckruf über das Netzwerk aus dem Tiefschlaf geholt werden.

Ausschalten kann man die DiskStation dann beispielsweise über die eingebaute „Scheduler Funktion“ im Control Panel unter Power, so dass beispielsweise nachts kein Strom verbraucht wird. Noch besser geht es dann mit dem Script weiter unten.

Das Problem dabei: Wenn man nachts etwas aufnehmen will, dann ist das Laufwerk nicht da – also kann nirgendwohin aufgenommen werden. Die Lösung: Wir schicken kurz vor der Aufnahme ein WakeOnLan von der Dreambox an die Synology DiskStation.

Erledigen kann man das beispielsweise mit meinem Script hier:

Zusätzlich benötigt man dafür das Programm WakeLan. Das kann man sich mit folgender SSH Kommandozeile installieren:

# ipkg install wakelan

Außerdem muss man für mein Script den cron-deamon auf der Dreambox installieren. Eine Anleitung hierfür habe ich auf sat-universe.com gefunden: Enabling cron daemon how to:

Telnet to your box and execute the following commands:

mkdir -p /var/spool/cron/crontabs
touch /var/spool/cron/crontabs/root

Now edit /var/etc/rcS_user.sh and add the following line at the end:

# cron daemon
/usr/sbin/crond &

(I know that the proper way to autostart is within init.d, but flash users cant edit it)

Now you can add jobs by editing /var/spool/cron/crontabs/root file. (for some reason crontab -e doesnt work).

Das mit crontab -e kann ich zumindest bei meinem Gemini3 nicht bestätigen. Da tut es.

Also: Datei von oben irgendwo auf der Dreambox ablegen (bei mir liegt sie in /home/root) und dann folgenden Eintrag in die crontab:

* * * * * /home/root/recording_soon

Damit wird ein mal pro Minute das Script aufgerufen. Dieses schaut in die aktuelle Aufnahmeliste und wenn innerhalb der nächsten 10 Minuten eine Aufnahme anfängt, dann wird ein WakeOnLan gesendet.

Achtung: Die Datei recording_soon muss auch noch bearbeitet werden. Ganz oben kommt hier die MAC-Adresse des NAS rein. Die findet man auf der Synology DiskStation am einfachsten über das DSM, indem man im Menü auf „System Information“ geht und dann den Reiter Network anzeigt. Ich habe bei mir die MAC ganz ohne Trennzeichen in recording_soon eingetragen.

Damit wäre die Komponente „schlafendes NAS wecken“ erledigt.

Dieses Konstrukt hat aber noch ein Problem: Wenn der über die Benutzeroberfläche konfigurierte Ausschalt-Zeitpunkt mitten in einer Aufnahme erreicht ist, dann wird die DiskStation ohne Rücksicht auf Verluste heruntergefahren. Damit hat man einerseits nur eine halbe Aufnahme und andererseits hatte ich schon das Phänomen, dass das plötzliche Verschwinden des NAS die Dreambox so verwirrt hat, dass sie nur noch durch einen Kaltstart wiederbelebt werden konnte.

Also muss eine Lösung dafür her. Diese habe ich mir aus verschiedenen Posts im deutschen Synology-Forum zusammengebaut und herausgekommen ist dieses Script:

Auch das Script wird wieder via CRON aufgerufen. Auf der DiskStation läuft bereits ein CRON-Deamon, aber hier muss man die Crontab füllen indem man die Datei /etc/crontab bearbeitet. Bei mir steht hier jetzt:

* 23-6 * * * root /root/shutdown_on_not_used

Die Scheduler-Funktionen der DiskStation habe ich komplett deaktiviert.

Das Ergebnis meiner Zeile ist, dass zwischen 23 Uhr und 6 Uhr die DiskStation heruntergefahren wird wenn sie nicht verwendet wird.

In der Datei shutdown_on_not_used muss man noch die IP-Adressen konfigurieren, die das NAS wach halten dürfen. Es gibt verschiedene Möglichkeiten des Checks, unter anderem den PING-Check und den ACTIVE-Check.

Ich persönlich habe mich für den ACTIVE-Check entschieden, d.h. die DS410 bleibt nur dann an, wenn einer dieser Clients eine aktive Netzwerk-Verbindung hat. Per PING-Check würde es schon reichen, wenn der Client per PING erreichbar ist. Da die Dreambox aber nur dann nicht per PING erreichbar ist wenn sie in den Deep-Standby geht – und die Erreichbarkeit damit keine Rückschlüsse darauf erlaubt ob eine Aufnahme ansteht oder nicht – habe ich diese Variante ausgeschlossen.

Was passiert in dem Script? Wie oben angegeben wird es per CRON jede Minute zwischen 23 Uhr und 6 Uhr aufgerufen. Es wird dann überprüft, ob die Dreambox Netzwerk-Kontakt zur Synology DiskStation hat. Sollten 10 dieser Checks in Folge negativ ausfallen (also 10 Minuten lang kein Kontakt besteht), dann wird die DiskStation heruntergefahren.

Okay, dann spielen wir das ganze mal vom Extremzustand ausgehend (beide Geräte sind im Deep-Standby bzw. aus) durch:

Eine Aufnahme steht an. Die Dreambox schaltet sich 5-6 Minuten vor der Aufnahme aus dem Deep-Standby ein und fährt hoch. Das dauert bei mir ca. 2 Minuten. Beim Hochfahren wird der CRON-Deamon gestartet, der prüft die Aufnahmeliste und schickt sofort ein WakeOnLan an die DiskStation.

Die DiskStation wacht auf und fährt hoch. Das dauert noch mal 2 Minuten. Wenn alles glatt läuft (und bei mir hat es das bisher immer), dann ist alles hochgefahren bevor die Aufnahme losgehen soll. Ab da prüft die DiskStation jede Minute ob eine Verbindung mit der Dreambox besteht. Anfangs ist das noch nicht der Fall (Aufnahme läuft ja noch nicht), aber nach zwei Minuten geht dann die Aufnahme los – und damit wird auch die Verbindung hergestellt.

Dann ist irgendwann die Aufnahme zu Ende, die Dreambox trennt die Verbindung – oder geht sogar selbst wieder in den Tiefschlaf-Modus.

Die DiskStation wartet noch ein bisschen. Nach 10 Minuten ist sie auch überzeugt: da kommt nichts mehr. Also legt sie sich auch wieder schlafen.

Das ganze funktioniert so bei mir wunderbar.

Es gibt nur eine Situation, die man im Hinterkopf behalten sollte: Es gibt ein Zeitfenster, bei dem das ganze bisher noch versagt. Wenn zwei Aufnahmen rund 10 Minuten auseinander liegen, dann ist die Synology DiskStation gerade davon überzeugt, dass sie jetzt schlafen gehen kann – und fährt herunter. Wenn aber genau in diesem Moment eine Aufnahme starten soll, dann funktioniert das nicht – die DiskStation fährt ja in diesem Momentrunter. Es greift auch das WakeOnLan nicht, denn das geht nur wenn die DiskStation schon aus ist. Und selbst wenn sie gerade runterfährt, dann ist das Zeitfenster vielleicht nicht lang genug um sowohl herunter als auch wieder hoch zu fahren.

Für das Problem suche ich noch eine Lösung. Irgendwie muss ich im eingeschalteten Zustand der DiskStation noch ein Signal von der Dreambox aus zukommen lassen, dass in den nächsten Minuten eine Aufnahme ansteht, dass ausschalten also eine schlechte Idee ist.

Ich melde mich dann, wenn das gelöst ist 😉

[Update 2013-04-28]<
Einige Komponenten der aktuellen Dreambox-Software haben angefangen sich via https zu einem Server bei cssleeds.co.uk zu verbinden. Das wurde bisher vom Shutdown-Script als Download erkannt, so dass sich die Box nicht mehr ausgeschaltet hat. Das ist jetzt korrigiert.

[Update 2013-05-05]
Ich habe noch einen Bugfix bei der Host-Verbindungs-Erkennung eingebaut. Bisher wurde bei der Suche nach 192.168.0.1 auch die 192.168.0.100 miterkannt. Das wird jetzt korrekt gehandhabt.

9 Antworten auf „Dreambox und Synology – automatisches Ein- und Ausschalten bei Aufnahmen“

  1. Hi Dominik,
    vielen Dank für deinen Blog – hat mir sehr weitergeholfen.
    Das hinterlegte recording_soon Skript ist allerdings unvollständig. Vielleicht ist da beim Kopieren etwas schief gegangen? Jedenfalls ist mindestens Zeile 21 unvollständig. Vielleicht könntest du da nochmal die lauffähige Version posten?
    1000Dank und Gruß,
    Martin

  2. Hi Martin,
    da hast du wohl recht. Irgendwas ist da wohl schiefgelaufen als ich das letzte mal einen kleinen Bugfix rüberkopiert habe – scheinbar hab ich’s dabei kaputt gemacht. Jetzt ist das Script vollständig.

  3. Hi Gerrit,
    wakelan kann man mit ipkg installieren wenn man sich per telnet auf der Dreambox einloggt und den oben genannten Befehl „ipkg install wakelan“ eingibt. Einfach mal nach „ipkg“ googlen.

  4. Hi Dominik,
    Ok, dann ist wakelan ein Paket, welches entpackt werden soll.
    Ich habe das neue Merlin 3.0 auf meiner 7020HD. Bei Deinem Befehl bekomme ich bei einer ssh oder telnet Anmeldung . Möglicherweise geht das mit der neuen Merlin 3.0 Oberfläche nicht, da das Paket nicht vorhanden ist?
    Schönen Dank im voraus.
    Gerrit

  5. Sehr schöne Anleitung,

    musste bissl schrauben bei mir um es anzupassen:

    – ich hab ne dream 800se oe2.0
    – per ipkg kann ich nix installieren sondern nur mit opkg
    – mit opkg hat er wakelan nicht gefunden, das hab ich mir über ein forum geladen und mit opkg install xxx.ipk installiert
    – das Skript hab ich auch an die Stelle abgelegt
    – die crontab kann ich mit crontab -e bearbeiten
    – dann musst ich noch den crondaemon zum Laufen bringen. Da hab ich ne interessante Seite gefunden:
    https://www.dream-multimedia-tv.de/board/index.php?page=Thread&threadID=16518

    Um es abzukürzen: Folgender Befehl verlinkt die nötigen Einträge in die Startskripte (er startet dann auch nach reboot mit):
    update-rc.d busybox-cron defaults
    Wenn man keinen reboot machen will kann man dann auch den Befehl ausführen um ihn direkt zu starten:
    /etc/init.d/busybox-cron start

    VG

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.