Die Automatisierung von Geräten im Heimnetz erfordert umfangreiche Investitionen in Hard- und Software. Wer Spaß am Eigenbau hat, kann stattdessen mit geringeren Mitteln auch schon einiges erreichen.

Heimautomatisierung light

Verschiedene Geräte sollen über schaltbare Steckdosen ein- und ausschaltbar sein. Die betreffenden Modelle wie beispielsweise die von Shelly haben eine im Browser bedienbare Oberfläche, die auch ohne ein zentrales Portal im Internet oder ein Benutzerkonto zu dessen Verwendung auskommt. Es muss nur ein WLAN vorhanden sein.

Praktischer als ein mit zunehmender Zahl von Steckdosen anwachsender Zoo von Webseiten zu deren Steuerung ist bald eine Übersichtsseite, auf der der Zustand möglichst aller Geräte auf einen Blick ersichtlich ist und sie geschaltet werden können.

Allerdings ist der Einsatz einer Software wie ioBroker, Node Red, FHEM, Home Assistant oder openHAB nur für diesen Zweck eher übertrieben. Wer ein wenig selbst in die Tasten greifen mag, bekommt mit einem Eigenbau eine deutlich schlankere Lösung, die ohne Abhängigkeiten komplett in eigener Regie verbleibt.

Hardware

Fast noch wichtiger als eine Software zur einfachen Steuerung ist aber eine einfache Hardware. Schließlich soll nicht ein reichlich Strom fressender Rechner nur deshalb fortwährend laufen, weil gelegentlich mal ein Gerät geschaltet werden soll.

raspi 4 s 1920 kl
Bild 1. der Raspberry Pi 4

In puncto Stromverbrauch ist bereits der Raspberry Pi mit einem Verbrauch von drei bis vier Watt ein Kandidat. Zum bislang aktuellen Modell 4 hat sich jüngst der Raspberry Pi 5 hinzugesellt.

Allerdings ist das neueste Modell noch einmal deutlich leistungsfähiger als sein ohnehin schon starker Vorgänger. Beide sind eigentlich schon überdimensioniert und für unseren begrenzten Zweck auch zu hoch bepreist. Zum Glück hat die Raspberry Pi Foundation das auch erkannt und schon geraume Zeit abspeckte Modellvarianten im Angebot.

pi 4 u zero 1920 kl
Bild 2. ein Raspberry Pi Zero 2 W

Was wir suchen ist ein einfacher Rechner, der einen embedded Webserver ausführen und somit eine im Browser verwendbare Bedienoberfläche ausliefern sowie die erforderlichen Signale zum Schalten unserer Steckdosen senden kann. Zugleich sollte das Gerät aber auch nicht zu speziell sein, eher ein möglichst gewöhnlicher Linux-Rechner.

Die Raspberry Pi Foundation hat hier mit dem Raspberry Pi Zero 2 W genau das Richtige.

zero u zubehoer 1920 kl
Bild 3. Zero und Zubehör

Der Zero verbraucht noch weniger Strom, ist mit einer Vierkern-CPU leistungsfähig genug, kommt aber ohne unnötigen sonstigen Ballast daher. Zudem ist das Gerät im Vergleich zum auch schon kleinen Pi 4 geradezu winzig. Dank eingebautem WLAN ist kein zusätzliches LAN-Kabel nötig.

Für unseren Zweck reichen auch die etwas spärlichen 512 MB RAM, das auf Debian Linux beruhende Raspberry Pi OS Lite lässt noch genügend Raum. Dasselbe gilt auch für den schmalen Preis von unter 20 Euro.

groessenverhaeltnis 1920 kl
Bild 4. der Zero ist winzig

Allerdings geht es nicht ganz ohne zusätzliches Zubehör: Netzteil, Gehäuse, USB- und HDMI-Adapter sowie eine SD-Karte werden auch benötigt. Zusammen mit dem Zero sind es dann ca. 50 Euro. Rechnet man noch eine schaltbare Steckdose hinzu sind es alles in allem rund 70 Euro.

Bild 3 zeigt die zusätzlich benötigten Einzelteile. Nicht im Bild der Mini-USB- zu USB-Adapter. Die USB- und HDMI-Adapter werden auch nur benötigt, um zur Konfiguration Monitor, Maus und Tastatur anzuschließen. Sobald SSH eingeschaltet ist, werden die Peripheriegeräte nicht mehr benötigt, da der Raspi dann via SSH über das Netz gesteuert werden kann.

Die Größenverhältnisse zeigen die Winzigkeit des Zero, nicht nur der Platzbedarf ist verschwindend gering, auch die Abwärme ist niedrig, was nicht zuletzt dem Rekordverbrauch von nur einem Watt zu verdanken ist. Genau das Richtige für eine schlanke Heimautomatisierung.

Inbetriebnahme

sd leser ext 1920 kl
Bild 5. ein externer SD-Kartenleser

Zur Inbetriebnahme des Zero muss zunächst auf einem Rechner der Wahl die SD-Karte mit dem Betriebssystem versehen werden. Das geht am einfachsten mit dem Imager wie in der Dokumentation beschrieben. Der Rechner benötigt einen SD-Kartenleser, sonst ist ein externer Kartenleser zusätzlich erforderlich.

Sodann wird die SD-Karte in den Kartensteckplatz der Platine des Pi Zero gesteckt und USB- sowie HDMI-Adapter mit Monitor, Tastatur und Maus verbunden. Nützlich ist ein Switch, mit dem Tastatur und Maus an verschiedene Ausgänge geleitet werden können, dann ist nur ein USB-Kabel für beides nötig. Ohne einen solchen Switch wird ein USB-Hub erforderlich, weil der Zero nur den einen Mini-USB-Steckplatz hat.

Mit Anschluß des Netzteils startet der Zero und die Konfiguration mit dem Programm raspi-config kann erfolgen, hier sollte neben Einstellung von Locale und Tastatur-Layout auch SSH aktiviert werden.

Schade übrigens, dass Locale, Tastaturlayout und SSH nicht gleich über den Imager eingestellt werden können, wie es für andere Voreinstellungen dort auch gelingt. Damit wären USB- und HDMI-Adapter sowie USB-Hub oder Switch komplett unnötig.

Mit diesen Einstellungen ist der Pi nun bereit zur Nutzung.

Software

Für die zuvor beschriebene Hardware ist nun auch eine Software erforderlich, die möglichst schlank daher kommt. Kritiker mögen einwenden, dass Java hierfür nicht die passendste Technologie ist, aber der Schein trügt. Bevor wir uns also einer Softwarelösung zuwenden zunächst einige Vorüberlegungen.

Vorüberlegungen

Java erfordert eine Ablaufumgebung, das Java Runtime Environment, JRE. Ein laufender Java-Prozess erfordert aber zur Laufzeit nur einen geringen Teil der im JRE enthaltenen Bestandteile, sofern der Prozess schlank genug gebaut ist.

Zugleich könnte eingewendet werden, dass auch eine fertige Software eingesetzt werden kann. Neben den schon erwähnten Lösungen zur Heimautomatisierung käme z.B. die App von Shelly in Frage, was dann auch den Einsatz des Raspi Zero nicht erforderte. Allerdings erfordert bspw. die App von Shelly dann stets deren Produkte, die Steuerung müsste wechseln oder es wären mehrere Apps nötig, wenn Produkte anderer Hersteller hinzukämen.

Die Festlegung auf bestimmte Hersteller kommt also ebensowenig in Frage wie der Einsatz einer Heimautomatisierungslösung. Letztere ist viel zu umfangreich für unsere Zwecke und würde den Raspi Zero unnötig überfordern.

Bedienoberfläche

mcp kl
Bild 6. die Bedienoberfläche

Unsere eigene Steuerungs-App soll als Webapp im Browser verwendbar sein. Auf diese Weise kann sie auf beliebigen Geräten und bspw. auch einfach mit einem Smartphone bedient werden. Die Grundlage für die Bedienoberfläche ist die App-Vorlage, wie sie zum Beispiel auch schon bei Tango zum Einsatz kommt.

In Tango ist bereits die komplette Funktion zum Schalten von Geräten enthalten. Sie ist ursprünglich dort entstanden, um direkt aus der Mediasteuerung heraus die Abspieler ein- und ausschalten zu können. Dieser Teil von Tango soll auch als eigenständiges kleines Programm laufen und auf dem Pi Zero zum Einsatz kommen.

Zur Darstellung der Geräteübersicht im Browser werden Piktogramme angewendet, wie es im Artikel Piktogramme im Web nutzen beschrieben ist. Der Artikel Mit Mustache zur dynamischen Single-Page-App beschreibt zudem, wie eine einfache Vorlage zur Laufzeit in die passende Darstellung gewandelt wird.

Konfiguration

Unsere App liest Geräte für die Liste zum Ein- und Ausschalten aus einem Unterverzeichnis des Ordners, aus dem heraus die App gestartet wurde. Für jede Entität gibt es dort einen Unterordner, der so heißt wie der Entität-Typ, z.B. Geraet. Die Ablagestruktur für die schaltbaren Geräte ist also [app-ordner]/mcp-data/Geraet. In diesem Unterordner wird für jedes Gerät eine Datei erwartet, die so heißt wie der Eintrag im Feld name seiner JSON-Struktur (s. nächstes Kapitel). Eine Datenbank wird nicht benötigt.

Zum Lesen der Gerätekonfiguration wird die Klasse FileStorage aus Tango verwendet, aber nicht dessen Bedienoberfläche zur Verwaltung und Persistierung. Die Dateien werden für unsere App einfach mit einem Texteditor im Dateisystem angelegt und gepflegt.

Statusabfrage

Auf der Serverseite der App sorgt ein auf Neon beruhender eingebetteter Webserver für die Statusinformation zu den Geräten. Eine Anfrage via HTTP GET an /api/store/Geraet/listealles liefert eine JSON-Struktur wie die folgende.

die JSON-Struktur der Geräteliste
[
  {
    "name":"Raspi-Wz",
    "einUrl":"http://192.168.178.66/relay/0?turn\u003don",
    "ausUrl":"http://192.168.178.66/relay/0?turn\u003doff",
    "statusUrl":"http://192.168.178.66/relay/0",
    "status":false
  },{
    "name":"Raspi-Az",
    "einUrl":"http://192.168.178.64/relay/0?turn\u003don",
    "ausUrl":"http://192.168.178.64/relay/0?turn\u003doff",
    "statusUrl":"http://192.168.178.64/relay/0",
    "status":false
  },

  usw.

]

Die Liste stellt die App aus den zuvor erwähnten Konfigurationsdateien zusammen. Wobei sich die Struktur noch optimieren ließe. Ein eigenes Feld für die IP-Adresse des Gerätes würde den redundanten Eintrag bereinigen, darauf wurde im Sinne von 'keep it simple' in Tango bisher verzichtet.

Der Status zeigt false, wenn das Gerät ausgeschaltet und true wenn es eingeschaltet ist. Den aktuellen Status bestimmt die App bei jedem Aufruf der Geräteliste neu.

Die Klasse StorageHandler ist dafür zuständig, die bei Tango konfigurierten Elemente wie z.B. Media-Kataloge, Livestreams, Playlisten usw. zu verwalten. Neben den gemeinsamen Verwaltungsfunktionen gibt es dort für schaltbare Geräte eigens noch die Methode collectDeviceStatus, um für die Liste der Geräte herauszufinden, ob sie aktuell eingeschaltet sind.

Dieser Status wird dann Teil der obigen JSON-Struktur und auf dem Client verwendet, um den Ein/Aus-Schalter entsprechend darzustellen.

App

Freilich kann auch Tango bereits zum Schalten aller Geräte verwendet werden. Dann müsste aber der Mediaserver, dessen Funktionen über Tango gesteuert werden, immer eingeschaltet sein. Damit das Schalten von Geräten auch dann gelingt, wenn der Mediaserver ausgeschaltet ist, wird der hier vorgestellte Raspberry Pi Zero eingesetzt und dieser könnte eine Kopie von Tango ausführen, deren restliche Funktionen dort schlicht nicht genutzt werden.

Eine eigenständige App, die zur größeren Schlankheit von nicht benötigten Teilen von Tango befreit ist, bietet hingegen den Vorteil, gesondert weiterentwickelt werden zu können. So liessen sich beispielsweise unabhängig von Tango weitere Funktionen zur Heimautomatisierung hinzufügen oder eine Authentifizierung einbauen, die eine Nutzung zusätzlich 'von außen' erlaubte.

Die relevanten Teile werden dazu aus Tango herauskopiert. Man könnte sich auch die Mühe machen, sie als Programmbibliothek zu fassen und der Schalt-App sowie Tango gleichermaßen zugänglich zu machen, aber das ist hier nicht näher betrachtet.

Die Schalt-App wurde für den Zweck dieses Beitrages Master Control Program, MCP, genannt. Der Film Tron läßt grüßen. Für MCP wird eine App auf der Grundlage des Neon-Moduls http-base gebaut. Als Grundlage für den Client dient die App-Vorlage und wird nach Bedarf angepasst.

Nach Einbau der zuvor beschriebenen Teile aus Tango muss lediglich noch ein kleines Javascript-Programm hergestellt werden, das die Bedienelemente 'verdrahtet', das ist hier aber nicht im Detail beschrieben.

Das fertige MCP als Java-App mit Web-Client ist gerade einmal 589 kB klein.

Davon entfallen 240 kB auf Gson und 168 kB auf den Zeichensatz Roboto, macht schon 408 kB für Drittbibliotheken (an dieser Stelle: Wer kennt eine Java-Klassenbibliothek für die Serialisierung und Deserialisierung von und nach JSON, die kleiner ist als Gson? Her damit!).

Selbst gebaute Bestandteile sind der MCP-Anwendungskern (46 kB), http-base (28 kB) und der Web-Client (107 kB), also gerade einmal 181 kB inklusive eingebettetem Webserver. Unter Java-Anwendungen ist das eine Klasse für sich.

Zusätzlich wird wie eingangs erwähnt noch das JRE benötigt, das mit sudo apt-get install openjdk-17-jdk-headless im Handumdrehen auf dem Zero ist.

Letztenendes entsteht durch bloße Wiederverwendung einiger Elemente von Tango sowie mit einigen Anpassungen und Ergänzungen eine kleine, eigenständige App zur Schaltung von Geräten im Heimnetz.

Fazit

In diesem Beitrag wurde eine sehr schlanke Lösung zur Schaltung von Geräten im Heimnetz vorgestellt, die ohne schwergewichtige fertige Produkte und so mit sehr minimalistischer Hardware auskommt.

Java-Programme mit Web-Funktionalität beruhen im Allgemeinen auf Java EE (neuerdings Jakarta) und werden damit stets um Größenordnungen größer. Indem MCP auf Neon aufsetzt, wird hingegen genau der Schlankheitsgrad erreicht, den es zur Ausführung auf dem Raspi Zero braucht.

Es ist bewußt darauf verzichtet worden, gemeinsam mit diesem Beitrag eine komplett fertige Anwendung zu veröffentlichen, auch, da mit Tango bereits eine fertige Variante existiert. Stattdessen werden einzelne Teile einer möglichen Umsetzung beschrieben und dem Leser überlassen, diese für sich zu verwenden oder vielleicht Teile anders zu implementieren.

Der Ansatz ist mit dem Ziel gewählt, die Herstellung passender, in jeder Hinsicht schlanker Lösungen anzuregen und darauf hinzuweisen, welche Möglichkeiten offene Technologien sowohl im Bereich der Hardware als auch der Software bieten.

Hierbei vorgestellte eigene Bestandteile wie z.B. die App-Vorlage oder Neon und seine Module sowie auch Tango oder die im Beitrag erwähnten Artikel liefern Bausteine, auf denen aufgesetzt werden kann oder die als Inspiration für eigene Ideen dienen können.

Der vorgestellte Ansatz zeigt, dass ein Raspberry Pi Zero als vollwertiger Linux-Rechner allerlei Anwendungszwecke erfüllt und sich sehr gut für den produktiven und ressourcensparenden Einsatz im Heimnetz eignet.