node-red-contrib-hikvision-ultimate
Advanced tools
Comparing version 1.0.51 to 1.0.52
@@ -7,4 +7,8 @@ <p align="center"><img src='https://raw.githubusercontent.com/Supergiovane/node-red-contrib-hikvision-ultimate/master/img/logo.png' width="40%"></p> | ||
<p> | ||
<b>Version 1.0.52</b> September 2021<br/> | ||
- NEW: Doorbell node (you can be notified on ringing, on call and even open the door). Thanks @ur5zeb for help in testing.<br/> | ||
</p> | ||
<p> | ||
<b>Version 1.0.51</b> August 2021<br/> | ||
- FIX: XML Node won't retain the XML text.<br/> | ||
- FIX: XML Node do not retain the XML text.<br/> | ||
</p> | ||
@@ -11,0 +15,0 @@ <p> |
{ | ||
"name": "node-red-contrib-hikvision-ultimate", | ||
"version": "1.0.51", | ||
"description": "A native set of nodes for Hikvision Cameras, Alarms, Radars etc.", | ||
"version": "1.0.52", | ||
"description": "A native set of nodes for Hikvision (and compatible) Cameras, Alarms, Radars, NVR, Doorbells, etc.", | ||
"author": "Supergiovane (https://github.com/Supergiovane)", | ||
@@ -20,3 +20,6 @@ "dependencies": { | ||
"ANPR", | ||
"license plate" | ||
"license plate", | ||
"doorbell", | ||
"door intercom", | ||
"anker" | ||
], | ||
@@ -34,2 +37,3 @@ "engines": { | ||
"Hikvision-config": "nodes/Hikvision-config.js", | ||
"Doorbell-config": "nodes/Doorbell-config.js", | ||
"ANPR-config": "nodes/ANPR-config.js", | ||
@@ -42,5 +46,6 @@ "hikvisionUltimateText": "nodes/hikvisionUltimateText.js", | ||
"hikvisionUltimatePicture": "nodes/hikvisionUltimatePicture.js", | ||
"hikvisionUltimateXML": "nodes/hikvisionUltimateXML.js" | ||
"hikvisionUltimateXML": "nodes/hikvisionUltimateXML.js", | ||
"hikvisionUltimateDoorbell": "nodes/hikvisionUltimateDoorbell.js" | ||
} | ||
} | ||
} | ||
} |
321
README.md
<p align="center"><img src='https://raw.githubusercontent.com/Supergiovane/node-red-contrib-hikvision-ultimate/master/img/logo.png' width="60%"></p> | ||
A native set of nodes for Hikvision Cameras, Alarms, Radars, NVR etc. | ||
A native set of nodes for Hikvision (and compatible) Cameras, Alarms, Radars, NVR, Doorbells etc. | ||
@@ -16,4 +16,4 @@ [![NPM version][npm-version-image]][npm-url] | ||
## DESCRIPTION | ||
This is a set of nodes to handle ISAPI Hikvision messages. It works exclusively with ***HIKVISION*** devices.<br/> | ||
Works with cameras, NVR, Security Systems and also with specialized devices, like Radar (for example DS-PR1-60, DS-PR1-100 and DS-PR1-120).<br/> | ||
This is a set of nodes to handle ISAPI Hikvision messages. It works exclusively with ***HIKVISION*** and Hikvision based compatible devices.<br/> | ||
Works with cameras, NVR, Security Systems, Doorbells and also with specialized devices, like Radar (for example DS-PR1-60, DS-PR1-100 and DS-PR1-120).<br/> | ||
Digest authentication: it should work with all devices.<br/> | ||
@@ -62,3 +62,3 @@ All nodes are capable of auto reconnect if the connection is lost and are able to actively monitor the connection.<br/> | ||
// Example of an event from NVR/Camera | ||
msg.payload = { | ||
msg = { | ||
"payload": true, | ||
@@ -75,3 +75,3 @@ "topic": "", | ||
// Example of an event from Security System or Radar | ||
msg.payload = { | ||
msg = { | ||
{ | ||
@@ -139,3 +139,3 @@ "zone": 1, // This is the zone number that fired the alarm | ||
```javascript | ||
msg.payload = { | ||
msg = { | ||
"topic":"", | ||
@@ -186,3 +186,3 @@ "payload":"AB123CD", // This is the license plate | ||
```javascript | ||
msg.payload = { | ||
msg = { | ||
{ | ||
@@ -236,214 +236,3 @@ "payload": true, // true after the camera has reached the PTZ preset position | ||
```javascript | ||
[ | ||
{ | ||
"id": "604a8eaf.6d4ac", | ||
"type": "change", | ||
"z": "d61f370f.0413c", | ||
"name": "Setup msg", | ||
"rules": [ | ||
{ | ||
"t": "set", | ||
"p": "cid", | ||
"pt": "msg", | ||
"to": "", | ||
"tot": "date" | ||
}, | ||
{ | ||
"t": "set", | ||
"p": "attachments", | ||
"pt": "msg", | ||
"to": "[{\t \"filename\": 'image_' & $replace($now(),\":\",\"_\") & '.jpg', \t \"content\": $$.forEmail,\t \"cid\": \"\" & cid & \"\"\t}]", | ||
"tot": "jsonata" | ||
}, | ||
{ | ||
"t": "set", | ||
"p": "topic", | ||
"pt": "msg", | ||
"to": "See attached image", | ||
"tot": "str" | ||
}, | ||
{ | ||
"t": "set", | ||
"p": "payload", | ||
"pt": "msg", | ||
"to": "''", | ||
"tot": "jsonata" | ||
}, | ||
{ | ||
"t": "set", | ||
"p": "from", | ||
"pt": "msg", | ||
"to": "info@mysupersmarthome.it", | ||
"tot": "str" | ||
} | ||
], | ||
"action": "", | ||
"property": "", | ||
"from": "", | ||
"to": "", | ||
"reg": false, | ||
"x": 430, | ||
"y": 120, | ||
"wires": [ | ||
[ | ||
"aad931f8.dc90c8" | ||
] | ||
] | ||
}, | ||
{ | ||
"id": "aad931f8.dc90c8", | ||
"type": "e-mail", | ||
"z": "d61f370f.0413c", | ||
"server": "mymta.myserver.com", | ||
"port": "25", | ||
"secure": false, | ||
"tls": false, | ||
"name": "info@mysupersmarthome.it", | ||
"dname": "Email", | ||
"x": 570, | ||
"y": 120, | ||
"wires": [ | ||
] | ||
}, | ||
{ | ||
"id": "8e957d25.a94278", | ||
"type": "hikvisionUltimatePicture", | ||
"z": "d61f370f.0413c", | ||
"name": "Ovest", | ||
"topic": "", | ||
"server": "eb73371b.af5208", | ||
"channelID": "7", | ||
"rotateimage": "0", | ||
"heightimage": "", | ||
"widthimage": "", | ||
"qualityimage": "100", | ||
"cropimage": "", | ||
"textoverlay": "", | ||
"textoverlayXY": "", | ||
"textoverlayWH": "", | ||
"textoverlayFont": "FONT_SANS_64_WHITE", | ||
"x": 250, | ||
"y": 120, | ||
"wires": [ | ||
[ | ||
"604a8eaf.6d4ac", | ||
"a7680ffd.f99168" | ||
], | ||
[ | ||
] | ||
] | ||
}, | ||
{ | ||
"id": "59408c5e.127414", | ||
"type": "inject", | ||
"z": "d61f370f.0413c", | ||
"name": "", | ||
"props": [ | ||
{ | ||
"p": "payload" | ||
}, | ||
{ | ||
"p": "topic", | ||
"vt": "str" | ||
} | ||
], | ||
"repeat": "", | ||
"crontab": "", | ||
"once": false, | ||
"onceDelay": 0.1, | ||
"topic": "", | ||
"payload": "true", | ||
"payloadType": "bool", | ||
"x": 130, | ||
"y": 120, | ||
"wires": [ | ||
[ | ||
"8e957d25.a94278" | ||
] | ||
] | ||
}, | ||
{ | ||
"id": "a7680ffd.f99168", | ||
"type": "template", | ||
"z": "d61f370f.0413c", | ||
"name": "", | ||
"field": "payload", | ||
"fieldType": "msg", | ||
"format": "handlebars", | ||
"syntax": "mustache", | ||
"template": "", | ||
"output": "str", | ||
"x": 420, | ||
"y": 180, | ||
"wires": [ | ||
[ | ||
"32fa81d7.a2ada6" | ||
] | ||
] | ||
}, | ||
{ | ||
"id": "32fa81d7.a2ada6", | ||
"type": "ui_template", | ||
"z": "d61f370f.0413c", | ||
"group": "c1bf19aa.fe7fb8", | ||
"name": "", | ||
"order": 0, | ||
"width": "9", | ||
"height": "7", | ||
"format": " ", | ||
"storeOutMessages": true, | ||
"fwdInMessages": true, | ||
"resendOnRefresh": true, | ||
"templateScope": "local", | ||
"x": 580, | ||
"y": 180, | ||
"wires": [ | ||
[ | ||
] | ||
] | ||
}, | ||
{ | ||
"id": "e3fdf8b2.9fbc48", | ||
"type": "comment", | ||
"z": "d61f370f.0413c", | ||
"name": "Send an Email with image attachment and show it in the web UI", | ||
"info": "", | ||
"x": 310, | ||
"y": 80, | ||
"wires": [ | ||
] | ||
}, | ||
{ | ||
"id": "eb73371b.af5208", | ||
"type": "Hikvision-config", | ||
"host": "192.168.1.32", | ||
"port": "80", | ||
"name": "NVR", | ||
"authentication": "digest", | ||
"protocol": "http", | ||
"heartbeattimerdisconnectionlimit": "1", | ||
"deviceinfo": "[object Object]" | ||
}, | ||
{ | ||
"id": "c1bf19aa.fe7fb8", | ||
"type": "ui_group", | ||
"name": "Frame Grab", | ||
"tab": "e0f42233.22428", | ||
"order": 1, | ||
"disp": true, | ||
"width": "9", | ||
"collapse": false | ||
}, | ||
{ | ||
"id": "e0f42233.22428", | ||
"type": "ui_tab", | ||
"name": "NVR", | ||
"icon": "dashboard", | ||
"order": 13 | ||
} | ||
] | ||
[{"id":"bd6acbb81c4f9eaf","type":"change","z":"48095c5671f0ab16","name":"Setup msg","rules":[{"t":"set","p":"cid","pt":"msg","to":"","tot":"date"},{"t":"set","p":"attachments","pt":"msg","to":"[{\t \"filename\": 'image_' & $replace($now(),\":\",\"_\") & '.jpg', \t \"content\": $$.forEmail,\t \"cid\": \"\" & cid & \"\"\t}]","tot":"jsonata"},{"t":"set","p":"topic","pt":"msg","to":"See attached image","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"''","tot":"jsonata"},{"t":"set","p":"from","pt":"msg","to":"info@mysupersmarthome.it","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":200,"wires":[["3e0ca3cc7c0d2e22"]]},{"id":"0b82f010bd682a0d","type":"hikvisionUltimatePicture","z":"48095c5671f0ab16","name":"Ovest","topic":"","server":"eb73371b.af5208","channelID":"7","rotateimage":"0","heightimage":"","widthimage":"","qualityimage":"100","cropimage":"","textoverlay":"","textoverlayXY":"","textoverlayWH":"","textoverlayFont":"FONT_SANS_64_WHITE","x":230,"y":200,"wires":[["bd6acbb81c4f9eaf","7ff4f0c75ef4d486"],[]]},{"id":"478fee35ffd435b5","type":"inject","z":"48095c5671f0ab16","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":110,"y":200,"wires":[["0b82f010bd682a0d"]]},{"id":"facefd92c70af183","type":"comment","z":"48095c5671f0ab16","name":"Send an Email with image attachment and show it in the web UI","info":"","x":290,"y":160,"wires":[]},{"id":"7ff4f0c75ef4d486","type":"template","z":"48095c5671f0ab16","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<img width=\"320px\" height=\"240px\" src=\"{{{payload}}}\">","output":"str","x":400,"y":260,"wires":[["121759fa66219f53"]]},{"id":"121759fa66219f53","type":"ui_template","z":"48095c5671f0ab16","group":"e2be830cd2d143a0","name":"","order":0,"width":"6","height":"4","format":"<div ng-bind-html=\"msg.payload\"></div>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":560,"y":260,"wires":[[]]},{"id":"3e0ca3cc7c0d2e22","type":"function","z":"48095c5671f0ab16","name":"Email","func":"// Replace this function node with an email node","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":200,"wires":[[]]},{"id":"eb73371b.af5208","type":"Hikvision-config","host":"192.168.1.32","port":"80","name":"NVR","authentication":"digest","protocol":"http","heartbeattimerdisconnectionlimit":"1","deviceinfo":"[object Object]"},{"id":"e2be830cd2d143a0","type":"ui_group","name":"Default","tab":"e0f42233.22428","order":2,"disp":true,"width":"6","collapse":false},{"id":"e0f42233.22428","type":"ui_tab","name":"NVR","icon":"dashboard","order":13}] | ||
``` | ||
@@ -639,3 +428,3 @@ | ||
```javascript | ||
msg.payload = { | ||
msg = { | ||
"topic": "", | ||
@@ -683,5 +472,93 @@ "payload": { | ||
``` | ||
<br/> | ||
<br/> | ||
# HIKVISION DEVICES TESTED WITH THE NODE | ||
This is a list of Hikvision models the users own and decided to share because it checked working with Hikvision-Ultimate. <br/> | ||
--- | ||
## DOORBELL NODE | ||
The doorbell node allow you to receive ring/call progress events, open the doors, hangup calls and other things from hikvision and hik compatible doorbells. <br/> | ||
Everytime ad intercom sends a message to the node, this message is validated using the filters you selected in the configuration window. In case of a match, it emits a msg to the flow. | ||
<br/>There are many filters you can apply (ringStatus (ring or on call), floor number, unit number, building number and so on.). | ||
<img src='https://raw.githubusercontent.com/Supergiovane/node-red-contrib-hikvision-ultimate/master/img/Doorbell.png' width="80%"> | ||
**Copy this code and paste it into your flow** | ||
<details><summary>View code</summary> | ||
> Adjust the nodes according to your setup | ||
<code> | ||
```javascript | ||
[{"id":"22420ca523840eef","type":"hikvisionUltimateDoorbell","z":"48095c5671f0ab16","name":"","topic":"","server":"085ef798e6c04064","ringStatus":"all","floorNo":"all","unitNo":"all","zoneNo":"all","buildingNo":"all","x":360,"y":180,"wires":[["5d1eddc07a46bd2c"],["7b5813c6cd794885"]]},{"id":"5d1eddc07a46bd2c","type":"debug","z":"48095c5671f0ab16","name":"Output","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":550,"y":160,"wires":[]},{"id":"7b5813c6cd794885","type":"debug","z":"48095c5671f0ab16","name":"Error report","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":570,"y":200,"wires":[]},{"id":"a1032b3b72cf9db6","type":"inject","z":"48095c5671f0ab16","name":"Open Door","props":[{"p":"openDoor","v":"1","vt":"num"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":180,"y":160,"wires":[["22420ca523840eef"]]},{"id":"54590a36f409ce0f","type":"inject","z":"48095c5671f0ab16","name":"Hang Up","props":[{"p":"hangUp","v":"true","vt":"bool"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"8","topic":"","x":180,"y":200,"wires":[["22420ca523840eef"]]},{"id":"2388a3941360bd3c","type":"comment","z":"48095c5671f0ab16","name":"Doorbell sample. Caution: \"Open Door\" will open your door.","info":"","x":330,"y":120,"wires":[]},{"id":"085ef798e6c04064","type":"Doorbell-config","host":"192.168.1.5","port":"80","name":"OUTDOOR STATION","authentication":"digest","protocol":"http","heartbeattimerdisconnectionlimit":"1","deviceinfo":"{\"DeviceInfo\":{\"$\":{\"version\":\"2.0\",\"xmlns\":\"http://www.isapi.org/ver20/XMLSchema\"},\"deviceName\":\"OUTDOOR STATION\",\"deviceID\":\"7d49925b-4fc7-406b-a0ec-2ca59cc25838\",\"deviceDescription\":\"\\tVis\",\"deviceLocation\":\"STD-CGI\",\"systemContact\":\"STD-CGI\",\"model\":\"DS-KV6113-WPE1(B)\",\"serialNumber\":\"DS-KV6113-WPE1(B)0120210416RRF86332026\",\"macAddress\":\"24:18:c6:39:42:29\",\"firmwareVersion\":\"V2.2.50\",\"firmwareReleasedDate\":\"build 210630\",\"bootVersion\":\"33685554\",\"bootReleasedDate\":\"1377822\",\"hardwareVersion\":\"0x0\",\"encoderVersion\":\"V4.0\",\"encoderReleasedDate\":\"build 181206\",\"deviceType\":\"\\tVis\",\"telecontrolID\":\"88\",\"supportBeep\":\"true\",\"supportVideoLoss\":\"true\",\"alarmOutNum\":\"2\",\"alarmInNum\":\"4\",\"RS485Num\":\"1\",\"customizedInfo\":\"\"}}"}] | ||
``` | ||
</code> | ||
</details> | ||
**Flow Messages** | ||
**Input** | ||
The node accepts messages from the flow.<br/> | ||
See these messages you can pass to it:<br/> | ||
*OPEN THE DOOR LATCHES* | ||
```javascript | ||
// Open the door. | ||
msg.openDoor = 1; // Pass the door number to open as value, in this case, 1. | ||
return msg; | ||
``` | ||
*HANG UP THE CURRENT CALL AND STOP RINGING* | ||
```javascript | ||
// Hangup the current call and stop ringing | ||
msg.hangUp = true; | ||
return msg; | ||
``` | ||
<br/> | ||
<br/> | ||
**Output** | ||
The node outputs a payload on **PIN 1** that can vary, depending on the event type sent by the connected intercom.<br/> | ||
Anyway, it emits always a payload = ***true** as soon as an intercom message matching filters you configured in the configuration window, arrives. You can use that payload to trigger events. | ||
The node outputs a payload on **PIN 2**, representing a connection error. ***TRUE*** if error, otherwise ***FALSE***</br> | ||
This below is an example of msg output</br> | ||
**Output PIN 1** | ||
```javascript | ||
msg = { | ||
"CallerInfo":{ | ||
"buildingNo":1, | ||
"floorNo":1, | ||
"zoneNo":1, | ||
"unitNo":1, | ||
"devNo":88, | ||
"devType":1, | ||
"lockNum":1, | ||
"status":"idle" | ||
}, | ||
"topic":"", | ||
"payload":true | ||
} | ||
``` | ||
**Output PIN 2 (connection error)** | ||
```javascript | ||
msg = { | ||
"topic": "", | ||
"errorDescription": "", // This will contain the error rescription, in case of errors. | ||
"payload": false // Or TRUE if error | ||
} | ||
``` | ||
<br/> | ||
<br/> | ||
# HIKVISION AND OTHER HIK BASED DEVICES, TESTED WITH THE NODE | ||
This is a list of Hikvision (and hik compatible) models the users own and decided to share because it checked working with Hikvision-Ultimate. <br/> | ||
This is only a partial model list. Hikvision-Ultimate should work with basically ALL Hikvision devices.<br/> | ||
@@ -688,0 +565,0 @@ [Click HERE to view the list of tested devices](http://80.211.147.27:8080/?read=true&md=noCD&fw=no) |
@@ -5,3 +5,3 @@ var http = require('http'); | ||
console.log("NODE.JS Server started on port 8080 for collectiong things from my node-red nodes"); | ||
console.log("Ciao. NODE.JS Server started on port 8080 for collectiong things from my node-red nodes"); | ||
@@ -23,3 +23,3 @@ //create a server object: | ||
var q = url.parse(req.url, true).query; | ||
console.log(shortStartDate + " Received: " + JSON.stringify(q) + " from: " + req.connection.remoteAddress); | ||
console.log(shortStartDate + " Received: " + JSON.stringify(q) + " from: " + req.socket.remoteAddress); | ||
if (q.md === undefined || q.fw === undefined || q.read === undefined) { | ||
@@ -26,0 +26,0 @@ res.writeHead(404, { 'Content-Type': 'text/html' }); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
2062208
53
2103
571
4