Rolladen-Steuerung mit Abfrage offener Tür

Hallo zusammen,

bin neu hier im Forum und bei Fibaro allgemein.
Hatte bislang fhem auf einem Raspberry laufen, bin aber vor kurzem zu einer HC2 gewechselt - das hat mir das Leben deutlich leichter gemacht :slight_smile:
Einige einfache LUA-Scripts habe ich schon erstellt, das klappte auch ganz gut. Jetzt hänge ich aber an einem Skript, das folgendes tun soll:

alle Rollos im Erdgeschoss sollen 30min nach Sonnenuntergang geschlossen werden, sofern auch die Terrassentür geschlossen ist.
Wenn die Terrassentür offen ist, sollen alle Rollos bis auf das der Terrassentür runtergehen.
Das Rollo der Terrassentür wird dann später beim schließen der Terrassentür mit einem anderen Script geschlossen bzw. wieder geöffnet, falls man die Terrassentür bei geschlossenem Rollo nochmal öffnen sollte. Dieses Script funktioniert auch, nur das “Haupt-Script” will nicht.

Das Problem scheint an den Wochentagen bzw. der Zeit nach Sonnenuntergang zu liegen.
Wenn ich in folgendem Code in den Zeilen 15 - 17 die if-Anweisung mit der Zeit gegen irgendwas beliebiges austausche klappt es.

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

	local sourceTrigger = fibaro:getSourceTrigger();
	function tempFunc()
    local currentDate = os.date("*t");
    local Terrassentuer_Zu = (tonumber(fibaro:getValue(20, "value")) == 0);
	local Terrassentuer_Auf = (tonumber(fibaro:getValue(20, "value")) == 1);
  	local startSource = fibaro:getSourceTrigger();
 
    
if (
 ( ((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()-30*60) == fibaro:getValue(1, "sunsetHour") ) )
) then
  
    if Terrassentuer_Zu then
 	 	fibaro:setGlobal("Rollos", "unten");
  		fibaro:setGlobal("Kontrolletti", "unten");
  		local value_Rollos = fibaro:getGlobal('Rollos');
  		local value_Kontrolletti = fibaro:getGlobal('Kontrolletti');
     	fibaro:debug('Terrassentuer ist geschlossen');
  		fibaro:debug('Rollozeit: ' ..value_Rollos);
  		fibaro:debug('Status Terrassentuer: ' ..value_Kontrolletti);
  			fibaro:call(6, "close");
			fibaro:call(8, "close");
			fibaro:call(12, "close");
			fibaro:call(14, "close");
			fibaro:call(16, "open");
  end

     if Terrassentuer_Auf then
   	 	fibaro:setGlobal("Rollos", "unten");
  		fibaro:setGlobal("Kontrolletti", "oben");
  		local value_Rollos = fibaro:getGlobal('Rollos');
  		local value_Kontrolletti = fibaro:getGlobal('Kontrolletti');
  		fibaro:debug('Rollozeit: ' ..value_Rollos);
  		fibaro:debug('Status Terrassentuer: ' ..value_Kontrolletti);
     	fibaro:debug('Terrassentuer ist geöffnet');
			fibaro:call(8, "close");
			fibaro:call(12, "close");
			fibaro:call(14, "close");
			fibaro:call(16, "open");
    end

  end
  
  setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
    
    if Terrassentuer_Zu then
 	 	fibaro:setGlobal("Rollos", "unten");
  		fibaro:setGlobal("Kontrolletti", "unten");
  		local value_Rollos = fibaro:getGlobal('Rollos');
  		local value_Kontrolletti = fibaro:getGlobal('Kontrolletti');
     	fibaro:debug('Terrassentuer ist geschlossen');
  		fibaro:debug('Rollozeit: ' ..value_Rollos);
  		fibaro:debug('Status Terrassentuer: ' ..value_Kontrolletti);
  			fibaro:call(6, "close");
			fibaro:call(8, "close");
			fibaro:call(12, "close");
			fibaro:call(14, "close");
			fibaro:call(16, "open");
  end

     if Terrassentuer_Auf then
   	 	fibaro:setGlobal("Rollos", "unten");
  		fibaro:setGlobal("Kontrolletti", "oben");
  		local value_Rollos = fibaro:getGlobal('Rollos');
  		local value_Kontrolletti = fibaro:getGlobal('Kontrolletti');
  		fibaro:debug('Rollozeit: ' ..value_Rollos);
  		fibaro:debug('Status Terrassentuer: ' ..value_Kontrolletti);
     	fibaro:debug('Terrassentuer ist geöffnet');
			fibaro:call(8, "close");
			fibaro:call(12, "close");
			fibaro:call(14, "close");
			fibaro:call(16, "open");
    end

  end
end
  

Wenn ich das Script wie gezeigt ausführe, dann kommt keine Fehlermeldung im Debuger.
Da ich mit Lua noch recht unbedarft bin, habe ich keine Idee, woran das Problem liegen könnte.
Habe zunächst eine grafische Szene erstellt, soweit ich gekommen bin und diese dann in eine Lua-Szene umgewandelt.
Der Rollo-shutter mit ID16 ist falsch verkabelt worden, daher steht dort ein “open” obwohl “close” gemeint ist.

Kann mir jemand helfen?

Vielen Dank und schöne Pfingsten,
Max

Hallo Max,

manchmal steckt der Teufel im Detail! :slight_smile: Ich würde den Zeitblock nicht in der Szene unterbringen. Es ist besser die Szene mit einer Varible zu triggern.
Schau Dir mal bitte 2 Beiträge an.

  1. Tageszeiten mit Lua setzen
  2. Die in dem Artikel erwähnte Lichtsteuerung.

Diese dienen der Erklärung, wenn Du dich da reinfuchsen möchtest.
Wenn Du einfach nur eine schnelle Lösung suchst, lege eine Variable (Sonnenuntergang) mit wahr/falsch oder an/aus oder ähnliches an.
In Deinem Script nimmst du den Zeitblock raus und setzt die Variable Sonnenuntergang in den Trigger. Einfach mal so auf die Schnelle…


--[[
%% properties
%% events
%% globals
Sonnenuntergang
--]]

Zum Start der Szene nimmst Du dann

if ( fibaro:getGlobalValue("Sonnenuntergang") == "an" )
 then
(Alle deine Aktionen etc.)

Wenn Du die Tageszeiten aus der VarTime Szene nimmst kannst Du jegliche Variablen zu jeder Zeit setzen. Im Allgemeinen haben wir aber alle diese benötigten Variablen schon aus der Lichtsteuerung. Wie schon erwähnt, nur mal so auf die schnelle. Wenn Du noch Hilfe brauchst, lass es uns wissen.

Hi,

danke für deine schnelle Antwort!
Ich hab es mit deiner Lösung versucht, die mir auch sinnvoll erscheint, aber leider kriege ich es nicht hin.
Stattdessen habe ich jetzt erstmal grafische Szenen genutzt. Mit den Lua-Szenen werde ich nochmal mit etwas einfacheren Sachen starten.

Aber danke für deine Hilfe und den Input - das werde ich mir mal zu Gemüte führen :slight_smile:

Grüße,
Max