Dieser Beitrag beschreibt die grundlegende Installation von ioBroker auf dem Raspberry Pi inklusive der Einrichtung von Redis für eine bessere Performance und MySQL für die Historie von Daten.
Grundlagen zu ioBroker
ioBroker ist eine IoT-Plattform, die es unter anderem ermöglicht sehr umfangreiche trotzdem flexible Heimautomatisierungen aufzubauen.
Hier kurz die wichtigsten Eckdaten zu ioBroker:
- Open Source auf Basis der MIT-Lizenz
- Geschrieben mit Node.js (JavaScript / TypeScript)
- 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
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.
Jeder Instanz eines Adapters hat einen eigenen Namensbereich, in dem die Objekte der Instanz abgelegt werden. So ist beispielsweise bei einem Raspberry Pi die aktuelle CPU-Temperatur vom Info-Adapter über die Objekt-ID info.0.sysinfo.cpu.temperature.main
verfügbar.

Speicherung von Daten in ioBroker
Standardmäßig speichert ioBroker alle Daten in json-Dateien auf dem Dateisystem.
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 neu geschrieben.
Speicherort: /opt/iobroker/iobroker-data/objects.json
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.json
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.
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 SQL dar. Dieser ermöglicht es die Daten eine MySQL, PostgreSQL, Microsoft SQL Server oder SQLite Datenbank zu speichern. Die Einbindung dieses Adapters wird weiter unten noch beschrieben.
Installation
Als Basis für ioBroker wird Node.js Version 10.x oder neuer 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:
curl -sL 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
.
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.
Nach aktuellem Stand (September 2019) kann Redis bisher nur für die States-DB verwendet werden. Eine Nutzung für die Objects-DB ist aber bereits in Planung.
Installation von Redis
Die Installation ist denkbar einfach, da Redis bereits in den offiziellen Paketquellen von Raspbian enthalten ist:
sudo apt update
sudo apt install redis
Anschließend können wir testen, ob der Redis Server läuft indem wir redis-cli aufrufen und alle gespeicherten Schlüssel abfragen:
pi@homepi:~ $ redis-cli
127.0.0.1:6379> KEYS *
(empty list or set)
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:
pi@homepi:~ $ sudo grep "^bind" /etc/redis/redis.conf
bind 127.0.0.1 ::1
pi@homepi:~ $ sudo netstat -tulpen | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 113 120233 5108/redis-server 1
tcp6 0 0 ::1:6379 :::* LISTEN 113 120234 5108/redis-server 1
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 der States-DB auf Redis
Ist der Redis Server erfolgreich installiert, dann kann die States-DB von ioBroker von den json-Dateien auf Redis umgestellt werden.
Es ist auch möglich die Objects-DB auf Redis umzustellen, was aber nur wenigen Fällen sinnvoll ist.
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.
pi@homepi:~ $ iobroker stop
Für die Umstellung rufen wir anschließend iobroker setup custom
auf.
Die Frage nach “objects DB” beantworten wir mit f
, um die Objects-DB als json-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 json-Dateien nach Redis kopiert werden.
Bei allen anderen Fragen belassen wir den Standard durch einfaches Drücken der Entertaste.
pi@homepi:~ $ iobroker setup custom
Current configuration:
- Objects database:
- Type: file
- Host/Unix Socket: 127.0.0.1
- Port: 9001
- States database:
- Type: file
- Host/Unix Socket: 127.0.0.1
- Port: 9000
- Data Directory: ../../iobroker-data/
Type of objects DB [(f)ile, (r)edis, ...], default [file]: f
Host / Unix Socket of objects DB(file), default[127.0.0.1]:
Port of objects DB(file), default[9001]:
Type of states DB [(f)file, (r)edis, ...], default [file]: r
When States are stored in a Redis database please make sure to configure Redis
persistence to make sure a Redis problem will not cause data loss!
Host / Unix Socket of states DB (redis), default[127.0.0.1]:
Port of states DB (redis), default[6379]:
Data directory (file), default[../../iobroker-data/]:
Host name of this machine [iobroker-test]:
This host appears to be a Master or a Single host system. Is this correct? [Y/n]:
Do you want to migrate objects and states from "file/file" to "file/redis" [y/N]: y
[...]
Die Migration der Daten kann, je nach Datenmenge, einige Zeit dauern.
Anschließend starten wir ioBroker wieder:
pi@homepi:~ $ iobroker start
Wenn wir nun erneut aus Redis alle bekannten Schlüssel abfragen sollten wir schon einige Ergebnisse erhalten:
pi@homepi:~ $ redis-cli KEYS '*'
1) "io.info.0.sysinfo.cpu.info.cache-l2"
2) "io.info.0.sysinfo.network.interfaces.iface1.iface"
3) "io.info.0.sysinfo.cpu.currentspeed.maxSpeed"
4) "io.system.adapter.admin.0.uptime"
[...]
266) "io.system.adapter.discovery.0.alive"
267) "io.info.0.sysinfo.os.versions.kernel"
Damit ist Redis auch schon fertig eingerichtet und bereit für jede Menge States. 🙂
Historie über MySQL
Die Aufzeichnung von historischen Daten soll in diesem Fall ü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 Raspbian enthalten ist, erfolgt die Installation wie üblich:
sudo apt install mariadb-server mariadb-client
Anschließend sichern wir die neue Installation noch ab, damit erst gar keine Sicherheitsrisiken aufkommen:
pi@homepi:~ $ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
[...]
Enter current password for root (enter for none):
OK, successfully used password, moving on...
[...]
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
[...]
Remove anonymous users? [Y/n] y
... Success!
[...]
Disallow root login remotely? [Y/n] y
... Success!
[...]
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
[...]
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Damit ist der MySQL/MariaDB-Server dann auch schon fertig installiert und bereit für ioBroker.
SQL Adapter
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:
pi@homepi:~ $ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
[...]
MariaDB [(none)]> CREATE DATABASE iobroker CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> CREATE USER 'iobroker'@'%' IDENTIFIED BY 'Passw0rt';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON iobroker.* TO 'iobroker'@'%';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)
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 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
Damit nun auch eine Historie aufgezeichnet wird, müssen bei dem gewünschten Objekt die Eigenschaften für sql.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 Schraubenschlüssel-Button.

In dem folgenden Dialog setzen wir in den Einstellungen für sql.0 den Haken bei Aktiviert, passen gegebenenfalls noch die anderen Optionen an und klicken auf Speichern.

Wenn alles funktioniert, dann ist schon kurze Zeit später in demselben Dialog über den Reiter Tabelle eine Tabelle der gespeicherten Daten verfügbar.

Die gespeicherten Daten können nun von anderen Adaptern oder auch externen Tools verwendet werden.
Benutzeroberfläche mit VIS
Bisher verfügt unser ioBroker noch über keine Benutzeroberfläche.
Die wollen wir nun ändern und installieren hierfür den Adapter Visualisierung, kurz VIS.
Vor der Installation müssen wir zuerst die Lizenzbedingungen lesen und akzeptieren. Die eigentliche Installation dauert dann wieder etwas, 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 fertig, dann öffnet sich zuerst die Adapterkonfiguration für web.0
, welche wir einfach mit den Standardeinstellungen direkt wieder schließen können.

Im Anschluss daran öffnen wir die Adapterkonfiguration für vis.0
über den Schraubenschlüssel-Button.

Auf dieser Konfigurationsseite müssen wir nun einen Lizenzschlüssel für VIS eingeben.
Für die private Nutzung ist VIS kostenlos. Über https://iobroker.net/ kann man sich einen ioBroker Cloud Account erzeugen und nach dem Bestätigen der AGB einen Lizenzschlüssel für iobroker.vis (private) geben lassen. Diesen Lizenzschlüssel fügen wir dann in der Adapterkonfiguration ein und klicken auf Speichern und Schließen.
Anschließend können wir die VIS-Oberfläche über http://<ip>:8082/
erreichen.
Zudem sind in der Übersicht der Administrationsoberfläche die zwei neuen Felder vis runtime und Visualisierung hinzugekommen. Über diese lassen sich die Ansicht und die Verwaltung von VIS per einfachem Klick öffnen.
Die Fehlermeldung main/vis-views.json Not exists
beim ersten Aufruf können wir einfach mit OK bestätigen. Daraufhin erscheint die Frage Erzeugen main/vis-views.json?
welche wir wiederum mit OK bestätigen. Damit ist wird eine Beispielkonfiguration erstellt, welche dann nach Belieben angepasst werden kann.
Die Konfiguration im VIS Editor ist extrem flexibel gehalten. Auch wenn es auf den ersten Blick etwas kompliziert wirken mag, ist die Konfiguration der Oberfläche doch recht einfach. Vieles ist einfachem Drag&Drop realisierbar. Hier gilt die Devise: Einfach ausprobieren!
Zu einem späteren Zeitpunkt werde ich gegebenenfalls noch einen gesonderten Beitrag zu der Konfiguration und den Möglichkeiten von VIS schreiben. 🙂
Das wars dann auch schon mit der Installation und grundlegenden Einführung in ioBroker.
Viel Erfolg!
6. Mai. 2020 um 21:24
Danke vielmals für den informativen Beitrag, echt hilfreich für den schnellen einstieg!
6. Jun. 2020 um 21:35
Super Anleitung, Ich hatte den ioBroker zuvor schon installiert aber die Umstellung auf Redis kannte ich noch nicht. Vielleicht sollte man nochdarauf hinweisen, dass im Lauf der Umstellung danach gefragt wird “Objekte von file/file auf file/redis umstellen?” . Ich habe das mit Y beantwortet, worauf nach längerer Wartezeit “Backup restored – Migration successful” erschien.
26. Aug. 2020 um 17:53
Hallo,
ich habe das Problem, dass sich VIS nicht öffnen lässt. Es kommt lediglich ein Ladebalken und drüber steht Lade Werte, danach tut sich nichts mehr. Wie kann ich den Fehler beheben?
28. Aug. 2020 um 11:58
Hast du im VIS Editor eine Ansicht angelegt und gespeichert?
Ansonsten mal in der Browserconsole (F12) schauen, ob dort irgendwelche Fehler protokolliert werden.
29. Aug. 2020 um 5:51
Ich kann keine Ansicht anlegen, da er nie startet. Habe nur ein weißes Bild mir grauem ladebalken „lade werte“
29. Aug. 2020 um 18:04
Stehe gerade vor genau diesem Problem. Weißes Bild mit “Lade Daten” und grauem Balken, der so tut als hätte er die ersten 10 Prozent geschafft und sich dann nicht weiterbewegt. Und ich dachte schon, ich wäre der Einzige im Netz, der dieses Problem hat.
29. Aug. 2020 um 18:35
Oh! Und jetzt läuft es plötzlich. Ich bin mit web, vis und Socket.io ein paar Versionen zurückgegangen. Plötzlich kam beim laden von VIS der Hinweis, dass es noch keine ../main/???.json gäbe. Okay gedrückt und es lief! Dann wieder auf die neuen Versionen uogedatet und läuft immer noch 🙂
29. Aug. 2020 um 19:34
Das Problem scheinen aktuell einige Nutzer zu haben.
Für mehr Infos siehe https://forum.iobroker.net/topic/36229/vis-startet-nicht 🙂
1. Sep. 2020 um 6:29
Ich habe iobroker auf einem raspberry pi 4 frisch installiert. In der vis-Konfiguration habe ich meinen gültigen Lizenzschlüssel eingegeben, den ich mir zuvor besorgt hatte. Bei der Lizenzprüfung wird auch “OK” zurückgemeldet. Wenn ich jedoch vis aufrufe, egal ob vis-Editor oder vis-runtime, dann kommt nur der Text “Lade Werte” und ein Ladebalken, der so geschätzt auf 1/4 bis 1/3 stehen bleibt. Danach geht es nicht weiter. Hat jemand einen Tipp, woran das liegen kann? Sind vielleicht wegen der frischen Installation noch zu wenig Werte vorhanden?
1. Sep. 2020 um 7:30
Hallo Dirk, das Problem haben momentan einige Nutzer. Es gibt wohl Inkompatibilitäten bei bestimmten Adapterversionen. Für mehr Infos siehe z.B. https://forum.iobroker.net/topic/36229/vis-startet-nicht.
An zu wenigen Werten kann es zumindest nicht liegen 😉
8. Nov. 2020 um 19:03
Hallo,
Ich kann den SQL Adapter nicht einrichten, nach der Eingabe von mysql -s root -p kommt die PW Eingabe aber das Passwort wird nicht akzeptiert. Fehlermeldung Access denied for for user `root`@`localhost`
Was mache ich da falsch?
LG Rolf
10. Nov. 2020 um 7:43
Hallo Rolf,
wenn du das Passwort verwendest, welches du bei `mysql_secure_installation` vergeben hast, dann sollte das eigentlich funktionieren. Falls du dabei kein Passwort vergeben hast, dann einfach das Argument `-p` weglassen.
Meinen Erfahrungen nach, zickt MySQL/MariaDB manchmal bei Passwörtern mit Anführungszeichen oder Apostrophen etwas rum.
Eine Anleitung zum Zurücksetzen des MySQL root-Passwortes findest du z.B. hier.
28. Nov. 2020 um 13:38
… ich musste lediglich sudo voranstellen, dann ging es.
14. Nov. 2020 um 10:23
Hi,
bei mir kommt das gleiche Problem auf.
als das PW “raspberry” für den root gesetzt, und bekam auch den Error acces denied. Habe das PW auch mal komplett wegelassen, hat auch nichts gebracht. Keine Ahnung woran das liegt.
ich benutze den RPi 3 Model B und habe Node v10 installiert
14. Nov. 2020 um 10:42
Habe es gerade hinbekommen:
in Kommentar Nummer 88 steht folgendes:
[…] In 5.7, I found i needed to:
sudo mysql -u root
use mysql;
[mysql] update user set plugin=’mysql_native_password’ where User=’root’;
[mysql] flush privileges;
[…]
Link: https://superuser.com/questions/603026/mysql-how-to-fix-access-denied-for-user-rootlocalhost
Einfach nacheinander diese 4 Befehle eingeben und dann kannst du dich über dein root PW einloggen. Hat bei mir zumindest wunderbar geklappt
15. Nov. 2020 um 11:22
Hallo zusammen, habe es gefunden muss nach mysql -s root -p noch ein ; eingeben … so doof 😉 lg Rolf
14. Apr. 2021 um 6:14
Hallo
Danke für die tolle Anleitung 🙂
Ich habe das nun soweit geschafft, das unter dem Reiter Tabelle nun auch meine Werte angezeigt werden.
Aber dort ist nur ein kleiner Auszug zu sehen.
Wo und wie kann ich dann die Daten hier abspeichern / abgreifen, bzw alle Daten sehen?!
Ich logge aktuell alle 30 sec etwas, aber sehe hier aber nicht alle Daten in der Tabelle.
Gruß Markus
14. Apr. 2021 um 8:11
Das ist auch nur ein kurzer Auszug aus den Daten.
Abgespeichert ist alles ja schon in deiner Datenbank und da kannst du dir die Daten auch wieder raus holen. Das geht sowohl mit ioBroker Mitteln, als auch mit externen Tools.
Zur Visualisierung von Zeitreihendaten kannst du z.B. den echarts Adapter oder Grafana nutzen.
20. Apr. 2021 um 20:47
Vielen Dank.
Mit E-Charts habe ich es nun hinbekommen.
4. Mai. 2021 um 22:52
super Anleitung,
Problem ist ich habe damit den REDIS nachträglich umstellen wollen und plötzlich war die komplette IOBROKER Installation verschwunden.
Eine neue ADMIN Instanz und Backitup hat mir zumindest IOBROKER wieder zurück gebracht, aber JARVIS lässt sich nicht mehr herstellen. Bekomme nur die jungfräuliche JARVIS Seite angezeigt …
Kann es sein das inzwischen bei iobroker setup custom nach multihosting gefragt wird und er diese aktiviert oder warum war plötzlich alles kaputt ?
Ich würde es im Nachhinein nun nicht mehr ausführen …
Gruß
5. Mai. 2021 um 9:31
Ich habe die Anleitung oben soeben auf den aktuellen Stand angepasst.
Mit der Frage nach dem Multihost wird dein Problem nichts zu tun haben, sondern eher mit der Migration der Daten von File auf Redis.
Deiner Beschreibung nach vermute ich, du hast auch die Objects-DB auf Redis umgestellt und dann bei der Frage “Do you want to migrate objects and states…” mit `N` (dem Standardwert) geantwortet. Damit sind dann deine Objekte und States nicht in Redis vorhanden und ioBroker quasi wie frisch installiert.
Was funktionieren sollte, ist ein Wechsel zurück auf `file` für beide DBs ohne Migration. Dann sollte alles wieder so aussehen wie vorher.
Wenn du dann erneut den Wechsel auf Redis nach der (jetzt aktualisierten) Anleitung oben machst und dabei die Migration mit `y` beantwortest, dann sollte alles passen. 🙂
Bezüglich Jarvis wäre das vlt. einen Issue auf GitHub zum Jarvis oder Backitup Adapter wert. Scheinbar wird dort irgendwas nicht mit “gebackupt”.