Magic Mirror – einfacher Energiesparmodus

Da wir unseren Spiegel nur benutzen, wenn wir auch zu hause sind, muss er in der restlichen Zeit nicht laufen. Hierzu habe ich eine relativ einfachen „Energiesparmodus“ umgesetzt. Alle fünf Minuten wird geprüft, ob mindestens eines von zwei definierten Gerät im Netzwerk ist. In unserem Fall ist dies mindestens eins von zwei Smartphones. Ein kleines Shellscript prüft, ob die Geräte sich anpingen lassen. Ist dies nicht der Fall, wird der HDMI-Ausgang des Raspberry Pi ausgeschaltet und sich der Zustand in einer temporären Datei gemerkt. Sobald eines der Smartphones wieder im Netzwerk erreichbar ist, wird der HDMI-Ausgang wieder aktiviert, per CEC das Kommando zum Einschalten an den Fernseher gesandt und die GUI zum Aktualisieren gezwungen.

Was ist HDMI-CEC?

Diese Abkürzung steht für „Consumer Electronics Control“ und beschreibt im Prinzip das gegenseitige Zusenden von Steuerbefehlen über die HDMI-Leitung. Leider implementierten dies viele Hersteller in der Anfangszeit sehr unterschiedlich, weshalb ich z.B. bei dem von mir verwendeten Fernseher zwar das Signal zum Aufwachen aus dem Standby verwenden kann, jedoch der Befehl zum Einschalten des Standby-Betriebs ignoriert wird. Aus diesem Grund schalte ich den HDMI-Ausgang komplett ab, was dazu führt, dass der Fernseher nach 15 Minuten ohne Signal eigenständig in den Standby-Betrieb wechselt. Zum einfachen Senden der CEC-Befehle verwende ich die cec-utils:

Umschalten per Skript

Damit unser Spiegel die Geräte im Netzwerk erkennt, haben diese in unserer FritzBox feste IP-Adressen zugewiesen bekommen. Mit folgendem Skript können wir prüfen, ob eine der IP-Adressen erreichbar ist und entsprechend den Monitor in den Standby schicken oder daraus aufwecken.

Wir legen ein Skript an, damit wir dies später automatisiert von überall aus aufrufen können:

Der Inhalt lautet wie folgt, Kommentare beachten:

Damit das Skript ausgeführt werden kann, setzen wir noch das benötigte Recht:

Cronjob anlegen

Damit unser Skript regelmäßig prüft, ob der Monitor an- oder ausgeschaltet werden muss, lassen wir es in einem Cronjob ausführen.  Wir öffnen die Cronjob-Liste:

Und tragen unser Skript ein:

Dies sorgt dafür, dass alle 5 Minuten unser Skript aufgerufen wird.