ioBroker im Smarthome mit Docker
Einleitung
Eine zentrale Rolle in meinem Smarthome mit Docker spielt ioBroker. In diesem Artikel will ich dir einen kurzen Überblick über ioBroker geben und zeigen, wie einfach und schnell du einen ioBroker Docker Container für einen ersten Test aufsetzen kannst.
Was ist ioBroker?
IoBroker ist eine in JavaScript geschriebene Open-Source-IoT-Plattform die Smarthome-Komponenten und Services verschiedener Hersteller verbindet. Mit Hilfe von Plugins (genannt: “Adapter”) ist ioBroker in der Lage mit einer Vielzahl von IoT-Hardware und -Diensten über verschiedene Protokolle und APIs zu kommunizieren. Alle Daten werden in einer zentralen Datenbank gespeichert auf die alle Adapter zugreifen können. Damit ist es sehr einfach logische Verbindungen, Automatisierungsskripte und schöne Visualisierungen herstellerübergreifend aufzubauen.
Weitere Informationen zu ioBroker findest du unter iobroker.net.
Was ist das ioBroker Docker Image
IoBroker ist nicht speziell für den Betrieb unter Docker entwickelt worden. Daher habe ich bereits 2017 damit begonnen ioBroker in ein Docker Image zu portieren. Seitdem hat sich das Projekt stetig weiter entwickelt und trägt mittlerweile auch den Titel “Offizielles ioBroker Docker Image”.
Weitere Informationen zum ioBroker Docker Image findest du auf meiner Docs-Webseite.
Wo finde ich weitere Infos?
Bevor wir loslegen hier noch einen kleine Liste mit Links zu weiterführenden Informationen, Bezugsquellen und Dokumentationen:
- Informationen zu ioBroker
- Offizielle ioBroker Dokumentation
- Informationen zum ioBroker Docker Image
- Offizielle ioBroker Docker Image Dokumentation
- IoBroker Docker Image Source Code & Issues
- IoBroker Docker Image im Docker Hub
- IoBroker Communities: Forum, Discord, Facebook
ioBroker Docker Container erstellen
Im folgenden zeige ich dir, wie du schnell und einfach einen ioBroker Docker Container für einen ersten Test unter Docker erstellst und worauf du achten musst. Diese Anleitung ist unter Docker allgemein gültig und eignet sich besonders, wenn du schon Erfahrungen mit Docker gesammelt hast.
Voraussetzungen
Folgendes setze ich voraus:
- Linux basierter Docker Host (NAS Systeme basieren in der Regel auf Linux)
- Zugriff auf die Kommandozeile des Docker Hosts
- Installierter und gestarteter Docker Dienst
- Internetzugang für den Docker Host
Persistente Datenspeicherung
Kurz ein paar Worte zur persistenten Speicherung von Konfigurationsdaten.
Der ioBroker im Docker Container speichert alle Konfigurationsdaten unter /opt/iobroker
. Damit diese Daten beim Löschen des Containers nicht verloren gehen, legt das Docker Image (ab v8.0.0) beim Erstellen des Containers automatisch ein Standard-Docker-Volume an. Dieses Verhalten kannst du überschreiben indem du ein eigenes Volume oder einen Dateipfad an den Pfad /opt/iobroker
in den Container mountest. Möchtest du ein Docker Volume nutzen, solltest du es vor dem Start des Container bereits via docker volume create [dein_volume_name]
erstellt haben.
Beim Start des Containers mountest du dein Volume oder Verzeichnis dann mit dieser Option:
-v [dein_volume_oder_verzeichnis]:/opt/iobroker
In docker-compose sieht das Ganze dann so aus:
volumes:
- [dein_volume_oder_verzeichnis]:/opt/iobroker
Per Kommandozeile erstellen
Mit dem folgenden Kommando können wir einen einfachen ioBroker Docker Container erstellen. Ich verzichte dabei auf die Angabe eines Volumes oder Dateipfads für das Verzeichnis /opt/iobroker
und lasse von Docker ein Standard Volume anlegen.
docker run -d -p 8081:8081 \
--name iobroker --hostname iobroker --restart=always \
buanet/iobroker:latest
Der Befehl setzt sich dabei aus folgenden Parametern zusammen:
docker run
« zum Erstellen eines neuen Containers-d
« für “detached”-p 8081:8081
« Port für den Zugriff auf die Web UI--name iobroker
« Container Name--hostname iobroker
« Container Hostname (auch Instanzname innerhalb von ioBroker)--restart=always
« Restart Policybuanet/iobroker:latest
« Verwendetes Image und Tag
Nachdem der Container angelegt ist, lassen wir uns mit dem Befehl docker logs --follow iobroker
das Log anzeigen, um den Startprozess verfolgen zu können.
$ docker logs --follow iobroker
--------------------------------------------------------------------------------
------------------------- 2023-03-17 21:40:55 -------------------------
--------------------------------------------------------------------------------
----- -----
----- ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ ██████╗ -----
----- ██║ ██╔═══██╗ ██╔══██╗ ██╔══██╗ ██╔═══██╗ ██║ ██╔╝ ██╔════╝ ██╔══██╗ -----
----- ██║ ██║ ██║ ██████╔╝ ██████╔╝ ██║ ██║ █████╔╝ █████╗ ██████╔╝ -----
----- ██║ ██║ ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██╔═██╗ ██╔══╝ ██╔══██╗ -----
----- ██║ ╚██████╔╝ ██████╔╝ ██║ ██║ ╚██████╔╝ ██║ ██╗ ███████╗ ██║ ██║ -----
----- ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ -----
----- -----
----- Welcome to your ioBroker Docker container! -----
----- Startupscript is now running! -----
----- Please be patient! -----
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----- System Information -----
----- arch: x86_64 -----
----- hostname: iobroker -----
----- -----
----- Version Information -----
----- image: v8.0.0 -----
----- build: 2023-02-20T17:21:59+00:00 -----
----- node: v18.14.1 -----
----- npm: 9.3.1 -----
----- -----
----- Environment Variables -----
----- SETGID: 1000 -----
----- SETUID: 1000 -----
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----- Step 1 of 5: Preparing container -----
--------------------------------------------------------------------------------
Updating Linux packages on first run... Done.
Registering maintenance script as command... Done.
--------------------------------------------------------------------------------
----- Step 2 of 5: Detecting ioBroker installation -----
--------------------------------------------------------------------------------
Existing installation of ioBroker detected in "/opt/iobroker".
--------------------------------------------------------------------------------
----- Step 3 of 5: Checking ioBroker installation -----
--------------------------------------------------------------------------------
(Re)setting permissions (This might take a while! Please be patient!)... Done.
Fixing "sudo-bug" by replacing sudo with gosu... Done.
Initializing a fresh installation of ioBroker... Done.
Hostname in ioBroker does not match the hostname of this container.
Updating hostname to "iobroker"... The host for instance "system.adapter.admin.0" was changed from "buildkitsandbox" to "iobroker".
The host for instance "system.adapter.discovery.0" was changed from "buildkitsandbox" to "iobroker".
The host for instance "system.adapter.backitup.0" was changed from "buildkitsandbox" to "iobroker".
Done.
--------------------------------------------------------------------------------
----- Step 4 of 5: Applying special settings -----
--------------------------------------------------------------------------------
Some adapters have special requirements/ settings which can be activated by the use of environment variables.
For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/).
--------------------------------------------------------------------------------
----- Step 5 of 5: ioBroker startup -----
--------------------------------------------------------------------------------
Starting ioBroker...
##### #### ### ## # iobroker.js-controller log output # ## ### #### #####
host.iobroker check instance "system.adapter.admin.0" for host "iobroker"
host.iobroker check instance "system.adapter.discovery.0" for host "iobroker"
host.iobroker check instance "system.adapter.backitup.0" for host "iobroker"
Wenn das Log ungefähr so aussieht, dann hat alles geklappt und wir können auf die ioBroker Admin UI zugreifen. Dazu verwenden wir die URL nach folgendem Schema:
http://[Hostname_oder_IP_des_Docker_Host]:8081
Es sollte der ioBroker Setup Assistent für die Ersteinrichtung erscheinen.
Unser ioBroker Docker Container ist damit startklar.
Bonus I: Mit Portainer erstellen
Als kleine Zugabe zeige ich dir jetzt noch, wie du den oben bereits erstellten, einfachen ioBroker Container über die Portainer Weboberfläche erstellen kannst.
Dazu öffnen wir die Portainer Weboberfläche und rufen den Menüpunkt “Containers” auf.
Über den Button “+ Add container” gelangen wir in die Oberfläche zur Erstellung eines neuen Containers.
Wir vergeben einen Namen, in meinem Fall iobroker
und tragen unter “Image” das Image + Tag ein, welches wir verwenden wollen. Analog zum obigen Beispiel ist dies buanet/iobroker:latest
.
Da wir den ioBroker Docker Container mit dem Standardnetzwerk Bridge starten werden, müssen wir unter “Network ports configuration” mit dem Button “+ publish a new network port” eine neue Portfreigabe für den ioBroker Admin Port 8081
erstellen. Wir reichen den Port 1:1 durch und füllen daher die Felder für host und port mit den identischen Werten.
Weiter geht es mit den “Advanced container settings”. unter dem Punkt “Volumes” hätten wir die Möglichkeit unser eigenes Volume oder Verzeichnis für den ioBroker zu mounten. Analog zum obigen Beispiel verzichte ich allerdings darauf und lasse das Volume von Docker automatisch anlegen.
Im Bereich “Network” überprüfen wir die Auswahl von bridge
im Feld “Network”. Direkt darunter können wir den “Hostname” festlegen. Wie oben nutzen wir hier iobroker
.
Bleibt noch die Einstellung für die “Restart policy”, welche dafür sorgt, dass unser Container automatisch neu startet, wenn es ein Problem gibt. Die Einstellung finden wir um gleichnamigen Bereich. Wir wählen hier always
.
Das war es auch schon. Mit einem Klick auf den Button “Deploy the container” startet die Erstellung.
Hier kann es jetzt mitunter ein wenig dauern, da das Docker Image beim ersten Mal erst einmal herunter geladen werden muss. Nach Abschluss des Vorgangs landen wir automatisch in der Übersicht der “Containers”.
Mit einem Klick auf den Namen können wir uns die Details anzeigen lassen. Auch einen Link zu “Logs” finden wir hier.
Ab hier geht es dann wie im obigen Beispiel mit der Logausgabe weiter.
Bonus II: Mit Stacks unter Portainer erstellen
Wenn dir das manuelle Anlegen des Docker Containers über die Portainer Weboberfläche zu umständlich ist, kannst du dein Ziel auch über die Stacks-Funktion von Portainer erreichen. Das Ganze funktioniert wie docker-compose, allerdings gestützt über die Portainer Weboberfläche inkl. Editor zum Bearbeiten des Stackfiles.
Für die grundlegenden Instruktionen zum Verwenden von Stacks in Portainer empfehle ich dir, einen Blick in den verlinkten Artikel zu werfen.
Das YAML-File für den einfachen ioBroker Docker Container (siehe oben) würde dabei so aussehen:
version: "3"
services:
iobroker:
container_name: iobroker
image: buanet/iobroker:latest
hostname: iobroker
restart: always
ports:
- "8081:8081"
Einen Stack kannst du in der Portainer Weboberfläche unter “Stacks” erstellen. Mit einem Klick auf “+Add stack” gelangst du in den Webeditor. Vergib einen Namen und kopiere das Stackfile in den Editor.
Ein Klick auf “Deploy the stack” startet die Erstellung des bzw. der Docker Container die im Stackfile definiert worden sind. Im Anschluss gelangst du automatisch in die Übersicht des Stacks und kannst, wie oben beschrieben, mit einem Blick in das Log fortfahren.
Ich hoffe ich konnte dir mit diesem Beitrag einen kleinen Überblick über ioBroker unter Docker geben.
Für Fragen und Feedback nutze gerne die Kommentarfunktion zu diesem Beitrag.
MfG,
André