Videoaufnahme per MQTT auslösen

Videoaufnahme per MQTT auslösen

Die Aufzeichnung kann über zwei MQTT-Topics gesteuert - eines, um eine 15s-Aufzeichnung zu starten und das andere, um sie bei Bedarf vorzeitig zu beenden:

  • task/video/rec/start
  • task/video/rec/stop

Hier ist ein Beispiel für die Integration dieser Funktion in Node-RED. Der gesamte Node-RED Flow kann aus dem unten stehenden JSON-Code importiert werden:

Node-RED_Trigger_Recording_01

Node-RED_Trigger_Recording_02

Node-RED Flow

Beachten Sie, dass das folgende Beispiel einen Kamera-MQTT-Broker mit der IP-Adresse 192.168.2.115 verwendet, dessen MQTT Client mit dem MQTT-Präfix und der Client-ID cameras/115/ konfiguriert ist. Bitte ersetzen Sie diese entsprechend Ihrer Konfiguration:

[
    {
        "id": "e38003f441ebe758",
        "type": "tab",
        "label": "Recording",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "8739c3f13d21f8c8",
        "type": "mqtt out",
        "z": "e38003f441ebe758",
        "name": "task/video/rec/start",
        "topic": "",
        "qos": "1",
        "retain": "false",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "8c9bd856c466f9b0",
        "x": 350,
        "y": 40,
        "wires": []
    },
    {
        "id": "6f2456fbbab22c65",
        "type": "function",
        "z": "e38003f441ebe758",
        "name": "topic",
        "func": "const command = 'task/video/rec/start';\nconst prefix = 'cameras/115/';\n\nmsg.topic = prefix + command;\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 190,
        "y": 40,
        "wires": [
            [
                "8739c3f13d21f8c8"
            ]
        ]
    },
    {
        "id": "030ecf3a64bd5f6c",
        "type": "mqtt out",
        "z": "e38003f441ebe758",
        "name": "task/video/rec/stop",
        "topic": "",
        "qos": "1",
        "retain": "false",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "8c9bd856c466f9b0",
        "x": 370,
        "y": 100,
        "wires": []
    },
    {
        "id": "0f73a30e35c79b4f",
        "type": "function",
        "z": "e38003f441ebe758",
        "name": "topic",
        "func": "const command = 'task/video/rec/stop';\nconst prefix = 'cameras/115/';\n\nmsg.topic = prefix + command;\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 210,
        "y": 100,
        "wires": [
            [
                "030ecf3a64bd5f6c"
            ]
        ]
    },
    {
        "id": "c4edc7fd9949a938",
        "type": "ui_button",
        "z": "e38003f441ebe758",
        "name": "",
        "group": "a0240f14e128be2a",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "Stop Rec ",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "{\"val\":\"1\"}",
        "payloadType": "json",
        "topic": "payload",
        "topicType": "msg",
        "x": 80,
        "y": 100,
        "wires": [
            [
                "0f73a30e35c79b4f"
            ]
        ]
    },
    {
        "id": "29faba26eada713d",
        "type": "ui_button",
        "z": "e38003f441ebe758",
        "name": "",
        "group": "09317789e191eb54",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "Rec ",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "className": "",
        "icon": "",
        "payload": "{\"val\":\"15\"}",
        "payloadType": "json",
        "topic": "payload",
        "topicType": "msg",
        "x": 70,
        "y": 40,
        "wires": [
            [
                "6f2456fbbab22c65"
            ]
        ]
    },
    {
        "id": "8c9bd856c466f9b0",
        "type": "mqtt-broker",
        "name": "",
        "broker": "192.168.2.115",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "5",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    },
    {
        "id": "a0240f14e128be2a",
        "type": "ui_group",
        "name": "Stop Recording",
        "tab": "8bc4b79cc7336533",
        "order": 4,
        "disp": true,
        "width": "6",
        "collapse": false,
        "className": ""
    },
    {
        "id": "09317789e191eb54",
        "type": "ui_group",
        "name": "Trigger Recording",
        "tab": "8bc4b79cc7336533",
        "order": 2,
        "disp": true,
        "width": "6",
        "collapse": false,
        "className": ""
    },
    {
        "id": "8bc4b79cc7336533",
        "type": "ui_tab",
        "name": "Video Recording",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]

Update

Aktuell ist es nicht möglich die geplante Aufnahme über MQTT zu starten. Dies wird mit dem nächsten Firmware Update hinzugefügt werden.

Hierfür muß der Aufnahmezeitplan durchgehend aktiviert werden in der WebUI der Kamera. Die Aufnahme muß deaktiviert bleiben:

Danach kann man dann sowohl manuelle als auch geplante Aufnahmen per MQTT starten. Bei der manuellen Aufnahme wird die gewünschte Aufnahmelänge per MQTT mitgegeben - die Länge kann 15, 30, 45 oder 60s sein und kann per Stop-Befehl vorzeitig beendet werden:

  • task/video/rec/start: {"val":"15"}, {"val":"30"}, {"val":"45"}, {"val":"60"}
  • task/video/rec/stop: {"val":"1"}

Die geplante Aufnahme - wenn der Zeitplan in der WebUI aktiv ist (s.o.) - kann dann mit dem folgenden Befehl gestartet und gestoppt werden:

  • task/video/planrec/enable: {"val":"1"} / {"val":"0"}

Node-RED_Trigger_Recording_03

Dieses Thema wurde automatisch 2 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.

Die Videoaufnahme kann über 2 unterschiedliche MQTT Topics aktiviert werden:

  • task/video/rec/start
  • task/video/planrec/enable

Geplante Aufnahme

Wenn die geplante Aufnahme gestartet wird läuft sie für sie bis der Wert von enable wieder auf 0 gestellt wird.

Videos werden dabei aufgesplittet mit der Länge length - im Beispiel sind das 15s.

Solange die Aufnahme läuft wird der Aufnahmestatus auf dem Wert 2 stehen und nach dem Beenden wieder auf 0 zurückfallen.

Nachdem man enable wieder auf 0 gestellt hat, läuft die Videoaufnahme noch bis zum Ende der eingestellten Videolänge length weiter.

Manuelle Aufnahme

Bei der manuellen Aufnahme muß die Länge der gewünschten Aufnahme bereits beim Starten mitgegeben werden - z.B. 600 für 600s.

Der Aufnahme Status steht in diesem Fall auf dem Wert 3.

Das senden des Stopbefehls stopped die Aufnahme sofort und der Aufnahme Status fällt wieder auf 0 zurück: