Use of emitEvent  [Solved]

Easy to use, 100% Lua-based event scripting framework.

Moderator: leecollings

Post Reply
pvklink
Posts: 822
Joined: Wednesday 12 November 2014 15:01
Target OS: Raspberry Pi / ODroid
Domoticz version: latest b
Contact:

Use of emitEvent

Post by pvklink »

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

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 
}
Raspberry (raspbian on rpi 3) , Domoticz Beta, dzVents , RFXtrx433e, P1, Hue, Yeelight, Zwave+, X10, ESP(easy), MQTT,Weather Underground, System Alive Checker, Domoticz Remote Server to RPI with Google Assistant,
Jablotron connection, Ikea
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Use of emitEvent

Post by waaren »

pvklink wrote: Sunday 14 February 2021 20:32 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.
This example shows how to send variables, strings, etc using emitEvent.

Code: Select all

local scriptVar = 'testCustomEvents'

return 
{
    on = 
    {
        devices = 
        {
            'customEventTrigger' -- just an example to trigger the event
        },
        customEvents = 
        {
            scriptVar,
        },
    },
    
    logging = 
    {
        level = domoticz.LOG_DEBUG,
        marker = scriptVar,
    },
    
    execute = function(dz, item)
        
        if item.isDevice then
            
            local myData = {} -- initialize table
            myData.triggerName = item.name 
            myData['Last updated'] = item.lastUpdate.raw
            myData['item idx'] = item.idx
            myData['message'] = {} -- initialize subtable
            table.insert(myData.message,"this line was send with emitEvent")   -- put everything you want to send to the future in the table 
            table.insert(myData.message,"Put everything in a table and pass this")  

            dz.emitEvent(scriptVar,myData).afterSec(5)
        elseif item.isCustomEvent and item.json then
            
            local passedData = item.json
            
            dz.utils.dumpTable(passedData)
            
        end
    end
}

Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
pvklink
Posts: 822
Joined: Wednesday 12 November 2014 15:01
Target OS: Raspberry Pi / ODroid
Domoticz version: latest b
Contact:

Re: Use of emitEvent

Post by pvklink »

Yes Thanks, i am almost there, 99% script is working, with two tranches!
I have now a security/alarm system with;
10 sensors.
2 pirs
3 motion detectors
with simulation

Problems was
1. quotes arond the customEvents 'eventname'
2. when the script runs for the second time item.name etc. had to be changed to dz.devices(tostring(item.data))

LAST THING
--> Last small thing is how to give more then one variable to the customevents, and ofcourse how to read it!

for example item.state
Below is the working Script

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 == 8 then       -- bij 2e check is item.state niet meer van belang en lastupdate ook niet !
            if (dz.devices('Alarm_cfg').state ~= 'uit' and securityPanel.state ~= 'Disarmed') 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
if item.isDevice then
    alarmitem = dz.devices(item.name)
end
------------------------------------------------------------- custom event het een device is -------------------------------------------------------------
    if item.isCustomEvent then
        alarmitem = dz.devices(tostring(item.data))
        --test2 = tostring(item.data.itemstate)
        dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data' .. alarmitem.name,10)
        --dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data.itemstate' .. test2,10)
    end    

------------------------------------------------------------- HIER BEGINNEN DE DEVICES -------------------------------------------------------------
    if alarmitem.name == '$slaapkamer-AB-knop3' then
            if alarmitem.state == 'On' then
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' ALARM: Paniekalarm geactiveerd: ' .. alarmitem.name .. '.',10)
                dz.devices('Alarm').switchSelector('Paniek')
            end
    -- TEST DOOR

    elseif dz.helpers.matchesWildCardedString(dz,alarmitem.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
        if item.isCustomEvent then
            dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap event2' .. alarmitem.name,10)
          alarm_chk = check_alarmsystems(8,1) --Durtimer_deur
            dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap event3' .. alarmitem.name,10)
        elseif item.isDevice then
          alarm_chk = check_alarmsystems(9,1) --Durtimer_deur   bij 2e tranche is er geen state en datum nodig, dus een andere check
        end
        dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap event4, alarm_chk=' .. tostring(alarmchk),10)

        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 = alarmitem.name
                itemstate= alarmitem.state
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'dit is de inloop2',10)
                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: ' .. alarmitem.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: ' .. alarmitem.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 
}
Raspberry (raspbian on rpi 3) , Domoticz Beta, dzVents , RFXtrx433e, P1, Hue, Yeelight, Zwave+, X10, ESP(easy), MQTT,Weather Underground, System Alive Checker, Domoticz Remote Server to RPI with Google Assistant,
Jablotron connection, Ikea
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Use of emitEvent

Post by waaren »

pvklink wrote: Sunday 14 February 2021 22:36 --> Last small thing is how to give more then one variable to the customevents, and ofcourse how to read it!
I just showed you how to combine several variables into a table ang pass that table to emitEvent() and how to read it.
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
pvklink
Posts: 822
Joined: Wednesday 12 November 2014 15:01
Target OS: Raspberry Pi / ODroid
Domoticz version: latest b
Contact:

Re: Use of emitEvent

Post by pvklink »

yep, stuff for tomorrow, after work , been buzy 21 hours this weekend getting this script to work :-)
That customEvents is great and also the security events are now in place...
Thanks again, lot to read!
Raspberry (raspbian on rpi 3) , Domoticz Beta, dzVents , RFXtrx433e, P1, Hue, Yeelight, Zwave+, X10, ESP(easy), MQTT,Weather Underground, System Alive Checker, Domoticz Remote Server to RPI with Google Assistant,
Jablotron connection, Ikea
pvklink
Posts: 822
Joined: Wednesday 12 November 2014 15:01
Target OS: Raspberry Pi / ODroid
Domoticz version: latest b
Contact:

Re: Use of emitEvent

Post by pvklink »

waaren wrote: Sunday 14 February 2021 22:53
pvklink wrote: Sunday 14 February 2021 22:36 --> Last small thing is how to give more then one variable to the customevents, and ofcourse how to read it!
I just showed you how to combine several variables into a table ang pass that table to emitEvent() and how to read it.
could not wait till this evening, so studied your example ...
it looks easy (as an example, not when i have to figure it out myself :-)
I am gonna change my setup this evening!

Thanks!
Raspberry (raspbian on rpi 3) , Domoticz Beta, dzVents , RFXtrx433e, P1, Hue, Yeelight, Zwave+, X10, ESP(easy), MQTT,Weather Underground, System Alive Checker, Domoticz Remote Server to RPI with Google Assistant,
Jablotron connection, Ikea
pvklink
Posts: 822
Joined: Wednesday 12 November 2014 15:01
Target OS: Raspberry Pi / ODroid
Domoticz version: latest b
Contact:

Re: Use of emitEvent

Post by pvklink »

Hi, I upgraded my script to use the example as posted.
My script now only executes one time, no second run with emitevent. :roll:

the error
2021-02-15 15:12:27.788 Error: dzVents: Error: (3.1.4) An error occurred when calling event handler ATEST_DZ_alarm_v11
2021-02-15 15:12:27.788 Error: dzVents: Error: (3.1.4) ...scripts/dzVents/generated_scripts/ATEST_DZ_alarm_v11.lua:145: attempt to index a nil value (global 'alarmitem')
202

i made some checkpoints, only pvk1+2 are reached
LOGPVK1 and LOGPVK2 are reached
So: no second run!

Script

Code: Select all

local scriptVar = 'testCustomEvents'
return {
	on  =   {   
	        devices = {'doorsensor*','$slaapkamer-AB-knop3'},
            customEvents = {scriptVar},
            },

    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 == 8 then       -- bij 2e check is item.state niet meer van belang en lastupdate ook niet !
            if (dz.devices('Alarm_cfg').state ~= 'uit' and securityPanel.state ~= 'Disarmed') 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: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
  if item.isCustomEvent then -- this only for testpurpose if this point is shown then there is no json! THIS POINT ISNT REACHED!
        dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'LOGPVK X Custom event en json',10)
  end

------------------------------------------------------------- check custom event of device is --------------------------------------------
    if item.isCustomEvent and item.json then
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'LOGPVK 3 Custom event en json',10)
        local passedData = item.json                
        dz.utils.dumpTable(passedData)      -- wat doet dit 
        -- HOE LEES JE NU DATA uit passeddata ?
        -- alarmitem = dz.devices(tostring(item.data))
        alarmitem = dz.devices(tostring(passedData.alarmitem))  -- deze lijkt nog niet te werken hoe lastupdated naar binnen halen zitten spaties in....

dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'stap custom event item.data' .. alarmitem.name,10)

    elseif item.isDevice then
dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'LOGPVK 1 Device',10)
        -- maak de dataset tijdens het devicedeel voor uitgestelde acties die events zijn
        alarmitem = dz.devices(item.name)
        local secData = {} -- initialize table
        secData.alarmitem = alarmitem 
        secData['Last updated'] = item.lastUpdate.raw
        secData['idx'] = item.idx
        secData['alarmstatus'] = item.state
        secData['message'] = {} -- initialize subtable
        table.insert(secData.message,"test")   -- put everything you want to send to the future in the table 

        ------------------------------------------------------------- AB's ---------------------------------------------------------------
        if alarmitem.name == '$slaapkamer-AB-knop3' then
            if alarmitem.state == 'On' then
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' ALARM: Paniekalarm geactiveerd: ' .. alarmitem.name .. '.',10)
                dz.devices('Alarm').switchSelector('Paniek')
            end
        end
    end
    
------XXXXXX-------------------------------------------------------SENSOREN voor zowel devices als custom events-------------------------------------------------------------
    --check_alarm onderdeel laten uitmaken van zet_alarm aan
    -- zet alarm aan extra parameter CHK met die waarde c1,c2,c3   (check device, check uitloop, timer)
    -- daarna alarm_chk als deel 2
    -- daarna uitvoeringsdeel direct of indirect

    if dz.helpers.matchesWildCardedString(dz,alarmitem.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

        if item.isCustomEvent then
        dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'LOGPVK 4:DOORSENSOR',10)
            alarm_chk = check_alarmsystems(8,1) --Durtimer_deur
        elseif item.isDevice then
        dz.helpers.globalMessage2(dz,item,info,messageTable,'add', 'LOGPVK 2:DOORSENSOR',10)
          alarm_chk = check_alarmsystems(9,1) --Durtimer_deur   bij 2e tranche is er geen state en datum nodig, dus een andere check
        end

        if alarm_chk then
            if dz.devices('inloop').state == 'Off' then
                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.emitEvent(scriptVar, secData).afterSec(25)  -- hoe geef je beide variabele mee ?
                
            else    -- deze gaat direct af er is dus al een alarm geweest
                dz.devices('Alarm').switchSelector('Deur')     -- zet echt alarm in na vertraging 
                alarm_aan(' ALARM AAN: er is een sensor afgegaan, device: ' .. alarmitem.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: ' .. alarmitem.name .. '. Status: Alarmregels niet voldaan, Alarm uit, of er is eerder een alarm in een periode van:' .. Durtimer_deur .. ' minuten afgegeven...',30)
        end

    end
    dz.helpers.globalMessage2(dz,item,info,messageTable,'chg')

end 
}
Raspberry (raspbian on rpi 3) , Domoticz Beta, dzVents , RFXtrx433e, P1, Hue, Yeelight, Zwave+, X10, ESP(easy), MQTT,Weather Underground, System Alive Checker, Domoticz Remote Server to RPI with Google Assistant,
Jablotron connection, Ikea
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Use of emitEvent  [Solved]

Post by waaren »

pvklink wrote: Monday 15 February 2021 15:19 Hi, I upgraded my script to use the example as posted.
My script now only executes one time, no second run with emitevent. :roll:
You declare secData as local in the if item.isDevice block but try to use it outside that block. It does not exist outside the block and therefore it is nil.
the emitEvent is in the part of the script that is executed when the script is triggered by a device or by a customEvent.

Probably easier to find the problem if you first limit the script to it 's minimum without the fancy global message and helper stuff and once it's working re apply these whistles and bells.
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
pvklink
Posts: 822
Joined: Wednesday 12 November 2014 15:01
Target OS: Raspberry Pi / ODroid
Domoticz version: latest b
Contact:

Re: Use of emitEvent

Post by pvklink »

For those who want to use a alarmscript with in out delay, the next script works for me, with thanks to waaren.

Below in the script you can add simular sensor groups like smoke. doorsensors etc.
For each sensortype you only need two lines of code, the rest can be changed by variables...
I need to add some sensortypes myself and add some messages for debugmode and change delaytimers for variables...

Small part of my dashboard
Naamloos.jpg
Naamloos.jpg (102.37 KiB) Viewed 858 times
Alarm: off, on, simulate, auto
Setting alarm: bel, siren
Check delay
Check alarmtypes
Setting motion service
(on next page: 40 sensors, two cams etc.)

Code: Select all

-- 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 == '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
--
-- TO DO
-- timers parameteriseren
-- vertraging parameteriseren
-- deur open selector als parameter meegeven
-- overige alarmen  
-- vertraging werkt niet
--
local scriptVar = 'SecureCustomEvents'

return {
	on  =   {   
	        devices = {'doorsensor*','$slaapkamer-AB-knop3'},
            customEvents = {scriptVar},
            },

    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 == 8 then       -- bij 2e check is item.state niet meer van belang en lastupdate ook niet !
            if (dz.devices('Alarm_cfg').state ~= 'uit' and securityPanel.state ~= 'Disarmed') 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 / START FUNCTIE-------------------------------------------------------------------   
    local function alarm_aan(p0,p1,p2,p3,p4,p5,p6,p7,msg)        
        local alarm_chk=true
        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 msg == nil then  msg = 'HUISALARM_CENTRALE' end  --message

        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 (dz.devices('Alarm_cfg').state ~= 'simulatie')   then 
            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
            dz.helpers.globalMessage2(dz,item,info,messageTable,'add', msg,10)
        else
            dz.helpers.globalMessage2(dz,item,info,messageTable,'add', '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 / START FUNCTIE-------------------------------------------------------------------   
    
    local function alarm_inloop(c1,cp1,cp2,cp3,p0,p1,p2,p3,p4,p5,p6,p7,msg)        
        if c1  == nil then  c1  =  true end                 --c1 =  check alarmsystem / rules
        if cp1 == nil then  cp1 =  0 end                    --cp1 =  rule device system check 1,2,3,8,9
        if cp2 == nil then  cp2 =  0 end                    --cp2 =  rule customevent system check 1,2,3,8,9  ALS JE GEEN inloopalarm wil maar direct , geef dan bij cp3=true in.
        if cp3 == nil then  cp3 =  true end                 --cp3 =  inloopalarm = true
        -- zie voor de rest de parameters van alarm_aan

        if c1 then  -- Hier start het system check deel
            if item.isDevice then
                alarm_chk = check_alarmsystems(cp1,1) --Durtimer_deur   bij 2e tranche is er geen state en datum nodig, dus een andere check
            elseif item.isCustomEvent then
                alarm_chk = check_alarmsystems(cp2,1) --Durtimer_deur
            end
        end         -- Hier eindigt het system check deel en 
        
        if alarm_chk then   
            if cp3 then -- hier start de keuze of het een inloop alarm is met vertraging of een directe alarm (of het alarm na een vertraging_
                if  dz.devices('inloop').state == 'Off' then
                    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.emitEvent(scriptVar, secData).afterSec(25)               
                else
                    dz.devices('Alarm').switchSelector('Deur')     
                    alarm_aan(true,true,true,true,true,true,true,' ALARM AAN: er is een sensor afgegaan, device: ' .. alarmitem.state ..  '. Het Alarm is aangezet na een inloopperiode.')
                end                                                     
            else    -- Het echte alarm na inloop of direct als inloop al aan staat.
                dz.devices('Alarm').switchSelector('Deur')     
                alarm_aan(true,true,true,true,true,true,true,' ALARM AAN: er is een sensor afgegaan, device: ' .. alarmitem.state ..  '. Het Alarm is aangezet.')
            end
            
        else
            dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' SENSOREN: Beweging gedetecteerd op device: ' .. alarmitem.name .. '. Status: Alarmregels niet voldaan, Alarm uit, of er is eerder een alarm in een periode van:' .. Durtimer_deur .. ' minuten afgegeven...',30)
        end
                dz.helpers.globalMessage2(dz,item,info,messageTable,'chg') -- dump
    end    
    
    ------------------------------------------------------------------EINDE FUNCTIE en START UITVOERINGSDEEL SCRIPT--------
    
    if item.isCustomEvent and item.json then
        passedData = item.json                
        alarmitem = dz.devices(tostring(passedData.alarmitem))  -- deze lijkt nog niet te werken hoe lastupdated naar binnen halen zitten spaties in....
    elseif item.isDevice then
        alarmitem = dz.devices(item.name)
        secData = {} 
        secData['alarmitem'] = alarmitem.name 
        secData['Last updated'] = alarmitem.lastUpdate.raw
        secData['idx'] = alarmitem.idx
        secData['alarmstatus'] = alarmitem.state
        dz.utils.dumpTable(secData) 
        ---------------------------------------------AB's-------------------------------------------------------------
        if alarmitem.name == '$slaapkamer-AB-knop3' then
            if alarmitem.state == 'On' then
                dz.helpers.globalMessage2(dz,item,info,messageTable,'add', ' ALARM: Paniekalarm geactiveerd: ' .. alarmitem.name .. '.',10)
                dz.devices('Alarm').switchSelector('Paniek')
            end
        end
    end
    --------------------------------------------------------------- Onderstaand is uitvoeringsdeel voor devices en events -------------
    if dz.helpers.matchesWildCardedString(dz,alarmitem.name, 'doorsensor*') or dz.helpers.matchesWildCardedString(dz,item.name, 'raamsensor*') then -- alle kerui sensoren kun je hier mee bedienen als ze beginnen met: deursensor* en raamsensor* (geen $ ervoor want dan wordt t met de brakke set afgehandeld
        alarm_inloop(true,9,8,true,true,true,true,true,true,true,true,' ALARM AAN: er is een sensor afgegaan, device: ' .. alarmitem.state ..  '. Het Alarm zal worden AAN aangezet.')  -- ook als je geen inloop wil, deze functie, zet dan p4=false
    else
        -- overige alarmen
    end
    dz.helpers.globalMessage2(dz,item,info,messageTable,'chg') -- dump
end 
}
Raspberry (raspbian on rpi 3) , Domoticz Beta, dzVents , RFXtrx433e, P1, Hue, Yeelight, Zwave+, X10, ESP(easy), MQTT,Weather Underground, System Alive Checker, Domoticz Remote Server to RPI with Google Assistant,
Jablotron connection, Ikea
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest