Tür-Notification mit Push

Hallo zusammen

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

Normale Push bei öffnen und schliessen in kurzer Zeit
Normale Push bei öffnen und schliessen in kurzer Zeit

Wenn schon zu viel Zeit vergangen ist, Warnung und dann Push wenn geschlossen
Wenn schon zu viel Zeit vergangen ist, Warnung und dann Push wenn geschlossen

Warnung wenn Türe zu lange offen ist
Warnung wenn Türe zu lange offen ist

Beste Grüsse
Mav

FullSizeRender-2.jpg

FullSizeRender.jpg

FullSizeRender-3.jpg

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.

Danke für den Tip

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


Maverik,

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 :slight_smile: 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 :slight_smile: ist mir einiges noch nicht ganz geläufig und braucht viel Zeit.

Gruss
Mav

Wird auf alle Fälle ein nettes brauchbares Script :slight_smile:

Moin, was ausser der Haustür ID muß noch alles geändert werden?

Habe den Fehler: [DEBUG] 06:33:34: line 115: attempt to concatenate local ‘deviceId’ (a nil value)

Danke fürs teilen des Scripts.

Moin Christian

Sieht aus alsob er kein device zum Trigger erhält. Bin mir aber nicht sicher, bin ja noch kein profi ?

Ist beim Kopieren was schief gegangen? Habe ich jeweils wenn ich ins ZeroBrane auf dem Mac kopiere.

Werde aber sowieso noch auf die ideen von mdietinger eingehen und das Script erweitern ?

Schönes wochenende
Mav

Sieht aus alsob er kein device zum Trigger erhält

Das ist vollkommen korrekt :slight_smile: Die Szene wird manuell ausgeführt worden sein.

Gruß

Funktioniert echt gut!

Vielen Dank! :slight_smile:

Viele Grüße

Christian

Hallo zusammen,

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.

Habt ihr eine Idee?

Danke
Marco

Hi,
Hast Du im Header auf Deine IDs angepasst?

Viele Grüße Hoggle

Hi Hoggle,
im Header habe ich nur die ID meines Türsensors drin.
Die Debug Message erscheint auch jedesmal, wenn ich die betr. Türe öffne…

Gruß
Marco

Bei PushOver hast Du Dich registriert und hier etwas eingetragen:
local dvc = “Phone,Phone”

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.

habe jetzt das HC mal neugestartet und nun funktioniert alles. Das soll jemand verstehen…?

:slight_smile: ist manchmal so…