INSTAR Deutschland GmbHINSTAR Deutschland GmbH

Homebridge INSTAR MQTT zu Homekit



Diskutieren Sie diesen Artikel im INSTAR Forum

Homebridge ist ein leichtgewichtiger NodeJS-Server, den Sie in Ihrem Heimnetzwerk ausführen können und der die iOS HomeKit-API emuliert. Er unterstützt Plugins, d.h. von der Gemeinschaft beigesteuerte Module, die eine grundlegende Brücke von HomeKit zu verschiedenen APIs von Drittanbietern bilden, die von Herstellern von "Smart Home"-Geräten bereitgestellt werden.

Die folgende Anleitung verwendet die INSTAR MQTT Schnittstelle zum Anbinden der Kamera an die Homebridge. Diese Schnittstelle steht nur bei Full HD Kameras zur Verfügung. Sie können die Anbindung aber genauso gut über CGI Befehle durchführen. Eine Anleitung dafür finden Sie in den FAQs.

Vorbereiten des Homebridge-Docker-Images

Download

Beginnen Sie mit dem Herunterladen des Docker-Images vom Docker-Hub. Es wird empfohlen, die latest-Version zu verwenden:

docker pull oznu/homebridge:latest

Homebridge INSTAR MQTT to Homekit

Wie man den Container verwendet

Homebridge erfordert vollen Zugriff auf Ihr lokales Netzwerk, um korrekt zu funktionieren, was mit der --net=host Flag erreicht wird. Derzeit funktioniert dieses Image nicht, wenn Sie Docker für macOS oder Docker für Windows verwenden.

Sie können das Image mit dem folgenden Befehl ausführen:

docker run \
  --net=host \
  --name=homebridge \
  -e PUID=<UID> -e PGID=<GID> \
  -e TZ=Europe/Berlin \
  -e HOMEBRIDGE_CONFIG_UI=1 \
  -e HOMEBRIDGE_CONFIG_UI_PORT=8080 \
  -e HOMEBRIDGE_INSECURE=1 \
  -v </path/to/config>:/homebridge \
  oznu/homebridge

Der </path/to/config> muss auf Ihrem Host-System erstellt werden, z.B. :

mkdir /opt/homebridge
chmod 775 /opt/homebridge

Manchmal können bei der Verwendung von Docker Yolumen (-v-Flags) Berechtigungsprobleme zwischen dem Host-Betriebssystem und dem Container auftreten. Wir vermeiden dieses Problem, indem wir Ihnen erlauben, die Benutzer-PUID und die Gruppen-PGID anzugeben. Stellen Sie sicher, dass das Datenträgerverzeichnis auf dem Host demselben Benutzer gehört, mit dem Sie Docker ausführen, und es wird "einfach funktionieren".

Im Fall unten sind PUID=1001 und PGID=1001. Um die Ihre ID zu finden, führen Sie bitte den folgenden Befehl aus:

id <dockeruser>
uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup)

Konfiguration

Erstellen Sie einen Datei mit dem Namen config.json innerhalb des eben erstellten Verzeichnis /opt/homebridge. Eine Vorlage für diese Datei finden Sie am Ende dieses Tutorials. Diese Konfigurationsdatei fügt 10 MQTT-Buttons für eine Full-HD-Kamera mit der IP-Adresse 192.168.2.117, dem Admin Login admin / instar und den MQTT Broker auf dem Port 1883 mit dem Broker-Login admin / instar hinzu. Bitte ändern Sie diese Informationen innerhalb der Konfigurationsdatei, bevor Sie sie in das Verzeichnis kopieren.

Aber wir können diese Vorlage noch nicht verwenden, da sie ein Plugin erfordert, das wir zuerst installieren müssen. Beginnen wir also erstmal mit einer leeren Vorlage, um Homebridge zu starten und dieses Plugin installieren.

{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:35",
        "manufacturer": "homebridge.io",
        "model": "homebridge",
        "port": 51826,
        "pin": "031-45-155"
    },
    "description": "This is an example configuration file with one fake accessory and one fake platform. You can use this as a template for creating your own configuration file containing devices you actually own.",
    "ports": {
        "start": 52100,
        "end": 52150,
        "comment": "This section is used to control the range of ports that separate accessory (like camera or television) should be bind to."
    },
    "accessories": [],
    "platforms": [
        {
            "name": "Config",
            "port": 8080,
            "auth": "form",
            "theme": "dark-mode",
            "tempUnits": "c",
            "lang": "auto",
            "sudo": false,
            "accessoryControl": {
                "debug": true
            },
            "platform": "config"
        }
    ]
}

Diesen Inhalt müssen Sie zu hinzufügen /opt/homebridge/config.json:

nano /opt/homebridge/config.json
chmod 775 /opt/homebridge/*

Container ausführen

Da Sie das Image bereits heruntergeladen haben, können Sie jetzt die Image-ID abfragen und den Container ausführen:

docker images

REPOSITORY                 TAG               IMAGE ID       SIZE
localhost/oznu/homebridge  debian-no-avahi   f0039cfe89f4   726 MB

Fügen Sie Ihre Image-ID, Docker-Benutzer- und Gruppen-ID, Zeitzone und Konfigurationsverzeichnis auf den folgenden Befehl hinzu:

docker run \
  --net=host \
  --name=homebridge \
  --privileged \
  --rm \
  -e PUID=0 -e PGID=0 \
  -e TZ=Europe/Berlin \
  -e HOMEBRIDGE_CONFIG_UI=1 \
  -e HOMEBRIDGE_CONFIG_UI_PORT=8080 \
  -e HOMEBRIDGE_INSECURE=1 \
  -v /opt/homebridge:/homebridge \
  -ti -u root f0039cfe89f4 /bin/bash

Einrichten von Homebridge

Warten Sie, bis die Homebridge-UI auf Port 8080 hochgefahren ist und melden Sie sich mit admin / admin an.:

Homebridge INSTAR MQTT to Homekit

Sie können die folgenden Plugins über die Hombridge-Benutzeroberfläche installieren:

  • homebridge-mqttthing

Homebridge INSTAR MQTT to Homekit

Wenn das MQTT-Plugin installiert ist, können wir die MQTT-Buttons im Abschnitt Accessories der Konfigurationsdatei importieren - den notwendigen Code finden Sie am Ende dieses Tutorials. Dieser Code ist geschrieben für die Kamera mit der folgenden Konfiguration und muss entsprechend für Ihre Kamera angepasst werden:

  • Kamera LAN IP 192.168.2.117
  • MQTT Broker Port 1883
  • MQTT Benutzer admin
  • MQTT Kennwort instar

Homebridge INSTAR MQTT to Homekit

Fügen Sie den kompletten Abschnitt accessories in Ihre Datei ein, um alle MQTT-Buttons hinzuzufügen:

Homebridge INSTAR MQTT to Homekit

Schreiben Sie Ihre Änderungen in das Docker-Image

Melden Sie sich von einem neuen Terminalfenster an Ihrem Host-Rechner an und finden Sie die Container-ID heraus, die dem Homebridge-Container zugewiesen wurde:

docker ps -a

CONTAINER ID  IMAGE                                        NAMES
5b4bd0d0189d  localhost/oznu/homebridge:debian-no-avahi    homebridge

In diesem Fall lautet die Container-ID 5b4bd0d0189d und ich möchte das Image, das alle unsere Änderungen enthalten wird, instar-mqtt-homebridge nennen:

docker commit 5b4bd0d0189d instar-mqtt-homebridge

Wir können nun das Original-Image stoppen und zu unserem neu erstellten Image wechseln:

docker images

REPOSITORY                        IMAGE ID
localhost/instar-mqtt-homebridge  42e1bcaed5e6

Der alte Container hat die ID 5b4bd0d0189d - also können wir das jetzt beenden und stattdessen das neue Image mit der Image-ID 42e1bcaed5e6 laufen lassen:

docker stop 5b4bd0d0189d

Um das neue Image auszuführen, müssen Sie den folgenden Befehl wie zuvor modifizieren - aber diesmal entweder die Image-ID 42e1bcaed5e6 oder den Repository-Namen localhost/instar-mqtt-homebridge verwenden, die Sie Ihrem neuen Image zugewiesen hatten:

docker run \
  --net=host \
  --name=instar-mqtt-homebridge \
  --privileged \
  --rm \
  -e PUID=0 -e PGID=0 \
  -e TZ=Europe/Berlin \
  -e HOMEBRIDGE_CONFIG_UI=1 \
  -e HOMEBRIDGE_CONFIG_UI_PORT=8080 \
  -e HOMEBRIDGE_INSECURE=1 \
  -v /opt/homebridge:/homebridge \
  -ti -u root 42e1bcaed5e6 /bin/bash

Wenn Sie auf das Homebridge-Dashboard zugreifen, sollten Sie jetzt alle MQTT-Schaltflächen unter der Registerkarte Accessories finden (Klicken Sie darauf und konfigurieren Sie sie, wenn Sie sie zu Ihrer Haupt-Dashboard-Seite hinzufügen möchten):

Homebridge INSTAR MQTT to Homekit

Hombridge-Konfigurationsvorlage

{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:35",
        "manufacturer": "homebridge.io",
        "model": "homebridge",
        "port": 51826,
        "pin": "031-45-155"
    },
    "description": "This is an example configuration file with one fake accessory and one fake platform. You can use this as a template for creating your own configuration file containing devices you actually own.",
    "ports": {
        "start": 52100,
        "end": 52150,
        "comment": "This section is used to control the range of ports that separate accessory (like camera or television) should be bind to."
    },
    "accessories": [
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Alarm Area 1",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567889",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Alarm Area 1",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/alarm/area1/enable",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/alarm/area1/enable",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "1",
            "offValue": "0",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Alarm Area 2",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567891",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Alarm Area 2",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/alarm/area2/enable",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/alarm/area2/enable",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "1",
            "offValue": "0",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Alarm Area 3",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567892",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Alarm Area 3",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/alarm/area3/enable",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/alarm/area3/enable",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "1",
            "offValue": "0",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Alarm Area 4",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567893",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Alarm Area 4",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/alarm/area4/enable",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/alarm/area4/enable",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "1",
            "offValue": "0",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "PIR Sensor",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567894",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "PIR Sensor",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/alarm/actions/pir/enable",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/alarm/actions/pir/enable",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "1",
            "offValue": "0",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Link Areas",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567895",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Link Areas",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/alarm/actions/linkareas",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/alarm/actions/linkareas",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "on",
            "offValue": "off",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Alarm Email",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567896",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Alarm Email",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/alarm/actions/email",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/alarm/actions/email",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "on",
            "offValue": "off",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Alarm Push",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567897",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Alarm Push",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/alarm/push/enable",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/alarm/push/enable",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "on",
            "offValue": "off",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Audio",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567898",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Audio",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/multimedia/audio/enable/high",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/multimedia/audio/enable/high",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "1",
            "offValue": "0",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        },
        {
            "accessory": "mqttthing",
            "type": "switch",
            "name": "Preset Position",
            "manufacturer": "INSTAR",
            "model": "IN-8015 FullHD",
            "serialNumber": "1234567899",
            "firmwareRevision": "0.1",
            "url": "http://192.168.2.117:1883",
            "username": "admin",
            "password": "instar",
            "caption": "Preset Position",
            "mqttOptions": {
                "keepalive": 30
            },
            "mqttPubOptions": {
                "retain": true
            },
            "logMqtt": true,
            "topics": {
                "getOn": {
                    "topic": "instar/local/status/features/ptz/preset",
                    "apply": "return JSON.parse(message).val;"
                },
                "setOn": {
                    "topic": "instar/local/features/ptz/preset",
                    "apply": "return JSON.stringify({val: (message)})"
                }
            },
            "onValue": "1",
            "offValue": "0",
            "confirmationPeriodms": 1000,
            "retryLimit": 3
        }
    ],
    "platforms": [
        {
            "name": "Config",
            "port": 8080,
            "auth": "form",
            "theme": "dark-mode",
            "tempUnits": "c",
            "lang": "auto",
            "sudo": false,
            "accessoryControl": {
                "debug": true
            },
            "platform": "config"
        }
    ]
}