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.

Debugging Alarmserver Headers

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: *&#x2F;*</h2>
        <h2>User Agent: curl&#x2F;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:

Debugging Alarmserver Headers

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;

Debugging Alarmserver Headers

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:

Debugging Alarmserver Headers

Wenn alles richtig konfiguriert ist, sollten wir jetzt die eingehende Anfrage in Node-RED sehen:

Debugging Alarmserver Headers