UNPKG

node-cam

Version:

A node js module for controlling ip based cameras

300 lines (290 loc) 16.5 kB
var http = require('http'); var querystring = require('querystring'); var fs = require('fs'); var mkdirp = require('mkdirp'); module.exports = function camera(config, cb){ var camera = {}; config = config || {}; camera.settings = { name: '', host: '', port: -1, user: '', pass: '' } if('directories' in config){ camera.settings.directories = {}; for(key in config.directories){ mkdirp(config.directories[key], function (err) { if (err){ } else { camera.settings.directories[key] = config.directories[key]; } }); } } for( var key in config ) { camera.settings[key] = config[key]; } if( typeof cb == 'function' ) { cb(settings); } //Exposed functions camera.snapshot = function(filepath, cb){ if (!filepath){ var filepath = camera.settings.directories['images'] + "/" + Date.now() + ".jpg"; } else if( !cb && typeof filepath == 'function' ) { var cb = filepath var filepath = camera.settings.directories['images'] + "/" + Date.now() + ".jpg"; } snapPicture2(filepath, cb, this) }; return camera; } /******************************************************************* *************************** cam-specific *************************** ********************************************************************/ getImageSetting = function(cb){cb({success:false,message:'not implemented'})} setBrightness = function(cb){cb({success:false,message:'not implemented'})} setContrast = function(cb){cb({success:false,message:'not implemented'})} setHue = function(cb){cb({success:false,message:'not implemented'})} setSaturation = function(cb){cb({success:false,message:'not implemented'})} setSharpness = function(cb){cb({success:false,message:'not implemented'})} resetImageSetting = function(cb){cb({success:false,message:'not implemented'})} getMirrorAndFlipSetting = function(cb){cb({success:false,message:'not implemented'})} mirrorVideo = function(cb){cb({success:false,message:'not implemented'})} flipVideo = function(cb){cb({success:false,message:'not implemented'})} getRatio = function(cb){cb({success:false,message:'not implemented'})} setRatio = function(cb){cb({success:false,message:'not implemented'})} getH264FrmRefMode = function(cb){cb({success:false,message:'not implemented'})} setH264FrmRefMode = function(cb){cb({success:false,message:'not implemented'})} getScheduleRecordStreamChn = function(cb){cb({success:false,message:'not implemented'})} setScheduleRecordStreamChn = function(cb){cb({success:false,message:'not implemented'})} setPwrFreq = function(cb){cb({success:false,message:'not implemented'})} getVideoStreamParam = function(cb){cb({success:false,message:'not implemented'})} setVideoStreamParam = function(cb){cb({success:false,message:'not implemented'})} getSubVideoStreamParam = function(cb){cb({success:false,message:'not implemented'})} setSubVideoStreamParam = function(cb){cb({success:false,message:'not implemented'})} getMainVideoStreamType = function(cb){cb({success:false,message:'not implemented'})} getSubVideoStreamType = function(cb){cb({success:false,message:'not implemented'})} setMainVideoStreamType = function(cb){cb({success:false,message:'not implemented'})} setSubStreamFormat = function(cb){cb({success:false,message:'not implemented'})} GetMJStream = function(cb){cb({success:false,message:'not implemented'})} getOSDSetting = function(cb){cb({success:false,message:'not implemented'})} setOSDSetting = function(cb){cb({success:false,message:'not implemented'})} getOsdMaskArea = function(cb){cb({success:false,message:'not implemented'})} setOsdMaskArea = function(cb){cb({success:false,message:'not implemented'})} getOSDMask = function(cb){cb({success:false,message:'not implemented'})} setOSDMask = function(cb){cb({success:false,message:'not implemented'})} getMotionDetectConfig = function(cb){cb({success:false,message:'not implemented'})} setMotionDetectConfig = function(cb){cb({success:false,message:'not implemented'})} setLocalAlarmRecordConfig = function(cb){cb({success:false,message:'not implemented'})} getLocalAlarmRecordConfig = function(cb){cb({success:false,message:'not implemented'})} getSnapConfig = function(cb){cb({success:false,message:'not implemented'})} setSnapConfig = function(cb){cb({success:false,message:'not implemented'})} getScheduleSnapConfig = function(cb){cb({success:false,message:'not implemented'})} setScheduleSnapConfig = function(cb){cb({success:false,message:'not implemented'})} snapPicture = function(cb){cb({success:false,message:'not implemented'})} snapPicture2 = function( filepath, cb, camera ) { talk({ path: '/cgi-bin/CGIProxy.fcgi?', encoding:'binary', fields: { cmd: "snapPicture2" }, settings: camera.settings, callback: function(binary_data) { if(filepath) { fs.writeFile( filepath, binary_data, 'binary', function( err ) { if(err) { throw err if( typeof cb == 'function' ) { cb(false); } } else { if( typeof cb == 'function' ) { cb(filepath); } } }) } else { if( typeof cb == 'function' ) { cb(binary_data); } } } }) } getRecordList = function(cb){cb({success:false,message:'not implemented'})} getRecordList2 = function(cb){cb({success:false,message:'not implemented'})} reloadRecordindex = function(cb){cb({success:false,message:'not implemented'})} getAlarmRecordConfig = function(cb){cb({success:false,message:'not implemented'})} setAlarmRecordConfig = function(cb){cb({success:false,message:'not implemented'})} getRecordPath = function(cb){cb({success:false,message:'not implemented'})} getScheduleRecordConfig = function(cb){cb({success:false,message:'not implemented'})} setScheduleRecordConfig = function(cb){cb({success:false,message:'not implemented'})} setIOAlarmConfig = function(cb){cb({success:false,message:'not implemented'})} getIOAlarmConfig = function(cb){cb({success:false,message:'not implemented'})} clearIOAlarmOutput = function(cb){cb({success:false,message:'not implemented'})} setPCAudioAlarmCfg = function(cb){cb({success:false,message:'not implemented'})} getPCAudioAlarmCfg = function(cb){cb({success:false,message:'not implemented'})} getMultiDevList = function(cb){cb({success:false,message:'not implemented'})} getMultiDevDetailInfo = function(cb){cb({success:false,message:'not implemented'})} addMultiDev = function(cb){cb({success:false,message:'not implemented'})} delMultiDev = function(cb){cb({success:false,message:'not implemented'})} addAccount = function(cb){cb({success:false,message:'not implemented'})} delAccount = function(cb){cb({success:false,message:'not implemented'})} changePassword = function(cb){cb({success:false,message:'not implemented'})} changeUserName = function(cb){cb({success:false,message:'not implemented'})} changeUserNameAndPwdTogether = function(cb){cb({success:false,message:'not implemented'})} logIn = function(cb){cb({success:false,message:'not implemented'})} logOut = function(cb){cb({success:false,message:'not implemented'})} getSessionList = function(cb){cb({success:false,message:'not implemented'})} getUserList = function(cb){cb({success:false,message:'not implemented'})} usrBeatHeart = function(cb){cb({success:false,message:'not implemented'})} ptzMoveUp = function(cb){cb({success:false,message:'not implemented'})} ptzMoveDown = function(cb){cb({success:false,message:'not implemented'})} ptzMoveLeft = function(cb){cb({success:false,message:'not implemented'})} ptzMoveRight = function(cb){cb({success:false,message:'not implemented'})} ptzMoveTopLeft = function(cb){cb({success:false,message:'not implemented'})} ptzMoveTopRight = function(cb){cb({success:false,message:'not implemented'})} ptzMoveBottomLeft = function(cb){cb({success:false,message:'not implemented'})} ptzMoveBottomRight = function(cb){cb({success:false,message:'not implemented'})} ptzStopRun = function(cb){cb({success:false,message:'not implemented'})} ptzReset = function(cb){cb({success:false,message:'not implemented'})} getPTZSpeed = function(cb){cb({success:false,message:'not implemented'})} setPTZSpeed = function(cb){cb({success:false,message:'not implemented'})} getPTZPresetPointList = function(cb){cb({success:false,message:'not implemented'})} ptzAddPresetPoint = function(cb){cb({success:false,message:'not implemented'})} ptzDeletePresetPoint = function(cb){cb({success:false,message:'not implemented'})} ptzGotoPresetPoint = function(cb){cb({success:false,message:'not implemented'})} ptzGetCruiseMapList = function(cb){cb({success:false,message:'not implemented'})} ptzGetCruiseMapInfo = function(cb){cb({success:false,message:'not implemented'})} ptzSetCruiseMap = function(cb){cb({success:false,message:'not implemented'})} ptzDelCruiseMap = function(cb){cb({success:false,message:'not implemented'})} ptzStartCruise = function(cb){cb({success:false,message:'not implemented'})} ptzStopCruise = function(cb){cb({success:false,message:'not implemented'})} setCruiseTime = function(cb){cb({success:false,message:'not implemented'})} getCruiseTime = function(cb){cb({success:false,message:'not implemented'})} setCruiseTimeCustomed = function(cb){cb({success:false,message:'not implemented'})} getCruiseTimeCustomed = function(cb){cb({success:false,message:'not implemented'})} setCruiseLoopCnt = function(cb){cb({success:false,message:'not implemented'})} getCruiseLoopCnt = function(cb){cb({success:false,message:'not implemented'})} setCruiseCtrlMode = function(cb){cb({success:false,message:'not implemented'})} getCruiseCtrlMode = function(cb){cb({success:false,message:'not implemented'})} setCruisePrePointLingerTime = function(cb){cb({success:false,message:'not implemented'})} getCruisePrePointLingerTime = function(cb){cb({success:false,message:'not implemented'})} zoomIn = function(cb){cb({success:false,message:'not implemented'})} zoomOut = function(cb){cb({success:false,message:'not implemented'})} zoomStop = function(cb){cb({success:false,message:'not implemented'})} getZoomSpeed = function(cb){cb({success:false,message:'not implemented'})} setZoomSpeed = function(cb){cb({success:false,message:'not implemented'})} setPTZSelfTestMode = function(cb){cb({success:false,message:'not implemented'})} getPTZSelfTestMode = function(cb){cb({success:false,message:'not implemented'})} setPTZPrePointForSelfTest = function(cb){cb({success:false,message:'not implemented'})} getPTZPrePointForSelfTest = function(cb){cb({success:false,message:'not implemented'})} set485Info = function(cb){cb({success:false,message:'not implemented'})} get485Info = function(cb){cb({success:false,message:'not implemented'})} getIPInfo = function(cb){cb({success:false,message:'not implemented'})} setIpInfo = function(cb){cb({success:false,message:'not implemented'})} refreshWifiList = function(cb){cb({success:false,message:'not implemented'})} getWifiList = function(cb){cb({success:false,message:'not implemented'})} setWifiSetting = function(cb){cb({success:false,message:'not implemented'})} getWifiConfig = function(cb){cb({success:false,message:'not implemented'})} getPortInfo = function(cb){cb({success:false,message:'not implemented'})} setPortInfo = function(cb){cb({success:false,message:'not implemented'})} getUPnPConfig = function(cb){cb({success:false,message:'not implemented'})} setUPnPConfig = function(cb){cb({success:false,message:'not implemented'})} getDDNSConfig = function(cb){cb({success:false,message:'not implemented'})} setDDNSConfig = function(cb){cb({success:false,message:'not implemented'})} setFtpConfig = function(cb){cb({success:false,message:'not implemented'})} getFtpConfig = function(cb){cb({success:false,message:'not implemented'})} testFtpServer = function(cb){cb({success:false,message:'not implemented'})} getSMTPConfig = function(cb){cb({success:false,message:'not implemented'})} setSMTPConfig = function(cb){cb({success:false,message:'not implemented'})} smtpTest = function(cb){cb({success:false,message:'not implemented'})} setP2PEnable = function(cb){cb({success:false,message:'not implemented'})} getP2PEnable = function(cb){cb({success:false,message:'not implemented'})} setP2PPort = function(cb){cb({success:false,message:'not implemented'})} getP2PPort = function(cb){cb({success:false,message:'not implemented'})} getP2PInfo = function(cb){cb({success:false,message:'not implemented'})} getPPPoEConfig = function(cb){cb({success:false,message:'not implemented'})} setPPPoEConfig = function(cb){cb({success:false,message:'not implemented'})} setSystemTime = function(cb){cb({success:false,message:'not implemented'})} getSystemTime = function(cb){cb({success:false,message:'not implemented'})} openInfraLed = function(cb){cb({success:false,message:'not implemented'})} closeInfraLed = function(cb){cb({success:false,message:'not implemented'})} getInfraLedConfig = function(cb){cb({success:false,message:'not implemented'})} setInfraLedConfig = function(cb){cb({success:false,message:'not implemented'})} getScheduleInfraLedConfig = function(cb){cb({success:false,message:'not implemented'})} setScheduleInfraLedConfig = function(cb){cb({success:false,message:'not implemented'})} getDevState = function(cb){cb({success:false,message:'not implemented'})} getDevName = function(cb){cb({success:false,message:'not implemented'})} setDevName = function(cb){cb({success:false,message:'not implemented'})} getDevInfo = function(cb){cb({success:false,message:'not implemented'})} getProductModel = function(cb){cb({success:false,message:'not implemented'})} getProductModelName = function(cb){cb({success:false,message:'not implemented'})} getProductLanguage = function(cb){cb({success:false,message:'not implemented'})} getProductSensorType = function(cb){cb({success:false,message:'not implemented'})} getProductWifiType = function(cb){cb({success:false,message:'not implemented'})} getProductSdFlag = function(cb){cb({success:false,message:'not implemented'})} getProductOutdoorFlag = function(cb){cb({success:false,message:'not implemented'})} getProductPtFlag = function(cb){cb({success:false,message:'not implemented'})} getProductZoomFlag = function(cb){cb({success:false,message:'not implemented'})} getProductRs485Flag = function(cb){cb({success:false,message:'not implemented'})} getProductIoAlarmFlag = function(cb){cb({success:false,message:'not implemented'})} getProductOnvifFlag = function(cb){cb({success:false,message:'not implemented'})} getProductP2pFlag = function(cb){cb({success:false,message:'not implemented'})} getProductWpsFlag = function(cb){cb({success:false,message:'not implemented'})} getProductAudioFlag = function(cb){cb({success:false,message:'not implemented'})} getProductTalkFlag = function(cb){cb({success:false,message:'not implemented'})} getProductAppVer = function(cb){cb({success:false,message:'not implemented'})} getProductAllInfo = function(cb){cb({success:false,message:'not implemented'})} getGeneratePubKey = function(cb){cb({success:false,message:'not implemented'})} toolResetToFactory = function(cb){cb({success:false,message:'not implemented'})} rebootSystem = function(cb){cb({success:false,message:'not implemented'})} restoreToFactorySetting = function(cb){cb({success:false,message:'not implemented'})} exportConfig = function(cb){cb({success:false,message:'not implemented'})} ImportConfig = function(cb){cb({success:false,message:'not implemented'})} FwUpgrade = function(cb){cb({success:false,message:'not implemented'})} getFirewallConfig = function(cb){cb({success:false,message:'not implemented'})} setFirewallConfig = function(cb){cb({success:false,message:'not implemented'})} getLog = function(cb){cb({success:false,message:'not implemented'})} // communicate talk = function(args) { if(!args.fields) { args.fields = {}; } if (!args.camera) { args.camera = {}; } args.fields.usr = args.settings.user; args.fields.pwd = args.settings.pass; path = args.path + querystring.stringify( args.fields ) // connect var req = http.request({ host: args.settings.host, port: args.settings.port, path: path, method: 'GET' }, function( response ) { // response response.setEncoding( args.encoding ? args.encoding : 'utf8' ); var data = ''; response.on( 'data', function( chunk ) { data += chunk }) response.on( 'end', function() { if( typeof args.callback == 'function' ) { data = data.trim(); args.callback(data); } }) }) // fail req.on( 'error', function( err ) { camera.emit( 'connection-error', err ); }) // disconnect req.end(); }