Script benötigt, Danke / Tür auf Sirene an !!

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