docker container
Die container Technik zieht in die HomeAutomation Umgebung ein.
Nachdem beim letzten Reboot des Debian Servers anschließend wieder die InfluxDB Datenbank nicht funktioniert hat, war es endlich soweit, dass ich den Ratschlag meines Schwagers angenommen habe und einige Komponenten auf docker container umgebaut habe.
Am Beginn heißt es natürlich einmal docker zu installieren, was ziemlich straight forward funktioniert. Gute Anleitung unter: https://docs.docker.com/engine/install/debian/#installation-methods.
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
# docker installieren
sudo apt-get install docker-ce docker-ce-cli containerd.io
# testen, ob Installation ok
sudo docker run hello-world
# add group docker
sudo groupadd docker
# add user to group docker
sudo usermod -aG docker $USER
# automatic start of docker service
sudo systemctl enable docker.service
# automatic start of container service
sudo systemctl enable containerd.service
Damit ich einen besseren Überblick über die laufenden docker container habe, hab ich mir noch eine Erweiterung in die gnome Oberfläche installiert. (https://extensions.gnome.org/extension/1065/docker-status/) Ist praktisch, denn von dort aus kann man auch gleich eine Shell innerhalb des containers starten.
Als erster container war natürlich die InfluxDB Version 2.x an der Reihe. (https://www.influxdata.com/blog/running-influxdb-2-0-and-telegraf-using-docker)
Bevor man den aktuellen influxDB container startet, sollte man sich jedoch überlegen, wo man die Daten ablegen möchte. Innerhalb des containers ist keine so gute Idee, denn dann sind bei jedem Beenden des containers alle abgespeicherten Daten weg. Die beste Möglichkeit ist daher sich volumes anzulegen. Damit werden die Daten am Hostsystem abgelegt. (https://docs.docker.com/storage/volumes/)
Standardmäßig ist das Verzeichnis indem volumes zu finden sind: /var/lib/docker/volumes/volume_name/_data/
Ich habe mir zwei volumes angelegt. Eines für die Daten und eines falls ich doch etwas bei den Einstellungen verändern möchte, war bis jetzt aber nicht notwendig
docker volume create influxdb_data # /var/lib/docker/volumes/influxdb_data/_data/
docker volume create influxdb_etc # /var/lib/docker/volumes/influxdb_etc/_data/
Danach einfach den docker container starten
docker run
-d # Run container in background and print container ID
-p 8086:8086 # port host : port container
--name influxdb2 # Assign a name to the container
--restart unless-stopped # startet den container automatisch, z.B. nach reboot des host
-v influxdb_data:/var/lib/influxdb2 # Verzeichnis am host : Verzeichnis im container (data)
-v influxdb_etc:/etc/influxdb2 # Verzeichnis am host : Verzeichnis im container (config)
influxdb # starte aktuellste Version
Das war es auch schon wieder. Um zu testen, ob die Installation geklappt hat, einfach in einem Browser http://hostname_or_IP:8086/signin
eingeben und schon ist man auf der Weboberfläche von InfluxDB. Dort heißt es jetzt die Verbindung zum OpenHAB herstellen und schon kann man sich Daten anzeigen lassen.
Im zweiten Schritt wurde grafana in einen docker container gelegt. (https://grafana.com/docs/grafana/latest/administration/configure-docker/)
Auch hierfür macht es Sinn sich ein volume anzulegen.
docker volume create grafana-storage # create a persistent volume for data in /var/lib/grafana
sudo docker pull grafana-enterprise # speichert das aktuelle image am host ab
docker run
-d # Run container in background and print container ID
-p 3000:3000 # port host : port container
--name grafana # Assign a name to the container
--restart unless-stopped # startet den container automatisch, z.B. nach reboot des host
-v grafana-storage:/var/lib/grafana # Verzeichnis am host : Verzeichnis im container (data)
grafana/grafana-enterprise # starte aktuellste Version
Das starten vom grafana container kann schon einige Minuten dauern, also etwas Geduld. Danach im Browser
http://hostname_or_IP:3000/login
eingeben und schon sieht man die Anmeldemaske von grafana.
Tip: Falls man von außerhalb seines host auf grafana zugreifen will, dann muss man natürlich den port 3000 in der firewall öffnen.
Das Einrichten der Verbindung von grafana auf die InfluxDB hat sich dann nicht ganz so einfach bewerkstelligen lassen. Nach dem einloggen als Administrator und natürlich nach dem Ändern des Admin Passwortes, muss man eine neue Datenquelle hinzufügen. Configuration->Data sources -> Add Data Source -> Time series databases -> InfluxDB
In den settings dann folgendes ausfüllen:
Name: openhab
Query Language: Flux
URL: http://HostIP:8086
Access: Server (default)
Auth: nothing to select
Custom HTTP Headers Add header
Header: Authorization
# Token von Influxdb kopieren und davor das Wort Token mit Leerzeichen
Value: Token mhTWepd…
# Organisation in InfluxDB festgelegt
Organization: openhab
# Bucket in InfluxDB festgelegt
Default Bucket: openhab
Wichtig sind hier die Einträge bei Custom HTTP header. Dort muss man einen neuen header hinzufügen und bei Header den Wert Authorization eintragen und im Feld Value das Wort Token dann ein Leerzeichen und dann den Token aus der InfluxDB. Den kann man sich einfach in die Zwischenablage kopieren, wenn man auf der InfluxDB GUI unter Data -> API Token -> openhab’s token -> Copy to Clipboard klickt. (Meine DB unter influxDB heißt openhab).
Zurück in der grafana Konfiguration braucht man nur noch die restlichen Felder unter InfluxDB Details ausfüllen. Ich habe eine Organization in der InfluxDB erzeugt, die bei mir openhab heißt, daher wird das auch hier eingetragen. Das default bucket heißt bei mir auch openhab.
Nach dem Klick auf Save & test sollte eine grüne Meldung erscheinen, die sowas meldet, wie 3 buckets found.
Jetzt kann man beginnen seine ersten Flux Abfragen zu schreiben und seine ersten Grafiken zu gestalten.
TIP: Ich habe es nicht hinbekommen anstatt der FLUX, die InfluxQL Sprache einzustellen. Obwohl das System auf der Config Seite immer OK meldet, sehe ich bei den Abfragen die Fehlermeldung Database not found. Einige Versuche haben nicht zum Erfolg geführt, daher habe ich es lassen. Flux ist zwar anders, als eine SQL ähnliche Sprache, aber was solls, es funktioniert. Hier noch ein Beispiel einer Flux Abfrage.
from(bucket: "openhab")
|> range(start: v.timeRangeStart, stop:v.timeRangeStop)
|> filter(fn: (r) =>
r._measurement == "TTN_LHT65_1_Luftfeuchte" and
r._field == "value"
)
TIP: Die genauen Namen für r.measurement hole ich mir aus der Abfrage über die InfluxDB GUI
FAZIT: Es läuft alles problemlos. Die Daten liegen am Host und können von dort aus gesichert werden. Falls eine neuere Version eines der beiden Programme Probleme hat, dann startet man halt einfach einen container mit einer funktionierenden Version. Ob ich openHAB auch in einer container verschieben werde, weiß ich noch nicht. Jetzt heißt es mal Erfahrungen sammeln.