OpenHAB auf einer Kodi Box als Docker Service installieren

Erstellt: 03.02.2023 Bearbeitet: 29.09.2024

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
Nun sollte man das admin token löschen und ein persönliches anlegen

  1. go to Load Data->API Tokens
  2. Gerate API Token...
  3. 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.

  1. Database URL: http://127.0.0.1:8086
  2. Database Version: InfluxDB 2
  3. Authentication Token: ein neues auth token generieren wie schon bei dem Admin pw ändern beschreiben und einfügen.
  4. Database/Organization: myorg
  5. 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
}

openHAB Predefined Strategies

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