Popp Keypad Alarm-Scene

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.

achja, und eine Pushmitteilung an zwei Handy bei jeder Aktion :slight_smile:

hi,

ich hab es selbst hinbekkomen :slight_smile:

Hi Jojo,
ich habe leider das gleiche Problem :frowning:
Kannst du mir bitte sagen wie hast du das geschafft? Vielleicht kannst du deine Szene teilen?

Vielen Dank für die Hilfe!
Gruß,
Gregor

--[[
%% properties
192 value
141 value
%% events
%% globals
--]]

local sensorID = {} -- IDs der Sensoren
local phoneID = {} -- IDs der Handys

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

local startSource = fibaro:getSourceTrigger();
fibaro:debug(fibaro:getValue(ID-PAD,"value"));

if
    	tonumber(fibaro:getValue(ID-Türsensor, "armed")) == 0
    then
		--sendPush('Tür wurde aufgeschlossen')
  		fibaro:debug('Tür wurde aufgeschlossen') 
    else
    	for j=1, #sensorID do
    		if sensorID[j] ~= nil then
     			fibaro:call(sensorID[j], 'setArmed', '0')
    		end
      	end
    sendPush('Tür aufgeschlossen & ALARMANLAGE inaktiv!')
  	fibaro:debug('Tür aufgeschlossen & ALARMANLAGE inaktiv!')
end