OpenHAB v3 dateibasierte Konfiguration für Ihren WQHD INSTAR MQTTv5 Broker

Datei-basierte Konfiguration

A: Teil 1 dieses Tutorials installierte die OpenHAB MQTT Binding und verband sie mit dem internen Broker in unserer INSTAR WQHD Kamera unter Verwendung der OpenHab 3 Main UI. Dieser Teil II wird dasselbe tun, indem wir die Konfigurationsdateien unserer OpenHab 3-Installation bearbeiten.

Je nachdem, wo und wie Sie OpenHab installiert haben, finden Sie diese Konfigurationsdateien an unterschiedlichen Orten. Ich folge der Docker-Installation, die es mir erlaubt, einen Volume-Mount für die OpenHab-Konfiguration auf meinem Host-Dateisystem zu definieren, z.B. /opt/openhab/openhab_conf:

Vorbereitung

groupadd -g 9001 openhab
useradd -g 9001 openhab
usermod -a -G openhab myownuser

mkdir -p /opt/openhab/{openhab_addons,openhab_conf,openhab_userdata}
chmod -R 775 /opt/openhab

Ausführen des Containers

docker pull openhab/openhab:latest-alpine
docker run \
    --name openhab \
    --net=host \
    --privileged \
    --rm \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/openhab/openhab_addons:/openhab/addons \
    -v /opt/openhab/openhab_conf:/openhab/conf \
    -v /opt/openhab/openhab_userdata:/openhab/userdata \
    -d \
    openhab/openhab:latest-alpine

Das Konfigurationsverzeichnis enthält nun die folgenden Dateien:

ls -la /opt/openhab/openhab_conf

total 56
drwxr-xr-x 14 9001 openhab 4096 Aug 11 17:21 .
drwxrwxr-x  5 root root    4096 Aug 11 17:19 ..
drwxr-xr-x  3 9001 openhab 4096 Aug 11 17:21 automation
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 html
drwxr-xr-x  3 9001 openhab 4096 Jun 27 07:38 icons
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 items
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 persistence
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 rules
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 scripts
drwxr-xr-x  2 9001 openhab 4096 Aug 11 17:21 services
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 sitemaps
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 sounds
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 things
drwxr-xr-x  2 9001 openhab 4096 Jun 27 07:38 transform

Binding Installation

Die Konfiguration des Bindings finden Sie in /opt/openhab/openhab_conf/addons.cfg. Fügen Sie hier alle Bindings und Transformationen hinzu, die Sie benötigen:

# A comma-separated list of bindings to install (e.g. "binding = knx,sonos,zwave")
binding = mqtt,ipcamera

# A comma-separated list of transformation services to install (e.g. "transformation = jsonpath,map")
transformation = javascript,regex,jsonpath

Speichern Sie die Datei und wechseln Sie zurück zur Benutzeroberfläche. Sie sollten sehen, dass alles wieder installiert wurde.

OpenHAB with your WQHD INSTAR MQTTv5 Broker

Konfiguration

Things definieren

Alle Things-Dateien befinden sich im Verzeichnis things, müssen die Dateierweiterung .things haben und einer speziellen Syntax folgen. Hier müssen wir die gleiche Konfiguration wie zuvor hinzufügen, um die MQTT-Binding mit unserer Kamera zu verbinden:

things/instar_mqtt.things

mqtt:broker:cameraBroker118 [ host="192.168.2.118",secure=false, port=1883, username="admin", password="instar" ]

Und nun können wir mit der Definition eines Thing mit allen benötigten Kanälen fortfahren. Aber wir können zwei neue Funktionen hinzufügen:

  • Ãœberprüfung der Verfügbarkeit: Wir können unsere Kameras Last-Will-Topic verwenden, um zu überprüfen, ob die Kamera verfügbar ist: cameras/118/status/testament kann die Nutzlast {"val": "alive"} oder {"val": "dead"} wie in Teil I konfiguriert.
  • Eingehende Wertumwandlung: Unsere Kamera verwendet das JSON-Format für MQTT-Payloads. Das bedeutet, dass wir die JSONPath Transformation verwenden können, um den Wert daraus zu extrahieren.

Fügen Sie die folgende Thing-Konfiguration unterhalb der Browser-Konfiguration hinzu, um die Privacy Area 1 Ihrer Kamera zu aktivieren, die gesteuert wird von multimedia/privacy/region1/enable:

Thing mqtt:topic:home "Camera 118" (mqtt:broker:cameraBroker118) [ availabilityTopic="cameras/118/status/testament", payloadAvailable="{\"val\":\"alive\"}", payloadNotAvailable="{\"val\":\"dead\"}" ] {
    Channels:
    Type switch    : PrivacyArea1   [ stateTopic="cameras/118/status/multimedia/privacy/region1/enable",
                                    commandTopic="cameras/118/multimedia/privacy/region1/enable",
                                    transformationPattern="JSONPATH:$.val",
                                    formatBeforePublish="{\"val\":\"%s\"}",
                                    on="1",
                                    off="0" ]
}

Nach dem Speichern der Konfigurationsdatei wechseln Sie zurück zur OpenHab-Benutzeroberfläche. Sie sollten nun sowohl den konfigurierten MQTT-Broker als auch die Umschaltmöglichkeit für den Datenschutzbereich sehen:

OpenHAB with your WQHD INSTAR MQTTv5 Broker

Wir können auch die Code-Darstellung unseres Thing überprüfen und sehen, dass es im Grunde dasselbe ist wie vorher - nur mit den zusätzlichen Funktionen, die wir oben konfiguriert haben:

OpenHAB with your WQHD INSTAR MQTTv5 Broker

Items definieren

Wir haben jetzt den Datenpunkt oder Kanal, aber wir brauchen immer noch eine Möglichkeit, mit ihm zu interagieren. Dies kann mit einem Item gemacht werden. Gehen Sie in das Verzeichnis items im OpenHab-Konfigurationsordner und erstellen Sie eine Datei namens mqtt.items. In dieser Datei können wir nun ein Element erstellen, das mit dem Channel PrivacyArea vom Type switch interagieren kann, den wir oben erstellt haben:

/* Privacy Areas */
Switch    PrivacyArea1   "Privacy Area 1"  {channel="mqtt:topic:home:PrivacyArea1"}

Die Channel-ID mqtt:topic:home:PrivacyArea finden Sie in der Channel Konfiguration:

OpenHAB with your WQHD INSTAR MQTTv5 Broker

Sobald Sie die items-Datei gespeichert haben, sollte Item in der OpenHab-Benutzeroberfläche erscheinen. Wenn Sie den Status des Schalters umschalten, können Sie die Privacy Area 1 ein- und ausschalten:

OpenHAB with your WQHD INSTAR MQTTv5 Broker

Code Definition

Die Definitionen innerhalb unserer Benutzeroberfläche lauten nun wie folgt:

Broker

UID: mqtt:broker:cameraBroker118
label: MQTT Broker
thingTypeUID: mqtt:broker
configuration:
  lwtQos: 0
  publickeypin: true
  keepAlive: 60
  clientid: 16f924cb-0ea1-44ce-a699-422a6e5b5469
  secure: false
  birthRetain: true
  shutdownRetain: false
  certificatepin: true
  password: instar
  qos: 0
  reconnectTime: 60000
  port: 1883
  host: 192.168.2.118
  lwtRetain: true
  username: admin
  enableDiscovery: true

Kamera

UID: mqtt:topic:home
label: Camera 118
thingTypeUID: mqtt:topic
configuration:
  payloadNotAvailable: '{"val":"dead"}'
  availabilityTopic: cameras/118/status/testament
  payloadAvailable: '{"val":"alive"}'
bridgeUID: mqtt:broker:cameraBroker118
channels:
  - id: PrivacyArea1
    channelTypeUID: mqtt:switch
    label: On/Off Switch
    description: null
    configuration:
      retained: false
      postCommand: false
      formatBeforePublish: '{"val":"%s"}'
      commandTopic: cameras/118/multimedia/privacy/region1/enable
      stateTopic: cameras/118/status/multimedia/privacy/region1/enable
      transformationPattern: JSONPATH:$.val
      off: "0"
      on: "1"

Kombinieren von Kanälen

Bisher haben wir einen Channel basierend auf einem einzigen MQTT-Topic erstellt und diesen an ein Switch-Item gebunden, das das Topic aktualisieren und eine der Funktionen unserer Kamera umschalten kann. Jetzt wollen wir mehrere MQTT-Topics kombinieren und sie alle mit einem einzigen Trigger aktualisieren.

Dazu müssen wir zunächst jeden Kanal in unserer Konfigurationsdatei Thing definieren. Als Beispiel möchte ich erst einmal alle 4 Privacy Areas hinzufügen:

things/instar_mqtt.things

mqtt:broker:cameraBroker118 [ host="192.168.2.118",secure=false, port=1883, username="admin", password="instar" ]

Thing mqtt:topic:home "Camera 118" (mqtt:broker:cameraBroker118) [ availabilityTopic="cameras/118/status/testament", payloadAvailable="{\"val\":\"alive\"}", payloadNotAvailable="{\"val\":\"dead\"}" ] {
    Channels:
    Type switch    : PrivacyArea1   [ stateTopic="cameras/118/status/multimedia/privacy/region1/enable",
                                    commandTopic="cameras/118/multimedia/privacy/region1/enable",
                                    transformationPattern="JSONPATH:$.val",
                                    formatBeforePublish="{\"val\":\"%s\"}",
                                    on="1",
                                    off="0" ]
    Type switch    : PrivacyArea2   [ stateTopic="cameras/118/status/multimedia/privacy/region2/enable",
                                    commandTopic="cameras/118/multimedia/privacy/region2/enable",
                                    transformationPattern="JSONPATH:$.val",
                                    formatBeforePublish="{\"val\":\"%s\"}",
                                    on="1",
                                    off="0" ]
    Type switch    : PrivacyArea3   [ stateTopic="cameras/118/status/multimedia/privacy/region3/enable",
                                    commandTopic="cameras/118/multimedia/privacy/region3/enable",
                                    transformationPattern="JSONPATH:$.val",
                                    formatBeforePublish="{\"val\":\"%s\"}",
                                    on="1",
                                    off="0" ]
    Type switch    : PrivacyArea4   [ stateTopic="cameras/118/status/multimedia/privacy/region4/enable",
                                    commandTopic="cameras/118/multimedia/privacy/region4/enable",
                                    transformationPattern="JSONPATH:$.val",
                                    formatBeforePublish="{\"val\":\"%s\"}",
                                    on="1",
                                    off="0" ]
}

Jetzt können wir alle definierten Channels an ein einziges Item binden:

/* Privacy Areas */
/* Switch    PrivacyArea1   "Privacy Area 1"  {channel="mqtt:topic:home:PrivacyArea1"} */
Switch  PrivacyAreas   "All Privacy Areas" {channel="mqtt:topic:home:PrivacyArea1, mqtt:topic:home:PrivacyArea2,mqtt:topic:home:PrivacyArea3,mqtt:topic:home:PrivacyArea4"}

Nach dem Speichern dieser Konfigurationsdatei haben wir nun einen Schalter, mit dem wir entweder manuell oder durch ein Automatisierungsskript alle Datenschutzbereiche auf einmal umschalten können:

OpenHAB with your WQHD INSTAR MQTTv5 Broker

Dies ist nur ein Beispiel für die Verwendung der INSTAR MQTTv5 API um die Kontrolle über die Kamera durch OpenHab zu übernehmen. Ein paar Beispiele finden Sie in unserer OpenHab Übersicht