fibaro:getSourceTrigger() ... kein autostart !

Hallo,
bin gerade am debuggen von einer einfachen Szene und komme nicht weiter.
Die Szene vereinfacht wie abgebildet:
–[[
%% autostart
%% properties
%% globals
–]]
local sourceTrigger = fibaro:getSourceTrigger();
function xyz();
if (sourceTrigger[‘type’] == ‘autostart’) then
fibaro:debug(‘function gestartet …’)
xyz();
end
Mein Problem ist, dass die Function NIE aufgerufen wird weil die Bedienung sourceTrigger[‘type’] == ‘autostart’ nie erfüllt ist. Wenn ich die Variabel auslese dann steht nur “other” als Typ. Lt. Fibaro gibt es nur 3 mögliche Typen für den Trigger: Property, Global, Other. … kein AUTOSTART.
Könnte bitte jemand etwas Licht ins Dunkeln bringen ?
Unter welchen Bedingungen wird der Variable Trigger der Wert AUTOSTART zugewiesen ?

Danke !

Hi,

doch, es gibt den Wert ‘autostart’. Diesen kannst du so abfragen:

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
	function();
end

Funktioniert ohne Probleme.

Gruß

Nicht so richtig.
Ich habe das bereits verbreitete Script für Rollershutter modifiziert und ich die Function “rollershutter()”
wird nicht ausgeführt, weil der Trigger in der IF Schleife nicht “autostart” sondern “other” liefert. Eine Idee warum ?


--[[
%% autostart
%% properties
%% globals
--]]
 
local sourceTrigger = fibaro:getSourceTrigger();
local version = '2.0';
fibaro:debug('Sunset: ' ..fibaro:getValue(1,'sunsetHour'))
 
fibaro:debug('Rollershutter-Controller started for the first time (Ver.' .. version .. ')');
 
function rollershutter()
   local version = '2.0';
   local sunriseHour = fibaro:getValue(1,'sunriseHour');
   local sunsetHour = fibaro:getValue(1,'sunsetHour');
   local currentDate = os.date('*t');
   local temp = tonumber(fibaro:getValue(3, 'Temperature'));
   local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
   --local random = math.random(35);
   --local min = math.floor((random*100)/60);

fibaro:debug('Tag: ' ..currentDate.wday)
fibaro:debug('runs_value: ' .. RollerShutter_runs)
fibaro:debug('temp: ' ..tonumber(temp))
-----------------------------------------
-- TEMPERATUR > 0
-----------------------------------------
-----------------------------------------
-- SUNRISE : working days (07:10)
-----------------------------------------

  if ((((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == "07:10")) and rollershutter_runs == 0 and tonumber(temp)>=0)
   then
       fibaro:debug('Working Day : Rollershutter-Controller started (Ver.' .. version .. ')');
       fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunrise... Opening rollershutters');
       --fibaro:debug('Waiting ' .. min .. ' min');
       --fibaro:sleep(random*100000);
                fibaro:call(32, 'open');
                fibaro:call(34, 'open');
                fibaro:call(36, 'open');
                fibaro:call(52, 'open');
                fibaro:call(42, 'open');
                fibaro:call(44, 'open');
    			fibaro:call(46, 'open');
    			fibaro:call(50, 'open');
    		    -- if too dark (<10 lux), turn the light ON
       			if tonumber(fibaro:getValue(64, "value")) < 10
       				then fibaro:call(30, "turnOn");
       			end
       fibaro:debug('Rollershutters opened');
       fibaro:setGlobal('rollershutter_runs', '0');

-- SUNRISE : WEEKEND (09:10)
-----------------------------------------
elseif ((((currentDate.wday == 1 or currentDate.wday == 7) and string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == "09:10")) and rollershutter_runs == 0 and tonumber(temp)>=0)
   then
       fibaro:debug('Weekend : Rollershutter-Controller started (Ver.' .. version .. ')');
       fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunrise... Opening rollershutters');
       --fibaro:debug('Waiting ' .. min .. ' min');
       --fibaro:sleep(random*100000);
                fibaro:call(32, 'open');
                fibaro:call(34, 'open');
                fibaro:call(36, 'open');
                fibaro:call(52, 'open');
                fibaro:call(42, 'open');
                fibaro:call(44, 'open');
    			fibaro:call(46, 'open');
    			fibaro:call(50, 'open');
       fibaro:debug('Rollershutters opened');
       fibaro:setGlobal('rollershutter_runs', '0');
       
       
-- SUNSET : NO Temperatur dependency  ! (15min after Sunset)
-----------------------------------------
elseif ((((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and os.date("%H:%M", os.time()-15*60) == sunsetHour)) and rollershutter_runs == 0)
 then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
       fibaro:setGlobal('rollershutter_runs', '1'); 
       fibaro:debug('Sunset... Closing rollershutters');
       --fibaro:debug('Waiting ' .. min .. ' min');
       --fibaro:sleep(random*100000);
                fibaro:call(32, 'close');
                fibaro:call(34, 'close');
                fibaro:call(52, 'close');
                fibaro:call(42, 'close');
                fibaro:call(44, 'close');
                fibaro:call(46, 'close');
                fibaro:call(50, 'close');
                fibaro:call(30, "turnOn"); -- Schlauch Light = ON
    		-- Waiting until the door is closed
    			--while 
    			--(fibaro:getValue(24, 'value') > 0) do
 				--fibaro:sleep(10*1000)
  				--end
    			--fibaro:call(36, 'close');
       fibaro:debug('Rollershutters closed');
       fibaro:setGlobal('rollershutter_runs', '0');

-----------------------------------------
-- TEMPERATUR < 0
-----------------------------------------
-----------------------------------------
-- SUNRISE : working days when Temp < 0
-----------------------------------------
elseif ((((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunriseHour)) and rollershutter_runs == 0 and tonumber(temp)<=-3)
   then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
       fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunrise... Temperatur < 0... Rollershutters stay closed with exception Terrasse!');
       fibaro:debug('Only Rollershutters : Terrasse Left & Right are opened.');
                fibaro:call(34, 'open'); -- Terrasse left
                fibaro:call(36, 'open'); -- Terrasse right
       -- if too dark (<10 lux), turn the light ON
       if tonumber(fibaro:getValue(64, "value")) < 10
       	then fibaro:call(30, "turnOn");
       	end
       fibaro:setGlobal('rollershutter_runs', '0');
--End of IF loop
end
setTimeout(rollershutter, 60*1000);
--End of FUNCTION 
end

if (sourceTrigger['type'] == "autostart") then
rollershutter();
end

Hi,

Bei “Other” hast du die Szene sicherlich manuell gestartet?
Wie reproduzierst du “Autostart”?

Viele Grüße Hoggle

Hi Hoggle,
danke für den Hinweis. Es war mein Denkfehler. Der Parameter %%autostart startet die Szene sobald sie abgespeichert wird. Ich habe die Szene getestet indem ich im Editor-Fenster auf START geklickt habe :-).
Jetzt liefet der Trigger den Type “autostart” und die Function wird aufgerufen. Leider bei mir hat sich danach sowieso nicht getan. Das lag allerdings daran, dass das TimeOut-Intervall (ursprünglich 60sec) am Ende der Function sich nicht mit der bei der IF Abfrage definierten Zeit “getroffen” hat. Das habe ich so gelöst, dass ich nun bei der IF Abfrage nicht eine konkrete Zeit sondern ein Zeit-Intervall von 2min angebe und damit läuft die Szene einwandfrei.


		if ((currentDate.wday == 2) and ( tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "11", "08"))) and (tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "11", "10"))) )
			then
				fibaro:call(30, "turnOn");
				fibaro:call(50, 'close');
				fibaro:debug('End of IF loop ..');
			end

Danke vielmals !