HC2 Fenster / Türen Protokoll

Hallo zusammen, gerne möchte ich die Öffnungszeiten der Tür- Fenstersensoren protokollieren. Weil es ab und zu vorkommt das ein Sensor „hängen bleibt“. Vorgesehen ist wenn die Öffnungszeiten grösser als 30 Min. sind, dass dies per Mail und im Debug erscheint.
Habe ein Script geschrieben, finde aber nicht heraus warum die Protokollierten Zeiten angegeben werden! Vielleicht könnte sich jemand das beigelegte Script mal zur Brust nehmen :slightly_smiling_face: Vielen Dank…

--[[
%% properties
260 value
263 value
275 value
605 value
608 value
611 value
614 value
617 value
%% globals
--]]

-- Öffnungszeiten werden falsch angezeit!!


if (fibaro:countScenes()>1) then  fibaro:abort() end -- lösche doppelte Szenen

Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
SceneID = __fibaroSceneId


local currentDate    = os.date("*t");
local currentTime    = os.clock()
local trigger        = fibaro:getSourceTrigger()
local DeviceID       = tonumber(trigger['deviceID'])
local DeviceValue    = tonumber(fibaro:getValue(DeviceID, "value"))
local DeviceName     = fibaro:getName(DeviceID)
local DeviceRoom     = fibaro:getRoomNameByDeviceID(DeviceID)
local windowOpenTime = 0

--fibaro:sleep(20000) -- 20 Sekunden
--local DeviceValue = tonumber(fibaro:getValue(DeviceID, "value"))


     -- Lösche doppelte Szene(n)
 if   (fibaro:countScenes()> 1) 
  
then
      --fibaro:debug("Es läuft mehr als eine Instanz");
      fibaro:abort(); 
 end


 if  (DeviceValue > 0) 
  
then
    windowOpenTime = os.time()
    Debug("lightblue",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde geöffnet")))
    --fibaro:call(2, "sendEmail", "Fenster und Türen Status ("..SceneID..")",""..DeviceRoom.." "..DeviceName.." wurde geöffnet")
  
elseif
  
     (DeviceValue < 1) --and windowOpenTime > 0) 
  
then     
    local windowCloseTime    = os.time()
    local windowOpenDuration = windowCloseTime - windowOpenTime
    local hours              = math.floor(windowOpenDuration  / 3600)
    local minutes            = math.floor((windowOpenDuration % 3600) / 60)
    local seconds            = windowOpenDuration % 60
    local closeTimeFormatted = os.date("%d.%m.%Y %H:%M:%S", windowCloseTime) -- Formatierung der Schließzeit

    Debug("grey",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde geschlossen. Fenster war für "..hours.." Stunden, "..minutes.." Minuten und "..seconds.." Sekunden geöffnet bis "..closeTimeFormatted)))
    --fibaro:call(2, "sendEmail", "Fenster und Türen Status ("..SceneID..")",""..DeviceRoom.." "..DeviceName.." wurde geschlossen. Fenster war für "..hours.." Stunden, "..minutes.." Minuten und "..seconds.." Sekunden geöffnet bis "..closeTimeFormatted)  
    windowOpenTime = 0 -- Zurücksetzen der Zeitmarke
end

Habe ein Script geschrieben, finde aber nicht heraus warum die Protokollierten Zeiten falsch ausgegeben werden! (Sollte es heisen!)

Hallo,

beim elseif-then ist windowOpenTime m.E. ==0

man müsste diese Zeit im then-Teil irgendwo (in einer globalen Var. oder in einem Label eines VD’s) aufschreiben und dann wieder auslesen,
und das für jeden der Sensoren, da bietet sich eine Tabelle an.

Viel Erfolg!

Hallo Muc

Vielen Dank das Du Dich der Situation angenommen hast, bin immer noch am Testen! Ist relativ aufwändig dies zu realisieren!

Vielleicht gibt es noch eine einfachere Lösung! LG fastsnake

Was soll denn das Ziel sein??
Einfach nur ein Mail wenn ein Fenster auf oder zu geht?

Hallo pblacky
Das Ziel sollte sein: Fenster Öffnungszeiten im Debug ausgeben, wenn Fenster / Tür länger als 30 Min offen dann Mail vom jeweiligen Fenster / Tür und der Öffnungszeit an mich. Danke pblacky, LG fastsnake

In deinem Beispiel ist mir aufgefallen, dass du eine Schleife mit

if
then
elsif
then

drinnen hast, ich bin zwar nicht sicher aber das letzte „then“ müsste eigentlich als „else“ in der schleife sein, wenn ich das richtig verstanden hab!
Aber vielleicht hat jemand von den LUA Spezialisten da einen Tipp für dich…

Ich habe mir ein ähnliches Skript gebaut, allerdings OHNE Zeitschleife.
Habs dir angehängt, vielleicht hilft es…

--[[
%% properties
354 value
357 value
865 value
%% globals
--]]
if (fibaro:countScenes()>5) then  fibaro:abort() end -- lösche doppelte Szenen
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
SceneID = __fibaroSceneId

local trigger = fibaro:getSourceTrigger()
local DeviceID = tonumber(trigger['deviceID'])
local DeviceValue = tonumber(fibaro:getValue(DeviceID, "value"))
local DeviceName = fibaro:getName(DeviceID)
local DeviceRoom = fibaro:getRoomNameByDeviceID(DeviceID)
fibaro:sleep(20000) -- 20 Sekunden
local DeviceValue = tonumber(fibaro:getValue(DeviceID, "value"))

if (DeviceValue > 98) then
    Debug("lightblue",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde geöffnet")))
    fibaro:call(2, "sendEmail", "Fenster und Jalousien Status ("..SceneID..")",""..DeviceRoom.." "..DeviceName.." wurde geöffnet")
  elseif (DeviceValue < 12) then
    Debug("grey",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde geschlossen")))
    fibaro:call(2, "sendEmail", "Fenster und Jalousien Status ("..SceneID..")",""..DeviceRoom.." "..DeviceName.." wurde geschlossen")
  else
    Debug("orange",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." ist auf " ..DeviceValue.." Prozent")))
    fibaro:call(2, "sendEmail", "Fenster und Jalousien Status ("..SceneID..")",""..DeviceRoom.." "..DeviceName.." ist auf "..DeviceValue.." Prozent")
end

für LUA-Fans: ISBN 978-3-95539-020-4 Programmieren in LUA von Herrn Jerusalimschy
(so steht’s in meiner 3, Auflage von 2013)

es steht viel zu viel drin, aber ich schaue immer wieder nach, man kann viel entdecken
LUA ist eine sehr schöne Programmiersprache,
aber es braucht Zeit und viele ‚Versuche‘ …

Vielen Dank, die Basis habe ich einmal kopiert und von da aus weiter bearbeitet! Wusste nicht das diese von Dir ist, vielen Dank. Die Endlösung scheint komplizierter zu sein. Vielleicht ergibt sich doch noch eine funktionierende Variante eines LUA Spezis. Allen einen schönen 1. Advent. LG fastsnake

Ich habe die „Basis“ auch nicht erfunden, sonder irgendwo in diesem Forum gefunden und für mich angepasst :wink: