Popp Keypad und Alarm scharf stellen

Hallo Zusammen,

gibt es die gleiche/ähnliche Szene wie für ZIPATO MINI KEYPAD (s. Unten) nur für POPP Keypad?
Die Szene ist optimal für mich (Code eingeben --> offene Fenster prüfen --> Danalock schlissen --> Alarm scharf stellen / und umgekehrt) nur soll für die Verwendung von verschiedenen Kodes funktionieren…

--[[
%% properties
%% events
311 AccessControlEvent
%% globals
--]]

---------------------------------------------------
--------- Verwendung ------------------------------
--[[
Das Script soll alle Sensor nach der Scharfschaltung
des Keypads scharf schalten !!!!! Es kann auch 
Danalock mit Zipato Keypad öffnen
Achtung : habe die Befehle zu Zeit auskommentiert !
Trigger: AccessControlEvent vom Zipato RFID Pad ID
eintragen !!!!
--]]

---------------------------------------------------
--------- Schleifenschutz -------------------------

if (fibaro:countScenes()>1) then
--fibaro:debug('Kill the second scene!');
fibaro:abort();
end

-----------------------------------
---------- Einstellungen ----------
varDebug 			= true 				-- Debug logs true oder false

-- Geräte
--danalockID			= nil		 		-- ID des Danalocks
rfidIDs				= {311}			-- IDs des Zipato RFID Keypads
-- Globale Variablen
gVarPresentState	= 'PresentState' 	-- Name der globalen Variable für den PresentState
gVarAlarmStatus		= 'AlarmStatus'		-- Name der globalen Variable für den AlarmStatus
-- Benachrichtigungen
pushMessage			= true				-- Bei offenen Fenstern und Türen per Push benachrichtigen?
pushMessageIds		= {379, 160}				-- Geräte die per Push benachrichtigt werden sollen
-- Zutrittskontrolle
timebasedKeys		= {{key="6",days="1,2,3",from="8:00",till="14:59"}}	-- Beispiel: {"1","1,2,3","8:00","14:00"}} -- Der Key im Slot 6 ist an den Tagen 1,2 und 3 (Sonntag, Montag und Dienstag) jeweils von 8:00 bis 15:59 Uhr berechtigt, sonst nicht
deniedKeys			= {}
-- Alarm
alarmIds 			= fibaro:getDevicesId({interfaces ={"fibaroAlarm"}} and {properties = {alarmExclude="false"}}) -- Array mit allen Device IDs die ins Alarmsystem inkludiert sind
-- Misc
version				= '1.2'

-- Verzögerung bis scharfstellen
local starttimer = 60 -- Scharfstellung nach gewisser Zeit in Sekunden
					  -- Achtung : Timer ausgeschaltet ! Nur die Eingangstür 	
					  -- hat ein Verzögerung ! Einstellung im Modul
            
local ignoredev   = {227}      -- Sensor in dieser Variable werden nie geprüft.
-- Geräte welche bei Scharfschaltung ausgeschaltet werden sollen ----------
offschalten = true             -- Abschaltung von verschiedenen Geräten Ja / Nein
local offgeraete = {200, 179, 149, 150, 154, 155}  -- Geräte werden bei Scharfschaltung ausgeschaltet 

--------------------------------
---------- Funktionen ----------

---------------------------------------------------
--------- Farbiges Debug --------------------------
function debug(color, message) 
	if (varDebug) then 
		--fibaro:debug(message) 
		fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"));
	end
end

---------------------------------------------------
------------- stime -------------------------------
-- Funktion zum Umrechnen von Uhrzeiten in Sekunden
-- seit 0 Uhr
function stime(s)
	local pattern = "(%d+):(%d+)"
	local hours, minutes, seconds = string.match(s, pattern)
	return (hours*3600)+(minutes*60)
end

---------------------------------------------------
------------- searchTable -------------------------
function searchTableKey(tab, val, key)
    for index, value in ipairs(tab) do
		if tonumber(value[key]) == tonumber(val) then
			dataKey = value[key]
			dataDays = value["days"]
			dataFrom = value["from"]
			dataTill = value["till"]
			return true
        end
    end

    return false
end

local function searchTable(tab, val)
    for index, value in ipairs(tab) do
        if value == val then
            return true
        end
    end

    return false
end

---------------------------------------------------
------------- getUserdata -------------------------
-- Auslesen von Benutzerdaten vom Keypad
-- und Berechtigungscheck

function getUserdata()

-- Trigger auslesen
trigger = fibaro:getSourceTrigger()
operatingUser = trigger.event.data["name"]
operatingMedium = trigger.event.data["slotId"]
operatingStatus = trigger.event.data["status"]
operatingKeyPad = trigger.event.data["id"]

-- Berechtigungscheck
if #timebasedKeys ~= 0 or #deniedKeys ~= 0 then
	currentDate = os.date("*t")
	if searchTable(deniedKeys, trigger.event.data["slotId"]) then
		for i = 1, #pushMessageIds do
			fibaro:call(pushMessageIds[i], "sendPush", "Gesperrter Key von "..trigger.event.data["name"].." (Key "..trigger.event.data["slotId"]..") am KeyPad abgewiesen. Abbruch!");	
		end
		debug("red","Gesperrter Key von "..trigger.event.data["name"].." (Key "..trigger.event.data["slotId"]..") am KeyPad abgewiesen.")
		fibaro:abort()
	elseif searchTableKey(timebasedKeys, trigger.event.data["slotId"], "key")  then
		debug('red','Eingeschränkte Berechtigungen für Key # '..trigger.event.data["slotId"]..' gefunden. Prüfe Berechtigungen')
		
		-- Tage in Array wandeln		
		dayArray = {}		
		for match in dataDays:gmatch("([%d%.%+%-]+),?") do
			dayArray[#dayArray + 1] = tonumber(match)
		end
		-- Zeiten in Sekunden wandeln
		nowSeconds 		= stime(currentDate["hour"]..":"..currentDate["min"])
		fromSeconds 	= stime(dataFrom)
		tillSeconds 	= stime(dataTill)
		
		-- Zeitliche Berechtigung prüfen
		if searchTable(dayArray, currentDate["wday"]) then
			--Uhrzeit im Zeitfenster?
			if(nowSeconds >= fromSeconds and nowSeconds <= tillSeconds) then
				debug("green","Der Benutzer hat für den jetzigen Zeitpunkt Berechtigungen")
				for i = 1, #pushMessageIds do
					fibaro:call(pushMessageIds[i], "sendPush", "Aktion "..trigger.event.data["status"].." von "..trigger.event.data["name"].." (Key "..trigger.event.data["slotId"]..") am KeyPad autorisiert.");
					-- ERFOLGREICH WEITER GEHTS
				end
			else
				debug("red","Der Benutzer ist zwar berechtigt, aber nicht jetzt.")
				for i = 1, #pushMessageIds do
					fibaro:call(pushMessageIds[i], "sendPush", "Aktion "..trigger.event.data["status"].." von "..trigger.event.data["name"].." (Key "..trigger.event.data["slotId"]..") am KeyPad abgewiesen. Abbruch!");
					fibaro:abort()
				end
			end
		end
	end
	
end
  
debug('green',"Keypad Aktion von: "..operatingUser)  
debug('green',"Keypad Aktion mit: "..operatingMedium)
debug('green',"Aktion: "..operatingStatus)

end

---------------------------------------------------
------------- disarmFunction ----------------------
-- Öffnen des Danalocks nach erfolgreicher Autorisierung
-- am KeyPad
-- bzw. Sensoren werden entschärft
function disarmFunction(username, medium)
	debug("green","Der Benutzer "..username.." hat sich am Keypad erfolgreich mit Key Nr. "..medium.." autorisiert.")
	--debug("green","Danalock wird geöffnet.")
	--fibaro:call(danalockID, "unsecure")
	debug("green","-------------------------------")
	debug("green","Alarm aktive Sensoren entschärfen")
	for j = 1,#alarmIds do 
		fibaro:call(alarmIds[j],"setArmed", "0")
	end
	debug("green","Setze globale Variablen "..gVarPresentState.." und "..gVarAlarmStatus)
	fibaro:setGlobal(gVarPresentState,"Home")
	fibaro:setGlobal(gVarAlarmStatus,"unarmed")

end

---------------------------------------------------
------------- armFunction -------------------------
-- Schließen des Danalocks nach erfolgreicher Autorisierung
-- am KeyPad
-- bzw. Alarmsensoren werden scharf geschaltet

function armFunction(username, medium)
	debug("red","Der Benutzer "..username.." hat sich am Keypad erfolgreich mit Key Nr. "..medium.." autorisiert.")
	--debug("red","Danalock wird geschlossen.")
	--fibaro:call(danalockID, "secure")
	debug("red","-------------------------------")
	debug("red","Alarm aktive Sensoren scharf schalten")
	for j = 1,#alarmIds do 
		fibaro:call(alarmIds[j],"setArmed", "1")
	end
	debug("red","Setze globale Variablen "..gVarPresentState.." und "..gVarAlarmStatus)
	fibaro:setGlobal(gVarPresentState,"Away")
	fibaro:setGlobal(gVarAlarmStatus,"armed")
	debug("red","-------------------------------")
	debug("red","Prüfen auf offene Türen und Fenster")

end

------------- Geräte welche bei Scharfschaltung ausgeschaltet werden ----------
function offschaltung()
 if (offschalten) then 
 for f=1, #offgeraete do  
   		fibaro:call(offgeraete[f],"turnOff")
      debug("yellow", "Es wurden "..offgeraete[f].." Geräte ausgeschaltet!")
  end
else
  debug(" Ausschaltung von Geräten ist nicht aktiviert ! ")
  end
end

  
  
 ------------- Fenster/Türen die nicht gescheckt werden sollen ---------
function checkWinAndDoors() 
function ignorecheck(ignoredev, devid)
  for i=1,#ignoredev do
        if ignoredev[i] == devid then 
           return true
        end
     end --for
  return false
end  

---------------------------------------------------
------------- Offene Fenster/Türen prüfen ---------
function checkWinAndDoors()
local windowIds = fibaro:getDevicesId({baseType = "com.fibaro.doorWindowSensor"})
openwindows = {}
for j = 1,#windowIds do 
    	local excludeAlarm = tonumber(fibaro:getValue(windowIds[j], "alarmExclude"))
		if (excludeAlarm ~= 1) then
			if tonumber(fibaro:getValue(windowIds[j], "value")) == 1 then
        		windowName=fibaro:getName(windowIds[j])
            roomName=fibaro:getRoomNameByDeviceID(windowIds[j])
      if ignorecheck(ignoredev,windowIds[j]) ~= true then
				windowId=windowIds[j]
				table.insert(openwindows,windowName)
			end
		end
end
end
end
---------------------------------------------------
------------- Window PopUp senden -----------------
function sendPopUp(openwindows)
local message = ""
for j = 1,#openwindows do
  fibaro:debug(openwindows[j].."<br>")
  message = message .. "\n" .. openwindows[j]
  --fibaro:debug(message)
end
	
	HomeCenter.PopupService.publish({
	 title = 'Fenster geöffnet',
	 subtitle = os.date("%I:%M:%S %p | %B %d, %Y"),
	 contentTitle = 'Fenster geöffnet',
	 contentBody = message,
	 img = imgUrl,
	 type = 'Critical',
	})

---------------------------------------------------
------------- Window Push senden ------------------
	if pushMessage and #openwindows ~= 0 then
		for j = 1, #pushMessageIds do
			fibaro:call(pushMessageIds[j], "sendPush", "ACHTUNG: " .. windowName .. " im Raum: " .. roomName .. " Fenster geöffnet !!.")
      
		end
	end
end

------------------ USER FUNKTIONEN ------------------

function userDisarmFunction()
  fibaro:call(143, "turnOff")
  fibaro:call(345, "turnOff")
  fibaro:call(86, "turnOff")
  debug("green","Haus entschärft")
	-- Hier eigene Aktionen eingtragen die "Home" ausgeführt werden sollen
	
end

function userArmFunction()
  fibaro:call(143, "turnOn")
  fibaro:call(345, "turnOn")
  debug("green","Haus Scharf")
	-- Hier eigene Aktionen eingtragen die "Away" ausgeführt werden sollen
	
end

----------Script----------

debug('green','-------------------------------------------------------')			
debug('green','Scharfschaltung '..version..'. Sensoren im Haus !!!!')
debug('green','-------------------------------------------------------')			

--Benutzerdaten auslesen
getUserdata()

--Aktionsabfrage
if operatingStatus == "Unlock" then 
	disarmFunction(operatingUser, operatingMedium)
	userDisarmFunction()
elseif operatingStatus == "Lock" then
	userArmFunction()
  checkWinAndDoors()
  sendPopUp(openwindows)

  for k=1, #pushMessageIds do
           if pushMessageIds[k] ~= nil then
              fibaro:call(pushMessageIds[k], 'sendPush', "Haus wird in "..starttimer.."sec Scharf geschaltet!")
           end
           end
       timer = os.time();
	   while os.time() - timer < starttimer do
  	 fibaro:sleep(1000);   
   end
   for k=1, #pushMessageIds do
           if pushMessageIds[k] ~= nil then
              fibaro:call(pushMessageIds[k], 'sendPush', "Das Haus ist nun scharf geschaltet!")
           end
           end
	armFunction(operatingUser, operatingMedium)
  offschaltung()
end

Danke für die HILFE :wink:

Hallo Gregor,

die Szene macht hier ja schon länger die Runde, wo kommt die denn her? Vielleicht kann der Ersteller helfen?!

Grüße
René