Ich weiss nicht, wird sicher schon so ein Script geben, aber hab mich heute mal mit meinem 2. LUA Script auseinandergesetzt. Pushnachrichten für die Öffnung der Haustüre. Je nachdem wie lange sie offen war werden andere Messages geschickt.
--[[
%% properties
999 value
%% globals
pushoverBody
--]]
--999 wäre der Türsensor
local jT = json.decode(fibaro:getGlobalValue("HomeTable")) --integriert nach dem HomeTable Tutorial von AutoFrank von fibaro.com Forum
local timeClosedOkay = 30 --Zeit in Sekunden bei der die Türe also OK gschlossen gilt
local timeInitialWarning = 150 --Zeit in Sekunden bei der eine normale Meldung ausgegeben wurde
local timeHardWarning = 300 --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
function sendNotification(title, message, priority)
--iPhone Nachricht schicken gemäss des Pushover Tutorials von AutoFrank vom fibaro Forum
local dvc = "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(jT["Entrée"]["Eingangstüre"], "value")) > 0) then
timeBreached = tonumber(fibaro:getValue(jT["Entrée"]["Eingangstüre"], "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(jT["Entrée"]["Eingangstüre"], "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(jT["Entrée"]["Eingangstüre"], "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(jT["Entrée"]["Eingangstüre"], "value")) > 0) then
sendNotification("Türe geöffnet", "Haustüre ist seit " .. timeDiffText() .. "offen und wurde nicht geschlossen!",0)
initialWarningSent = true
elseif (tonumber(fibaro:getValue(jT["Entrée"]["Eingangstüre"], "value")) == 0) then
sendNotification("Türe geöffnet", "Haustüre wurde nach " .. timeDiffText() .. "wieder geschlossen!",0)
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
Ausschauen tut es dann so
Normale Push bei öffnen und schliessen in kurzer Zeit
Wenn schon zu viel Zeit vergangen ist, Warnung und dann Push wenn geschlossen
Sehr schöne Ausgabe.
Würde es nicht besser sein auf die Hometable zu verzichten und Trigger Device Value und Namen zu verwenden?
Damit hast Du ein Script welches ohne Anpassung für verschiedene Fenster und Türen verwendet werden kann.
Entweder ein Script mit entsprechendem Trigger pro Tür/Fenster oder alle Trigger in ein Script packen und die Anzahl der Instanzen hoch setzen.
Hinweis: pushoverBody gehört als Trigger entfernt, ansonsten wird das Script mit jeder Nachricht neu gestarted.
Habe ich angepasst, leider kann ich den Originalpost nicht bearbeiten, das wäre super um jeweils das neueste Script zu posten:
--[[
%% properties
999 value
%% globals
--]]
---999 wäre der Türsensor
local timeClosedOkay = 30 --Zeit in Sekunden bei der die Türe also OK gschlossen gilt
local timeInitialWarning = 150 --Zeit in Sekunden bei der eine normale Meldung ausgegeben wurde
local timeHardWarning = 300 --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['deviceID']
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
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)
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
mit Verwendung des Device Namens habe ich daran gedacht: sendNotification("Türe geöffnet", …fibaro:getName(triggerID) …" ist seit " … timeDiffText() … "offen und wurde immer noch nicht geschlossen!",1)
Damit wird für jede Türe der Namen des Devices verwendet und du kannst das Script für beliebige Türen verwenden.
Einzig für Fenster müsstest du ein eigenes Script anlegen oder noch das “Device kind” abfragen. (“Türe” oder “Fenster” geöffnet)
Ahh, gute Idee werde ich mir heute Abend mal anschauen. Muss es sowieso noch ein bisschen erweitern, mit Anwesend/Abwesend Infos, dann gelten andere Zeiten. Aber dafür brauche ich noch mehr Einarbeitungszeit ist mir einiges noch nicht ganz geläufig und braucht viel Zeit.
irgendwas läuft schief bei mir.
ich bekomme leider nur folgende Debug Meldung [DEBUG] 20:00:41: Time Breached 1493056841
und ansonsten passiert gar nichts.
Habe jetzt mehfach überprüft, ob ich einen Copy&Paste Fehler habe und auch die Variable “pushoverBody” wurde nchmal neu angelegt.
ja habe mich registriert und das Test Script pushover Test funktioniert wie es soll.
Der Wert der Variable "pushoverBody hat sich nach der Neuanlage defintv von 0 auf &device=IPhone_Marco&priority=0&title=Türe geöffnet&message=Haustüre wurde geöffnet und wieder geschlossen geändert.