tmp func für Variablenabfrage?

Hallo, erklärt mir das mal bitte einer mit der tmp func?
Konkret habe ich ein Aussenlicht Script, welches bei Änderung der DayTime Variable anders reagieren soll.
Da das Script einmal gestartet immer nur auf abend erkennt gehe ich davon aus das der Fehler darin liegt das ich das nicht in eine tmp func verpackt habe.
Da ich auch lernen und nicht nur kopieren will…Wozu genau ist die gut? Und um welche Zeilen genau muss ich die verpacken?
Hier mein Script:


--[[
%% properties
106 value 
%% globals
Haustuer
TimeOfDay
--]]
 
local startSource = fibaro:getSourceTrigger();
 
if (
 ( tonumber(fibaro:getValue(106, "value")) > 0 )
or
 ( fibaro:getGlobalValue("Haustuer") == "auf" ) 
and
 ( fibaro:getGlobalValue("TimeOfDay") == "Evening" )
or
startSource["type"] == "other"
)
then
  fibaro:debug('Ausgelöst Aussentreppe Abend');
  
    fibaro:call(102, "setColor", "50","0","0","0");
    fibaro:call(104, "setColor", "50","0","0","0");
    fibaro:sleep(1000); --3sec
	fibaro:call(102, "setColor", "0","0","0","255");
    fibaro:call(104, "setColor", "0","0","0","255");
  
elseif (
 ( tonumber(fibaro:getValue(106, "value")) > 0 )
or
 ( fibaro:getGlobalValue("Haustuer") == "auf" ) 
and
 ( fibaro:getGlobalValue("TimeOfDay") == "Night" )
or
startSource["type"] == "other"
)
then
  fibaro:debug('Ausgelöst Aussentreppe Nacht');
  
  
    fibaro:call(102, "setColor", "50","0","0","0");
    fibaro:call(104, "setColor", "50","0","0","0");
    fibaro:sleep(1000); 
	fibaro:call(102, "setColor", "250","160","0","15");
    fibaro:call(104, "setColor", "250","160","0","15");
end
 
fibaro:sleep(60000); --1min
fibaro:call(104, "turnOff");
fibaro:call(102, "turnOff");
fibaro:debug('finster');

Hi,

meinst du wie das mit function() funktioniert, oder wie?

Gruß

Genau Boomx. Wie oben schon beschrieben muss ich oben in das Script eine Schleife einbetten, damit er immer mal die TimeOfDay Variable abfragt.

Eigentlich ganz einfach. Du deklarierst eine Funktion mit:

function FUNCTIONNAME()
DEIN CODE
setTimeout(FUNCTIONNAME, 60*1000) -- 60 Sekunden TimeOut
end

Wenn du die Funktion dann immer wieder starten lassen willst:

if (sourceTrigger["type"] == "autostart") then
	FUNCTIONNAME()
end

Die tmpfuncsteht bei vielein beispielen im Netz, weil Fibaro, wenn eine Blockszene zu LUA konvertiert wird, diese so benennt. Im Prinzip schon wie boomx schreibt: Ein timeout auf eine etwas andere Art als fibaro:sleep(). Funktionen allgemein sind entweder genau für solche situationen oder als Bausteine zu sehen. Wenn du den selben code immer wieder brauchst, schreibst du eine funktion. fibaro:debug() ist auch eine, auch dort steht natürlich ein kleiner codeteil dahinter um text im Terminal anzuzeigen.

Grüße

Daniel

Aha, wieder was gelernt, anstatt immer zu kopieren. Danke ihr beiden. :slight_smile: