LUA Script startet nicht automatisch

Hallo, ich bin absolut neu hier und hoffe das mir jemand meinen Fehler zeugen kann.
Ich habe versucht mir ein ganz einfaches Script zu schreiben bei dem die Rollläden bei Sonnenaufgang nur bis zu den Schlitzen geöffnet wird und dann um 07:00 ganz geöffnet wird. Beim zumachen sollen die Rollläden bei Sonnenuntergang geschlossen werden.

Das Script funktioniert auch soweit, wenn ich es manuell zum Debuggen starte.

Nur wie krieg ist das Ding AUTOMATISCH zum laufen? :wink: grrrr. Leich die Nerven verloren. :slight_smile:

Ich hoffe das mir jemand meinen Fehler zeigen kann.


--[[
%% autostart
%% properties
%% globals
%% events
--]]

-- Roller Shutter
-- Version:			1.0
-- benötigt wird eine Variable "rollershutter_runs" mit dem Wert 0

-- doppelte Szene werden abgebrochen
if (fibaro:countScenes()>1) then
   fibaro:debug('Doppelte Szene - wird abgebrochen.')
   fibaro:abort(); 
end

-- formatierung der debug ausgaben
local function Debug( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

local sourceTrigger = fibaro:getSourceTrigger();

-- Sensoren definieren
local TempSensorID	= 66

-- Rollläden
local rollerID		= {151}		-- Rolläden zB {151,160,170}

-- Öffnungsstatus
local posQuarter  = 20  -- viertel offen 
local posHalf     = 50  -- halb offen
local pos3Quarter = 70  -- 3/4 offen
local posOpen     = 99  -- ganz offen
local posClose    = 0   -- zu

local TimeToFullOpen = '07:00'

-- Debugging
local debug       = true   -- keine debug ausgaben
local debugonce   = true -- | false
local version     = "1.0"

local newSunrise	= fibaro:getValue(1,"sunriseHour");
local newSunset		= fibaro:getValue(1,"sunsetHour");
local currentDate 	= os.date("*t");
local actionTime  	= (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min));
temperatur = tonumber(string.format("%.2f",fibaro:getValue(TempSensorID, "value")));

local function shutter(pos)
	Debug('orange','enter function shutter() with pos:' ..pos);
	fibaro:setGlobal("rollershutter_runs", "1");
	for r=1, #rollerID do
        if rollerID[r] ~= nil then
            fibaro:call(rollerID[r],'setValue', pos )
        end
        fibaro:sleep(math.random(2000,4000)) ;
    end --for
	fibaro:setGlobal("rollershutter_runs", "0");
end

function rollershutter()
	Debug('red','Sonnenaufgang:' ..newSunrise);
	Debug('red','Sonnenuntergang:' ..newSunset);
	Debug('red','aktuelle Zeit:' ..actionTime);
	Debug('red','Zeit zum öffnen:' ..TimeToFullOpen);
	Debug('skyblue','Temperatur: ' .. temperatur .. '° um ' .. os.date('%H:%M'));
	
	if (actionTime == newSunrise) then
		Debug('yellow','jump to funktion shutter with pos:' ..posQuarter);
		shutter(posQuarter);
	elseif (actionTime >= TimeToFullOpen) then
		Debug('yellow','It is time ti fully open:' ..TimeToFullOpen);
		shutter(posOpen);
	elseif (actionTime == newSunset) then
		Debug('yellow','jump to function shutter with pos:' ..posClose);
		shutter(posClose);
	end
	
end

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

mfg
Johannes

Unbenannt.png

hi, so wie ich das sehe kann es so auch nicht starten. Es startet nur kurz beim abspeichern, welches ja nicht genau bei"(actionTime == newSunrise)" passiert, und das war es. Du brauchst eine Schleife, die dein Programm minütlich startet und dann schaut, ob deine IF -Then Anweisung passt. So wir diese Abfrage nur einmal gestartet und das war es.

Bau noch das:" setTimeout(rollershutter, 60*1000); " in Zeile 81 ein

Hi,

vielen dank für die Antwort. Aber ist nicht durch die Abfrage der Autostart Variable in Zeile 84 und den Aufruf der Funktion rollershutter() eine Schleife erstellt?

Aber du hast Recht, das Script läuft genau einmal beim Speichern.

mfg
Johannes