OpenHAB auf einer Kodi Box als Docker Service installieren
Nachdem ich ja, vor ein paar Tagen schon, ein PI-hole auf meine Kodi box installiert hatte, habe ich nun für die Home-Automatisierung auch noch ein openHAB mit einer influxdb2 eingerichtet um damit Licht, Thermostate und Multimedia zu steuern. Hier nun in groben schritten meine Lösung
Installation
Dockerd installieren
Wir brauchen das Kodi addon Docker in Dienste, wenn wir ein minimal System nutzen um einen dockerd zu haben.
Install xbmc.service Docker
systemd
Die service files speichere unter '/storage/.config/system.d/'
Filename: openhab.docker.service
[Unit]
Description=%p container
Requires=service.system.docker.service
Requires=network-online.service
After=network-online.service
After=pi-hole.docker.service
[Service]
Restart=always
RestartSec=10s
TimeoutStartSec=0
ExecStartPre=-/bin/sh -c "mkdir -p /storage/dockerdata/%p/data/openhab/conf /storage/dockerdata/%p/data/openhab/addons /storage/dockerdata/%p/data/openhab/userdata"
ExecStartPre=-/bin/sh -c "/storage/.kodi/addons/service.system.docker/bin/docker rm %p"
ExecStart=/storage/.kodi/addons/service.system.docker/bin/docker run \
--rm \
--name %p \
-e TZ="Europe/Berlin" \
--network=host \
--hostname %p \
-v "/storage/dockerdata/%p/data/openhab/conf:/openhab/conf" \
-v "/storage/dockerdata/%p/data/openhab/addons:/openhab/addons" \
-v "/storage/dockerdata/%p/data/openhab/userdata:/openhab/userdata" \
-v "/etc/localtime:/etc/localtime:ro" \
-v "/storage/.cache/timezone:/etc/timezone:ro" \
-e OPENHAB_HTTP_PORT=8090 \
-e OPENHAB_HTTPS_PORT=8094 \
-e CRYPTO_POLICY="unlimited" \
-e EXTRA_JAVA_OPTS="-Duser.timezone=Europe/Berlin" \
openhab/openhab:3.4.1
# https://hub.docker.com/r/openhab/openhab/tags
# docker pull openhab/openhab:latest
ExecStop=/storage/.kodi/addons/service.system.docker/bin/docker stop %p
[Install]
WantedBy=multi-user.target
Filename: influxdb.docker.service
[Unit]
Description=%p container
Requires=service.system.docker.service
Requires=network-online.service
After=network-online.service
After=pi-hole.docker.service
Before=openhab.docker.service
[Service]
Restart=always
RestartSec=10s
TimeoutStartSec=0
ExecStartPre=-/bin/sh -c "mkdir -p /storage/dockerdata/%p/data/etc /storage/dockerdata/%p/data/influxdb"
ExecStartPre=-/bin/sh -c "/storage/.kodi/addons/service.system.docker/bin/docker rm %p"
ExecStart=/storage/.kodi/addons/service.system.docker/bin/docker run \
--rm \
--name %p \
-p 8086:8086 \
# ip-hole is not bound on host localhost only inside the bridge
--dns=172.17.0.1 \
--add-host host.docker.internal:host-gateway \
#--network=host \
--hostname %p \
-v "/storage/dockerdata/%p/data/etc:/etc/influxdb2" \
-v "/storage/dockerdata/%p/data/influxdb:/var/lib/influxdb2" \
-e DOCKER_INFLUXDB_INIT_MODE="setup" \
-e DOCKER_INFLUXDB_INIT_USERNAME="admin" \
-e DOCKER_INFLUXDB_INIT_PASSWORD="admin1234" \
-e DOCKER_INFLUXDB_INIT_ORG="myorg" \
-e DOCKER_INFLUXDB_INIT_BUCKET="openhab" \
-e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN="extremtopsecrettoken1234" \
-e INFLUXD_LOG_LEVEL="warn" \
-e TZ="Europe/Berlin" \
# docker wand pull a arm/v7 image wat not exist for influxdb2
--platform linux/arm64 \
influxdb:2.6
# https://hub.docker.com/_/influxdb/tags
ExecStop=/storage/.kodi/addons/service.system.docker/bin/docker stop %p
[Install]
WantedBy=multi-user.target
Steuerung des Services mit Systemd
Systemd Konfiguration neu einlesen.
systemctl daemon-reload
Service starten
systemctl start influxdb.docker.service
systemctl start openhab.docker.service
Service status
systemctl influxdb.docker.service
systemctl status openhab.docker.service
Start Service on reboot
systemctl enable openhab.docker.service
systemctl enable influxdb.docker.service
Service stoppen
systemctl stop openhab.docker.service
systemctl stop influxdb.docker.service
Logs lesen
journalctl -u openhab.docker.service
journalctl -u influxdb.docker.service
tail -f /storage/dockerdata/openhab.docker/data/openhab/userdata/logs/*.log
Bash im laufendem Docker öffnen
docker exec -it openhab.docker /bin/bash
Influxdb
Set New influxdb admin pw
Aus der infuxdb doku 'User passwords cannot be updated in the InfluxDB UI.'
Wir müssen als das pw mit der Shell ändern und das geht mit dem init token welsches bei dem ersten Start eingerichtet wird.
docker exec -it influxdb.docker influx user password -n admin -t extremtopsecrettoken1234
- go to Load Data->API Tokens
- Gerate API Token...
- Alte Admin token in der Liste löschen
Influxdb als persistent storage in openHAB einrichten
Als erstes muss man sich in openHAB einloggen und dort in die Settings gehen und bei den Add-ons das addon "InfluxDB Persistence" suchen und installieren.
Nach der Installation hat man nun in den Settings bei 'Other Services' die Einstellungen 'InfluxDB Persistence Service' wo man seine InfluxDB verbinden kann. Hier reichen wenige Optionen.
- Database URL: http://127.0.0.1:8086
- Database Version: InfluxDB 2
- Authentication Token: ein neues auth token generieren wie schon bei dem Admin pw ändern beschreiben und einfügen.
- Database/Organization: myorg
- Retention Policy / Bucket: openhab
Ich habe dann noch die 3 folgenden Schalter an gemacht 'Add Category Tag', 'Add Type Tag', 'Add Label Tag' um es eventuell später in Grafana als Selektor nutzten zu können.
Nun können wir die influxdb als Persistence storage auswählen. Dafür gehen wir wieder in den Settings zu den 'System Services' in die 'Persistence' Option und wählen 'InfluxDB persistence layer'.
Für die Persistence Config gibt es jetzt noch ein File was wir anlegen müssen und wofür es leider keine UI Config gibt.
Dafür legen wir das folgende File an
Filename: /storage/dockerdata/openhab.docker/data/openhab/conf/persistence/influxdb.persist
Strategies {
default = everyChange, restoreOnStartup
}
Items {
// persist all items on every change and restore them from the db at startup
* : strategy = everyChange, restoreOnStartup
}
Und nun sollten, sobald wir thinks haben Daten in der InfluxDB zu finden sein :)
Das war es schon, wie man nun ein paar Sachen in openHAB einbaut und benutzt werde ich in einem weiteren Artikel beschreiben.
Viel Spaß beim Nachbauen