OpenHAB v3 dateibasierte Konfiguration für Ihren WQHD INSTAR MQTTv5 Broker
- Teil I - Konfiguration der MQTT-Binding über die Main Benutzeroberfläche
- Teil II - MQTT-Bindingskonfiguration über die Konfigurationsdateien
- Teil III - MQTT Binding Rules
- Teil IV - MQTT Binding Scripts
- Teil V - Guppen und Sitemaps
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.
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:
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:
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:
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:
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:
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