Add dropInEvents module
- This allows you to drop a file into `/dev/shm/streams/dropInEvents/[GROUP KEY]/[MONITOR ID]` to trigger an event. - This is useful for cameras that can do FTP upload on Motion detected with their internal detector. - `dropInEventsDir` can be configured in conf.jsonmerge-requests/63/head
parent
e129afd756
commit
55aedbabb9
|
|
@ -0,0 +1,84 @@
|
|||
var fs = require('fs');
|
||||
module.exports = function(s,config,lang,app,io){
|
||||
if(config.dropInEventServer === true){
|
||||
if(config.dropInEventDeleteFileAfterTrigger === undefined)config.dropInEventDeleteFileAfterTrigger = true
|
||||
var beforeMonitorsLoadedOnStartup = function(){
|
||||
if(!config.dropInEventsDir){
|
||||
config.dropInEventsDir = s.dir.streams + 'dropInEvents/'
|
||||
}
|
||||
s.dir.dropInEvents = s.checkCorrectPathEnding(config.dropInEventsDir)
|
||||
console.log(s.dir.dropInEvents)
|
||||
|
||||
//dropInEvents dir
|
||||
if(!fs.existsSync(s.dir.dropInEvents)){
|
||||
fs.mkdirSync(s.dir.dropInEvents)
|
||||
}
|
||||
}
|
||||
var onMonitorInit = function(monitorConfig){
|
||||
var ke = monitorConfig.ke
|
||||
var mid = monitorConfig.mid
|
||||
var groupEventDropDir = s.dir.dropInEvents + ke
|
||||
|
||||
if(!fs.existsSync(groupEventDropDir)){
|
||||
fs.mkdirSync(groupEventDropDir)
|
||||
}
|
||||
var monitorEventDropDir = groupEventDropDir + '/' + mid + '/'
|
||||
if(!fs.existsSync(monitorEventDropDir)){
|
||||
fs.mkdirSync(monitorEventDropDir)
|
||||
}
|
||||
if(s.group[monitorConfig.ke].mon[monitorConfig.mid].dropInEventWatcher){
|
||||
s.group[monitorConfig.ke].mon[monitorConfig.mid].dropInEventWatcher.close()
|
||||
delete(s.group[monitorConfig.ke].mon[monitorConfig.mid].dropInEventWatcher)
|
||||
}
|
||||
var fileQueue = {}
|
||||
s.group[monitorConfig.ke].mon[monitorConfig.mid].dropInEventFileQueue = fileQueue
|
||||
var eventTrigger = function(eventType,filename){
|
||||
var filePath = monitorEventDropDir + filename
|
||||
if(filename.indexOf('.jpg') > -1){
|
||||
var snapPath = s.dir.streams + ke + '/' + mid + '/s.jpg'
|
||||
fs.unlink(snapPath,function(err){
|
||||
fs.createReadStream(filePath).pipe(fs.createWriteStream(snapPath))
|
||||
s.triggerEvent({
|
||||
id: mid,
|
||||
ke: ke,
|
||||
details: {
|
||||
confidence: 100,
|
||||
name: filename,
|
||||
plug: "dropInEvent",
|
||||
reason: "dropInEvent"
|
||||
}
|
||||
})
|
||||
})
|
||||
}else{
|
||||
s.triggerEvent({
|
||||
id: mid,
|
||||
ke: ke,
|
||||
details: {
|
||||
confidence: 100,
|
||||
name: filename,
|
||||
plug: "dropInEvent",
|
||||
reason: "dropInEvent"
|
||||
}
|
||||
})
|
||||
}
|
||||
console.log(eventType,filePath)
|
||||
|
||||
if(config.dropInEventDeleteFileAfterTrigger){
|
||||
setTimeout(function(){
|
||||
fs.unlink(filePath)
|
||||
},1000 * 60 * 5)
|
||||
}
|
||||
}
|
||||
var directoryWatch = fs.watch(monitorEventDropDir,function(eventType,filename){
|
||||
clearTimeout(fileQueue[filename])
|
||||
fileQueue[filename] = setTimeout(function(){
|
||||
eventTrigger(eventType,filename)
|
||||
},3000)
|
||||
})
|
||||
s.group[monitorConfig.ke].mon[monitorConfig.mid].dropInEventWatcher = directoryWatch
|
||||
}
|
||||
//add extensions
|
||||
s.beforeMonitorsLoadedOnStartup(beforeMonitorsLoadedOnStartup)
|
||||
s.onMonitorInit(onMonitorInit)
|
||||
}
|
||||
}
|
||||
|
|
@ -123,4 +123,9 @@ module.exports = function(s,config){
|
|||
s.onFFmpegLoadedExtensions.push(callback)
|
||||
}
|
||||
//
|
||||
s.beforeMonitorsLoadedOnStartupExtensions = []
|
||||
s.beforeMonitorsLoadedOnStartup = function(callback){
|
||||
s.beforeMonitorsLoadedOnStartupExtensions.push(callback)
|
||||
}
|
||||
//
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,9 @@ module.exports = function(s,config,lang,io){
|
|||
}
|
||||
var loadedAccounts = []
|
||||
var loadMonitors = function(callback){
|
||||
s.beforeMonitorsLoadedOnStartupExtensions.forEach(function(extender){
|
||||
extender()
|
||||
})
|
||||
s.systemLog(lang.startUpText4)
|
||||
//preliminary monitor start
|
||||
s.sqlQuery('SELECT * FROM Monitors', function(err,monitors) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue