Eventuell gibt es so ein Script schon hier, (hab vielleicht falsch gesucht) aber aus gegebenen Anlass stell ich mal meins hier rein. Hintergrund - ich oder meine Frau vergessen regelmäßig Fenster nach dem Lüften diverser Räume zu schließen. In dieser kalten Jahreszeit wirft man so das Geld für’s Heizen zum Fenster raus. Ich denke dass nicht nur wir so vergesslich sind.
Die Besonderheit des Scripts ist, dass man die IDs der Sensoren manuell im arraylocal devices ={}
eintragen kann, (im Sommer hat man ja gern des Nachts Fenster gekippt) oder das script füllt das array automatisch mit den IDs der Sensoren in der nächsten Zeile, gut für die kalte Jahreszeit.
Nach eingestellter Zeit gibt’s eine Pushmitteilung auf den mobilen Geräten.
--[[
%% autostart
%% properties
--]]
-- Check doors and windows at the given interval.
-- Entweder man traegt alle Tuer/Fensters IDs in Zeile 11 ein, und
-- kommentiert Zeile 12 aus. Das ist mehr fuer den Sommerbetrieb gedacht, wenn
-- man einige Sensoren aus der Pruefung herausnehmen will. Oder man kommentiert
-- Zeile 11 aus und laesst das Script selber die Sensoren herausfinden.
--local devices = {48, 122, 123, 127} --device IDs
local devices = fibaro:getDevicesId({ enabled = true, visible = true, baseType = "com.fibaro.doorWindowSensor" })
local phoneID = {8, 20} -- mobile-IDs
local interval= 10 -- Zeitspanne nach der eine Warnung verschickt wird.
local debug = false -- Debugausgaben ja/nein
-- Don't change anything below this line.
local warning = 1
local counter = 0
local prevwarning = 0
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span") )
end
local sourceTrigger = fibaro:getSourceTrigger();
Debug('white', "Check for open doors and windows")
function checkOpenDW()
local currentDate = os.date("*t");
local datum = os.date("%d.%m.%Y")
counter = counter + 1
local devopen = 0
for id = 1, #devices do
local deviceType = fibaro:getType(devices[id] )
if (deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor') then
if (tonumber(fibaro:getValue(devices[id], 'value')) == 1) then
local name = fibaro:getName(devices[id])
local room = fibaro:getRoomNameByDeviceID(devices[id])
devopen = devopen + 1
status = " ACHTUNG! " ..name.. " im Raum " ..room.. " ist offen!"
if debug then Debug('red',datum .. status) end;
warning = warning + 1
end
end
if (warning == prevwarning and warning > 0) then
-- Tür wurde geschlossen
warning = 1
counter = 1
prevwarning = 0
end
-- Keine Tür geöffnet, Zähler beginnt von vorn
if (warning == 0) then
counter = 1;
prevwarning = 0;
end
-- Tür wurde geöffnet und wieder geschlossen, Warnungen werden zurückgesetzt
if (counter > interval+1 and warning > 0) then
counter = 1;
warning = 1;
prevwarning = 0;
end
end --for
prevwarning = prevwarning +1
-- Tür/Fenster mehr als Interval (Min.) offen. Meldung schicken
if counter >= interval then
Debug('red', 'Mehr als '.. minutes..' Minuten, sende Push')
if (devopen > 1) then
status = status .. ' und '.. devopen .. 'andere.'
end
for k=1, #phoneID do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k], 'sendPush', status)
end
end
warning = 1
counter = 1
prevwarning = 0
end
if debug then Debug('withe', 'Counter: '.. counter) end;
if debug then Debug('withe', 'Warning: '.. warning) end;
if debug then Debug('withe', 'PreWarning: '.. prevwarning) end;
setTimeout(checkOpenDW, 60*1000)
end --function
if (sourceTrigger["type"] == "autostart") then
checkOpenDW()
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
end