Hallo zusammen,
auch ich versuche mich langsam in LUA und habe ein Skript zur Steuerung unserer Weihnachtsbeleuchtung zusammengebastelt (Programmieren würde ich das nicht nennen…) Das Skript läuft soweit durch, nur im nächsten Durchlauf 1 Minute später bekomme ich eine Fehlermeldung, die da lautet:
[DEBUG] 10:39:44: Sonne geht unter: 16:42
[DEBUG] 10:39:44: Sonne geht auf: 08:25
[DEBUG] 10:39:45: Heute ist ein Werktag und kein Feiertag.
[DEBUG] 10:40:45: [1;31m2017-01-13 10:40:45.006580 [ fatal] LUA error: attempt to call a nil value
Das Skript:
--[[
%% autostart
%% properties
%% events
%% globals
--]]
local aussenlichterkette = 104 -- IDs derzu steuernden Lampen
local innenbeleuchtung1 = 78
local innenbeleuchtung2 = 84
local morgensAussenEin = "06:00" -- Einschaltzeitpunkt der Aussenbeleuchtung morgens
--local morgensInnenEin = "06:00" -- Einschaltzeitpunkt der Innenbeleuchtung morgens
local morgensDelayAus = 30 -- Ausschaltverzögerung zum Sonnenaufgang in Minuten
-- Einschalten Abends bei Sonnenuntergang
local abendsAussenAus = "22:00" -- Ausschaltzeitpunkte der Lampen Abends
local abendsInnenAus1 = "22:15"
local abendsInnenAus2 = "22:30"
local rebootSceneID = 55 -- ID dieser Szene
--########################################################################################
debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
--########################################################################################
local sourceTrigger = fibaro:getSourceTrigger();
function sceneReboot()
local currentDate = os.date("*t");
if ((currentDate.hour == 2) and (currentDate.min >= 0)and (currentDate.min < 1))
or sourceTrigger["type"] == "other" then
debug('salmon',"Neustart der Szene!")
fibaro:sleep(1*60*1000)
fibaro:startScene(rebootSceneID);
end
setTimeout(sceneReboot, 1*60*1000)
end
--#######################################################################################
local startSource = fibaro:getSourceTrigger()
local currentTime = os.date("%H:%M", os.time())
local currentDate = os.date("*t")
local weihnachtszeit = fibaro:getGlobalValue("HolidayTime") == "Yes"
local feiertag_heute = tonumber(fibaro:getGlobalValue("Feiertag_heute"))
local werktag = 1
local sunset = fibaro:getValue(1, "sunsetHour")
debug('blue','Sonne geht unter: ' ..sunset)
local sunrise = fibaro:getValue(1, "sunriseHour")
debug('orangered', 'Sonne geht auf: ' ..sunrise)
function weihnachtsbeleuchtung()
--########################################################################################
if fibaro:countScenes() > 1 then
debug('red', "Stoppe Szene!");
fibaro:abort();
end
------------------------------------------------------------------------------------------
--##################### Feststellung ob Wochenende oder Feiertag #########################
------------------------------------------------------------------------------------------
if (feiertag_heute == 1 or currentDate.wday == 7 or currentDate.wday == 1)
then
local werktag = 0
debug('grey', "Heute ist Wochenende oder ein Feiertag.")
else
local werktag = 1
debug('grey',"Heute ist ein Werktag und kein Feiertag.")
end
------------------------------------------------------------------------------------------
--###################### Weihnachtslicht morgens einschalten #############################
------------------------------------------------------------------------------------------
if weihnachtszeit == "Yes" and currentTime == morgensAussenEin
then
fibaro:call(aussenlichterkette, "turnOn")
debug('gold', 'Aussenbeleuchtung eingeschaltet.')
elseif weihnachtszeit == "Yes" and (os.date("%H:%M", os.time()) == morgensInnenEin)
then
-- fibaro:call(innenbeleuchtung1, "turnOn")
-- fibaro:call(innenbeleuchtung2, "turnOn")
debug('gold', 'Innenbeleuchtung eingeschaltet.')
fibaro:setGlobal('HolidayLights', 'On')
------------------------------------------------------------------------------------------
--###################### Weihnachtslicht morgens ausschalten #############################
------------------------------------------------------------------------------------------
elseif weihnachtszeit == "Yes" and os.date("%H:%M", os.time()-morgensDelayAus*60) == sunrise
then
fibaro:call(aussenlichterkette, "turnOff")
-- fibaro:call(innenbeleuchtung1, "turnOff")
-- fibaro:call(innenbeleuchtung2, "turnOff")
fibaro:setGlobal('HolidayLights', 'Off')
debug('darkblue', 'Weihnachtsbeleuchtung ausgeschaltet.')
------------------------------------------------------------------------------------------
--###################### Weihnachtslicht abends einschalten #############################
------------------------------------------------------------------------------------------
elseif weihnachtszeit == "Yes" and os.date("%H:%M", os.time()) == sunset
then
fibaro:call(aussenlichterkette, "turnOn")
fibaro:call(innenbeleuchtung1, "turnOn")
fibaro:call(innenbeleuchtung2, "turnOn")
fibaro:setGlobal('HolidayLights', 'On')
debug('gold', 'Weihnachtsbeleuchtung eingeschaltet.')
------------------------------------------------------------------------------------------
--###################### Weihnachtslicht abends ausschalten #############################
------------------------------------------------------------------------------------------
elseif weihnachtszeit == "Yes" and (os.date("%H:%M", os.time()) == abendsAussenAus)
then
fibaro:call(aussenlichterkette, "turnOff")
debug('darkblue', 'Aussenbeleuchtung ausgeschaltet.')
elseif weihnachtszeit == "Yes" and (os.date("%H:%M", os.time()) == abendsInnenAus1)
then
fibaro:call(innenbeleuchtung1, "turnOff")
fibaro:setGlobal('HolidayLights', 'Off')
debug('steelblue', 'Innenbeleuchtung1 ausgeschaltet.')
elseif weihnachtszeit == "Yes" and (os.date("%H:%M", os.time()) == abendsInnenAus2)
then
fibaro:call(innenbeleuchtung2, "turnOff")
debug('steelblue', 'Innenbeleuchtung2 ausgeschaltet.')
end
--########################################################################################
setTimeout(tempFunc, 60*1000)
end
--########################################################################################
--########################################################################################
local sourceTrigger = fibaro:getSourceTrigger()
if (sourceTrigger["type"] == "autostart") then
weihnachtsbeleuchtung()
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if weihnachtszeit == "Yes"
or startSource["type"] == "other"
then
fibaro:call(innenbeleuchtung1, "turnOn")
fibaro:call(innenbeleuchtung1, "turnOn")
fibaro:call(aussenlichterkette, "turnOn")
debug('yellow', "Weihnachtsbeleuchtung eingeschaltet!")
end
end
Auch für weitere Hilfestellungen und Anregungen bin ich dankbar!