Verwendung von MQTT, um ioBroker zu informieren, dass ein Alarm ausgelöst wurde

Q: Ich habe Ihren Leitfaden zur Verwendung des INSTAR (HTTP)-Alarmservers gefunden. Wäre es nicht sinnvoller, diese Ereignisse über den MQTT-Dienst zu veröffentlichen, den jede Full-HD-Kamera bietet? Auf diese Weise könnte ich sicher sein, dass jedes Alarmereignis von meinem ioBroker registriert wird.

Mike Polinowski
INSTAR MQTT
Firmware Update
Full HD Serie
INSTAR Deutschland GmbH
INSTAR MQTT

Machen Sie Ihrer Kamera zum Herzstück Ihres Smarthomes

Mithilfe der MQTT Schnittstelle Ihrer INSTAR Full HD Kameras können Sie diese zu einem bestehenden Smarthome-System (Home Assistant, OpenHAB, Node-RED, Athom Homey, Homematic, ioBroker, Loxone, homee) hinzufügen kann. Oder auch zum Haupt-Broker für Ihre MQTT Sensoren machen. MQTT ermöglicht es Ihnen ALLE Funktionen Ihrer Kamera zu automatisieren und mit anderen Diensten in Ihrem Smarthome zu verknüpfen.

Mike Polinowski
IFTTT Applets
Firmware Update
Full HD Serie
INSTAR Cloud
INSTAR Deutschland GmbH
INSTAR IFTTT Applets

Kontrollieren Sie Ihre Kamera über den IFTTT Online Dienst

Auf der IFTTT-Plattform stellten wir einen Dienst namens INSTAR zur Verfügung. Die INSTAR Applets bieten Ihnen die Möglichkeit, einige Einstellungen Ihrer INSTAR Kamera oder INSTAR Cloud mit IFTTT zu steuern. Sie können INSTAR mit Auslösern für Ort (Geo Location) und Datum & Zeit verbinden, Benachrichtigungen versenden und vieles mehr. Zum Beispiel können Sie die INSTAR Applets mit dem IFTTT-Ortungsdienst verbinden und automatisch den Alarm deaktivieren lassen, wenn Sie zu Hause ankommen. Sie können die INSTAR-Applets auch verwenden, um Ihre eigene Automatisierung zu erstellen und sie mit anderen Applets von Drittanbietern zu verbinden.

A: Alle Alarmereignisse, die vom INSTAR HTTP Alarmserver veröffentlicht werden sind jetzt auch über den MQTT-Service erhältlich! Das entsprechende MQTT-Topic ist:

MQTT Alarmserver

Das entsprechende MQTT-Topic ist:

alarm/triggered

Sie müssen lediglich ein Abonnement zum Status-Topic hinzufügen, und Sie erhalten Updates über Alarmereignisse sowie darüber, welcher Dienst den Alarm ausgelöst hat:

Alarmauslöser anhängen
  • Alarmbereich 1 ausgelöst: 1
  • Alarmbereich 2 ausgelöst: 2
  • Alarmbereich 3 ausgelöst: 3
  • Alarmbereich 4 ausgelöst: 4
  • Alarm-In / PIR ausgelöst: 5
  • Audio Alarm ausgelöst: 6
  • Bewegungserkennung & ausgelöst (Bereich 1): 7
  • Bewegungserkennung & ausgelöst (Bereich 2): 8
  • Bewegungserkennung & ausgelöst (Bereich 3): 9
  • Bewegungserkennung & ausgelöst (Bereich 4): 10

ioBroker einrichten

Wir haben bereits einen Leitfaden zur Verwendung von Node-RED zur Interaktion mit Ihrem MQTT-Alarmserver online gestellt. Sie können dieser Anleitung folgen, wenn Sie den Node-RED-Adapter im ioBroker nutzen möchten.

In diesem Leitfaden wollen wir die Blockly Script Engine anstelle von Node-RED verwenden. Sie können damit beginnen diese über die Registerkarte Adapter zu installieren:

INSTAR MQTT Alarmserver for the ioBroker

Wechseln Sie nun zur Registerkarte Scripts und wählen Sie Blockly, um ein neues Skript hinzuzufügen:

INSTAR MQTT Alarmserver for the ioBroker

Wir werden die Blockly UI zur Erstellung des Alarmserver-Skripts zu verwenden:

INSTAR MQTT Alarmserver for the ioBroker

Im folgenden Beispiel habe ich das Motion Tracking-Beispiel, das wir zuvor in Node-RED gelöst haben auf Blockly übertragen. Bitte lesen Sie in jener Anleitungen nach, wie Sie Ihre Kamera so einrichten müssen, damit dies funktioniert.

Wann immer wir eine Statusaktualisierung für alarm/triggered erhalten, müssen wir prüfen, ob der Alarm durch Bereich 1 - mit Payload {"val": "1"} - oder Bereich 4 - mit der Payload {"val": "4"} ausgelöst wurde. Wenn Bereich 1 ausgelöst wurde - das ist der Bewegungserkennungsbereich, den wir auf der linken Seite hinzugefügt haben - müssen wir unsere Kamera einen Schritt nach links bewegen. Für Bereich 4 müssen wir nach rechts gehen, um das bewegte Objekt im Sichtfeld der Kamera zu zentrieren.

INSTAR MQTT Alarmserver for the ioBroker

Beachten Sie, dass die Kamera, die ich hier benutze, die MQTT-ID 10D1DC21F5DB hat. Wenn Sie das Blockly-Skript importieren, müssen Sie dies entsprechend Ihrer persönlichen Kamera-ID ändern!

Die MQTT Topics, die hier verwendet werden, sind:

  • /status/alarm/triggered: INSTAR MQTT Alarmserver-Status-Topic
  • /features/ptz/movestep/raw: Befehls-Topic, um Ihre Schwenk-Neige-Kamera einen Schritt nach links oder rechts zu bewegen.

Und zusätzlich habe ich ein Skript hinzugefügt, das meine Kamera auf die gespeicherte Position 2 bewegt, wenn der Audio-Alarm {"val": "6"} der Kamera ausgelöst wurde. Dies kann mit den folgenden Topics erreicht werden:

  • /features/ptz/presets/raw Befehls-Topics, um Ihre Kamera auf die Positionen 0 - 7 zu bewegen
  • /alarm/pushalarm Befehls-Topics zum Auslösen eines Audio-Alarms auf Ihrer Kamera und damit dem Auslösen der Preset Funktion in Blockly - dies kann mit anderen Funktionen im ioBroker verknüpft werden.

JSON Export

Sie können das komplette Skript mit dem folgenden JSON-Code in Blockly importieren. Beachten Sie, dass Sie die MQTT-ID 10D1DC21F5DB durch Ihre persönliche Kamera-ID ersetzen müssen:

<xml xmlns="http://www.w3.org/1999/xhtml">
  <block type="on_ext" id="5:E8z%?$kF2:_228=Fsl" x="-62" y="-112">
    <mutation items="1"></mutation>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <value name="OID0">
      <shadow type="field_oid" id="7K},E#*On`zsq^jhPQ9v">
        <field name="oid">mqtt.0.instar.10D1DC21F5DB.status.alarm.triggered</field>
      </shadow>
    </value>
    <statement name="STATEMENT">
      <block type="controls_if" id="2%z$7WDJUl-dSz+miU(-">
        <value name="IF0">
          <block type="logic_compare" id="9]pjLD{[W^26TPYM6liS">
            <field name="OP">EQ</field>
            <value name="A">
              <block type="on_source" id="-?/H,NwcYjPh~{p`fc`~">
                <field name="ATTR">state.val</field>
              </block>
            </value>
            <value name="B">
              <block type="text" id="hKDWmg?WzR9@$Wo4RHj5">
                <field name="TEXT">{"val":"1"}</field>
              </block>
            </value>
          </block>
        </value>
        <statement name="DO0">
          <block type="control" id="g@M?e*b1_8ezO{_(PUcP">
            <mutation delay_input="false"></mutation>
            <field name="OID">mqtt.0.instar.10D1DC21F5DB.features.ptz.movestep.raw</field>
            <field name="WITH_DELAY">FALSE</field>
            <value name="VALUE">
              <block type="text" id="u2H{{k$7nO+({(J4,2,C">
                <field name="TEXT">left</field>
              </block>
            </value>
          </block>
        </statement>
        <next>
          <block type="controls_if" id="}uq*%|F/Nt=*`rn`|hV4">
            <value name="IF0">
              <block type="logic_compare" id="|x2u0AR*aTmVC=lfROzF">
                <field name="OP">EQ</field>
                <value name="A">
                  <block type="on_source" id="In|(S^y0YVoVN#Y^[.5m">
                    <field name="ATTR">state.val</field>
                  </block>
                </value>
                <value name="B">
                  <block type="text" id="uC/+7LgdO]A`UdHW*sHC">
                    <field name="TEXT">{"val":"4"}</field>
                  </block>
                </value>
              </block>
            </value>
            <statement name="DO0">
              <block type="control" id="K58]j^_|1M4|}D2aF?{u">
                <mutation delay_input="false"></mutation>
                <field name="OID">mqtt.0.instar.10D1DC21F5DB.features.ptz.movestep.raw</field>
                <field name="WITH_DELAY">FALSE</field>
                <value name="VALUE">
                  <block type="text" id="13|%(`^fM,_w499|gkt-">
                    <field name="TEXT">right</field>
                  </block>
                </value>
              </block>
            </statement>
            <next>
              <block type="controls_if" id="JhXZ,A)R?fQ}!et!,!/7">
                <value name="IF0">
                  <block type="logic_compare" id="560g5G|oV?rEcXER(oOD">
                    <field name="OP">EQ</field>
                    <value name="A">
                      <block type="on_source" id="9[A80k}o*RpbflDD2h/:">
                        <field name="ATTR">state.val</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="text" id="._5?cn:Mi%DWgz;OL}v4">
                        <field name="TEXT">{"val":"6"}</field>
                      </block>
                    </value>
                  </block>
                </value>
                <statement name="DO0">
                  <block type="control" id="]KIbdkEE?:DEhmZ`)wE=">
                    <mutation delay_input="false"></mutation>
                    <field name="OID">mqtt.0.instar.10D1DC21F5DB.features.ptz.preset.raw</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="text" id="1HbkwoM-U/]J2go|iNoe">
                        <field name="TEXT">2</field>
                      </block>
                    </value>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </next>
      </block>
    </statement>
  </block>
</xml>