Hallo Ihr Lieben,
Ich habe seit einiger Zeit ein Anwesenheits Skript in Verwendung. Ich steuere dieses Skript durch das Setzen der Variablen über diverse Schalter.
Manchmal stelle ich fest, dass es nicht funktioniert, wenn der Wert schon gesetzt ist und der selbe Wert nochmal aufgerufen wird.
Praxisbeispiel:
“Bedroom” schaltet alle Lichter im Haus aus. Ich habe “bedroom” bereits gesetzt und danach werden wieder Lichter eingeschaltet.
Ich drücke NOCHMAL den Taster der “Bedroom” setzt und nichts passiert.
Grundsätzlich klar, da ja die Variable sich nicht mehr ändert, weil sie schon gesetzt ist.
Meine Idee wäre nun beim Tastendruck zuerst eine Zwischenvariable wie z.B. “leer” zu setzen, und nach einer Pause erst die tatsächliche Variable.
Damit würde der Inhalt der Variable PresentState JEDENFALLS geändert.
Gibt es dafür eventuell eine elegantere Lösung ??
Hier eine vereinfachte Darstellung meines Skriptes:
--[[
%% properties
%% events
%% globals
PresentState
--]]
if (fibaro:countScenes()>3) then fibaro:abort() end -- lösche doppelte Szenen
Debug=function (color,message) fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")) end
local gPresentState = fibaro:getGlobal("PresentState")
if gPresentState == "Away" then
--Befehl einfügen
Debug("green",(os.date("%d.%m.%Y - PresentState: "..gPresentState.." ")))
elseif gPresentState == "Home" then
--Befehl einfügen
Debug("green",(os.date("%d.%m.%Y - PresentState: "..gPresentState.." ")))
elseif gPresentState == "Night" then
--Befehl einfügen
Debug("green",(os.date("%d.%m.%Y - PresentState: "..gPresentState.." ")))
elseif gPresentState == "Bedroom" then
--Befehl einfügen
Debug("green",(os.date("%d.%m.%Y - PresentState: "..gPresentState.." ")))
else
Debug("red",(os.date("%d.%m.%Y - Present: "..gPresentState.." ")))
fibaro:call(2, "sendEmail", "nicht definierter PresentState!", "PresentState geändert in: "..gPresentState.." ")
end