tempFunc()

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

 local startSource = fibaro:getSourceTrigger();
 function tempFunc()
 local currentDate = os.date("*t");
 local sourceTrigger = fibaro:getSourceTrigger();
 local scene = 150

 if (fibaro:countScenes() >1)
 
 then
 fibaro:debug("Es läuft mehr als eine Instanz");
 fibaro:abort()
 end
 

  -------------------------------------------------------------------------------------------------------
  --TV Simulator ein
  -------------------------------------------------------------------------------------------------------
  if (((tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "18", "00")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "00", "30")))))
  
then    
  if (fibaro:getGlobalValue("AnwesenheitsCheck") == "Abwesend"
 and  fibaro:getGlobalValue("Sonnenstand") == "Sonnenuntergang"
 and  tonumber(fibaro:getGlobalValue("Teilw_Alarm")) == tonumber("0")
 and  tonumber(fibaro:getValue(14, "value")) < 1)
    
 then 
      fibaro:debug("------------------------------------------------------------------------------------------");      
      fibaro:debug(os.date("(%d.%m.%Y)  %H:%M Uhr Abwesenheit erkannt!"));
      fibaro:debug("------------------------------------------------------------------------------------------");      
      fibaro:call(14, "turnOn"); -- TV Simulator eingeschaltet
      fibaro:debug("------------------------------------------------------------------------------------------");      
      fibaro:debug("Dämmerung hat eingesetzt");
      fibaro:debug(os.date("TV Simulator um %H:%M Uhr eingeschaltet.....!"));
      fibaro:debug("------------------------------------------------------------------------------------------");      
 end
 end
  
  if (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "01:00")
  or (fibaro:getGlobalValue("AnwesenheitsCheck") == "Anwesend")
 
 then
 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  tonumber(fibaro:getValue(14, "value")) > 0) 
          
 then      
      fibaro:call(14, "turnOff"); -- TV Simulator ausschalten
      fibaro:debug("------------------------------------------------------------------------------------------");      
      fibaro:debug(os.date("(%d.%m.%Y) TV Simulator um %H:%M Uhr ausgeschaltet.....!"));
      fibaro:debug("------------------------------------------------------------------------------------------");      
 end
 end
 
    
 if   fibaro:getGlobalValue("AnwesenheitsCheck") == "Abwesend"
  
then
      tempFunc()
      fibaro:debug("------------------------------------------------------------------------------------------");      
      fibaro:debug(os.date("%H:%M Uhr Szene eingeschaltet...!"));
      fibaro:debug("------------------------------------------------------------------------------------------");      
 end  

      setTimeout(tempFunc, 60*1000)
 end


Hallo zusammen
Vielleicht kann mir jemand aus die Sprünge helfen :slight_smile: Möchte die tempFunc() nur bie Abwesenheit eischalten, “was nach eine speicherung der Szene auch funktioniert”. Wenn nicht gespeichert wird triggert die Szene aber trotzdem bei Anwesenheit jede Minute weiter. Bin für jede Hilfe dankbar!! Gruss fastsnake…

Hi,

der Aufbau der Szene ist nicht einfach nachzuvollziehen.
Nutze für das Strukturieren mal den Tab oä.
Das hört ggf die Chance auf ein Feedback…

Nach dem Speichern sorgt Zeile 71 fortan (=immer) für die minutliche Ausführung des gesamten Codes.

Wenn “Abwesend” die Szene triggert, wird diese nur einmalig durchlaufen, Zeile 62ff.

VG Hoggle

Hallo Hoggle
Vielen Dank für Deine Antwort. Ich möchte mit der Variable “Anwesenheit” bzw. “Abwesenheit” nur den tempFunc() ein und ausschalten, damit die Szene bei Anwesenheit nicht den ganzen Tag unnötig triggert. Einschalten klappt gut, aber ausschalten bei Anwesenheit nicht. Die Struktur der Szene entspricht dem Ablauf weiss nicht wie ich die anders darstellen könnte. Vielen Dank für eure Hilfe. Gruss fastsnake

Ich hätte das “Abwesend” in die Bedingung mit eingebaut.
Szene läuft immer, und nur bei Abwesend wird geschaltet.

Du kannst ab Zeile 71 folgendes eintragen:

if fibaro:getGlobal("AnwesenheitsCheck") == "Abwesend" then ctime= 60000 else ctime=3600000 ;end
setTimeout(tempFunc, ctime)

Dann würde bei Anwesenheit nur einmal pro Stunde geprüft.

Hi Jeff
Das ist schon mal was in die richtige Richtung, super! Gibt es eine Möglichkeit die temFunc() bei Anwesenheit ganz abzustellen? So würde die Szene nur bei bedarf triggern. Vielen Dank für Deine Antwort, Gruss fastsnake

@Hoggle: Die Szene schaltet nur bei Abwesend, triggert aber den ganzen Tag, das möchte ich unterbinden…

Warum?

Ich dachte an eine RAM Entlastung wenn all die Szenen nicht unnötig getriggert werden. War warscheinlich nicht so eine gute Idee, trotzdem vielen Dank für eure spontane Hilfe. Wünsche ein schönes Wochenende, Gruss fastsnake

Die Szene triggert nicht, die läuft dauerhaft in einer Instanz. Wenn sich der Status der Variablen ändert, dann wird die Szene in einer zweiten Instanz getriggert. Schon ein Unterschied…

Wieso machst du eine %%autostart-Szene draus, wenn die Szene nicht dauerhaft laufen soll?

Gruß

Hallo boomx
Vielen Dank für die Info, habe etwas zu laut gedacht :slight_smile: Die Frage war eigentlich: Kann man die tempFunc() mit einem Trigger innerhalb einer Szene ein und wieder ausschalten? Aber alles kann man nicht immer umsetzen, danke für euren Einsatz. Hiermit schliesse ich diesen tread… Gruss fastsnake

tempFunc() ist ja nichts anderes als eine Funktion innerhalb eines Skriptes. tempFunc() heißt die nur, weil die Szene von einer Blockszene zu einer LUA-Szene umgewandelt wurde. :wink: Ja klar kann man das. Mit LUA geht eigentlich (fast) alles :wink:

Gruß