Zipato Mini Keypad und Danalock V3 mit HC2

Hallo Zusammen!

Seit gestern habe ich einen Danalock V3 und ZIPATO Mini Key im Einsatz… YUPPI! :slight_smile:
Einzeln funktionieren die Geräte einwandfrei! Ich möchte aber, dass die Geräte zusamen arbeiten…
Ziel ist:

  1. Wenn ich über Zipato Mini Key die “Home”-Taste (mit Pin oder RFID) aktivire soll der Danalock sich aufschlissen (auch wenn der Schloss auf ist! Soll dann nur die Türfalle sich öffnen!)
  2. Wenn ich über Zipato Mini Key die “Away”-Taste (mit Pin oder RFID) aktivire soll sich der Danalock schlissen!
    Ich denke dass das ein Standard ist wenn man die beiden Geräte mit HC2 benuzen möchte. Ich finde aber niergendwo eine LUA Scene die das umsetzten würde.
    Kann mir jemand damit helfen?
    DAAANKE! :slight_smile:

Hallo

So, geht leider gerade nicht, dir mein Script zu schicken ! Würde es morgen nochmal versuchen hier zu posten !

Grüße Guido

Prima! Danke!

Irgendwas mache ich falsch ! Wenn ich hier den Code abbilden möchte sagt mir des System :

FEHLER: Deine Antwort kann momentan nicht erstellt werden.

Der Code ist aber nicht zu groß !!! Was mache ich denn hier falsch oder stimmt was nicht mit dem Forum !!!

Ist ja nicht so das ich das erste mal was hier poste !!!

Grüße

Hallo Gregor,

hier ist mal mein Script für das Zipato Mini Keypad. Musst mal noch Danalock aktivieren. Ich habe die Zeile aus dokumentiert da ich keines habe. Es funktioniert sehr gut und du kannst sogar die Benutzer anzeigen lassen. Ich hoffe du kannst damit was anfangen. Auch eine Zeitschaltung ist mit integriert! Ich muss aber auch hier sagen das das Script nicht alles von mir ist ! Ich habe hier nur ein paar Sachen verändert.

Grüße Guido

--[[
%% 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

Hallo Guido!
Vielen Dank! Die Scene sieht toll aus!
Kann man noch eine Pusch Nachricht (wie im Debug) bekommen wer grade mit dem Keypad die Tür aufgeschlossen/geschlossen hat?
Das wäre genial, damit ich wissen kann ob die Kinder schon nach Hause gekommen sind :slight_smile:
…und eventuell noch eine Pusch Nachricht das jemand z.Bp. drei mal den falschen Code angegeen hat :open_mouth:
Besten Dank!
Gruß,
Gregor

Morgen,

es sollte eine Nachricht per Push auf dein Handy kommen. Ich selber nutze die Zugangsberechtigung nicht. Teste mal ob alle bei dir funktioniert !

Grüße

Hallo,

ich habe leider noch ein Problem…
Allgemein funktioniert alles PRIMA! :slight_smile:
Manchmal funktioniert leider den Keypay nicht :frowning:
Ich muss drei vier mal den Code angeben um die Tür aufgeschlossen zu bekommen…
Manchmall aber kriege ich die Tür sofort auf :open_mouth:
Im Debug steht dann “Kill the second scene” ???!
Kann mir jemand sagen woran das liegt?
DAAAANKE für die Hilfe!

Habs gerade in dem anderen Post geschrieben. Mach mal eine Synchronisation des RFID Keypad !

Grüße

Was bedeuted die erste Teil der Scene?!:

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

Gruß

Das bedeute das bei mehrere Instanzen die Scene zurückgesetzt wird ! Damit wird verhindert das die Scene nicht mehrfach ausgelöst wird !

gruß

Hi, ich hab jetzt seit Monaten endlich geschafft, auch mein Keypad und mein Danalock zusammen in Betrieb zu nehmen. Ich hab die angepasste Version von Guido genutzt, bei mir aber einige Funktionen wie das Alarm-Paneloder auch den Abschnitt User-Funktionen erst einmal rausgenommen. Allerdings bekomme ich im Debug immer einen Fehler “[error] API : Bad request”. Passiert allerdings nur bei Scharf schalten/Away Modus schalten. Bei unscharf schalten gibt es den Fehler nicht. Hab mal einen Screenshot mit angehängt. Leider finde ich den Fehler nach 2 Tagen suchen un hin- und herprobieren nicht!!! Kann mir da einer weiterhelfen?
Mein Script:

--[[
%% properties
%% events
250 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			= 298		 		-- ID des Danalocks
rfidIDs				= {250}			-- 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		= {231}				-- 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 = 2 -- Scharfstellung nach gewisser Zeit in Sekunden
					  -- Achtung : Timer ausgeschaltet ! Nur die Eingangstür 	
					  -- hat ein Verzögerung ! Einstellung im Modul
            
local ignoredev   = {36}      -- 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 = {184, 188, 100, 41, 125, 134, 144, 115}  -- Geräte werden bei Scharfschaltung ausgeschaltet 
--local offgeraete = fibaro:getDevicesId({baseType = "com.fibaro.actor"})

--------------------------------
---------- 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
  --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(180, "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(180, "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

Fibaro-Debug.png

Fibaro-Debug-1.png

Funktioniert die Szene bei euch noch?

Bei mir bleibt das Script immer an folgernder Stelle hängen:
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”]

[DEBUG] 01:02:19: -------------------------------------------------------
[DEBUG] 01:02:19: Scharfschaltung 1.2. Sensoren im Haus !!!
[DEBUG] 01:02:19: -------------------------------------------------------
[DEBUG] 01:02:19: 2019-03-15 01:02:19.432025 [ fatal] Unknown exception: /opt/fibaro/scenes/124.lua:115: attempt to index field ‘event’ (a nil value)

Habs jetzt auf zwei verschiedenen HC2 probiert wo jeweils ein Zipato KeyPad inkludiert wurde.
Bei beiden kommt die selbe Fehlermeldung!

Danke für euer Feedback!

Grüße

Andi