OpenHAB

OpenHAB ist ein Tool, dass hilft die Komponenten der Hausautomatisierung in einem Service zusammenzuführen. Für mein home-server-Projekt war es notwendig, dass ich OpenHAB in einem Kubernetes Cluster starte und dort das Homematic-Binding installiere, damit ich meine Homematic Geräte (hauptsächlich Heizungsthermostate) dort steuern und analysieren kann. Damit ihr das auch zu Hause machen könnt erkläre ich im Folgenden die notwendigen Schritte. Um eine aktuelle Anleitung mit Helm zu erhalten, könnt ihr einfach das Repository öffnen: https://gitlab.com/lookslikematrix/home-server/-/tree/master/openhab.

Zunächst einmal benötigt ihr ein eigenes Kubernetes Cluster und ein gewisses Grundverständnis von Kubernetes. Jetzt kann es los gehen. Für OpenHAB benötigt ihr zwei Persistant Volume Claims (PVCs) - eins für die Daten und eins für die Konfiguration. Dazu legt ihr eine Datei openhab-pvcs.yaml mit folgendem Inhalt an.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  namespace: openhab
  name: openhab-pvc-data
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  namespace: openhab
  name: openhab-pvc-conf
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 1Gi

Weiterhin benötigen wir ein Deployment von OpenHAB. Dabei ist für die Interaktion mit Homematic aktuell notwendig ein Milestone-Release (3.1) von OpenHAB zu verwenden, da die aktuelle stabile Version (3.0) nicht einfach funktioniert. Also legen wir dazu eine Datei mit dem Namen openhab-deployment.yaml an.

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: openhab
  name: openhab-deployment
  labels:
    app: openhab
spec:
  selector:
    matchLabels:
      app: openhab
  template:
    metadata:
      labels:
        app: openhab
    spec:
      containers:
      - name: openhab
        image: openhab/openhab:3.1.0.M5-alpine
        volumeMounts:
        - name: openhab-data
          mountPath: /openhab/userdata
        - name: openhab-conf
          mountPath: /openhab/conf
      volumes:
      - name: openhab-data
        persistentVolumeClaim:
          claimName: openhab-pvc-data
      - name: openhab-conf
        persistentVolumeClaim:
          claimName: openhab-pvc-conf

Damit wir dann noch auf OpenHAB zugreifen können (Port 8080 für die grafische Oberfläche ) und auch die Kommunikation zur Homematic-Zentrale (Port 9125) richtig funktioniert müssen wir noch Services in einer Datei openhab-services.yaml anlegen. Dazu müsst ihr die IP-Adresse eures Clusters anstatt 192.168.178.10 eintragen.

apiVersion: v1
kind: Service
metadata:
  namespace: openhab
  name: openhab-frontend-service
spec:
  type: ClusterIP
  selector:
    app: openhab
  ports:
    - protocol: TCP
      name: service
      port: 8080
  externalIPs:
  - 192.168.178.10
---
apiVersion: v1
kind: Service
metadata:
  namespace: openhab
  name: openhab-homematic-service
spec:
  type: ClusterIP
  selector:
    app: openhab
  ports:
    - protocol: UDP
      name: xml-rpc
      port: 9125
  externalIPs:
  - 192.168.178.10

Jetzt können wir die Konfigurations-Dateien auf euer Cluster spielen.

kubectl create namespace openhab
kubectl create -f openhab-pvcs.yaml
kubectl create -f openhab-deployment.yaml
kubectl create -f openhab-services.yaml

Es können jetzt ein paar Minuten vergehen bis alles eingerichtet ist (OpenHAB-Container herunterladen, PVCs vorbereiten und OpenHAB starten, etc.). Aber dann könnt ihr unter http://192.168.178.10:8080 OpenHAB öffnen und konfigurieren. Ich habe erstmal nur das Addon für Homematic installiert und anschließend eingerichtet. Wichtig dabei ist, dass ihr als Gateway Address die IP-Adresse eurer Homematic-Zentrale eingebt und als Callback Network Address die IP-Adresse eures Cluster (also 192.168.178.10 in unserem Beispiel). Anschließend wird ein automatischer Scan gestartet und ihr bekommt alle Homematic-Geräte in OpenHAB angezeigt, die ihr dann in OpenHAB einbinden könnt.

Als letztes habe ich noch im Repository des Homematic-Addons herausgefunden, dass die Zentrale nicht automatisch Änderungen an Datenpunkten wie Temperatur verschickt und musste somit noch ein Rule in OpenHAB anlegen, die mir jede Minute (0 * * * * ? *) eine Script (ECMASCript (ECMA - 262 Edition 5.1)) ausführt, dass ein REFRESH Kommando an die einzelnen Geräte der Zentrale schickt.

itemRegistry.getItems().forEach(function(item) {
  if (item.hasTag("Temperature") | item.hasTag("Humidity")) {
    events.sendCommand(item.getName(), "REFRESH");
  }
})

Ich hoffe ich konnte euch mit der Beschreibung helfen euer eigenes OpenHAB in einem Kubernetes Cluster zu betreiben. Wenn ihr noch Fragen oder Anregungen habt, dann könnt ihr mir gerne ein Kommentar oder E-Mail schreiben. Ansonsten könnt ihr mir auch gerne einen Kaffee ausgeben.


[1]: https://www.openhab.org/

[2]: https://www.eq-3.com/products/homematic.html

[3]: https://github.com/openhab/openhab-addons/tree/main/bundles/org.openhab.binding.homematic