Hi,
ich habe das Popp Keypad und will damit einmal mein Danalock öffnen und gleichzeitig die Alarmanlage aktivieren / deaktivieren.
Ich habe folgende Scene von www.intelligentes-haus.de genommen, aber leider wird die Alarmanalge nicht scharf gestellt:
--[[
%% properties
%% events
304 CentralSceneEvent
-%% globals
--]]
--[[
Szene zum Verwalten der eingaben eines Popp Keypads
Kostenlos zur Verfügung gestellt von http://www.intelligentes-haus.de. Wir übernehmen keine Verantwortung für mögliche Schäden.
Folgende dinge müssen angepasst werden siehe ggf. auch Video im dazugehörigen Blogartikel:
1. ganz oben bei CentralSceneEvent 304 durch eure ID ersetzen
2. mit check_wrong_code (true/false) kann man sagen ob das keypad nach 3 maliger falscheingabe gesperrt werden soll.
3. nach beispiel if(keyID == 1) (für eingegeben Pin 1) eure anweisung einfügen!
--]]
local sourceTrigger = fibaro:getSourceTrigger()
if (sourceTrigger["type"] == "other") then
fibaro:debug('Direkt Aufruf des Scripts nicht erwünscht!');
else
fibaro:debug('Kein Direktaufruf es darf aufgerufen werden!')
local keyID = tonumber(sourceTrigger.event.data.keyId);
local check_wrong_code = true;
local status_wrong_code = tonumber(fibaro:getGlobalValue('block_keypad_kelle'));
fibaro:debug('Script wurde gestartet. Key ID '..keyID..' wurde eingegeben! Der Pin wurde bisher '..status_wrong_code..' falsch eingeben')
if(status_wrong_code >= 3 and check_wrong_code == true) then
fibaro:debug('Es wurde 3 Mal der falsche Pin eingegen Keypad ist blockiert!')
if(keyID == 20) then
fibaro:setGlobal('block_keypad_kelle', 0);
fibaro:debug('Key 20 wurde eingeben Keypad wurde entblockt!');
end
else
if(keyID == 1) then
fibaro:call(307, 'secure');
fibaro:setGlobal('alarmanlage_scharf', 1);
fibaro:debug('Danalock geschlossen und Alarmanlage scharf geschaltet');
if(check_wrong_code == true) then
fibaro:setGlobal('block_keypad_kelle', 0)
end
elseif(keyID == 2) then
fibaro:call(307, 'unsecure');
fibaro:setGlobal('alarmanlage_scharf', 0);
fibaro:debug('Danalock geöffnet und Alarmanlage entschärft');
if(check_wrong_code == true) then
fibaro:setGlobal('block_keypad_kelle', 0)
end
elseif(keyID == 23) then
if(check_wrong_code == true) then
fibaro:setGlobal('block_keypad_kelle', fibaro:getGlobalValue('block_keypad_kelle') + 1)
end
fibaro:call(222, "sendPush", "Keypad Keller Code Falsch eingegeben!");
fibaro:debug('Push an Nico gesendet Code Falsch')
end
end
end
Jetrzt bekomme ich folgende Fehlermeldung:
[DEBUG] 11:56:03: Kein Direktaufruf es darf aufgerufen werden!
[DEBUG] 11:56:03: Script wurde gestartet. Key ID 2 wurde eingegeben! Der Pin wurde bisher 0 falsch eingeben
[DEBUG] 11:56:03: [1;31m2018-09-26 11:56:03.408940 [ error] API: Not found
[DEBUG] 11:56:03: Danalock geöffnet und Alarmanlage entschärft
Muss ich noch irgend eine variable erstellen?
Gerne würde ich auch noch eine Pushmitteilung erhalten bei Öffnen / schließen.
Akteull habe ich eine Szene die ich per ZIPATO rfid aktiviere wie folgt:
--[[
%% properties
131 value
%% events
%% globals
--]]
-- notwendige Ids
local sensorID = {60, 62, 64, 162, 48, 156, 141, 159, 56, 54, 171, 174, 169} -- IDs der Sensoren
local phoneID = {177, 179} -- IDs der Handys
local doorlockID = {} -- IDs der doorlocks
-- zusätzliche Optionen
local own_action = false -- eigene Aktionen ausführen; Funktionen müssen befüllt werden
local disarmed_bug = false -- Firmware Bug umgehen
-- eigene Funktionen
function actionsafterArmed()
fibaro:debug('Führe eigene Funktionen nach dem Schärfen aus')
end
function actionsafterDisarmed()
fibaro:debug('Führe eigene Funktionen nach dem Entschärfen aus')
end
-- AB HIER NICHTS MEHR ÄNDERN
local trigger = fibaro:getSourceTrigger()
local rfid_value_status = ''
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end
function armedcheckSensorID(array)
for j=1, #sensorID do
if sensorID[j] ~= nil then
if (tonumber(fibaro:getValue(sensorID[j], 'armed')) ~= 0) then
return false
end
end
end
return true
end
-- Funktion für die Öffnung der Tür
function openDoor()
if (doorlockID[0] ~= nil) then
fibaro:debug('Türschlösser werden geöffnet.')
for j=0, #doorlockID do
if doorlockID[j] ~= nil then
fibaro:call(doorlockID[j],'unsecure')
end
end
end
end
-- Funktion zum Versenden der Push
function sendPush(text)
if (phoneID[1] ~= nil) then
for i=1, #phoneID do
if phoneID[i] ~= nil then
fibaro:debug('Versende Push an ID ' ..phoneID[i])
fibaro:call(phoneID[i],'sendPush', text, 'alarm')
end
end
end
end
function setArmedStatus(set_status)
if set_status then
fibaro:debug('Sensoren werden scharf geschaltet.')
for k=1, #sensorID do
if sensorID[k] ~= nil then
if (tonumber(fibaro:getValue(sensorID[k], 'value')) == 0) then
fibaro:call(sensorID[k], 'setArmed', '1')
else
local sensorname = fibaro:getName(sensorID[k])
local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[k])
fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
sendPush('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
end
end
end
else
fibaro:debug('Sensoren werden entschärft.')
for j=1, #sensorID do
if sensorID[j] ~= nil then
if (disarmed_bug) then
setArmed(sensorID[j])
else
fibaro:call(sensorID[j], 'setArmed', '0')
end
end
end
end
end
function setArmed(deviceId)
local dev = api.get('/devices/' .. deviceId)
dev.properties.armed = false
api.put('/devices/' .. deviceId, dev)
end
-- Funktion zum Anlegen einer Globalen Variablen
function globalVar(var,val)
local http = net.HTTPClient()
http:request("http://127.0.0.1:11111/api/globalVariables", {
options = {
method = 'POST',
headers = {},
data = '{"name":"'..var..'","value":"'..val..'"}',
timeout = 10000
},
success = function(response)
local result = response.data;
if response.status == 200 or response.status == 201 then
fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
else
fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
end
end,
error = function(err)
fibaro:debug('[ERROR] ' .. err)
end
})
end
if (trigger['type'] == 'property') then
fibaro:debug('RFID-Szene 3.1 (Official) gestartet.')
local rfid_ID = tonumber(trigger['deviceID'])
local rfid_value = tonumber(fibaro:getValue(rfid_ID, 'value'))
if (rfid_value == 1) then
rfid_value_status = 'Away'
Debug('red', 'Status ' ..rfid_value_status.. ' gesetzt.')
setArmedStatus(true)
if (fibaro:getGlobal('PresentState') ~= nil) then
fibaro:debug('Benötigte Variable PresentState erkannt.')
fibaro:setGlobal('PresentState', 'Away')
else
fibaro:debug('Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
globalVar('PresentState', 'Away')
end
local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
if (delay ~= 0) then
fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
delay = delay + 1
fibaro:sleep(delay*1000)
end
if (not armedcheckSensorID(sensorID)) then
if (own_action) then
actionsafterArmed()
end
sendPush('ALARMANLAGE aktiv!')
end
elseif (rfid_value == 0) then
rfid_value_status = 'Home'
Debug('green', 'Status ' ..rfid_value_status.. ' gesetzt.')
setArmedStatus(false)
if (fibaro:getGlobal('PresentState') ~= nil) then
fibaro:debug('Benötigte Variable PresentState erkannt.')
fibaro:setGlobal('PresentState', 'Home')
else
fibaro:debug('Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
globalVar('PresentState', 'Home')
end
if (armedcheckSensorID(sensorID)) then
if (own_action) then
actionsafterDisarmed()
end
sendPush('ALARMANLAGE inaktiv!')
openDoor()
end
end
else
fibaro:debug('Szene manuell gestartet. Widget-Support deaktiviert.')
fibaro:debug('Hier werden noch weitere Funktionen folgen.')
end
Also eigentlich möchte ich mit dem KeyPad das Schloss öffnen und schließen können, sowie das sich dann automatisch die Alarmanlage entsprechend ein- und ausschaltet.