NodeJS Module for communication with Hikvision IP Cameras.
#!/usr/bin/nodejs
var ipcamera = require('node-hikvision-api');
// Options:
var options = {
host : '192.168.1.100',
port : '80',
user : 'admin',
pass : 'password123',
log : false,
};
var hikvision = new ipcamera.hikvision(options);
// Switch to Night Profile
hikvision.nightProfile()
// PTZ Go to preset 10
hikvision.ptzPreset(10)
// Monitor Camera Alarms
hikvision.on('alarm', function(code,action,index) {
if (code === 'VideoMotion' && action === 'Start') console.log(getDateTime() + ' Channel ' + index + ': Video Motion Detected')
if (code === 'VideoMotion' && action === 'Stop') console.log(getDateTime() + ' Channel ' + index + ': Video Motion Ended')
if (code === 'VehicleDetection' && action === 'Start') console.log(getDateTime() + ' Channel ' + index + ': Video Motion Ended')
if (code === 'VehicleDetection' && action === 'Stop') console.log(getDateTime() + ' Channel ' + index + ': Video Motion Ended')
if (code === 'LineDetection' && action === 'Start') console.log(getDateTime() + ' Channel ' + index + ': Line Cross Detected')
if (code === 'LineDetection' && action === 'Stop') console.log(getDateTime() + ' Channel ' + index + ': Line Cross Ended')
if (code === 'AlarmLocal' && action === 'Start') console.log(getDateTime() + ' Channel ' + index + ': Local Alarm Triggered: ' + index)
if (code === 'AlarmLocal' && action === 'Stop') console.log(getDateTime() + ' Channel ' + index + ': Local Alarm Ended: ' + index)
if (code === 'VideoLoss' && action === 'Start') console.log(getDateTime() + ' Channel ' + index + ': Video Lost!')
if (code === 'VideoLoss' && action === 'Stop') console.log(getDateTime() + ' Channel ' + index + ': Video Found!')
if (code === 'VideoBlind' && action === 'Start') console.log(getDateTime() + ' Channel ' + index + ': Video Blind!')
if (code === 'VideoBlind' && action === 'Stop') console.log(getDateTime() + ' Channel ' + index + ': Video Unblind!')
});
// Get realtime license plate recognition
hikvision.on('alarm', (code, action, id) => {
if (code === 'VehicleDetection' && action === 'Start') {
// On motion alarm, try to get a possible vehicle plate
options.id = id;
hikvision.getPlates(options);
// So, wait for event with the result plate
hikvision.once('newPlate', (res) => {
console.log(res);
});
}
});
function getDateTime() {
var date = new Date();
var hour = date.getHours();
hour = (hour < 10 ? "0" : "") + hour;
var min = date.getMinutes();
min = (min < 10 ? "0" : "") + min;
var sec = date.getSeconds();
sec = (sec < 10 ? "0" : "") + sec;
var year = date.getFullYear();
var month = date.getMonth() + 1;
month = (month < 10 ? "0" : "") + month;
var day = date.getDate();
day = (day < 10 ? "0" : "") + day;
return year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec;
}
// Switch Camera to Day Profile
hikvision.dayProfile()
// Switch Camera to Night Profile
hikvision.nightProfile()
// Gets last plate leiture from camera (This method returns only the last plate issued by the camera and it is not realtime. To get plates in real time see in example above)
hikvision.getPlates(options)
// Issue hikvision RAW PTZ Command (See API Manual in GitHub Wiki)
hikvision.ptzCommand(cmd,arg1,arg2,arg3,arg4)
// Go To Preset
hikvision.ptzPreset(int)
// PTZ Zoom, input level: positive = zoom in / negative = zoom out
hikvision.ptzZoom(float)
// PTZ Move
// Directions = Up/Down/Left/Right/LeftUp/RightUp/LeftDown/RightDown
// Actions = start/stop
// Speed = 1-8
hikvision.ptzMove(direction,action,speed)
// Request current PTZ Status
hikvision.ptzStatus()
// Callback for any Alarm (Motion Detection/Video Loss & Blank/Alarm Inputs)
hikvision.on('alarm', function(code,action,index){ });
// Callback for getPlates
hikvision.on('newPlate', function(data) { });
// Callback for PTZ Status
hikvision.on('ptzStatus', function(data){ });
// Callback on connect
hikvision.on('connect', function(){ });
// Callback on error
hikvision.on('error', function(error){ });
- host - hostname of your hikvision camera
- port - port for your hikvision camera (80 by default)
- user - username for camera
- pass - password for camera
- log - boolean to show detailed logs, defaults to false.
- Support & Discussion:
By: Ryan Hunt
Fork: bbruno5