All ioBroker Tutorials
All ioBroker FAQs
INSTAR MQTT Server mit Home Assistant
- Installation von Home Assistant auf einem Raspberry Pi
- Hinzufügen eines UI Schalters
- Hinzufügen Ihrer Kameras Live-Video
- Hinzufügen einer UI-Tastfläche
- Automatisierungen
- Verwendung von Home Assitant als Alarmserver für Ihre Kamera
Updates:
Installation von Home Assistant auf einem Raspberry Pi
Wir haben bereits vor einiger Zeit einen Installationsleitfaden für den Home Assistant für debianbasierte Linux-Systeme veröffentlicht. Aber nach der Installationsanweisung und dem SystemD Service Setup stellten wir fest, dass sich ein paar Dinge geändert hatten. Wir haben daher die Dokumentation aktualisiert, um Home Assistant auf unserem Raspberry Pi 3 mit Raspbian Buster zu installieren.
MQTT Binding
Sie sind jetzt in der Lage sind, bereits während des ersten Setups einen MQTT Broker hinzuzufügen. Ein editieren der Konfiguration YAML Dateien ist somit hier nicht mehr erforderlich:
Wenn Sie zum ersten Mal auf die Benutzeroberfläche zugreifen, klicken Sie auf Hinzufügen einer Erweiterung und wählen Sie MQTT aus der Liste. Geben Sie nun die IP-Adresse der INSTAR Full HD IP Kamera ein (z.B. 192.168.2.165
) gefolgt vom Port 1883
und Ihrem INSTAR MQTT Broker-Login ein - Sie können diesen Port im Features Menü ihrer Kamera ändern.
Wenn Sie den Home Assistant bereits installiert haben, gehen Sie auf Settings und Integrations und wählen Sie dort den MQTT Broker hinzuzufügen:
Testen unseres MQTT Service
Um zu testen, ob alles funktioniert, müssen wir zu Developer Tools und MQTT gehen. Hier können wir ein Abonnement für das MQTT Topic einrichten. (Listen to a topic) instar/000389888811/status/alarm/area1/enable
(Bitte ersetzen Sie den Teil 000389888811 durch die MAC-Adresse Ihrer Kamera.).
Im Screenshot sehen Sie, dass wir ein Update erhalten haben und dass der Wert für dieses Thema 0 war: {"val": "0"}
. Das bedeutet, dass der Alarmerkennungsbereich 1 deaktiviert wurde. Durch die Veröffentlichung (publish) des Wertes {"val": "1"}
unter dem Topic instar/000389888811/alarm/area1/enable
wird der Bereich aktiviert. Sie können dies in der Web-Benutzeroberfläche Ihrer Kamera überprüfen. Sie können den Bereich auch innerhalb der WebUI wieder deaktivieren und sehen, dass das MQTT-Topic wieder auf {"val": "0"}
umschaltet.
Hinzufügen eines UI Schalters
Wir wissen nun, dass wir in der Lage sind, MQTT Status Topics von unserer Kamera zu abonnieren und diese Topicsn über das entsprechende Command Topics zu aktualisieren. Alles, was wir jetzt noch tun müssen, ist, eine Schalter Komponente hinzuzufügen, die dies für uns erledigt und unserem Home Assistant Dashboard zugewiesen werden kann.
Schalter Komponente
Um unsere Haupt configuration.yaml
übersichtlich zu halten, erstellen wir eine separate Datei switches.yaml
, die alle unsere MQTT-bezogenen Schalter enthält und importieren diese in die Hauptkonfiguration, indem wir die folgende Zeile hinzufügen: switch: !include switches.yaml
.
Jetzt können wir unsere ersten Schalterkomponenten hinzufügen - z.B. um die Bewegungserkennungsbereiche zu aktivieren und zu deaktivieren:
- platform: mqtt
name: 'Alarm Area 1'
state_topic: 'instar/000389888811/status/alarm/area1/enable'
command_topic: 'instar/000389888811/alarm/area1/enable'
qos: 1
payload_on: '{"val":"1"}'
payload_off: '{"val":"0"}'
optimistic: false
retain: false
- platform: mqtt
name: 'Alarm Area 2'
state_topic: 'instar/000389888811/status/alarm/area2/enable'
command_topic: 'instar/000389888811/alarm/area2/enable'
qos: 1
payload_on: '{"val":"1"}'
payload_off: '{"val":"0"}'
optimistic: false
retain: false
- platform: mqtt
name: 'Alarm Area 3'
state_topic: 'instar/000389888811/status/alarm/area3/enable'
command_topic: 'instar/000389888811/alarm/area3/enable'
qos: 1
payload_on: '{"val":"1"}'
payload_off: '{"val":"0"}'
optimistic: false
retain: false
- platform: mqtt
name: 'Alarm Area 4'
state_topic: 'instar/000389888811/status/alarm/area4/enable'
command_topic: 'instar/000389888811/alarm/area4/enable'
qos: 1
payload_on: '{"val":"1"}'
payload_off: '{"val":"0"}'
optimistic: false
retain: false
Für jede Komponente - der wir die Schalter-Vorlage innerhalb unserer Hauptkonfiguration zuordnen - müssen wir die Plattform definieren, auf der wir sie verwenden wollen. Dies ist hier die mqtt Plattform, die wir dem Home Assistant hinzugefügt haben.
Wir haben sowohl ein state_topic als auch ein command_topic. Das erste ist für das Status-Topic und definiert den Zustand, in dem sich unser Schalter befindet. Das Befehlsthema ist dasjenige, mit dem wir den Zustand aktualisieren und unsere Kamera veranlassen, ihren entsprechenden internen Zustand zu ändern, z.B. unseren Alarmbereich ein- oder auszuschalten. Hier können Sie jedes der MQTT Topics verwenden, die zu Funktionen gehören, die von Ihrem Kameramodell unterstützt werden.
Das Message Payload ist in diesem Fall entweder {"val": "1"}
, um den Bereich einzuschalten, oder {"val": "0"}
, um den Bereich zu deaktivieren. Das sind die payload_on und value_payload für unseren Switch. Beachten Sie, dass Sie jedes einzelne von ihnen mit Einzelanführungszeichen umgeben müssen.
Jetzt sind wir in der Lage, etwas MQTT Magie ins Spiel zu bringen. Die erste Einstellung ist qos
und steht für Quality of Service - wobei 0
für fire-and-forget steht (Ihr Client könnte ein Status-Update verlieren, wenn er die Nachricht nicht sofort erhält), 1
bedeutet, dass verifiziert wird, dass ein Status-Update empfangen wurde und 2
ist für uns hier nicht relevant (bei einem qos-Wert von 2 wird sichergestellt, dass jedes Update nur einmal empfangen empfangen wird - was wichtig ist, z.B. wenn Sie Zeitreihen von Messsensoren erfassen). optimistisch
muss verwendet werden, wenn Ihr Gerät kein separates state_topic
hat - hier müssen Sie davon ausgehen, dass der gerade gesendete Befehl funktioniert hat und der Zustand aktualisiert wurde - für uns nicht relevant. Mit retain
können Sie den Wert eines Topics beibehalten, auch wenn der Client oder Server nicht erreichbar sind. Auch das benötigen wir hier nicht.
Konfiguration der Benutzeroberfläche
Nun müssen wir eine neue View für unsere Kamera hinzufügen, indem wir die Benutzeroberfläche in den Konfigurationsmodus schalten:
Klicken Sie nun auf das +, wie im Screenshot unten markiert, und fügen Sie eine Ansicht für Ihre Kamera hinzu:
Wechseln Sie in die neue Ansicht und klicken Sie auf die große +-Taste, um eine Karte hinzuzufügen, die unsere MQTT-Schalter enthalten soll:
Wählen Sie eine Entitätskarte und wählen Sie alle Schalter aus, die wir gerade zu unserer Konfiguration hinzugefügt haben. Sie sollten automatisch erscheinen - wenn nicht, versuchen Sie, den Home Assistant neu zu laden:
Verlassen Sie den Konfigurationsmodus, um zur normalen Benutzeroberfläche zurückzukehren, und Sie sollten Ihre neue Karte mit allen 4 Alarmbereichsschaltern sehen können. Versuchen Sie, Ihre Alarmbereiche von Ihren Kameras über die Web-Benutzeroberfläche zu schalten. Sobald Sie Ihre Einstellungen dort vorgenommen haben, sollten alle Schalter in Home Assistant sofort auf die Zustandsänderung reagieren.
Hinzufügen Ihrer Kameras Live-Video
Wir haben bereits in einem früheren Tutorial gezeigt, wie Sie das Live-Video Ihrer Kamera zur Lovelace-Benutzeroberfläche hinzufügen können.
Hinzufügen einer UI-Tastfläche
Einige der Funktionen unserer Kamera haben keine 2 Zustände (ein/aus) - wir brauchen nur eine Taste, die wir drücken können und sie sollte danach sofort wieder zurück springen. Beispiele sind:
- Manuelle Alarmauslösung:
alarm/pushalarm
- Zur voreingestellten Position gehen:
features/ptz/preset
- Nach oben/unten/links/rechts bewegen:
features/ptz/move
usw.
Dies kann im Home Assistant mit einem Skript erfolgen. Stellen Sie sicher, dass Ihre scripts.yaml
Datei im Ordner .homeassistant vorhanden ist und mit Ihrer Hauptkonfiguration configuration.yaml
verknüpft ist - script: !include scripts.yaml
. Öffnen Sie dann die Skriptdatei und fügen Sie die folgenden Zeilen hinzu:
9010_pushalarm:
sequence:
- service: mqtt.publish
data_template:
topic: instar/000389888811/alarm/pushalarm
payload: '{"val":"1"}'
qos: 1
9010_gotopos1:
sequence:
- service: mqtt.publish
data_template:
topic: instar/000389888811/features/ptz/preset
payload: '{"val":"0"}'
qos: 1
9010_moveright:
sequence:
- service: mqtt.publish
data_template:
topic: instar/000389888811/features/ptz/move
payload: '{"val":"right"}'
qos: 1
9010_movestop:
sequence:
- service: mqtt.publish
data_template:
topic: instar/000389888811/features/ptz/move
payload: '{"val":"stop"}'
qos: 1
Wählen Sie für jedes Skript einen Namen, der Ihnen hilft, die Kamera zu identifizieren, die Sie ansprechen möchten, z.B. 9010_pushalarm
, und wählen Sie die MQTT-Topic aus, das Sie in Form einer Schaltflächen zu Ihrer Home Assistant UI hinzufügen möchten. Beachten Sie, dass der move-Befehl den PTZ-Kopf Ihrer Kamera kontinuierlich bewegt, bis Sie den stop-Befehl drücken - vergessen Sie nicht, die Stopptaste hinzuzufügen :).
Genau wie bei unseren Schalter müssen wir nun den Konfigurationsmodus innerhalb der Home Assistant Lovelace UI aktivieren und auf die Schaltfläche + klicken, um eine neue Entity hinzuzufügen:
Wählen Sie nun das Skript, das Sie dieser Schaltfläche zuweisen möchten aus der Entity List und benennen Sie die Karte. Leider gibt uns die Benutzeroberfläche noch nicht die Möglichkeit, dem ausgewählten Skript einen Namen
und ein Symbol hinzuzufügen. Aber wenn Sie auf die beiden gewellten Klammern klicken - hier hervorgehoben (roter Pfeil):
können sie dies manuell in die Entitätsdefinition aufnehmen:
entities:
- entity: script.9010_pushalarm
icon: 'mdi:bell'
name: IN-9010 FHD
show_header_toggle: false
title: Trigger Alarm
type: entities
Sie können Ihr Symbol aus den Material Design Icons auswählen. Beachten Sie, dass das Symbol, das wir hier gewählt haben - Icon: mdi:bell'
- in der Material Design Dokumentation als mdi-bell
bezeichnet wird und dieser Name entsprechend geändert werden muss, damit der Heimassistent das Symbol erkennt.
Hier haben wir alle Pan-Tilt, Preset Position und den Befehl Manual Alarm Trigger zur Lovelace UI hinzugefügt.
Automatisierungen
Nachdem wir jetzt in der Lage sind, Funktionen auf unserer Kamera manuell auszulösen, wollen wir nun einen Weg finden, diese Prozesse durch den Home Assistant zu automatisieren. Dazu werden wir zunächst einen Prototyp-Service zu unserer Datei scripts.yaml
hinzufügen. Dieser Dienst soll in der Lage sein, ein MQTT Topic (target
) und MQTT Payload (message
) von einer Automatisierung in der Datei automations.yaml
zu empfangen. Dies kann durch Hinzufügen der folgenden Zeilen in die Scripts Datei geschehen:
scripts.yaml
# MQTT Publish Service
send_mqtt_command:
sequence:
- service: mqtt.publish
data_template:
topic: "{{ target }}"
payload: "{{ message }}"
qos: 1
Stellen Sie sicher, dass die Datei automations.yaml
im .homeassistant Verzeichnis vorhanden ist und mit der Haupt-Konfigurationsdatei configuration.yaml
verknüpft ist - automation: !include automations.yaml
. Wechseln Sie dann zur Lovelace-Benutzeroberfläche, öffnen Sie das Einstellungen Panel und wählen Sie Automation:
Testen Sie den Service
Klicken Sie auf die rote Schaltfläche +, um eine neue Automatisierung hinzuzufügen. Füllen Sie dafür das Formular wie folgt aus:
Um unsere Automatisierung zu testen, wollen wir ein MQTT-Topic hass/automation/test
einrichten, das, wenn es ein Payload von {"val": "1"}
empfängt, unseren oben erstellten Prototyp-MQTT-Dienst aufruft und eine Message und ein Target an ihn weitergibt:
{
"message": "{\"val\":\"1\"}",
"target": "instar/000389888811/features/ptz/preset"
}
Beachten Sie, dass wir, um eine JSON-formatierte Payload innerhalb dieses JSON-Ausdrucks senden zu können, die Anführungszeichen mit einem Backslash umgehen müssen.
Durch das Senden des Payloads 1
an /features/ptz/preset
bewegen wir unsere Kamera auf Preset Position 2. Wir können dies mit MQTT.fx testen:
Ein Klick auf Publizieren löst unsere Automatisierung aus, die dann unseren Service dazu veranlasst, dass unsere Kamera zu Preset 2 wechselt.
Wenn Sie die Datei automations.yaml
im Verzeichnis .homeassistant
überprüfen, werden Sie sehen, dass der Home Assistant die Automatisierung für uns wie folgt erstellt hat:
- id: '1571128164029'
alias: TEST MQTT Automation
trigger:
- payload: '{"val":"1"}'
platform: mqtt
topic: hass/automation/test
condition: []
action:
- alias: ''
data:
message: '{"val":"1"}'
target: instar/000389888811/features/ptz/preset
service: script.send_mqtt_command
Tag/Nachtschaltung der Erkennungsbereiche
Nachdem wir nun bewiesen haben, dass unser Konzept solide ist, können wir fortfahren und unsere erste sinnvolle Automatisierung aufbauen. Einer unserer 12 alltäglichen Anwendungsfälle für Smarthome-Systeme, nutzt verschiedene Detektionsbereiche für Tag und Nacht.
Dazu können wir wieder unseren Prototyp-MQTT-Service nutzen und einer Automatisierung - ausgelöst durch einen Zeitplan oder zeitgesteuerte Ereignisse wie Sonnenauf- und -untergang - die notwendigen MQTT-Topics und Payloads übergeben, um unsere Erkennungsbereiche ein- oder auszuschalten:
Dies ist die Tag Automation, die durch den Sonnenaufgang ausgelöst wird und die MQTT-Topics aktualisiert, um die Alarmdetektionsbereiche 1 & 2 zu aktivieren, während die Bereiche 3 & 4 deaktiviert werden. Beachten Sie, dass diese Automatisierung 4 Aktionen kombiniert.
Die Nacht Automation macht das Gegenteil - sie wird ausgelöst durch den Sonnenuntergang und deaktiviert die Bereiche 1 & 2, während die Bereiche 3 & 4 aktiviert werden.
Ein kurzer Blick in die Datei automations.yaml
zeigt uns die beiden Automatisierungen, die mit der Lovelace-Benutzeroberfläche erstellt wurden:
- id: '1571131738957'
alias: Switch to Night Areas
trigger:
- event: sunset
platform: sun
condition: []
action:
- data:
message: '{"val":"0"}'
target: instar/000389888811/alarm/area1/enable
service: script.send_mqtt_command
- data:
message: '{"val":"0"}'
target: instar/000389888811/alarm/area2/enable
service: script.send_mqtt_command
- data:
message: '{"val":"1"}'
target: instar/000389888811/alarm/area3/enable
service: script.send_mqtt_command
- data:
message: '{"val":"1"}'
target: instar/000389888811/alarm/area4/enable
service: script.send_mqtt_command
- id: '1571131880630'
alias: Switch to Day Areas
trigger:
- event: sunrise
platform: sun
condition: []
action:
- data:
message: '{"val":"1"}'
target: instar/000389888811/alarm/area1/enable
service: script.send_mqtt_command
- data:
message: '{"val":"1"}'
target: instar/000389888811/alarm/area2/enable
service: script.send_mqtt_command
- data:
message: '{"val":"0"}'
target: instar/000389888811/alarm/area3/enable
service: script.send_mqtt_command
- data:
message: '{"val":"0"}'
target: instar/000389888811/alarm/area4/enable
service: script.send_mqtt_command
Sie können nun auf den nächsten Sonnenaufgang oder Sonnenuntergang warten, um zu sehen, ob Ihre Automatisierung funktioniert (oder verwenden Sie einfach die Home Assistant Developer Tools innerhalb der Lovelace Benutzeroberfläche, um dieses Ereignis von Hand auszulösen).
Verwendung von Home Assitant als Alarmserver für Ihre Kamera
Wir haben bereits in einem früheren Tutorial gezeigt, wie Sie die Alarmserver-Funktion Ihrer Kamera nutzen können um Home Assistant bei einem Alarm zu benachrichtigen.