Habe das Script von hier auch im Einsatz. Läuft seit 1 Jahr tadellos. Habe jetzt nur geringfügige Änderungen in der Abfrage der Sensoren gemacht, die “for” Schleife optimiert (dass das Script nicht immer bis maxID 1000 zählen muss) und ein wenig entschlackt.
--[[
%% autostart
%% properties
--]]
-- check if doors or windows are open at a given time
-- altered by Jeep
local sourceTrigger = fibaro:getSourceTrigger();
local phoneID = {8, 20} -- mobile IDs
local timeCheck = "21:50" -- perform check at this time
local warning = 0
local version = "0.1.1"
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span") )
end
local function checkDoors()
local dwSensors = fibaro:getDevicesId({ enabled = true, visible = true, baseType = "com.fibaro.doorWindowSensor" })
Debug('white', "Prüfe offene Fenster und Türen ".. os.date('%c'))
for id = 1, #dwSensors do
if (tonumber(fibaro:getValue(dwSensors[id], 'value')) == 1) then
local name = fibaro:getName(dwSensors[id])
local room = fibaro:getRoomNameByDeviceID(dwSensors[id])
Debug('red', "ACHTUNG! " ..name.. " im Raum " ..room.. " ist offen!")
warning = warning + 1
for k=1, #dwSensors do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: ' ..name.. ' im Raum ' ..room.. ' ist offen!')
end
end
end
end --for
if warning == 0 then
for k=1, #phoneID do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k], 'sendPush', 'alle Fenster und Türen geschlossen')
end
end
Debug('green', "alle Fenster und Türen geschlossen! ".. os.date('%c') )
end
end --function
function main()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if ( (string.format("%02d:%02d", currentDate.hour, currentDate.min) == timeCheck )) then
checkDoors()
end
setTimeout(main, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
main()
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if ( startSource["type"] == "other" ) then
checkDoors()
end
end