Testing the MQTT and HTTP Alarmserver v2 API with Node-RED

Q: Ich habe diesen Artikel gelesen, der zeigt, wie ich den Alarmserver meiner IN-9408 2k+ WQHD Kameras testen kann. Wie kann ich den Alarmserver mit Node-RED verwenden, um Alarmaktionen zu automatisieren?

A: Sie können beide - den HTTP und den MQTT Alarmserver - in Node-RED verwenden, um Aktionen in Abhängigkeit vom Alarmauslöser zu automatisieren.

HTTP Alarmserver

Wir haben bereits gezeigt, wie man die HTTP-Alarmserver-Queries in Node-RED verwendet. Das Folgende ist eine vereinfachte Version davon (der Flow kann unten kopiert und in Node-RED importiert werden):

MQTT- und HTTP-Alarmserver v2 API

Der Flow stellt einen Webhook auf der Node-RED Server IP + /as-webhook/ bereit, der als Alarmserver Ihre Kamera konfiguriert werden muss:

MQTT- und HTTP-Alarmserver v2 API

Ihre Kamera kontaktiert dann den Webhook jedes Mal, wenn ein Alarm ausgelöst wird, und meldet den Alarmauslöser sowie das erkannte Objekt - WENN Objekterkennung aktiviert ist!:

MQTT- und HTTP-Alarmserver v2 API

MQTT Alarmserver

Der MQTT-Alarmserver funktioniert auf genau dieselbe Weise. Verbinden Sie einfach den MQTT Broker Ihre Kamera mit Node-RED und verwenden Sie das MQTT-Alarmserver-Topic status/alarm/triggered/triggers, um verschiedene Alarmaktionen abhängig von den Alarmauslösern zu automatisieren. Sie können auch die alte v1 API mit dem MQTT-Topic status/alarm/triggered wie hier beschrieben verwenden. Aber die v2 API bietet eine viel feinkörnigere Auflösung der Alarmauslöser:

MQTT- und HTTP-Alarmserver v2 API

Exported Node-RED Flows

HTTP Server

[{"id":"38b7bc1d.686704","type":"http response","z":"87c3a27a0d2959da","name":"","x":430,"y":100,"wires":[]},{"id":"eb3f53ec.7ccc8","type":"template","z":"87c3a27a0d2959da","name":"page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n    <head></head>\n    <body>\n        <h2>Camera: {{req.query.camera}}</h2>\n        <h2>Test Value 2: {{req.query.query2}}</h2>\n        <h2>Test Value 3: {{req.query.query3}}</h2>\n        <h2>Active: {{req.query.active}}</h2>\n    </body>\n</html>","x":310,"y":100,"wires":[["38b7bc1d.686704"]]},{"id":"679c2568.c1aa9c","type":"http in","z":"87c3a27a0d2959da","name":"Webhook with URL Query","url":"/as-webhook/","method":"get","upload":false,"swaggerDoc":"","x":115,"y":140,"wires":[["eb3f53ec.7ccc8","d47269ed.fe6118"]]},{"id":"d47269ed.fe6118","type":"function","z":"87c3a27a0d2959da","name":"extract query","func":"msg.payload = msg.req.query;\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":180,"wires":[["63db67c3b033fa6d","4b3568fbb80322d3","18496407a4ab3550"]]},{"id":"6524a732f295b841","type":"debug","z":"87c3a27a0d2959da","name":"Old Alarmserver","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":660,"y":140,"wires":[]},{"id":"63db67c3b033fa6d","type":"change","z":"87c3a27a0d2959da","name":"active","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.trigger","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":140,"wires":[["6524a732f295b841"]]},{"id":"4b3568fbb80322d3","type":"change","z":"87c3a27a0d2959da","name":"trigger","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.trigger","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":180,"wires":[["80bb612971c20704"]]},{"id":"18496407a4ab3550","type":"change","z":"87c3a27a0d2959da","name":"object","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.object","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":220,"wires":[["cf9ae3c715a02492"]]},{"id":"80bb612971c20704","type":"debug","z":"87c3a27a0d2959da","name":"New Alarmserver","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":670,"y":180,"wires":[]},{"id":"cf9ae3c715a02492","type":"debug","z":"87c3a27a0d2959da","name":"Detected Object","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":660,"y":220,"wires":[]}]

MQTT Server

Beachten Sie dass der folgende Flow eine MQTT Präfix cameras und eine Kamera ID 201 verwendet. Diese Werte können Sie in den MQTT Einstellungen Ihrer Kamera festlegen. Sie koennen diesen String cameras/201/ einfach unten mit dem austauschen, was Sie bei Ihrer Kamera verwenden - bevor Sie den Flow in Node-RED importieren. Nach dem Importieren muss dann noch Ihr MQTT Broker in Node-RED bei allen MQTT Knoten hinterlegt werden!

[{"id":"b3f2131d.c323e","type":"mqtt in","z":"87c3a27a0d2959da","name":"Alarm Server Triggers","topic":"cameras/201/status/alarm/triggered/triggers","qos":"2","datatype":"json","broker":"996228fe.ababc8","nl":false,"rap":false,"inputs":0,"x":120,"y":760,"wires":[["7e41db00.f5ed94"]]},{"id":"7e41db00.f5ed94","type":"json","z":"87c3a27a0d2959da","name":"","property":"payload","action":"obj","pretty":false,"x":290,"y":760,"wires":[["da03fe2f.869de"]]},{"id":"da03fe2f.869de","type":"switch","z":"87c3a27a0d2959da","name":"Triggers","property":"payload.val","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"8","vt":"str"},{"t":"eq","v":"256","vt":"str"},{"t":"eq","v":"512","vt":"str"},{"t":"eq","v":"1024","vt":"str"},{"t":"eq","v":"2048","vt":"str"},{"t":"eq","v":"16","vt":"str"},{"t":"eq","v":"32","vt":"str"},{"t":"eq","v":"64","vt":"str"},{"t":"eq","v":"128","vt":"str"}],"checkall":"true","repair":false,"outputs":13,"x":440,"y":760,"wires":[["195466da1d581e4e"],["682bc199.6b418"],["71a23888cd6d73a8"],["8e7cbf3a99e6c5c9"],["6b1d4f5d11b3449e"],["bf1555bc65181f5d"],["3484d2478ebb6e8e"],["6bad46cad2224847"],["f6651e39b5f4f78b"],["2e78976a797b2ceb"],["2204ca950fbd8d01"],["a3ca640b95b1a902"],["d289a0e3c16e4e74"]]},{"id":"682bc199.6b418","type":"change","z":"87c3a27a0d2959da","name":"Area 1 => Move 10 steps Left","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"10\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":560,"wires":[["5bbe46a4.047128"]]},{"id":"5bbe46a4.047128","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/movesteps/left","topic":"cameras/201/features/ptz/movesteps/left","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1020,"y":560,"wires":[]},{"id":"195466da1d581e4e","type":"change","z":"87c3a27a0d2959da","name":"Idle => Stop Recording / Position 1","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"1\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":480,"wires":[["f2724668d2d9146b","07ef65bfc94eb6d0"]]},{"id":"f2724668d2d9146b","type":"mqtt out","z":"87c3a27a0d2959da","name":"task/video/rec/stop","topic":"cameras/201/task/video/rec/stop","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":990,"y":500,"wires":[]},{"id":"71a23888cd6d73a8","type":"change","z":"87c3a27a0d2959da","name":"Area 2 => Move 10 steps Right","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"10\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":600,"wires":[["f3900be8abcc6951"]]},{"id":"bfa500807a82ea06","type":"mqtt out","z":"87c3a27a0d2959da","name":"task/video/rec/start","topic":"cameras/201/task/video/rec/start","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":990,"y":900,"wires":[]},{"id":"f3900be8abcc6951","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/movesteps/right","topic":"cameras/201/features/ptz/movesteps/right","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1020,"y":600,"wires":[]},{"id":"8e7cbf3a99e6c5c9","type":"change","z":"87c3a27a0d2959da","name":"Area 3 => Move 10 steps Up","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"10\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":640,"wires":[["fbead2fa3f167054"]]},{"id":"fbead2fa3f167054","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/movesteps/up","topic":"cameras/201/features/ptz/movesteps/up","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1020,"y":640,"wires":[]},{"id":"6b1d4f5d11b3449e","type":"change","z":"87c3a27a0d2959da","name":"Area 4 => Move 10 steps Down","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"10\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":680,"wires":[["4ee2c74fa6bfba51"]]},{"id":"4ee2c74fa6bfba51","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/movesteps/down","topic":"cameras/201/features/ptz/movesteps/down","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1020,"y":680,"wires":[]},{"id":"bf1555bc65181f5d","type":"change","z":"87c3a27a0d2959da","name":"Area 5 => Move 1 Second Left","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"1\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":720,"wires":[["63c0253cdd01bb36"]]},{"id":"3484d2478ebb6e8e","type":"change","z":"87c3a27a0d2959da","name":"Area 6 => Move 1 Second Right","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"1\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":760,"wires":[["18a1d7ad9f8628b2"]]},{"id":"6bad46cad2224847","type":"change","z":"87c3a27a0d2959da","name":"Area 7 => Move 1 Second Up","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"1\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":800,"wires":[["3cd470bbab730fad"]]},{"id":"f6651e39b5f4f78b","type":"change","z":"87c3a27a0d2959da","name":"Area 8 => Move 10 Second Down","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"1\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":840,"wires":[["1340bcbcebebaf9d"]]},{"id":"63c0253cdd01bb36","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/move/left","topic":"cameras/201/features/ptz/move/left","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1000,"y":720,"wires":[]},{"id":"18a1d7ad9f8628b2","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/move/right","topic":"cameras/201/features/ptz/move/right","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1000,"y":760,"wires":[]},{"id":"3cd470bbab730fad","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/move/up","topic":"cameras/201/features/ptz/move/up","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1000,"y":800,"wires":[]},{"id":"1340bcbcebebaf9d","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/move/down","topic":"cameras/201/features/ptz/move/down","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1010,"y":840,"wires":[]},{"id":"2e78976a797b2ceb","type":"change","z":"87c3a27a0d2959da","name":"PIR Sensor => Start Recording","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"1\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":900,"wires":[["bfa500807a82ea06"]]},{"id":"7d4063c20e1e927c","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/move/rel/pan","topic":"cameras/201/features/ptz/move/rel/pan","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1010,"y":940,"wires":[]},{"id":"2204ca950fbd8d01","type":"change","z":"87c3a27a0d2959da","name":"Alarm Input => Pan Center","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"50\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":940,"wires":[["7d4063c20e1e927c"]]},{"id":"75ec57d578d3d86c","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/move/rel/tilt","topic":"cameras/201/features/ptz/move/rel/tilt","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1010,"y":980,"wires":[]},{"id":"a3ca640b95b1a902","type":"change","z":"87c3a27a0d2959da","name":"Alarm Input => Tilt Center","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"50\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":980,"wires":[["75ec57d578d3d86c"]]},{"id":"1f45a8118adf9dee","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/move/rel/zoom","topic":"cameras/201/features/ptz/move/rel/zoom","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1020,"y":1020,"wires":[]},{"id":"d289a0e3c16e4e74","type":"change","z":"87c3a27a0d2959da","name":"Manual => Zoom 100%","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"100\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":1020,"wires":[["1f45a8118adf9dee"]]},{"id":"07ef65bfc94eb6d0","type":"mqtt out","z":"87c3a27a0d2959da","name":"features/ptz/preset/goto","topic":"cameras/201/features/ptz/preset/goto","qos":"2","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"996228fe.ababc8","x":1010,"y":460,"wires":[]},{"id":"996228fe.ababc8","type":"mqtt-broker","name":"INSTAR MQTT","broker":"192.168.2.201","port":"1883","clientid":"iored","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"5","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]