Zeitplaner

Hallo Zusammen,

im Vorgriff auf die HC2-Steuerung der Weihnachtsbeleuchtung habe ich versucht meine Umwälzpumpe smart zu machen.
In LUA.

Mittlerweile denke ich, dass zwei simple Block-Szenen das Problem schon längst gelöst hätten.
Aber es sollte eine LUA sein…

Kurz vorweg: Die Umwälzpumpe (über Fibaro WallPLug) soll die Woche über morgens um 5:55 angehen und in der Nacht wieder aus. Am Wochenende sind die Zeiten verschoben.
Durch die An-/Abwesenheitssteuerung soll die Pumpe an- bzw. ausgeschaltet werden. Bei Anwesenheit gilt der Zeitplan.

Ich habe das Gefühl, HC geht nur einmal durch die Szene durch und das war es dann. Oder die Bedingungen sind verquer. Zum Spielen hatte ich die Aus-Zeit entsprechend angepasst.
Der Debug gibt nur nach dem Speichern der Szene etwas aus. Sonst nichts.

Kann mir jemand sagen, was ich da falsch mache/denke?

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

-- Sonntag ist 1
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();

-- Pumpe AN
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) == "05:55") )
    and ( fibaro:getGlobalValue("Anwesend") == "Ja" ) )
 then
	fibaro:call(56, "turnOn");
    fibaro:debug("Mo-Fr, Pumpe an");
end
  
if ((((currentDate.wday == 1 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "07:00") )
    and ( fibaro:getGlobalValue("Anwesend") == "Ja") )
  then 
	fibaro:call(56, "turnOn");
    fibaro:debug("Sa-So, Pumpe an");
end
  
--Pumpe AUS  
if ( ((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) == "20:52")
      and fibaro:getGlobalValue("Anwesend") == "Ja" )
 then
	fibaro:call(56, "turnOff");
    fibaro:debug("Mo-Do, Pumpe aus");
end
  
if ((((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "01:00") )
    and fibaro:getGlobalValue("Anwesend") == "Ja" ) 
  then
	fibaro:call(56, "turnOff");
    fibaro:debug("Fr-So, Pumpe aus");
end
  
fibaro:debug("Oder No action");  

end

if (sourceTrigger["type"] == "autostart") 
 then tempFunc()
      fibaro:debug("Type Autostart"); 
 end
  

Vielen Dank im Voraus
VG Hoggle

Hey, unabhängig davon was du vor hast, braucht jede Szene einen Trigger. Oben steht autostart drinnen, die Szene Startet also 1. wenn du auf start drückst und wenn deine HC2 bootet. Alles andere müsstest du mit einer loop lösen. Oder du startest die Szene durch irgend ein Event mehrfach am tag und prüfst die Bedingungen.

Grüße Daniel

Hey,

dein Skript, startet wie Daniel schon richtig bemerkt hat einmal. Du startest aber hier:

if (sourceTrigger[“type”] == “autostart”)
then tempFunc()
fibaro:debug(“Type Autostart”);
end

immer wieder die tempfunc-Funktion. Diese ist bei dir aber leer: function tempFunc()

Deine ganzen Prüfungen müssen in diese Funktion verlagert werden. Wenn du dann mit der oben genannten Schleife die Funktion immer wieder ausführst, dann prüft er auch immer die Bedingungen.

Gruß

Danke!
Dann habe ich die “tempFunc()” nicht richtig/vollständig adaptiert.

Muss das in etwas so aussehen:

function tempFunc()
........Scipt
end
tempFunc()

Danke im Voraus
Viele Grüße Hoggle

Ah, sorry. Hab was übersehen. So wie du es machst ist es richtig. Es hat aber eine Kleinigkeit gefehlt. Zeile 9-38 ist die Funktion tempfunc Versuch mal das hier:

--[[
%% properties
%% autostart
%% globals
--]]
fibaro:debug('Erstmalig gestartet')
-- Sonntag ist 1
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
fibaro:debug('Funktion gestartet')
 
-- Pumpe AN
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) == "14:30") ))
 then
    fibaro:debug("Mo-Fr, Pumpe an");
end
  
if ((((currentDate.wday == 1 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "07:00") ))
  then 
    fibaro:debug("Sa-So, Pumpe an");
end
  
--Pumpe AUS  
if ( ((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) == "20:52"))
 then
    fibaro:debug("Mo-Do, Pumpe aus");
end
  
if ((((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "01:00") )) 
  then
    fibaro:debug("Fr-So, Pumpe aus");
end
  
fibaro:debug("Oder No action");  
setTimeout(tempFunc, 60*1000)
end
 
if (sourceTrigger["type"] == "autostart") 
 then tempFunc()
      fibaro:debug("Type Autostart"); 
 end

Das lief bei mir sauber durch (Hab die Variablen entfernt, hatte keine Lust die anzulegen :wink: ):

[DEBUG] 14:28:58: Erstmalig gestartet
[DEBUG] 14:28:58: Oder No action
[DEBUG] 14:28:58: Type Autostart
[DEBUG] 14:29:58: Erstmalig gestartet
[DEBUG] 14:29:58: Oder No action
[DEBUG] 14:30:58: Erstmalig gestartet
[DEBUG] 14:30:58: Mo-Fr, Pumpe an
[DEBUG] 14:30:58: Oder No action
[DEBUG] 14:31:58: Erstmalig gestartet
[DEBUG] 14:31:58: Oder No action

Danke Dir!
Im Wesentlichen habe ich das ja auch aus Deinen Skripten zusammengeklaut… :slight_smile:

Dann kann ich aber wieder auf elseif zurückgehen. Die vielen ifs fand ich komisch.

Versuche ich nachher.

Den “setTimeout(tempFunc, 60*1000)” hatte ich nicht wirklich dort verstanden…

Ist vergleichbar mit fibaro:sleep. Soll nur resourcenschonender sein.

Hi Boomx,

scheint zu laufen.
Danke schön für den Tipp.
Mal sehen, ober auch das Format 00:15 Uhr verarbeitet…

VG Hoggle

Danke!
Läuft. Super.

Macht es eigentlich einen Unterschied, ob man mehrere If-Schleifen einbaut oder auf elseif nutzt?

Das freut mich :slight_smile:

Bei so einem Skript macht es glaub ich keinen Unterschied. Du sparst dir mit elseif ein end :wink: aber bei verschachtelten Skripten macht es schon Sinn, um ein wenig die Übersicht zu erhöhen.

Okay, dass mit der funktion habe ich auch übersehen. Das kommt davon, wenn man die scripts nicht formatiert mit tab :stuck_out_tongue:

grüße an euch,

daniel

Tzzzzzzzzzz :smiley:

Tab?
Guter Tipp
Beim nächsten mal… :slight_smile: