Use of emitEvent
Posted: Sunday 14 February 2021 20:32
Hi,
The below alarm script works ok for alarming with sensors without delays.
When an door alarm is triggered the first time it has to delay, by using emitEvent and repeat the script again after 25 seconds
This event has to pass two variables, but in the current config it does NOT even pass one variable.
At line 139 i do the emitevent call
137 itemname = item.name
138 itemstate= item.state
139 dz.emitEvent(myEvent, itemname).afterSec(25) -- hoe geef je beide variabele mee ?
but no response
I checked this script and i get a message in my log "dit is de inloop" so line 134 is reached!
134 dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'dit is de inloop',10)
Line 115 is never reached (no errors)
115 if item.isCustomEvent then
116 test1 = tostring(item.data)
--test2 = tostring(item.data.itemstate)
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data' .. test1,10)
--dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data.itemstate' .. test2,10)
end
The below alarm script works ok for alarming with sensors without delays.
When an door alarm is triggered the first time it has to delay, by using emitEvent and repeat the script again after 25 seconds
This event has to pass two variables, but in the current config it does NOT even pass one variable.
At line 139 i do the emitevent call
137 itemname = item.name
138 itemstate= item.state
139 dz.emitEvent(myEvent, itemname).afterSec(25) -- hoe geef je beide variabele mee ?
but no response
I checked this script and i get a message in my log "dit is de inloop" so line 134 is reached!
134 dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'dit is de inloop',10)
Line 115 is never reached (no errors)
115 if item.isCustomEvent then
116 test1 = tostring(item.data)
--test2 = tostring(item.data.itemstate)
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data' .. test1,10)
--dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data.itemstate' .. test2,10)
end
Code: Select all
-- deze nog doen
-- elseif (item.state == 'Smoke' or item.state == 'Paniek') then -- deze gaat dus altijd af ongeacht de secpanel en de alarm_cfg setting (als we thuis zijn, geen siren maar bel, en overige instellingen)
-- alarm_aan(' ALARM AAN: er is een sensor afgegaan, device: ' .. item.state .. '. Het Alarm zal worden AAN aangezet.',true,true,true,true,true,true,true) 0 -- (msg, sirene, radio, photo, notify, all lights, usb light,backup,p8 = syscheck 0=geen, 1=secpanel, 2=cfg chk,3= chk+slapen,9=sec+chk )
--elseif (item.state == 'Deur' or item.state == 'Raam') then -- alarm_cfg moet aan staan en secpanel moet aan staan
-- alarm_aan(' ALARM AAN: er is een sensor afgegaan, device: ' .. item.state .. '. Het Alarm zal worden AAN aangezet.',true,true,true,true,true,true,true) 9
--elseif item.state == 'Beweging auto' then --alarm_cfg moet aan en slapen aan
-- alarm_aan(' ALARM AAN: er is een sensor afgegaan, device: ' .. item.state .. '. Het Alarm zal worden AAN aangezet.',true,true,true,true,true,true,true) 3
--elseif (item.state == 'Beweging tuin' or item.state == 'Beweging huis') then -- alarm_cfg moet aan staan
-- alarm_aan(' ALARM AAN: er is een sensor afgegaan, device: ' .. item.state .. '. Het Alarm zal worden AAN aangezet.',true,true,true,true,true,true,true) 1
return {
on = {
devices = {'doorsensor*','$slaapkamer-AB-knop3'},
customEvents = {myEvent},
},
data = {
itemname = { initial = '' },
itemstate = { initial = '' }
},
execute = function(dz, item, info)
_G.logLevel = dz.helpers.get_logtype(dz) -- dz.log('debug test',dz.LOG_DEBUG) this will only make it to the log when LOG_DEBUG is set AND dz.log('blabla',dz.LOG_FORCE) -- this will allways make it tp the log
_G.logMarker = _G.moduleLabel -- marker wordt scriptnaam, _G.logMarker = info.scriptName is idem
local messageTable = {} -- log alles, 0 = niets, 1 dom, 2 global, 3 alles... evt per regel ook in te regelen
-- HIER START DE EXECUTIE
local securityPanel = dz.devices(1728) -- security panel id
local Notifiers = 'pvkmobiel,redminote7_mvk' -- ontvanger van een pushbericht local Notifiers = 'pvkmobiel'
local Durtimer_smoke = 15 -- om ongewenste extra on signalen te voorkomen pas na x seconden doen ze weer mee
local Durtimer_alarm = 10 -- hoeveel minuten moet t alarm aan blijven staan bij een alarm en niet thuis
local Durtimer_inloop = 30 -- na hoeveel seconden moet de knop worden uitgezet
local Durtimer_pir = 15 -- om ongewenste extra on signalen te voorkomen pas na x seconden doen ze weer mee
local Durtimer_deur = 15 -- om ongewenste extra on signalen te voorkomen pas na x seconden doen ze weer mee
local Durtimer_raam = 15 -- om ongewenste extra on signalen te voorkomen pas na x seconden doen ze weer mee
-------------------------------------------------------------------------------------------------------------------------- START FUNCTIE
function check_alarmsystems(alarmcfg,sensortimer) --0=geen, 1=secpanel, 2=cfg chk,3= cfg en slapen, 9=cfg en panel en item open en time check
local chk = false
if alarmcfg == 1 then
if (securityPanel.state ~= 'Disarmed') then
chk = true
end
elseif alarmcfg == 2 then
if (dz.devices('Alarm_cfg').state ~= 'uit') then
chk = true
end
elseif alarmcfg == 3 then
if (dz.devices('Alarm_cfg').state ~= 'uit') and (dz.devices('Slapen').state == 'On') then
chk = true
end
elseif alarmcfg == 9 then
if (dz.devices('Alarm_cfg').state ~= 'uit' and securityPanel.state ~= 'Disarmed') and item.state == 'Open' and item.lastUpdate.minutesAgo >=sensortimer then
chk = true
end
end
return chk
end
-------------------------------------------------------------------------------------------------------------------------- EINDE FUNCTIE
-------------------------------------------------------------------------------------------------------------------------- START FUNCTIE
local function alarm_aan(msg, p0,p1,p2,p3,p4,p5,p6,p7)
local alarm_chk=true
if msg == nil then msg = 'HUISALARM_CENTRALE' end -- message
if p0 == nil then p0 = true end --p0 = backup
if p1 == nil then p1 = false end --p1 = Sirene
if p2 == nil then p2 = false end --p2 = radio
if p3 == nil then p3 = true end --p3 = Foto
if p4 == nil then p4 = true end --p4 = notify
if p5 == nil then p5 = false end --p5 = all light
if p6 == nil then p6 = true end --p6 = usblight
if p7 == nil then p7 = true end --p7 = backup
if (dz.devices('Alarm_cfg').state ~= 'simulatie') then
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', msg,10)
if p0 then
dz.helpers.state_devices(dz,'backup',{'Lamp dressoir links','Lamp dressoir rechts','Lamp tv links','Lamp tv rechts','lantaarn','Borderverlichting','Achtertuin huis terraslamp','Achtertuin schuur bewegingslamp','Voordeurlamp','Buiten_lantaarn','Voortuin_border_licht','Nachtlamp'},{'usb lamp','denon_volume'})
end
if p3 then
dz.devices('Neemfoto').switchSelector('Tuin').afterSec(5) -- foto maken van de tuin
dz.devices('Neemfoto').switchSelector('Straat').afterSec(10) -- foto van de straat
end
if p1 then
if dz.devices('Thuis').state == 'Off' then
dz.devices('sirene_cfg').switchSelector('sirene') -- sirene zetten en als we thuis zijn de bel, dus bijvoorbeeld caralarm rookalarm, deur, raam etc. en thuis zijn is deurbel
else
dz.devices('sirene_cfg').switchSelector('deurbel')
end
dz.devices('binnenalarm').switchOn() -- zwave siren on for 5 sec test after succesful 10 min
end
if p2 then
dz.devices('denon_volume').switchSelector('hard') -- volume hard werkt niet!
dz.devices('denon_source').switchSelector(10) -- radio aan
end
if p5 and (dz.devices('Zon op').state == 'Off') then
dz.devices('Alles').switchSelector('aan') -- Alle lampen aan
end
if p4 then
dz.notify('HUISALARM: ALARM GAAT AF!',msg,dz.PRIORITY_EMERGENCY,'',Notifiers,dz.NSS_PUSHOVER) -- notificatie sturen
end
else
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'AAN_3:SIMULATIE:' .. msg,10)
end
if p6 then
dz.helpers.alertLidl(dz, "rood") -- usb lamp rood (wordt sos door de retry van alle lampen weer op flame gezet vandaar .after ?
end
dz.helpers.globalMessage2(dz,item,info,messageTable,'chg') -- dump
end
-------------------------------------------------------------------------------------------------------------------------- EINDE FUNCTIE
------------------------------------------------------------- custom event het een device is -------------------------------------------------------------
if item.isCustomEvent then
test1 = tostring(item.data)
--test2 = tostring(item.data.itemstate)
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data' .. test1,10)
--dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data.itemstate' .. test2,10)
end
------------------------------------------------------------- HIER BEGINNEN DE DEVICES -------------------------------------------------------------
if item.name == '$slaapkamer-AB-knop3' then
if item.state == 'On' then
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' ALARM: Paniekalarm geactiveerd: ' .. item.name .. '.',10)
dz.devices('Alarm').switchSelector('Paniek')
end
-- TEST DOOR
elseif dz.helpers.matchesWildCardedString(dz,item.name, 'doorsensor*') then -- alle kerui sensoren kun je hier mee bedienen als ze beginnen met: deursensor* (geen $ ervoor want dan wordt t met de brakke set afgehandeld
alarm_chk = check_alarmsystems(9,1) --Durtimer_deur
if alarm_chk then
if dz.devices('inloop').state == 'Off' then
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'dit is de inloop',10)
dz.devices('inloop').switchOn() -- Als inloop aan wordt gezet zal node-red een geluid afgeven. Bij alarm reset/uit wordt deze op uit gezet. Inloopalarm (geluid) en vertraging kan dus maar 1x)
dz.devices('Alarm').switchSelector('Deur').afterSec(25) -- alarmtype = deur voor informatie
itemname = item.name
itemstate= item.state
dz.emitEvent(myEvent, itemname).afterSec(25) -- hoe geef je beide variabele mee ?
else -- deze gaat direct af er is dus al een alarm geweest
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'direct alarm is al een inloop geweest',10)
dz.devices('Alarm').switchSelector('Deur') -- zet echt alarm in na vertraging
alarm_aan(' ALARM AAN: er is een sensor afgegaan, device: ' .. item.state .. '. Het Alarm zal worden AAN aangezet.',true,true,true,true,true,true,true)
end
else
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' SENSOREN: Beweging gedetecteerd op device: ' .. item.name .. '. Status: Alarmregels niet voldaan, Alarm uit, of er is eerder een alarm in een periode van:' .. Durtimer_deur .. ' minuten afgegeven...',30)
end
-- de overige sensoren
end
dz.helpers.globalMessage2(dz,item,info,messageTable,'chg')
end
}