Add Webhook and Command to No Motion Detector

merge-requests/134/head
Moe 2019-10-31 22:02:14 -07:00
parent a4a652a9f9
commit ed76347b25
4 changed files with 125 additions and 6 deletions

View File

@ -2743,7 +2743,105 @@ module.exports = function(s,config,lang){
"default": "10",
"example": "",
"possible": ""
}
},
{
"name": "detail=detector_notrigger_webhook",
"field": "Webhook",
"description": "Send a GET request to a URL with some values from the event.",
"default": "0",
"example": "",
"selector": "h_det_web_notrig",
"fieldType": "select",
"possible": [
{
"name": lang.No,
"value": "0"
},
{
"name": lang.Yes,
"value": "1"
}
]
},
{
hidden: true,
"name": "detail=detector_notrigger_webhook_url",
"field": lang['Webhook URL'],
"description": "",
"default": "",
"example": "http://111.111.111.111?mid={{MONITOR_ID}}&group={{GROUP_KEY}}&confidence={{CONFIDENCE}}",
"form-group-class": "h_det_web_notrig_input h_det_web_notrig_1",
"possible": ""
},
{
"name": "detail=detector_notrigger_webhook_method",
"field": lang['Call Method'],
"description": "",
"default": "GET",
"example": "",
"form-group-class": "h_det_web_notrig_input h_det_web_notrig_1",
"fieldType": "select",
"possible": [
{
"name": `GET (${lang.Default})`,
"value": "GET"
},
{
"name": "PUT",
"value": "PUT"
},
{
"name": "POST",
"value": "POST"
}
]
},
{
"name": "detail=detector_notrigger_command_timeout",
"field": lang['Allow Next Webhook'],
"description": "This value is a timer to allow the next running of your webhook. This value is in minutes.",
"default": "10",
"example": "",
"form-group-class": "h_det_web_notrig_input h_det_web_notrig_1",
"possible": ""
},
{
"name": "detail=detector_notrigger_command_enable",
"field": lang['Command on Trigger'],
"description": "",
"default": "0",
"example": "",
"selector": "h_det_com_notrig",
"fieldType": "select",
"possible": [
{
"name": lang.No,
"value": "0"
},
{
"name": lang.Yes,
"value": "1"
}
]
},
{
"name": "detail=detector_notrigger_command",
"field": lang['Command'],
"description": "The command that will run. This is the equivalent of running a shell command from terminal.",
"default": "",
"form-group-class": "h_det_com_notrig_input h_det_com_notrig_1",
"example": "/home/script.sh {{MONITOR_ID}} {{GROUP_KEY}} {{CONFIDENCE}}",
"possible": ""
},
{
"name": "detail=detector_notrigger_command_timeout",
"field": lang['Allow Next Command'],
"description": "This value is a timer to allow the next running of your script. This value is in minutes.",
"default": "10",
"example": "",
"form-group-class": "h_det_com_notrig_input h_det_com_notrig_1",
"possible": ""
},
]
},
{

View File

@ -532,8 +532,9 @@
"Webhook URL": "Webhook URL",
"Command on Trigger": "Command on Trigger",
"Command": "Command",
"Allow Next Command": "Allow Next Command <small>in Minutes</small>",
"Allow Next Trigger": "Allow Next Trigger <small>in Milliseconds</small>",
"Allow Next Webhook": "Allow Next Webhook",
"Allow Next Command": "Allow Next Command",
"Allow Next Trigger": "Allow Next Trigger",
"Save Events to SQL": "Save Events to SQL",
"Email on Trigger": "Email on Trigger <small>Emails go to the main account holder's login address.</small>",
"Attach Video Clip": "Attach Video Clip",

View File

@ -4,7 +4,7 @@ var exec = require('child_process').exec;
var spawn = require('child_process').spawn;
var request = require('request');
module.exports = function(s,config,lang){
var addEventDetailsToString = function(eventData,string,addOps){
s.addEventDetailsToString = function(eventData,string,addOps){
//d = event data
if(!addOps)addOps = {}
var newString = string + ''
@ -307,7 +307,7 @@ module.exports = function(s,config,lang){
})
if(filter.webhook && currentConfig.detector_webhook === '1'){
var detector_webhook_url = addEventDetailsToString(d,currentConfig.detector_webhook_url)
var detector_webhook_url = s.addEventDetailsToString(d,currentConfig.detector_webhook_url)
var webhookMethod = currentConfig.detector_webhook_method
if(!webhookMethod || webhookMethod === '')webhookMethod = 'GET'
request(detector_webhook_url,{method: webhookMethod,encoding:null},function(err,data){
@ -319,7 +319,7 @@ module.exports = function(s,config,lang){
if(filter.command && currentConfig.detector_command_enable === '1' && !s.group[d.ke].activeMonitors[d.id].detector_command){
s.group[d.ke].activeMonitors[d.id].detector_command = s.createTimeout('detector_command',s.group[d.ke].activeMonitors[d.id],currentConfig.detector_command_timeout,10)
var detector_command = addEventDetailsToString(d,currentConfig.detector_command)
var detector_command = s.addEventDetailsToString(d,currentConfig.detector_command)
if(detector_command === '')return
exec(detector_command,{detached: true},function(err){
if(err)s.debugLog(err)

View File

@ -1219,8 +1219,28 @@ module.exports = function(s,config,lang){
s.setNoEventsDetector = function(e){
var monitorId = e.id || e.mid
var detector_notrigger_timeout = (parseFloat(e.details.detector_notrigger_timeout) || 10) * 1000 * 60
var currentConfig = s.group[e.ke].rawMonitorConfigurations[monitorId].details
clearInterval(s.group[e.ke].activeMonitors[monitorId].detector_notrigger_timeout)
s.group[e.ke].activeMonitors[monitorId].detector_notrigger_timeout = setInterval(function(){
if(currentConfig.detector_notrigger_webhook === '1' && !s.group[e.ke].activeMonitors[monitorId].detector_notrigger_webhook){
s.group[e.ke].activeMonitors[monitorId].detector_notrigger_webhook = s.createTimeout('detector_notrigger_webhook',s.group[e.ke].activeMonitors[monitorId],currentConfig.detector_notrigger_webhook_timeout,10)
var detector_notrigger_webhook_url = s.addEventDetailsToString(e,currentConfig.detector_notrigger_webhook_url)
var webhookMethod = currentConfig.detector_notrigger_webhook_method
if(!webhookMethod || webhookMethod === '')webhookMethod = 'GET'
request(detector_notrigger_webhook_url,{method: webhookMethod,encoding:null},function(err,data){
if(err){
s.userLog(d,{type:lang["Event Webhook Error"],msg:{error:err,data:data}})
}
})
}
if(currentConfig.detector_notrigger_command_enable === '1' && !s.group[e.ke].activeMonitors[monitorId].detector_notrigger_command){
s.group[e.ke].activeMonitors[monitorId].detector_notrigger_command = s.createTimeout('detector_notrigger_command',s.group[e.ke].activeMonitors[monitorId],currentConfig.detector_notrigger_command_timeout,10)
var detector_notrigger_command = s.addEventDetailsToString(e,currentConfig.detector_notrigger_command)
if(detector_notrigger_command === '')return
exec(detector_notrigger_command,{detached: true},function(err){
if(err)s.debugLog(err)
})
}
s.onDetectorNoTriggerTimeoutExtensions.forEach(function(extender){
extender(e)
})