CronJob Skript für automatische Ausführung

Hi Leute,
Auf meiner HC2 liefen bis vor Kurzem ca. 10 Skripte mit einem Minuten Timer um diverse wiederkehrende Sachen auszuführen.

Ich habe nun im Netz ein Skript gefunden das die Linux Leute als cronjob bezeichnen würden.
Da ich hier im SIIO Forum bei meiner Suche dazu nichts gefunden hab möchte ich meine Idee gerne teilen.
Ich habe inzwischen ALLE meine Zeitgesteuerten Skripte abgelöst und hier reingebaut. Es klappt hervorragend.

Gibt es von euch irgendwelche Erfahrungen warum es keine gute Idee ist das EIN ZENTRALES Skript machen zu lassen?
Freue mich auf euer Feedback!!

Im Anhang ein Beispiel Skript mit Debug Einträgen zur Erweiterung wie es euch gefällt …

--[[
%% autostart
%% properties
%% weather
%% events
%% globals
--]]
if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
sourceTrigger = fibaro:getSourceTrigger()

function DT(DATETIME)
-- Erstellt eine Variable mit deutschsprachigem Wochentag und Monat
  local WD = {'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'}
  local M = {'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'}
  local tableDT= (os.date('*t', tonumber(DATETIME))) 
  tableDT.month = M[tonumber(tableDT.month)]
  tableDT.wday =  WD[tonumber(tableDT.wday)]
  return tableDT.wday ..' ' ..tableDT.day ..'. ' ..tableDT.month ..' ' ..tableDT.year ..' '
end

function tempFunc()
-- erstellt die benötigten Variablen für die Zeitberechnung
  timestamp = os.time()
  now_time = os.date("%X", timestamp)
  now_min = os.date("%M", timestamp)
  now_hour = os.date("%H", timestamp)
  now_day = os.date("%d", timestamp)
  now_day_long = os.date("%A", timestamp)
  now_month = os.date("%m", timestamp)
  now_month_long = os.date("%B", timestamp)
  now_year = os.date("%Y", timestamp)
  sunset = fibaro:getValue(1, "sunsetHour")
  sunrise = fibaro:getValue(1, "sunriseHour")
  temp_weather = tonumber(api.get('/weather')['Temperature'])
  temp_Sensor1 = fibaro:getValue(115, "value")
--------------------------------------------------- jede Minute -----------------------------------------------
--fibaro:debug('JEDE Minute 1 x')

--------------------------------------------------- jede Minute -----------------------------------------------
-- Variable für Sonnenumtergang prüfen & setzen
  local sunset = fibaro:getValue(1, "sunsetHour")
  local sunrise = fibaro:getValue(1, "sunriseHour")
  local gSunState = fibaro:getGlobal("SunState")
  if os.date("%H:%M", os.time()) >= sunset then 
    if not (gSunState == "Sonnenuntergang") then
      Debug("green",(os.date("%d.%m.%Y - Sonnenuntergang um "..sunset.." ")))
      fibaro:setGlobal("SunState", "Sonnenuntergang")
    else
      --Debug('grey',"SonnenUNTERgang ist noch gleich")
    end
  elseif os.date("%H:%M", os.time()) >= sunrise then 
      if not (gSunState == "Sonnenaufgang") then
        Debug("magenta",(os.date("%d.%m.%Y - Sonnenaufgang um "..sunrise.." ")))
        fibaro:setGlobal("SunState", "Sonnenaufgang")
      else
        --Debug('grey',"SonnenAUFgang ist noch gleich")
      end
  end 
------------------------------------------------- 5-60 Minuten Skripte ---------------------------------------------------------------
  if(now_min == '00' or now_min == '05' or now_min == '10' or now_min == '15' or now_min == '20' or now_min == '25' or now_min == '30' or now_min == '35' or now_min == '40'  or now_min == '45' or now_min == '50' or now_min == '55') then
  --fibaro:debug('alle 5 Minuten')
  end
  if(now_min == '01' or now_min == '11' or now_min == '21' or now_min == '31' or now_min == '41' or now_min == '51') then
  --fibaro:debug('alle 10 Minuten')
  end
  if(now_min == '05' or now_min == '20' or now_min == '35' or now_min == '50') then
  --fibaro:debug('alle 15 Minuten')
  end
  if(now_min == '02' or now_min == '32') then
  --fibaro:debug('alle 30 Minuten')
  end
  if(now_min == '03') then
   --fibaro:debug('alle 60 Minuten')
  end
--------------------------------------------- 0:01 Uhr -----------------------------------------------------------------------------
-- tägliches Setzen der Datumsvariable auf deutsch!
  if(now_hour == '00' and now_min == '01') then
    fibaro:setGlobal("DatumVar",DT(os.date()))
    fibaro:sleep(2000)
    DatLang = fibaro:getGlobal("DatumVar")
    Meldung = "Heute ist: "..DatLang.." "
    Debug('lightblue', "Täglich um "..now_hour.. " Uhr "..now_min.." ")
  end
--------------------------------------------- 4:20 Uhr -----------------------------------------------------------------------------
  if(now_hour == '04' and now_min == '20') then
    Debug('orange', "Täglich um "..now_hour.. " Uhr "..now_min.." ")
  end
--------------------------------------------- 5:30 Uhr -----------------------------------------------------------------------------
  if(now_hour == '05' and now_min == '30') then
     Debug('orange', "Täglich um "..now_hour.. " Uhr "..now_min.." ")
  end
--------------------------------------------- 6:53 Uhr und weniger als 1 Grad außentemperatur-----------------------------------------------------------------------------
  if(now_hour == '06' and now_min == '53' and  tonumber(fibaro:getValue(115, "value")) < 1) then
    Debug('orange', "Täglich um "..now_hour.. " Uhr "..now_min.."wenn Sensor 115 unter 1 Grad anzeigt ")
  end
----------------------------------------- täglich um 9:00 Uhr -----------------------------------------------------------------------------
-- Variable "DayState" auf "Day" setzen
  if(now_hour == '09' and now_min == '00') then
     Debug("orange",(os.date("%d.%m.%Y - Tag")))
     fibaro:setGlobal("DayState", "Day")
  end
---------------------------------------------9:30 Uhr und mehr als 30 Grad Außentemperatur-----------------------------------------------------------------------------
  if(now_hour == '09' and now_min == '30' and tonumber(fibaro:getValue(115, "value")) > 30) then
    Meldung = "Es hat mehr als 30 Grad Außentemperatur"
    Debug('orange', "Täglich um "..now_hour.. " Uhr "..now_min.." ")
  end
---------------------------------------------15:32 Uhr -----------------------------------------------------------------------------
  if(now_hour == '15' and now_min == '32') then
    Debug('orange', "Täglich um "..now_hour.. " Uhr "..now_min.." ")
  end
----------------------------------------- täglich um 19:00 Uhr -----------------------------------------------------------------------------
-- Variable "DayState" auf "Evening" setzen
  if(now_hour == '19' and now_min == '00') then
    Debug("lightblue",(os.date("%d.%m.%Y - Abend")))
    fibaro:setGlobal("DayState", "Evening")
  end
---------------------------------------- täglich um 23:59 Uhr -----------------------------------------------------------------------------
-- Variable "DayState" auf "Night" setzen
  if(now_hour == '23' and now_min == '59') then
    Debug("Blue",(os.date("%d.%m.%Y - Nacht")))
    fibaro:setGlobal("DayState", "Night")
  end
--------------------------------------------- am 01. Tag des Monats um 01:30 Uhr -----------------------------------------------------------------------------
  if(now_day == '01' and now_hour == '01' and now_min == '30') then
    fibaro:startScene(001) -- Szene für Verbrauchsstatistik gestartet..
    Debug('lightgreen', "Monatlich am  "..now_day..".Tag, um "..now_hour.. " Uhr "..now_min.."")
  end
  -----------------------------------------------------------------------------------------------------------------------------------------------------
  setTimeout(tempFunc, 60*1000)
end

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

pblacky,

gute Idee, aber dein Script wird von Zeit zu Zeit einzelne Jobs ausfallen lassen.
Grund ist der Sleeptimer von 60 Sekunden am Ende des Programmes.
Wenn z.B. die Ausführungszeit sich der vollen Minute nähert, dann kann es sein dass auf Grund der Verzögerungen im Script volle Minuten ausgelassen werden.
z.B. 11:59:59, das Programm läuft einmal durch hat vielleicht 1" delay im Code kommt um 12:00:00 zum Ende ohne das 5 Minuten Skript ausgeführt zu haben und ist nach der Pause bei 12:01:00.
Kann z.B. ärgerlich sein wenn Jobs welche einmal täglich abgearbeitet werden sollen nicht verlässlich sind.

Andere Möglichkeit ist:

  • Variable mit letzter Minute anzulegen
  • Prüfen ob letzte Minute = aktuelle Minute
  • Wenn aktuelle Minute nicht letzte Minute, dann letzte Minute setzten und alle Deine Scripts ausführen.
  • Sleep auf z.B. 15" kürzen.

Weitere Verbesserung ist weitere Variablen anzulegen welche die Minuten raufzählen und das jeweilige 5,10, usw Script zur gleichen Minute ausführen.
Wenn die Scripts sich an der vollen Stunde orientieren sollen, dann kannst auch den Stundenwechsel zum 0 stellen verwenden.

lg,

Markus

WOW!! Danke für diesen Hinweis!
Wenn das nicth 100% zuverlässig läuft, dann ist es keine gute Idee!!

Muss ehrlich gestehen, ich kann gut Funktionsschnipsel in Skripten erkennen und diese zu anderen Skripten zusammenbauen, mit dem Umsetzen von so konkreten Anforderungen haperts noch etwas :wink:
Ich werd mir gleich überlegen, wie ich das realisieren kann, mal sehen ob ich es schaffe!

Die Funktion mit den Minuten Variablen, die du meinst, müsste ja auf gleicher Ebene wie der Befehl:
setTimeout(tempFunc, 60*1000)
sein, hab ich das richtig verstanden?

Oder gibt es vielleicht hier ein Beispielskript, wo ich mir das abgucken kann :wink:

Sollte so in Deinen Code:(Alter Code nur Auszugsweise angeführt)

function tempFunc()
MOVE:  timestamp = os.time()
MOVE: now_min = os.date("%M", timestamp)
NEU:if(past_min ~= now_min) then
NEU: past_min = now_min
ALT:-- erstellt die benötigten Variablen für die Zeitberechnung
ALT:..........
ALT:  -----------------------------------------------------------------------------------------------------------------------------------------------------
NEU:end
ALT_CHANGE:  setTimeout(tempFunc, 15*1000)
end

Danke für deine Hilfe!!
Ich hab das jetzt mal eingebaut und es läuft jetzt alle 15 Sekunden -> soweit ok.
Leider konnte ich die Minutenslots noch nicht richtig lösen.
Ich hatte versucht dass die Minutenbereiche nur laufen, wenn past_min ~= now_min, allerdings hab ich da irgendwo einen Denkfehler ;-(

Ich habe das Skript jetzt soweit minimiert dass nur mehr der relevante Code da ist.
Mir würde die Definition der Variable “past_min” fehlen, ich weiss aber nicht ob das nötig ist!

Habe ich dein Beispiel falsch eingebaut ?
Hast du vielleicht einen Tipp?


--[[
%% autostart
%% properties
%% weather
%% events
%% globals
--]]
if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
sourceTrigger = fibaro:getSourceTrigger()

function tempFunc()
-- erstellt die benötigten Variablen für die Zeitberechnung
  timestamp = os.time()
  now_min = os.date("%M", timestamp)
  if (past_min ~= now_min) then
    past_min = now_min
  end
  now_time = os.date("%X", timestamp)
  now_hour = os.date("%H", timestamp)
  now_day = os.date("%d", timestamp)
  now_day_long = os.date("%A", timestamp)
  now_month = os.date("%m", timestamp)
  now_month_long = os.date("%B", timestamp)
  now_year = os.date("%Y", timestamp)
  sunset = fibaro:getValue(1, "sunsetHour")
  sunrise = fibaro:getValue(1, "sunriseHour")
  temp_weather = tonumber(api.get('/weather')['Temperature'])
  temp_Sensor1 = fibaro:getValue(115, "value")
--------------------------------------------------- jede Minute -----------------------------------------------
  if (past_min ~= now_min) then
    fibaro:debug('JEDE Minute 1 x')
  end
  fibaro:debug('alle 15 Sekunden!! 1 x')
------------------------------------------------- 5-60 Minuten Skripte ---------------------------------------------------------------
  if (past_min ~= now_min) then
    if(now_min == '00' or now_min == '05' or now_min == '10' or now_min == '15' or now_min == '20' or now_min == '25' or now_min == '30' or now_min == '35' or now_min == '40'  or now_min == '45' or now_min == '50' or now_min == '55') then
    fibaro:debug('alle 5 Minuten')
    end
    if(now_min == '01' or now_min == '11' or now_min == '21' or now_min == '31' or now_min == '41' or now_min == '51') then
    fibaro:debug('alle 10 Minuten')
    end
    if(now_min == '05' or now_min == '20' or now_min == '35' or now_min == '50') then
    fibaro:debug('alle 15 Minuten')
    end
    if(now_min == '02' or now_min == '32') then
    fibaro:debug('alle 30 Minuten')
    end
    if(now_min == '03') then
    --fibaro:debug('alle 60 Minuten')
    end
  end
--------------------------------------------- einmal täglich -----------------------------------------------------------------------------
  if(now_hour == '14' and now_min == '41') then
    Debug('lightblue', "Täglich um "..now_hour.. " Uhr "..now_min.." ")
  end
  -----------------------------------------------------------------------------------------------------------------------------------------------------
  setTimeout(tempFunc, 15*1000)
end

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

Das end nach dem past_min check gehört unmittelbar vor setTimeout(tempFunc, 15*1000) verschoben.

  if (past_min ~= now_min) then
    past_min = now_min
  MOVE: end

Dann wird die Funktion nur durchgeführt wenn Minute geändert.
Timeout 15" wird immer gemacht

past_min wird beim 1. Durchlauf auf einen gültigen Wert gesetzt.
Am besten mal eine Debug Funktion in den Code setzten welche dir bei jedem Durchlauf die Minute anzeigt(in der Schleife)
Damit siehst du ob Code genau 1 x die Minute ausgeführt wird.

JETZT hab ichs Verstanden, die GESAMTE Funktion TempFunc() bekommt eine zusätzliche Schleife DRÜBER wo die Minute abgefragt wird!!
Das ist GENIAL :wink:
Läuft jetzt soweit, vielen DANK!!
Werd jetzt mal ein paar Tage testen bevor ich das mit den Zählern bei den Minuten angehe :wink:

Eine andere Möglichkeit Scripte in Teilintervalen einer Stunde laufen zu lassen: (Modulo Operation prüft Rest einer Division)

  if now_min%5==0 then 
    fibaro:debug("every 5 minutes") 
  
  end
  if now_min%10==0 then 
    fibaro:debug("every 10 minutes") 
  end
  
  if now_min%15==0 then 
    fibaro:debug("every 15 minutes") 
  end
  
  if now_min%30==0 then 
    fibaro:debug("every 30 minutes") 
  end
  
  if now_min%60==0 then 
    fibaro:debug("every hour") 
  end

Oder das hier:

https://forum.fibaro.com/topic/23510-scene-main-scene-for-time-based-events-control-v-125/

@Hoggle
Danke für den Link, habe mir das Skript runtergeladen und kurz angesehen, ist zwar toll und sehr umfangreich, aber für meine Zwecke etwas zu koplex!
Außerdem übersteigt es etwas meine derzeitigen Programmierkenntnisse :wink:

@mdietinger
Danke für den Hinweis mit der “Modulo Funktion”.
Habs mal eigebaut, funktioniert bestens!

Vielen Dank für eure Tipps und die Bereitschaft mir immer weider unter die Arme zu greifen, toll von euch!!!
Bin jetzt mit meinem CronJob vorerst mal sehr zufrieden, mal sehen was mir damit noch alles einfällt :wink:
Hier das aktuelle Skript mit einigen Beispieleinträgen:

-- 
if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end --löscht doppelte Szenen
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end --farbige Debugmeldungen
sourceTrigger = fibaro:getSourceTrigger()

function DT(DATETIME)
-- Erstellt eine Variable mit deutschsprachigem Wochentag und Monat für Debug und Mail
  local WD = {'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'}
  local M = {'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'}
  local tableDT= (os.date('*t', tonumber(DATETIME))) 
  tableDT.month = M[tonumber(tableDT.month)]
  tableDT.wday =  WD[tonumber(tableDT.wday)]
  return tableDT.wday ..' ' ..tableDT.day ..'. ' ..tableDT.month ..' ' ..tableDT.year ..' '
end

function SendMail()
-- Sendet ein Email gefüllt mit den entsprechenden Variablen beim Aufruf (siehe unten)
  DatLang = fibaro:getGlobal("DatumVar")
  fibaro:call(2, "sendEmail","Fibaro - CronJob","\nNachricht vom Fibaro Homecenter 2\n"..DatLang.." \n\n CronJob - "..Meldung.." \n\n"..temp_weather.." Grad Vorhersage \n"..temp_out.." Grad gemessen \n\nSonnenaufgang: "..sunrise.."\nSonnenuntergang: "..sunset.." ")
end

function tempFunc()
  timestamp = os.time()
  now_min = os.date("%M", timestamp)
  if (past_min ~= now_min) then
    past_min = now_min
    now_time = os.date("%X", timestamp)
    now_hour = os.date("%H", timestamp)
    now_day = os.date("%d", timestamp)
    now_day_long = os.date("%A", timestamp)
    now_month = os.date("%m", timestamp)
    now_month_long = os.date("%B", timestamp)
    now_year = os.date("%Y", timestamp)
    sunset = fibaro:getValue(1, "sunsetHour")
    sunrise = fibaro:getValue(1, "sunriseHour")
    temp_weather = tonumber(api.get('/weather')['Temperature'])
    temp_out = 115 --ID des Temperatur Sensors für Messung der Außentemperatur

--------------------------------------------------- jede Minute --------------------------------------------------------------------
    --Debug('grey', "JEDE Minute")
------------------------------------------------- 5-60 Minuten Skripte -------------------------------------------------------------
    if now_min%3==0 then 
      --Debug('cyan', "alle 3 Minuten")
    end
    if now_min%5==0 then 
      --Debug('lightblue', "alle 5 Minuten")
    end
    if now_min%10==0 then 
      --Debug('lightblue', "alle 10 Minuten")
    end
    if now_min%15==0 then 
      --Debug('lightblue', "alle 15 Minuten")
    end
    if now_min%30==0 then 
      --Debug('lightblue', "alle 30 Minuten")
    end
    if now_min%60==0 then 
      --Debug('lightblue', "jede Stunde")
    end
--------------------------------------------- 0:01 Uhr -----------------------------------------------------------------------------
-- schreibt täglich das deutsche Datum in die Variable DatumVar 
    if(now_hour == '00' and now_min == '01') then
      fibaro:setGlobal("DatumVar",DT(os.date()))
      fibaro:sleep(2000)
      DatLang = fibaro:getGlobal("DatumVar")
      Meldung = "Heute ist: "..DatLang.." "
      Debug('lightblue', "Täglich um "..now_hour.. " Uhr "..now_min.." "..Meldung.." ")
    end
--------------------------------------------Beispiel täglich um 5:30 Uhr -----------------------------------------------------------
    if(now_hour == '05' and now_min == '30') then
      Debug('orange', "Täglich um "..now_hour.. " Uhr "..now_min.." ")
    end
--------------------------------------------- täglich 6:53 Uhr wenn Außentermometer weniger als 1 Grad misst------------------------
    if(now_hour == '06' and now_min == '53' and  tonumber(fibaro:getValue(temp_out, "value")) < 1) then
      Meldung = "Es hat weniger als 1 Grad Außentemperatur"
      Debug('orange', "Täglich um "..now_hour.. " Uhr "..now_min.." "..Meldung.." ")
      SendMail()
    end
----------------------------------------- setzt täglich um 9:00 Uhr die Variable DayState auf "Day" --------------------------------
    if(now_hour == '09' and now_min == '00') then
     Debug("orange",(os.date("%d.%m.%Y - Tag")))
     fibaro:setGlobal("DayState", "Day")
    end
--------------------------------------------- täglich 9:30 Uhr und mehr als 30 Grad Außentemperatur---------------------------------
    if(now_hour == '09' and now_min == '30' and tonumber(fibaro:getValue(temp_out, "value")) > 30) then
      Meldung = "Es hat mehr als 30 Grad Außentemperatur"
      Debug('orange', "Täglich um "..now_hour.. " Uhr "..now_min.." "..Meldung.." ")
    end
---                                    startet am 01. Tag des Monats um 01:30 Uhr die Szene für die Verbrauchsstatistik ------------
    if(now_day == '01' and now_hour == '01' and now_min == '30') then
      fibaro:startScene(245)
      Meldung = "Szene für Verbrauchsstatistik gestartet..."
      Debug('lightgreen', "Monatlich am  "..now_day..".Tag, um "..now_hour.. " Uhr "..now_min.." - "..Meldung.." ")
    end
-------------------------------------------------------------------------------------------------------------------------------------
  end
  setTimeout(tempFunc, 15*1000)
end

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

Hi Leute,
Nun habe ich das Cronjob Skript seit August 2018 ohne Probleme im Einsatz.
Seit einigen Tagen macht das Befüllen einer Variable aus einer API Funktion Porbleme!

Die Zeile 45:
temp_weather = tonumber(api.get('/weather')['Temperature'])
macht plötzlich den Fehler:

[DEBUG] 14:49:11: [1;31m2018-11-17 14:49:11.923096 [ error] API: Host not found (authoritative)
[DEBUG] 14:49:11: [1;31m2018-11-17 14:49:11.924544 [ error] timer handler failed with error: /opt/fibaro/scenes/261.lua:45: attempt to index a nil value

Hat irgendjemand eine Ahnung?
Habe die V 4.510 im Einsatz und das schon seit August, also keine Änderung der Firmware…

Hi pblacky,
wie auch aus dem Fibaro Forum ersichtlich scheint das Yr Wetter Probleme zu machen. Vermute das Du dass für die Temperaturangabe nutzt, oder Yahoo. Ich empfehle immer einen Aussensensor für so was. Das ist viel genauer als eine Wetterangabe aus dem Internet.
Oder du änderst die Zeile 45 so ab:
temp_weather = tonumber(api.get('/weather')['Temperature']) or 0
Wenn keine Temperatur geliefert werden kann ist temp_weather = 0.
So hast Du keinen nil Wert mehr und das Script läuft weiter.

hallo @jeep
Danke für den Tipp!
Du hast recht, die information von YR Wetter ist nicht sehr präzise, habe die Variable inzwischen ausgebaut und lese stattdessen jetzt einen Temp Sensor aus.

Hi,
Ich habe nun meine Cronjob Szene einige Zeit laufen, funktioniert grundsätzlich sehr gut!!
Vor Kurzem habe ich sie um einen stündlichen Job erweitert der mir alle Stunden ein Email sendet, dass die HC2 online ist.

Dabei habe ich bemerkt, dass es alle 1-2 Tage mal zu unterschiedliche Zeiten Aussetzer gibt!
Manchmal wird nur eine Mail ausgelassen, ich hatte aber schon Tage da haben in der Nacht 2-3 Mails hintereinander gefehlt.

Meinem Verständnis nach läuft die Funktion TempFunc" (Zeile 35-46) durch, danach wird 15*1000 also 15 Sekunden gewartet, und der nächste Lauf startet
Das bedeutet die Minute “0” der vollen Stunde (Zeile 39-42) sollte im besten Fall 4 x abgefragt und somit zuverlässig ausgelöst werden, oder ??

Ich habe mein Cronjob File soweit wie möglich abgespeckt, hier nochmal gepostet.
Vielleicht hat jemand von euch einen Tipp??

Oder liegt es vielleicht am unzuverlässigen Mailversand der HC2 ??

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

if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
sourceTrigger = fibaro:getSourceTrigger()
SceneID = __fibaroSceneId

function SendMail()
  fibaro:call(2, "sendEmail","CronJob ("..SceneID..") "," "..now_date_long.." \n\n"..Meldung)
end

function DT(DATETIME)
  local WD = {'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'}
  local M = {'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'}
  local tableDT= (os.date('*t', tonumber(DATETIME))) 
  tableDT.month = M[tonumber(tableDT.month)]
  tableDT.wday =  WD[tonumber(tableDT.wday)]
  now_sec = (tableDT.sec)
  now_min = os.date("%M", timestamp)
  now_hour = os.date("%H", timestamp)
  now_day = os.date("%d", timestamp)
  now_day_long = (tableDT.wday)
  now_month = os.date("%m", timestamp)
  now_month_long = (tableDT.month)
  now_year = (tableDT.year)
  now_date_long = (tableDT.wday ..', ' ..tableDT.day ..'. ' ..tableDT.month ..' ' ..tableDT.year ..' ')
end

function tempFunc()
  DT(os.date())
  if (past_min ~= now_min) then
    past_min = now_min
    if now_min%60==0 then 
      --Debug('cyan', "jede Stunde")
      Meldung = "HC2 ist Online - Gruß vom Chronjob..."
      SendMail()
    end
  end
  setTimeout(tempFunc, 15*1000)
end

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

Hi pblacky,

dem Mailversand, wie auch den Pushnachrichten, würde ich nicht 100% trauen. Um sicher zu gehen: Kannst Du nicht im Debug nachschauen?

@Ändy, hab jetzt erst deine Info gelesen!
Danke für den Tipp, werde mal ein Debug dazutun und sehen ob das zusammenpasst :wink:

@Ändy,
Hab jetzt mal getestet und zusätzlich zum Email einen Debug und eine Nachricht per Telegramm dazugebaut.
Du hattest absolut recht!!
Sowohl der Debug als auch die Telegramm Nachrichten kommen präzise an!
Nur beim EMail verliere ich 1-3 Mails pro Tag, bei stündlichem Versand!!

Sehr schade, dass Fibaro diese Funktion so stiefmütterlich behandelt ;-((

Hallo Ihr Lieben,
Hat schon jemand so ein ChronJob Skript auf der HC3 laufen?