Alarm - Fehlalarme minimieren

Also:

Die Arming Szene, die prüft ob noch etwas offen ist und ggf. via Sonos eine Sprachausgabe absendet:

--[[
%% properties
%% globals
rfid_alarm
alarm
Sirene
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( fibaro:getGlobalValue("rfid_alarm") == "On" ) 
)
then    
   fibaro:debug('Überprüfe Sensoren')     
        if (tonumber(fibaro:getValue(154, 'value')) == 1) then
                  local sensorname = fibaro:getName(154)
                  local sensorroom = fibaro:getRoomNameByDeviceID(154)
                  fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
                  fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/schlafzimmerfenstergeoeffnet.mp3");
                  fibaro:call(134, "setSlider", "6", "40");
	              fibaro:call(134, "pressButton", "2");
                  fibaro:call(135, "setSlider", "6", "40");
	              fibaro:call(135, "pressButton", "2");
                  fibaro:call(138, "setSlider", "6", "40");
	              fibaro:call(138, "pressButton", "2");
        end
        if (tonumber(fibaro:getValue(54, 'value')) == 1) then
                  local sensorname = fibaro:getName(54)
                  local sensorroom = fibaro:getRoomNameByDeviceID(54)
                  fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
                  fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/terrassentuergeoeffnet.mp3");
                  fibaro:call(134, "setSlider", "6", "40");
	              fibaro:call(134, "pressButton", "2");
                  fibaro:call(135, "setSlider", "6", "40");
	              fibaro:call(135, "pressButton", "2");
                  fibaro:call(138, "setSlider", "6", "40");
	              fibaro:call(138, "pressButton", "2");
        end  
if (tonumber(fibaro:getValue(54, 'value')) == 0 and 
    tonumber(fibaro:getValue(154, 'value')) == 0) then
    fibaro:debug('Alle Sensoren sicher - Alarm aktiviert')
    fibaro:setGlobal("SONOS_MUSIC", "192.168.178.36/Fibaro/arming.mp3");
                  fibaro:call(134, "setSlider", "6", "40");
	              fibaro:call(134, "pressButton", "2");
                  fibaro:call(135, "setSlider", "6", "40");
	              fibaro:call(135, "pressButton", "2");
                  fibaro:call(138, "setSlider", "6", "40");
	              fibaro:call(138, "pressButton", "2");
    ----Variable ALARM AN setzen---- 
   fibaro:setGlobal('alarm', 'an')
else 
if (tonumber(fibaro:getValue(54, 'value')) == 1 or 
    tonumber(fibaro:getValue(154, 'value')) == 1) then 
    fibaro:setGlobal('alarm', 'aus')
    fibaro:setGlobal('rfid_alarm', 'Off')
    fibaro:setGlobal('Sirene', 'aus')
    fibaro:debug('Sensoren nicht sicher - deaktiviere Alarm')
  end
 end
end

Danach greift die Alarm Szene, die wartete ob zwei Sensoren triggern und dann die Variable für die “Party”-Szene setzt/ den Alarm startet:


--[[
%% properties
81 value 
65 value 
54 value 
122 value 
152 value 
154 value 
106 value 
--]]
 
if (fibaro:getGlobalValue("alarm") == 'an' ) then -- nur ausführen wenn Alarmanlage scharf ist
 local trigger = fibaro:getSourceTrigger()
 local ID = tonumber(trigger['deviceID'])
 local lastAlarm =  tonumber(fibaro:getGlobalValue("Last_Alarm"))
 fibaro:debug("Device: " ..ID)
 
   if (tonumber(fibaro:getValue(ID, "value")) > 0 )then
    	fibaro:debug("open")    
  	if os.time() - lastAlarm >60 then
    fibaro:setGlobal("Last_Alarm",os.time())
		fibaro:debug((os.time() - lastAlarm) .."s - update Zeit")
		
	else
		fibaro:setGlobal("Last_Alarm",os.time())
		fibaro:debug((os.time() - lastAlarm) .."s - Alarm ausgelöst!!!!!")
	    fibaro:sleep(120000)
        fibaro:setGlobal('Sirene', 'an')
	end
  end
end

Da muss jetzt irgendwo die Auslöseverzögerung rein, damit ich nach öffnen der Haustür und betreten des Flurs keinen Alarm auslöse (in diesem Bereich befinden sich zwei Sensoren, womit die Bedingung 2 Sensoren innerhalb der Zeit X erfüllt ist).

Danke für deine Hilfe

Du solltest noch eine IF abfrage einführen.

fibaro:setGlobal('Sirene', 'an')
mit:

if (fibaro:getGlobalValue("alarm") == 'an' ) then
    fibaro:setGlobal('Sirene', 'an')
end

ersetzen.
Danach wird die Sirene nur aktiviert wenn alarm noch scharfgeschalten ist.

Nehme an du hast ein weiteres Skript welches den Alarm deaktiviert.
Ansonsten kannst aber auch die Sirenen mit weiteren Sleep deaktivieren.

Perfekt! Vielen Dank! Funktioniert jetzt alles wie gewollt und ich hatte bisher noch keinen Fehlalarm :slight_smile: