INSTAR MQTT Server mit Home Assistant

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:

Home Assistant mit Ihrer INSTAR IP-Kamera

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.

Home Assistant mit Ihrer INSTAR IP-Kamera

Wenn Sie den Home Assistant bereits installiert haben, gehen Sie auf Settings und Integrations und wählen Sie dort den MQTT Broker hinzuzufügen:

Home Assistant mit Ihrer INSTAR IP-Kamera

Home Assistant mit Ihrer INSTAR IP-Kamera

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.).

Home Assistant mit Ihrer INSTAR IP-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:

Home Assistant mit Ihrer INSTAR IP-Kamera

Klicken Sie nun auf das +, wie im Screenshot unten markiert, und fügen Sie eine Ansicht für Ihre Kamera hinzu:

Home Assistant mit Ihrer INSTAR IP-Kamera

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:

Home Assistant mit Ihrer INSTAR IP-Kamera

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:

Home Assistant mit Ihrer INSTAR IP-Kamera

Home Assistant mit Ihrer INSTAR IP-Kamera

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.

Home Assistant mit Ihrer INSTAR IP-Kamera

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:

Home Assistant mit Ihrer INSTAR IP-Kamera

Home Assistant mit Ihrer INSTAR IP-Kamera

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):

Home Assistant mit Ihrer INSTAR IP-Kamera

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

Home Assistant mit Ihrer INSTAR IP-Kamera

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.

Home Assistant mit Ihrer INSTAR IP-Kamera

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:

Home Assistant mit Ihrer INSTAR IP-Kamera

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:

Home Assistant mit Ihrer INSTAR IP-Kamera

Home Assistant mit Ihrer INSTAR IP-Kamera

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:

Home Assistant mit Ihrer INSTAR IP-Kamera

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:

Home Assistant mit Ihrer INSTAR IP-Kamera

Home Assistant mit Ihrer INSTAR IP-Kamera

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.