OpenHAB 3 Docker Installation

Aus Laub-Home.de Wiki
Zur Navigation springen Zur Suche springen

Hier wird beschrieben wie man OpenHAB in der Version 3 mit nützlichen Tools wie Grafana und Mosquitto MQTT mittel Docker Compose Projekt deployt und grundeinrichtet. Für die Persistenz habe ich eine InfluxDB gewählt. Grafana wird noch durch den Renderer erweitert um bei Alerts auch die Grafiken via Mail zu erhalten. Das Setup kommt auf einem Raspberry Pi 4 zum Laufen. Folgende Vorraussetzungen sollten erfüllt sein:

Docker Compose Projekt

Als erstes legen wir unser Docker Compose Projekt Ordner an und wechseln in dieses:

mkdir -p /opt/openhab3/data/openhab/conf
mkdir -p /opt/openhab3/data/openhab/addons
mkdir -p /opt/openhab3/data/mosquitto/conf/

cd /opt/openhab3

Nun legen wir unsere Projekt Konfigurationsdatei an:

/opt/openhab3/.env

# Config File for openHAB Application

# Docker Compose Project Name
# max length 11 characters
PROJECT_NAME=openhab3

# InfluxDB Configuration
INFLUXDB_ADMIN_USER=admin
INFLUXDB_ADMIN_PASSWORD=bijcdfvsdfgdfbfgrrapni
INFLUXDB_USER=openhab
INFLUXDB_USER_PASSWORD=havpijbfgfsdfsbdfgCofpit9
INFLUXDB_READ_USER=openhab_ro
INFLUXDB_READ_USER_PASSWORD=keHattOjfsdfsEcsdvsdfhidaw
INFLUXDB_OPENHAB_DB=openhab_db

# Port Configuration openHab
OPENHAB_HTTP_PORT=8080
OPENHAB_HTTPS_PORT=8443

# Port Configuration InfluxDB
INFLUXDB_DB_PORT=8086

# Port Configuration Grafana
GRAFANA_HTTP_PORT=3000

# Port Configuration Chronograf
CHRONOGRAF_HTTP_PORT=8888

# Port Configuration Mosquitto
MOSQUITTO_MQTT_PORT=1883
MOSQUITTO_MQTTS_PORT=8883

# Timezone
TZ=Europe/Berlin

Bitte ändert bei der InfluxDB die Passwörter ab!

nun noch unser docker-compose.yml.

/opt/openhab3/docker-compose.yml

version: '3.8'

services:
  openhab:
    image: openhab/openhab:3.0.0
    depends_on:
      - influxdb
      - mosquitto
    restart: always
    # if you do not need persistent log files
    #tmpfs:
    #   - /openhab/userdata/logs
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
      - "./data/openhab/conf:/openhab/conf"
      - "./data/openhab/addons:/openhab/addons"
      - data_openhab_userdata:/openhab/userdata
    environment:
      TZ: ${TZ}
      OPENHAB_HTTP_PORT: ${OPENHAB_HTTP_PORT}
      OPENHAB_HTTPS_PORT: ${OPENHAB_HTTPS_PORT}
      CRYPTO_POLICY: "unlimited"
      EXTRA_JAVA_OPTS: "-Duser.timezone=${TZ}"
      USER_ID: 999
      GROUP_ID: 994
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    network_mode: host

  mosquitto:
    image: eclipse-mosquitto:latest
    restart: always
    volumes:
      - "./data/mosquitto/conf:/mosquitto/config"
      - data_mosquitto_data:/mosquitto/data
      - data_mosquitto_log:/mosquitto/log
    ports:
      - ${MOSQUITTO_MQTT_PORT}:1883
      - ${MOSQUITTO_MQTTS_PORT}:8883
    environment:
      TZ: ${TZ}
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    networks:
      app-nw:
        aliases:
          - mqtt

  influxdb:
    image: influxdb:latest
    restart: always
    volumes:
      - data_influxdb:/var/lib/influxdb
    ports:
      - ${INFLUXDB_DB_PORT}:8086      
    environment:
      - INFLUXDB_DATA_ENGINE=tsm1
      - INFLUXDB_REPORTING_DISABLED=false
      - INFLUXDB_ADMIN_USER=${INFLUXDB_ADMIN_USER}
      - INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_ADMIN_PASSWORD}
      - INFLUXDB_USER=${INFLUXDB_USER}
      - INFLUXDB_USER_PASSWORD=${INFLUXDB_USER_PASSWORD}
      - INFLUXDB_READ_USER=${INFLUXDB_READ_USER}
      - INFLUXDB_READ_USER_PASSWORD=${INFLUXDB_READ_USER_PASSWORD}
      - INFLUXDB_DB=${INFLUXDB_OPENHAB_DB}
      - TZ=${TZ}
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    networks:
      app-nw:
      backend-nw:
        aliases:
          - db

  renderer:
    image: adejong/grafana-image-renderer-pi:1.0.8-beta2
    restart: always
    environment:
      ENABLE_METRICS: 'true'
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    networks:
      - backend-nw

  grafana:
    image: grafana/grafana:latest-ubuntu
    depends_on:
      - influxdb
      - renderer
    restart: always
    user: "0"
    volumes:
      - data_grafana:/var/lib/grafana
    ports:
      - ${GRAFANA_HTTP_PORT}:3000
    environment:
      - GF_INSTALL_PLUGINS=grafana-clock-panel,briangann-gauge-panel,natel-plotly-panel,grafana-simple-json-datasource
      - GF_SMTP_ENABLED=true
      - GF_SMTP_HOST=YOURMAILSERVER:465
      - GF_SMTP_USER=YOURSMTPUSER
      - GF_SMTP_PASSWORD=SMTPPASSWORD
      - GF_SMTP_FROM_ADDRESS=MAILFROMADRESS
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_SECURITY_ALLOW_EMBEDDING=true
      - GF_RENDERING_SERVER_URL=http://renderer:8081/render
      - GF_RENDERING_CALLBACK_URL=http://grafana:3000/
      - GF_LOG_FILTERS=rendering:debug
      - TZ=${TZ}
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
#    network_mode: host      
    networks:
      - app-nw
      - backend-nw

volumes:
  data_openhab_userdata:
  data_influxdb:
  data_grafana:
  data_mosquitto_data:
  data_mosquitto_log:

networks:
  app-nw:
    internal: false
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: app-${PROJECT_NAME}
  backend-nw:
    internal: true
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: be-${PROJECT_NAME}

Was passiert hier:

  • openhab wird mit dem host network gestartet, damit es auch UPnP Anfragen annehmen kann (network_mode: host)
  • Es wird ein Netzwerk app-nw eingerichtet mit dem sich alle Container verbinden, die einen Port freigeben.
  • zusätzlich wird noch ein Backend Netzwerk erstellt, mit dem sich die Backend Dienste unterhalten: backend-nw
  • Für persistente Daten werden Volumes erstellt
  • Konfigurationsdateien werden in den Compose Projektordner ausgelagert
  • openhab, influxdb, mosquitto, grafana und renderer werden als Container gestartet
  • Das Label - "com.centurylinklabs.watchtower.enable=true" dient dazu das eine automatische Aktualisierung der Container von Watchtower stattfindet

Mosquitto Konfiguration

Wie man den Mosquitto einrichtet, könnt ihr hier nachlesen:

Hochfahren des openHAB 3 Compose Projektes

Ist alles soweit eingerichtet kann das Projekt das erste Mal gestartet werden:

cd /opt/openhab3
docker-compose up -d

Nun sollten die folgenden URLs verfügbar sein:

  • openHAB: http://YOURSERVERNAME:8080 und https://YOURSERVERNAME:8433
  • Grafana: http://YOURSERVERNAME:3000

Konfiguration von openHAB

Beim ersten Aufruf der openHAB URL begrüsst uns ein Setup Assistent. Das erste was wir hier machen, ist einen Administrativen Benutzer einrichten:

OpenHAB3 Setup 1.png

dann unsere Lokalen Einstellungen:

OpenHAB3 Setup 2.pngOpenHAB3 Setup 3.png

nun installieren wir unsere Add-ons:

  • InfluxDB Persistence
  • MQTT Binding
  • weitere ihr benötigt, weitere Add-ons können aber auch später ohne weiteres nachinstalliert werden

OpenHAB3 Setup 4.pngOpenHAB 3 Setup 5.png

das war es auch schon mit dem Setup Assistent:

OpenHAB 3 Setup 6.png

und nun begrüßt uns auch schon das Dashboard von opneHAB 3

OpenHAB 3 Setup 7.png

openHAB Persistenz mit InfluxDB

Um die InfluxDB als Persistenz mit openHAB zu verbinden, gehen wir in die Einstellungen und konfigurieren unsere hochgefahrene und eingerichtete openhab_db InfluxDB Datenbank.

OpenHAB Persistenz 3.png

OpenHAB 3 Persistenz 4.png

Hier die im .env File stehenden Zugangsdaten eintragen und mit Save oben rechts speichern.

Nun wählen wir noch die InfluxDB als Standard Persistence aus.

OpenHAB 3 Persistenz 1.png

OpenHAB 3 Persistenz 2.png

Und wieder mit Save speichern.

openHAB MQTT Broker anbinden

Wieder gehen wir in die Einstellungen, dann zu den Things. Unten rechts klicken wir auf das Plus Sysmbol um ein neues Thing einzurichten. Dann wählen wir das MQTT Binding aus. Dort angekommen klicken wir auf den MQTT Broker:

OpenHAB 3 MQTT Broker 1.png

Als erstes haken wir "Show Advanced" an. Ihr müsst nun die folgenden Dinge konfigurieren:

  • Label (Local MQTT Broker)
  • Broker Hostname (YOURFQDN)
  • Broker Port (8883)
  • Secure Connection (enabled)
  • Client ID (openHAB3)
  • Username (mosquitto)
  • Password (euer angelegtes Passwort)
  • Certificate Pinning (disabled)
  • Public Key Pinning (disabled)

OpenHAB 3 MQTT Broker 2.png

OpenHAB 3 MQTT Broker 3.png

Ganz unten dann auf "Create Thing"

nun haben wir den Mosquitto MQTT als Bridge angelegt und können diverse Generic MQTT Things anlegen um so die Daten in openHAB zu bringen. Ich lege hier immer ein Thing für jedes Gerät an, das Daten an den MQTT schickt. Mehr dazu findet ihr hier:

Grafana Konfigurieren

Grafana erreicht ihr dann unter der URL http://YOURSERVERNAME:3000/ Der Standard User ist hier admin mit dem Passwort admin. Beim Ersten Login müsst ihr aber direkt das admin Passwort ändern. In Grafana selbst legen wir dann die InfluxDB als Datasource an, dann können wir schöne Grafiken mittels Grafana aus unseren gesammelten Persistenten Daten von opeHAB zusammenklicken.

Wir gehen in Grafana unter Einstellungen / Data Sources:

OpenHAB Grafana 1.png

Dort gehen wir auf Add Datasources und wählen die InfluxDB aus. Diese wird dann wie folgt konfiguriert:

OpenHAB Grafana 2.pngOpenHAB Grafana 3.png Wir tragen hier die Informationen ein, die wir im .env File eingerichtet haben. Wir nutzen hier nun den Read Only User (openhab_ro) Beim Klick auf "Save & Test" sollte uns eine positive Nachricht entgegen springen. Nun kann man Dashboards mit Panels erstellen, die die openHAB Daten der Items verwenden.

Updaten

Zum Updaten des Containers einfach wie gewohnt:

cd /opt/openhab3/
docker-compose pull
docker-compose up -d

oder Automatisch via Watchtower:

Backup

Ein Backup kann entweder händisch oder aber Script gesteuert gemacht werden. Schaut einfach die folgenden Artikel durch:

Quellen