Dieser Beitrag beschreibt die grundlegende Installation von ioBroker inklusive der Einrichtung von Redis für eine bessere Performance und InfluxDB oder MySQL für die Historie von Daten.
Inhalt
- Grundlagen von ioBroker
- Adapter und Instanzen
- Objekte
- Eigene Benutzerdefinierte Objekte
- Zustände
- Speicherung von Daten in ioBroker
- Objects-DB
- States-DB
- Historische Daten
- Installation in ioBroker
- Redis
- Installation von Redis
- Umstellung von ioBroker auf Redis
- Historie über InfluxDB
- Installation des InfluxDB 2 Servers
- InfluxDB-Adapter Installieren und Konfigurieren
- Aktivieren der Aufzeichnung
- Historie über MySQL
- Installation des MariaDB-Servers
- SQL-Adapter Installieren und Konfigurieren
- Aktivieren der Aufzeichnung
- Benutzeroberfläche mit VIS
- Abschließende Hinweise
Grundlagen von ioBroker
ioBroker ist eine IoT-Plattform, die es unter anderem ermöglicht sehr umfangreiche und trotzdem flexible Heimautomatisierungen aufzubauen.
Hier kurz die wichtigsten Eckdaten zu ioBroker:
- Open Source auf Basis der MIT-Lizenz
- Geschrieben in TypeScript/JavaScript, ausgeführt mit Node.js
- Läuft auf Linux, Windows, OSX, Raspberry Pi, ARM
- Umfassende Unterstützung für verschiedenste Smart Home Komponenten
- Sehr gute Erweiterbarkeit für Hard- und Software
- Große Community
- Langjährige sehr aktive Entwicklung und ein großer Kreis an aktiven Entwicklern
Adapter und Instanzen
Über sogenannte Adapter kann ioBroker um nahezu jede erdenkliche Funktionalität erweitert werden. Dies betrifft sowohl die Anbindung von Hardware als auch die Einbindung von zusätzlichen Softwarekomponenten wie beispielsweise einer Benutzeroberfläche.
Die einzelnen Adapter lassen sich problemlos und komfortabel über die Administrationsoberfläche installieren.
Zur Verwendung werden von den Adaptern einzelne Instanzen erzeugt.
Einfach gesagt: Ein eingerichteter Adapter ist eine Instanz.
Von einem Adapter können zudem mehrere Instanzen erzeugt werden, was beispielsweise bei spezieller Hardware erforderlich ist. Im Regelfall wird jedoch nur jeweils eine Instanz benötigt.
Der Name der Instanz ist dabei vom Namen des Adapters abhängig. Heißt der Adapter beispielsweise sql
, so heißt die erste Instanz des Adapters dann sql.0
. Eine zweite Instanz würde sql.1
heißen und so weiter.
Objekte
In ioBroker werden alle Datenstrukturen über Objekte abgebildet.
Abhängig vom jeweiligen Adapter werden Baumstrukturen aus Geräten, Kanälen und Werten erzeugt.
Jede Instanz eines Adapters hat einen eigenen Namensbereich, in dem die Objekte der Instanz abgelegt werden.
So ist beispielsweise bei einem Raspberry Pi mit installiertem RPI-Monitor Adapter die aktuelle CPU-Temperatur über die Objekt-ID rpi2.0.temperature.soc_temp
verfügbar.
Eigene Benutzerdefinierte Objekte
Zusätzlich zu den Objekten, die von den Adaptern automatisch erzeugt werden, können auch selbst Objekte für beliebige Zustände erzeugt werden.
Hierfür ist im Objektbaum der Bereich 0_userdata.0
vorgesehen. In diesem können wir beispielsweise über die Adminoberfläche ganz einfach selbst Objekte erzeugen und diese anschließend im gesamten ioBroker verwenden.
Warnung
Im Expertenmodus ist es auch möglich Objekte an jeder beliebigen Stelle im Objektbaum anzulegen und zu bearbeiten. Dies sollte generell aber nur in Ausnahmefällen gemacht werden, da dies beispielsweise die Funktion von Adaptern beeinflussen kann.
Zustände
Der jeweils aktuelle Wert eines Objektes wird als Zustand, oder auch State, bezeichnet.
Für jeden Zustand muss zuvor ein entsprechendes Objekt definiert sein.
Jeder Zustand verfügt über ein Ack-Flag, quasi eine Art Markierung, welches true
oder false
sein kann.
Vereinfacht lässt sich das so beschreiben, dass Zustände mit ack=false
dazu dienen um Aktionen auszulösen (beispielsweise den Befehl geben eine Lampe einzuschalten). Zustände mit ack=true
hingegen sind dann die Rückmeldung, dass die Aktion durchgeführt wurde oder auch von Adaptern ermittelte Werte.
Speicherung von Daten in ioBroker
Standardmäßig speichert ioBroker alle Daten in jsonl-Dateien auf dem Dateisystem.
JSONL ist eine spezielle Form von JSON-Dateien, wobei Änderungen zunächst an die vorhandenen Daten angehängt werden, anstatt die gesamte Datei neu zu schreiben. Damit sollen Schreibvorgänge auf das Dateisystem minimiert werden.
Objects-DB
Die Objects-DB beinhaltet die Strukturen und Eigenschaften von allen in ioBroker angelegten Objekten. Sie wird bei jeder Veränderung an einem Objekt ergänzt beziehungsweise neu geschrieben.
Speicherort: /opt/iobroker/iobroker-data/objects.jsonl
States-DB
Die States-DB enthält alle aktuellen Zustände und Werte der Objekte. Sie unterliegt somit ständigen Lese- und Schreibvorgängen.
Speicherort: /opt/iobroker/iobroker-data/states.jsonl
Historische Daten
Standardmäßig werden nur die aktuellen Zustände und keine historischen Daten erfasst. Sollen historische Daten, beispielsweise zur Darstellung von Zeitreihen, aufgezeichnet werden, so muss hierfür extra ein Adapter installiert und eingerichtet werden.
Auch eine Kombination aus mehreren Adapterinstanzen für historische Daten ist möglich.
Ist ein entsprechender Adapter installiert, so kann er für jedes Objekt einzeln aktiviert werden. Dadurch werden nur Daten aufgezeichnet, die man auch wirklich haben möchte.
Der einfachste Adapter zur Aufzeichnung der Daten ist History. Die Daten werden hierbei dann tageweise unter /opt/iobroker/iobroker-data/history/yyyymmdd/
in json-Dateien gespeichert.
Eine gute Alternative stellt der Adapter InfluxDB dar.
Dieser ermöglicht es die Daten in eine InfluxDB, welche besonders für Zeitreihendaten geeignet ist, zu speichern.
Eine weitere Alternative ist der Adapter SQL,welcher eine Speicherung in eine MySQL, PostgreSQL, Microsoft SQL Server oder SQLite Datenbank ermöglicht.
Die Einbindung der InfluxDB- und SQL-Adapter wird weiter unten beschrieben.
Installation in ioBroker
Als Basis für ioBroker wird eine aktuelle Version von Node.js benötigt. Ich empfehle hier immer aktuelle LTS-Version zu verwenden. Die Installation von Node.js habe ich im entsprechenden Beitrag bereits ausführlich beschrieben.
Die Installation von ioBroker erfolgt über das offizielle Install-Skript:
1 | curl -sLf https://iobroker.net/install.sh | bash - |
Dieses Skript installiert alle Abhängigkeiten, installiert ioBroker nach /opt/iobroker
, legt den Systembenutzer iobroker
an und erstellt den SystemD-Service iobroker.service
.
Hinweis
Die Installation kann je nach System einige Zeit in Anspruch nehmen.
Nach der Installation sollte das System am besten einmal neu gestartet werden, damit alle Anpassungen aktiv werden.
Anschließend ist die Administrationsoberfläche über http://<ip>:8081/
erreichbar.
Hinweis
Eine Benutzeroberfläche ist bis jetzt noch nicht vorhanden. Diese werden wir weiter unten installieren.
Redis
Da die Verwendung von Dateien vor allem im Zusammenhang mit der States-DB doch recht langsam ist, ersetzen wir diese durch Redis.
Redis ist eine In-Memory-Datenbank mit einer einfachen Schlüssel-Werte-Datenstruktur. Diese ermöglicht eine deutlich performantere Speicherung der States, wodurch ioBroker insgesamt spürbar flüssiger reagiert.
Redis kann für die States-DB und die Objects-DB verwendet werden. Auch eine Kombination, beispielsweise Redis für die States-DB und JSONL für die Objects-DB ist möglich.
Installation von Redis
Die Installation ist denkbar einfach, da Redis bereits in den offiziellen Paketquellen von Ubuntu, Debian und Raspbian enthalten ist:
1 | sudo apt update |
Anschließend können wir testen, ob der Redis Server läuft, indem wir redis-cli
aufrufen und alle gespeicherten Schlüssel abfragen:
1 | user@host:~ $ redis-cli |
Mit STRG
+D
können wir redis-cli
wieder verlassen.
Standardmäßig ist der Redis Server nur über Localhost (127.0.0.1) erreichbar. Dies ist auch gut so, damit keine fremden Nutzer diesen verwenden können. Zur Sicherheit überprüfen wir das noch:
1 | user@host:~ $ sudo grep "^bind" /etc/redis/redis.conf |
Hinweis
Bei Multihost-Systemen muss der Redis Server von den Salves aus erreichbar sein. Hierzu sind Änderungen an der Redis Konfiguration und zur Absicherung entsprechende Firewall-Regeln notwendig.
Umstellung von ioBroker auf Redis
Ist der Redis Server erfolgreich installiert, dann kann die States-DB von ioBroker von den jsonl-Dateien auf Redis umgestellt werden.
Es ist auch möglich die Objects-DB auf Redis umzustellen, was aber nicht unbedingt nötig ist.
Diese Anleitung stellt nur die States-DB auf Redis um.
Achtung
Bei der Einrichtung wird gefragt, ob man die Objekte und States migrieren möchte. Antwortet man hier mit nein, gehen alle aktuell gespeicherten States (und ggf. Objekte) dabei verloren!
Vor der Umstellung müssen wir zunächst die laufende ioBroker Instanz stoppen.
1 | user@host:~ $ iobroker stop |
Für die Umstellung rufen wir anschließend iobroker setup custom
auf.
Die Frage nach objects DB beantworten wir mit j
, um die Objects-DB als jsonl-Dateien zu belassen und die Frage nach der states DB mir r
für Redis.
Die Frage zur Migration der Objekte und States beantworten wir mit y
, damit alle bisher vorhandenen States aus den jsonl-Dateien nach Redis kopiert werden.
Bei allen anderen Fragen belassen wir den Standard durch einfaches Drücken der Entertaste.
1 | user@host:~ $ iobroker setup custom |
Hinweis
Die Migration der Daten kann, je nach Datenmenge, einige Zeit dauern.
Anschließend starten wir ioBroker wieder:
1 | user@host:~ $ iobroker start |
Wenn wir nun erneut aus Redis alle bekannten Schlüssel abfragen, sollten wir schon einige Ergebnisse erhalten:
1 | user@host:~ $ redis-cli KEYS '*' |
Damit ist Redis auch schon fertig eingerichtet und bereit für jede Menge States. 🙂
Historie über InfluxDB
Optimal für die Aufzeichnung von Zeitreihendaten ist eine InfluxDB geeignet.
Dabei sollte möglichst InfluxDB 2 verwendet werden.
Installation des InfluxDB 2 Servers
Da InfluxDB 2 aktuell (Stand April 2024) nicht in den Standardpaketquellen enthalten ist, müssen wir das Repository für InfluxDB 2 erst unserem System hinzufügen.
Achtung
Bitte beachten, dass für InfluxDB 2 ein 64 Bit System benötigt wird!
1 | wget -q https://repos.influxdata.com/influxdata-archive_compat.key |
(Quelle: https://www.influxdata.com/downloads/)
Anschließend können wir InfluxDB 2 wie gewohnt installieren:
1 | sudo apt update |
Anschließend müssen wir den SystemD-Service noch starten:
1 | sudo systemctl start influxdb |
Die Weboberfläche von InfluxDB 2 ist anschließend über http://<ip>:8086/
erreichbar und sollte genutzt werden, um die Einrichtung abzuschließen.
Die Einstellungen für Benutzername, Organisationsname und Bucket Name sind frei wählbar, werden aber später benötigt.
Im Anschluss wird ein Token angezeigt, welches wir uns unbedingt notieren sollten.
Achtung
Der Einfachheit halber nutzen wir hier in der Anleitung direkt den Token, welcher alle Rechte beinhaltet.
Für eine rein lokale Installation im Heimnetz ist dies denke ich auch vertretbar.
Um die Sicherheit zu erhöhen, kann man sich nach der Einrichtung auch in der Weboberfläche von InfluxDB 2 einloggen und dort weitere Tokens mit eingeschränkten Rechen erstellen.
InfluxDB-Adapter Installieren und Konfigurieren
Zur Installation des InfluxDB-Adapters suchen wir dieser in der Adminoberfläche und fügen ihn anschließend hinzu.
Anschließend öffnet sich direkt die Konfiguration der Adapterinstanz.
Hier wählen wir als DB-Version die 2.x aus und tragen den Namen der Organisation und den Token (beides aus dem InfluxDB 2 Setup) ein.
Mit Verbindung Testen kann die Verbindung zur InfluxDB getestet werden.
Anschließend bestätigen wir wie üblich mit Speichern und Schließen, woraufhin die InfluxDB Instanz neu startet und anschließen mit einem grünen Symbol als laufend dargestellt werden sollte.
Aktivieren der Aufzeichnung
Damit nun auch eine Historie aufgezeichnet wird, müssen bei dem gewünschten Objekt die Eigenschaften für influxdb.0
entsprechend gesetzt werden. Hierzu suchen wir uns das Objekt über die Baumansicht der Objekte heraus und klicken bei dem Objekt ganz rechts auf den Zahnrad-Button.
In dem folgenden Dialog setzen wir in den Benutzerdefinierten Einstellungen für influxdb.0
den Haken bei Aktiviert, passen gegebenenfalls noch die anderen Optionen an und klicken auf Speichern & Schließen.
Wenn alles funktioniert, dann ist schon kurze Zeit später in demselben Dialog über den Reiter Verlaufsdaten eine Tabelle der gespeicherten Daten verfügbar.
Die gespeicherten Daten können nun von anderen Adaptern oder auch externen Tools verwendet werden.
Historie über MySQL
Die Aufzeichnung von historischen Daten kann alternativ auch über eine MySQL Datenbank (MariaDB) erfolgen. Hierfür installieren wir zuerst den MariaDB-Server und anschließend den SQL-Adapter.
Installation des MariaDB-Servers
Da MariaDB in den offiziellen Paketquellen von Ubuntu, Debian und Raspbian enthalten ist, erfolgt die Installation wie üblich:
1 | sudo apt install mariadb-server mariadb-client |
Anschließend sichern wir die neue Installation noch ab, damit erst gar keine Sicherheitsrisiken aufkommen. Alle Punkte können dabei einfach mit Enter beantwortet werden. Lediglich ein Root-Passwort sollte gesetzt werden:
1 | user@host:~ $ sudo mysql_secure_installation |
Damit ist der MySQL/MariaDB-Server dann auch schon fertig installiert und bereit für ioBroker.
SQL-Adapter Installieren und Konfigurieren
Damit sich der SQL-Adapter mit unserer Datenbank verbinden kann, müssen wir zuerst auf dem MySQL/MariaDB-Server eine Datenbank und einen entsprechenden Benutzer anlegen. Dies machen wir über ein Terminal:
1 | user@host:~ $ mysql -u root -p |
Die MySQL-Session beenden wir anschließend mit STRG
+D
.
Das Passw0rt
solltet ihr natürlich ändern. 😉
Anschließend können wir über die Administrationsoberfläche den SQL-Adapter suchen und installieren.
Die Installation kann einige Zeit dauern, da hierbei unter anderem ggf. native Node.js-Module kompiliert werden müssen.
Sobald die Installation abgeschlossen ist, öffnet sich automatisch die Konfigurationsseite für den Adapter. Hier wählen wir dann als DB Typ die Option MySQL aus und tragen unsere zuvor erstellten Logindaten ein. Eine verschlüsselte Verbindung ist nicht erforderlich, da ioBroker und die Datenbank auf dem gleichen System laufen.
Über den Button Verbindung Testen kann die Verbindung zum MySQL/MariaDB-Server überprüft werden. Wenn die Verbindung ok ist, dann bestätigen wir den Dialog mit Speichern und Schließen. Nach kurzer Zeit sollte dann der Punkt vor sql.0
in der Übersicht unserer Instanzen grün werden, was eine erfolgreiche Verbindung anzeigt.
Aktivieren der Aufzeichnung
Die Aktivierung erfolgt genauso wie beim InfluxDB Adapter weiter oben bereits beschrieben. Es muss lediglich sql.0
anstatt influxdb.0
aktiviert werden.
Benutzeroberfläche mit VIS
Bisher verfügt unser ioBroker noch über keine Benutzeroberfläche.
Dies wollen wir nun ändern und installieren hierfür den Adapter Visualisierung, kurz VIS.
Inzwischen gibt es auch die neue, verbesserte Version VIS 2. Es empfiehlt sich diese auch für alle neuen Installationen zu nutzen.
Vor der Installation müssen wir zunächst die Lizenzbedingungen lesen und akzeptieren.
Hinweis
Je nach Leistung eures Systems kann die Installation etwas dauern. Also nicht ungeduldig werden. 😉
Zusätzlich zu VIS wird automatisch auch der Webserver-Adapter installiert. Dieser wird von VIS und einigen anderen Adaptern benötigt, um ihre Dienste bereitzustellen.
Ist die Installation abgeschlossen, so öffnet sich die Konfiguration der VIS 2 Adapterinstanz.
Hier muss ein Lizenzschlüssel eingegeben werden, damit der Adapter genutzt werden kann.
Für die private Nutzung ist VIS kostenlos.
Über https://iobroker.net/ kann man sich einen ioBroker Cloud Account erzeugen.
Mit diesem ist es dann möglich eine Community-Lizenz für iobroker.vis-2 kostenfrei zu “bestellen”.
Tipp
Bei mir ist E-Mail zur Bestätigung der Adresse im Spam-Ordner gelandet. Wenn ihr also scheinbar keine E-Mail bekommt, dann schaut dort mal nach.
Bei der Bestellung müssen die AGB akzeptiert und ein paar persönliche Daten angegeben werden.
Die Seriennummer der ioBroker-Installation ist in den Adaptereinstellungen zu finden und muss von dort kopiert werden.
Trotz der Auswahl von VIS 2 wurde bei mir die Lizenz für VIS <2 erstellt. Über den Button Zu v2 konvertieren kann die Lizenz aber einfach für VIS 2 konvertiert werden. Dabei muss nochmals die Seriennummer der ioBroker-Installation angegeben werden.
Über den Auge-Button können wir anschließend die Lizenz anzeigen lassen.
Den Lizenzschlüssel kopieren wir in die Adaptereinstellungen und klicken auf Speichern und Schließen.
Anschließend können wir die VIS-Oberfläche über http://<ip>:8082/
erreichen und von dort aus zur Anzeige, der sogenannten Runtime oder zum Editor wechseln.
Hier wählen wir zunächst den Editor, um unsere Oberfläche zu erstellen und zu bearbeiten. Dort wählen wir dann Neues Projekt erstellen und geben dem Projekt einen beliebigen Namen.
In dieser Editor-Ansicht können wir uns dann aus der linken Seite alle möglichen Elemente, die sogenannten Widgets, in unsere Ansicht in der Mitte ziehen.
In der rechten Seitenleiste kann das jeweils aktuell ausgewählte Widget sehr detailliert konfiguriert werden.
Hinweis
Der Editor kann im ersten Moment etwas überwältigend wirken, da er sehr viele Funktionen bietet. Es lohnt sich aber definitiv sich etwas einzuarbeiten. Mit etwas Übung lassen sich relativ einfach sehr gute Oberflächen mit vielen Möglichkeiten erstellen.
VIS ist extrem flexibel und bietet nahezu unbegrenzte Möglichkeiten die Benutzeroberfläche nach den eigenen Vorstellungen anzupassen.
Mit VIS 2 lassen sich inzwischen sogar responsive Layouts erstellen, welche sich der Größe des jeweils verwendeten Endgerätes angleichen.
Abschließende Hinweise
Diese Anleitung beinhaltet nur einen kleinen Teil dessen, was mit ioBroker alles möglich ist.
Viele weitere, teils sehr ausführliche Informationen sind in der offiziellen Dokumentation zu finden.
Eine Übersicht über aktuell verfügbare Adapter kann in der Adapterliste eingesehen werden.
Zudem lohnt sich fast immer ein Blick in das ioBroker Forum. Hier können auch alle möglichen Fragen und Probleme mit der Community und den Entwicklern geklärt werden.
Wenn euch meine Anleitung gefallen hat, lasst gerne einen Daumen hoch oder einen Kommentar da.
Viel Erfolg mit eurem ioBroker! 😎