Hallo mdietinger,
Danke für deine Antwort!
Ich habe inzwischen das halbe Forum durchsucht und eine andere Lösung gefunden, die ich sehr rasch für mich umschreiben konnte!!
https://www.siio.de/board/thema/alarm-script-problem
Ich hab es zwar derzeit nur Ansatzweise verstanden, aber es läuft inzwischen hervorragend!!
Ich habe mir auch erlaubt, deine Tipps der PushOver Funktionalität einzubauen!
Ist also vorerst GELÖST, bis ich wieder unqualifiziert dran rumbastle
Hier das fertige Skript, falls es dich interessiert. (228 ist der Riegelkontakt)
--[[
%% properties
228 value
%% events
%% globals
--]]
-- notwendige IDs
local sensorID = {30,113,99} -- IDs der Sensoren
-- 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()
Debug('green','Führe eigene Funktionen nach dem Schärfen aus')
end
function actionsafterDisarmed()
Debug('green','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
function setArmedStatus(set_status)
if set_status then
Debug('green','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])
Debug('red','ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
fibaro:setGlobal('PushOver',"HC2-Alarm,ACHTUNG: " .. sensorname .. " im Raum: " .. sensorroom .. " nicht sicher.",1,siren)
end
end
end
else
Debug('green','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
Debug('green','Status: ' ..response.status.. ' - Variable wurde angelegt')
else
Debug('red','Error: ' ..response.status.. ' - Zugriff verweigert')
end
end,
error = function(err)
Debug('red','[ERROR] ' .. err)
end
})
end
if (trigger['type'] == 'property') then
Debug("grey",(os.date("%A %d %B %Y - Riegelkontakt Szene gestartet...")))
local rfid_ID = tonumber(trigger['deviceID'])
local rfid_value = tonumber(fibaro:getValue(rfid_ID, 'value'))
if (rfid_value == 0) then
rfid_value_status = 'Away'
Debug('green', 'Türe zugesperrt - Status ' ..rfid_value_status.. ' gesetzt.')
setArmedStatus(true)
if (fibaro:getGlobal('PresentState') ~= nil) then
--Debug('green','Benötigte Variable PresentState erkannt.')
fibaro:setGlobal('PresentState', 'Away')
else
Debug('yellow','Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
globalVar('PresentState', 'Away')
end
local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
if (delay ~= 0) then
Debug('green','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
fibaro:setGlobal('PushOver',"Haustüre abgeschlossen,Alle Sensoren scharf,-1,none")
end
elseif (rfid_value == 1) then
rfid_value_status = 'Home'
Debug('green', 'Türe aufgesperrt - Status ' ..rfid_value_status.. ' gesetzt.')
setArmedStatus(false)
if (fibaro:getGlobal('PresentState') ~= nil) then
--Debug('green','Benötigte Variable PresentState erkannt.')
fibaro:setGlobal('PresentState', 'Home')
else
Debug('yellow','Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
globalVar('PresentState', 'Home')
end
if (armedcheckSensorID(sensorID)) then
if (own_action) then
actionsafterDisarmed()
end
fibaro:setGlobal('PushOver',"Haustüre geöffnet,Alarm deaktiviert,-1,none")
end
end
else
Debug('green','Szene manuell gestartet. Widget-Support deaktiviert.')
Debug('green','Hier werden noch weitere Funktionen folgen.')
end