Debugging des HTTP-Alarmservers in Node-RED
Q: Bei allen 2K+ WQHD-Modellen können wir jetzt benutzerdefinierte Header für Alarmserver-Anfragen festlegen. Wie kann ich überprüfen, ob meine Kamera den richtigen Header verwendet?
A: Das Einstellen des Request Headers kann ein wenig schwierig sein, da Sie möglicherweise unsichere Zeichen kodieren müssen. In den folgenden Schritten werde ich Ihnen zeigen, wie Sie Node-RED so einrichten, dass es die Alarmserver-Anfrage Ihrer Kamera analysiert.
Webhook Setup
Zunächst müssen wir einen Webhook einrichten, den wir von unserer Kamera aus kontaktieren können. Sie können die folgenden Knoten in Ihr Node-RED Dashboard importieren:
[{"id":"38b7bc1d.686704","type":"http response","z":"ba3a4343d1d61c4f","name":"","x":450,"y":660,"wires":[]},{"id":"eb3f53ec.7ccc8","type":"template","z":"ba3a4343d1d61c4f","name":"page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n <head></head>\n <body>\n <h2>Active: {{req.query.active}}</h2>\n <h2>Object: {{req.query.object}}</h2>\n <h2>Host: {{req.headers.host}}</h2>\n <h2>Accept: {{req.headers.accept}}</h2>\n <h2>User Agent: {{req.headers.user-agent}}</h2>\n </body>\n</html>","x":330,"y":660,"wires":[["38b7bc1d.686704"]]},{"id":"679c2568.c1aa9c","type":"http in","z":"ba3a4343d1d61c4f","name":"Webhook with URL Query","url":"/as-webhook/","method":"get","upload":false,"swaggerDoc":"","x":130,"y":660,"wires":[["eb3f53ec.7ccc8","d47269ed.fe6118","17cc5ab7288c96c6"]]},{"id":"d47269ed.fe6118","type":"function","z":"ba3a4343d1d61c4f","name":"extract query","func":"msg.payload = msg.req.query;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":700,"wires":[["7aad73d3908357b3"]]},{"id":"7aad73d3908357b3","type":"debug","z":"ba3a4343d1d61c4f","name":"HTTP Alarmserver","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":550,"y":700,"wires":[]},{"id":"17cc5ab7288c96c6","type":"function","z":"ba3a4343d1d61c4f","name":"extract headers","func":"msg.payload = msg.req.headers;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":740,"wires":[["6d189a5ae12bc536"]]},{"id":"6d189a5ae12bc536","type":"debug","z":"ba3a4343d1d61c4f","name":"HTTP Alarmserver","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":570,"y":740,"wires":[]},{"id":"68a6cd9301dfc7e0","type":"comment","z":"ba3a4343d1d61c4f","name":"Webhook","info":"","x":80,"y":620,"wires":[]}]
Hier haben wir ein Webook mit der URL /as-webhook/
erstellt - das bedeutet, dass Sie nun Ihren Browser oder einfach curl
benutzen können, um auf den Hook auf localhost
zuzugreifen:
curl localhost:1880/as-webhook/
<html>
<head></head>
<body>
<h2>Active: </h2>
<h2>Object: </h2>
<h2>Host: localhost:1880</h2>
<h2>Accept: */*</h2>
<h2>User Agent: curl/8.5.0</h2>
</body>
</html
Ich habe Node-RED so konfiguriert, dass es eine HTML-Seite zurückgibt, die Query- und Header-Informationen aus der Anfrage extrahiert:
<h2>Active: {{req.query.active}}</h2>
<h2>Object: {{req.query.object}}</h2>
<h2>Host: {{req.headers.host}}</h2>
<h2>Accept: {{req.headers.accept}}</h2>
<h2>User Agent: {{req.headers.user-agent}}</h2>
Der Fluss bietet auch zwei Debug-Knoten, die die gleichen Informationen in einer besser lesbaren Form extrahieren:
Wir können sehen, dass die Anfrage von localhost:1880
kam, vom User-Agent curl/8.5.0
und keine Queries namens active
oder object
enthielt - das sind die Queries, die unsere Kamera verwendet, um den Alarmauslöser und das erkannte Objekt anzuhängen.
Testing
Wir können nun einen Knoten einrichten, der unseren Webhook kontaktiert und sowohl den Trigger als auch den Objekt Query sowie einige benutzerdefinierte Header injiziert:
[{"id":"b8674bf2.144f38","type":"http request","z":"ba3a4343d1d61c4f","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://192.168.2.112:1880/as-webhook/?object={{{payload.object}}}&active={{{payload.active}}}","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":410,"y":580,"wires":[[]]},{"id":"1ac8f717.51b929","type":"inject","z":"ba3a4343d1d61c4f","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"","payloadType":"str","x":98,"y":580,"wires":[["fd8184be.5f5088"]]},{"id":"fd8184be.5f5088","type":"function","z":"ba3a4343d1d61c4f","name":"Req Params","func":"msg.payload = {\n \"active\": \"7\",\n \"object\": \"1\"\n};\n\nmsg.headers = {};\nmsg.headers['X-Auth-User'] = 'user';\nmsg.headers['X-Auth-Key'] = 'passkey';\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":240,"y":580,"wires":[["b8674bf2.144f38"]]},{"id":"a73743e8.d74d3","type":"comment","z":"ba3a4343d1d61c4f","name":"Inject to test Webhook","info":"","x":120,"y":540,"wires":[]}]
msg.payload = {
"active": "7",
"object": "1"
};
msg.headers = {};
msg.headers['X-Auth-User'] = 'user';
msg.headers['X-Auth-Key'] = 'passkey';
return msg;
INSTAR Alarmserver
Wir können nun unseren Alarmserver so konfigurieren, dass er den erstellten Webhook kontaktiert:
cmd="getasattr";
as_server="192.168.2.112";
as_port="1880";
as_ssl="0";
as_mode="0";
as_auth="0";
as_username="notifier";
as_path="/as-webhook/";
as_area="1";
as_io="1";
as_audio="1";
as_areaio="1";
as_activequery="1";
as_query1="0";
as_queryattr1="";
as_queryval1="";
as_query2="0";
as_queryattr2="";
as_queryval2="";
as_query3="0";
as_queryattr3="";
as_queryval3="";
as_query4="0";
as_queryattr4="";
as_queryval4="";
as_query5="0";
as_queryattr5="";
as_queryval5="";
as_insecure="0";
as_headerattr1="X-Title";
as_headerval1="Unauthorized access detected";
as_header1="1";
as_headerattr2="X-Tags";
as_headerval2="warning,skull";
as_header2="1";
as_headerattr3="X-Click";
as_headerval3="http://192.168.2.125/";
as_header3="1";
as_headerattr4="X-Icon";
as_headerval4="http://192.168.2.125/snap.cgi?chn=13&user=admin&pwd=instar";
as_header4="1";
as_headerattr5="X-Priority";
as_headerval5="5";
as_header5="1";
response="200";
Nach der Konfiguration öffnen Sie das Menü Test, um eine Testanfrage an Node-RED zu senden:
Wenn alles richtig konfiguriert ist, sollten wir jetzt die eingehende Anfrage in Node-RED sehen: