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