Hallo,
kann mir einer bitte ein kleines LUA Script schreiben?
Funktion
Wenn Türsensor ID 123 Status „offen“ dann starte Timer 60 sec
Ist der Status nach 60 sec immer noch offen, dann schalt Sirene ID 345
Sobald Türsensor 123 Staus „zu“ schalte Sirene wieder ab
Meldet der Sensor innerhalb der 60sec Tür zu, setze den Timer wieder auf 60 sec. Starte wieder sobald die Tür aufgeht.
In den uploads seht Ihr, welche Sirene und welchen Sensor ich habe.
Danke
Ich habe das schon über die Assoziation hinbekommen, nur habe ich eine „delay“ Parameter gefunden. Also Tür auf Sirene an, Tür zu Sirene aus. Blöd ;(
Haase
probier mal ob das geht. wen noch pushover verwendest kannst du dies auch noch ändern im code dan erhälst du noch nachrichten aufs handy
--[[
%% properties
123 value
%% globals
--]]
local timeClosedOkay = 30 --Zeit in Sekunden bei der die Türe also OK gschlossen gilt
local timeInitialWarning = 45 --Zeit in Sekunden bei der eine normale Meldung ausgegeben wurde
local timeHardWarning = 60 --Zeit in Sekunden bei der eine hardwarning ausgegeben werden
local timeBreached = 0 -- Zeit wann Alarm ausgelöst wurde
local timeIntervall = 2 -- in welchen Sekundenschritten geschieht die Abfrage
local trigger = fibaro:getSourceTrigger()
local triggerID = trigger['123']
function sendNotification(title, message, priority)
--iPhone Nachricht schicken
local dvc = "Phone,Phone"
local prio = priority
local ttl, msg = title, message
local requestBody = '&device='..dvc ..'&priority=' ..prio ..'&title=' ..ttl ..'&message=' ..msg
fibaro:setGlobal("pushoverBody", requestBody)
end
function timeDiffText()
seconds = os.time() - timeBreached;
if seconds < 60 then
return seconds .. " Sekunden"
else
minutes = math.floor(seconds/60.0)
sec = math.floor((seconds-(minutes*60.0)))
return minutes .. " Minuten " .. sec .. " Sekunden "
end
end
if (tonumber(fibaro:getValue(triggerID, "value")) > 0) then
timeBreached = tonumber(fibaro:getValue(triggerID, "lastBreached"));
fibaro:debug("Time Breached ".. timeBreached)
local initialWarningSent = false
for i=0,timeHardWarning+30,timeIntervall do
time = os.time();
timeDiff = time - timeBreached;
if(timeDiff <= (timeClosedOkay) and tonumber(fibaro:getValue(triggerID, "value")) == 0) then
--falls Türe innerhalb der Zeit geschlossen wurde, Push und Loop beenden
sendNotification("Türe geöffnet", "Haustüre wurde geöffnet und wieder geschlossen.",0)
break
elseif (timeDiff > (timeClosedOkay) and
timeDiff <= (timeInitialWarning) and
tonumber(fibaro:getValue(triggerID, "value")) == 0) then
--falls Türe vor der ersten Warnung geschlossen wird
sendNotification("Türe geöffnet", "Haustüre war " .. timeDiffText() .. "offen, ist jetzt aber wieder geschlossen.",0)
break
elseif (timeDiff > (timeInitialWarning) and
timeDiff <= (timeHardWarning)) then --Warnung senden wenn Türe offen bleibt!
if(not initialWarningSent and tonumber(fibaro:getValue(triggerID, "value")) > 0) then
fibaro:call(345, "turnOn")
sendNotification("Türe geöffnet", "Haustüre ist seit " .. timeDiffText() .. "offen und wurde nicht geschlossen!",0)
initialWarningSent = true
elseif (tonumber(fibaro:getValue(triggerID, "value")) == 0) then
sendNotification("Türe geöffnet", "Haustüre wurde nach " .. timeDiffText() .. "wieder geschlossen!",0)
fibaro:call(345, "turnOff")
break
end
elseif (timeDiff > (timeHardWarning)) then --Warnung ist verschickt, Türe immer noch offen
sendNotification("Türe geöffnet", "Haustüre ist seit " .. timeDiffText() .. "offen und wurde immer noch nicht geschlossen!",1)
break
end
fibaro:sleep(timeIntervall * 1000)
end
end