Variable für Feiertage

Hallo Eldar, nochmal ich. Ich habe mal was erstellt. Mags du das mal testen?

in Zeile 51 einfügen


-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Urlaubstage definieren
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local heute = os.date("%d.%m.%Y")
local UrlaubStart01 = "10.04.2017" -- Osterurlaub
local UrlaubEnde01 = "27.04.2017"
local UrlaubStart02 = "01.07.2017" -- Sommerurlaub
local UrlaubEnde02 = "25.07.2017"
local UrlaubStart03 = "01.10.2017" -- Herbsturlaub
local UrlaubEnde03 = "07.10.2017"
local UrlaubStart04 = "01.12.2017" -- Winterurlaub
local UrlaubEnde04 = "31.04.2017"

local pattern = "(%d+).(%d+).(%d+)"

local tag0, monat0, jahr0 = heute:match(pattern)
local UrlaubStartTag01, UrlaubStartMonat01, UrlaubStartJahr01 = UrlaubStart01:match(pattern)
local UrlaubEndeTag01, UrlaubEndeMonat01, UrlaubEndeJahr01 = UrlaubEnde01:match(pattern)
local UrlaubStartTag02, UrlaubStartMonat02, UrlaubStartJahr02 =  UrlaubStart02:match(pattern)
local UrlaubEndeTag02, UrlaubEndeMonat02, UrlaubEndeJahr02 = UrlaubEnde02:match(pattern)
local UrlaubStartTag03, UrlaubStartMonat03, UrlaubStartJahr03 = UrlaubStart03:match(pattern)
local UrlaubEndeTag03, UrlaubEndeMonat03, UrlaubEndeJahr03 = UrlaubEnde03:match(pattern)
local UrlaubStartTag04, UrlaubStartMonat04, UrlaubStartJahr04 = UrlaubStart04:match(pattern)
local UrlaubEndeTag04, UrlaubEndeMonat04, UrlaubEndeJahr04 = UrlaubEnde04:match(pattern)

local heute = os.time({day = tag0, month = monat0, year = jahr0})
local UrlaubStart01 = os.time({day = UrlaubStartTag01, month = UrlaubStartMonat01, year = UrlaubStartJahr01})
local UrlaubEnde01 = os.time({day= UrlaubEndeTag01, month = UrlaubEndeMonat01, year = UrlaubEndeJahr01})
local UrlaubStart02 = os.time({day = UrlaubStartTag02, month = UrlaubStartMonat02, year = UrlaubStartJahr02})
local UrlaubEnde02 = os.time({day= UrlaubEndeTag02, month = UrlaubEndeMonat02, year = UrlaubEndeJahr02})
local UrlaubStart03 = os.time({day = UrlaubStartTag03, month = UrlaubStartMonat03, year = UrlaubStartJahr03})
local UrlaubEnde03 = os.time({day= UrlaubEndeTag03, month = UrlaubEndeMonat03, year = UrlaubEndeJahr03})
local UrlaubStart04 = os.time({day = UrlaubStartTag04, month = UrlaubStartMonat04, year = UrlaubStartJahr04})
local UrlaubEnde04 = os.time({day= UrlaubEndeTag04, month = UrlaubEndeMonat04, year = UrlaubEndeJahr04})

in Zeile 321 einfügen


if heute >= UrlaubStart01 and heute <= UrlaubEnde01 or heute >= UrlaubStart02 and heute <= UrlaubEnde02 or heute >= UrlaubStart03 and heute <= UrlaubEnde03 or heute >= UrlaubStart04 and heute <= UrlaubEnde04 then
  Feiertag = 1

end

Hatte noch jemand das Problem, dass der 18.04.17 als Feiertag gesetzt wurde, der 17.04. allerdings nicht?
Das sorgte für ein frühes wecken an Ostermontag, als um 06:00 Uhr die Rolläden hochfuhren… :slight_smile:

Ja, scroll mal hoch.
Deswegen hat Valle das Script optimiert.

Hallo Valle,

danke :slight_smile:

Habe die Zeilen eingefügt. Wenn ich

if heute >= UrlaubStart01 and heute <= UrlaubEnde01 or heute >= UrlaubStart02 and heute <= UrlaubEnde02 or heute >= UrlaubStart03 and heute <= UrlaubEnde03 or heute >= UrlaubStart04 and heute <= UrlaubEnde04 then
  Feiertag = 1
end

jedoch in Zeile 321 einfüge läuft es nicht. Ändere ich die Zeile auf 329, also direkt nach dem else etwas weiter unten geht es mit einem kleinen Fehler. Ich habe testweise 18.04. bis 19.04. als Osterurlaub definiert. Feiertag_heute und Feiertag_morgen werden dann jedoch beide auf 1 gesetzt. Obwohl das Skirpt im Debug den 20.04. als morgen erkennt. Ändert man den Osterurlaub auf 18.05.-19.05. werden beide Variablen auf 0 gesetzt…

Hast du eine Idee wo der Fehler liegt?

*edit: Okay, das Problem mit den Zeilen kam daher, dass ich die Schlatjahrsroutine noch nicht gelöscht hatte. Das habe ich nun getan! Dennoch kommt es, egal wo ich den neuen if-Block platziere (ob vor oder nach dem else in Zeile 321) zu oben beschriebenem Fehler.

Hallo Eldar, leider hab ich im Moment wenig Zeit um mir das genauer anzuschauen. Sobald ich Zeit habe, schau ich mal.

Poste doch dein gesamtes Script, dann kann man ggf beurteilen, ob die Platzierung stimmt.
Hast du Debugs eingebaut, um die Werte zu prüfen?

ggf. ist das Script hilfreich:
https://forum.fibaro.com/index.php?/topic/25398-bank-holiday-calc-scene/#comment-118112

Hallo Hoggle,

danke für deine Hilfe!
@Valle: kein Problem :slight_smile:

Anbei mein Code:

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

-- ************************************************************************
-- FEIERTAGE-SCRIPT
-- ************************************************************************

-- Das Skript berechnet die eidg./kant. Feiertage im aktuellen Jahr und prüft,
-- ob heute oder morgen ein Feiertag ist und hinterlegt das Ergebnis in den
-- Systemvariablen "Feiertag_heute" und "Feiertag_morgen".

-- (c) Simon Betschmann (01-2015)
-- Version: 1.0
-- Basierend auf einer Idee von Peter Beck (01-2011)
-- Version: 1.1
-- Erweiterung für Deutschland und Bundeländer von Udo Haß
-- Version: 1.2
-- Routine zur Berechnung der Osterfeiertage und Schaltjahr vollständig ersetzt.
-- Quelle der Berechnung der Osterfeiertage teilweise von http://wiki.contextgarden.net/Calendar_script
-- Feiertage, welche auf Ostern basieren im Aray korrigiert
-- Änderungen von Udo Haß 

-- Es werden folgende Systemvariablen benötigt:
-- Feiertag_heute
-- Feiertag_morgen

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- EINSTELLUNGEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- Bitte nur in dieser Sektion Einstellungen vornehmen
local debuging = true -- TOGGLE DEBUGING (true|false)
local Land = "DE"  -- LAND angeben (DE, CH)
local Bundesland = "SH" -- Bundesland eingeben (BW,BY,BE,BB,HB,HH,HE,MV,NI,NW,RP,SL,SN,ST,SH,TH) -- Kürzel http://www.schnelle-online.info/Feiertage-Deutschland.html
local katholische_Gemeinde ="nein" -- spezielle Feiertage für katholische Gemeinden (München, Ingolstadt, Rosenheim) 
local Kanton = "" -- Kanton angeben für kantonale Feiertage (ZH, AG,...) -- leer lassen, um Funktion auszuschalten

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DEBUG
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- Grundfunktion: Debug("red", "Nachrichtentext")
Debug = function(color, message)
  if (debuging) then
    fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
  end
end

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Urlaubstage definieren
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local heute = os.date("%d.%m.%Y")
local UrlaubStart01 = "07.04.2017" -- Osterferien
local UrlaubEnde01 = "21.04.2017"
local UrlaubStart02 = "24.07.2017" -- Sommerferien
local UrlaubEnde02 = "02.09.2017"
local UrlaubStart03 = "16.10.2017" -- Herbstferien
local UrlaubEnde03 = "27.10.2017"
local UrlaubStart04 = "21.12.2017" -- Weihnachtsferien
local UrlaubEnde04 = "06.01.2018"

local pattern = "(%d+).(%d+).(%d+)"

local tag0, monat0, jahr0 = heute:match(pattern)
local UrlaubStartTag01, UrlaubStartMonat01, UrlaubStartJahr01 = UrlaubStart01:match(pattern)
local UrlaubEndeTag01, UrlaubEndeMonat01, UrlaubEndeJahr01 = UrlaubEnde01:match(pattern)
local UrlaubStartTag02, UrlaubStartMonat02, UrlaubStartJahr02 =  UrlaubStart02:match(pattern)
local UrlaubEndeTag02, UrlaubEndeMonat02, UrlaubEndeJahr02 = UrlaubEnde02:match(pattern)
local UrlaubStartTag03, UrlaubStartMonat03, UrlaubStartJahr03 = UrlaubStart03:match(pattern)
local UrlaubEndeTag03, UrlaubEndeMonat03, UrlaubEndeJahr03 = UrlaubEnde03:match(pattern)
local UrlaubStartTag04, UrlaubStartMonat04, UrlaubStartJahr04 = UrlaubStart04:match(pattern)
local UrlaubEndeTag04, UrlaubEndeMonat04, UrlaubEndeJahr04 = UrlaubEnde04:match(pattern)

local heute = os.time({day = tag0, month = monat0, year = jahr0})
local UrlaubStart01 = os.time({day = UrlaubStartTag01, month = UrlaubStartMonat01, year = UrlaubStartJahr01})
local UrlaubEnde01 = os.time({day= UrlaubEndeTag01, month = UrlaubEndeMonat01, year = UrlaubEndeJahr01})
local UrlaubStart02 = os.time({day = UrlaubStartTag02, month = UrlaubStartMonat02, year = UrlaubStartJahr02})
local UrlaubEnde02 = os.time({day= UrlaubEndeTag02, month = UrlaubEndeMonat02, year = UrlaubEndeJahr02})
local UrlaubStart03 = os.time({day = UrlaubStartTag03, month = UrlaubStartMonat03, year = UrlaubStartJahr03})
local UrlaubEnde03 = os.time({day= UrlaubEndeTag03, month = UrlaubEndeMonat03, year = UrlaubEndeJahr03})
local UrlaubStart04 = os.time({day = UrlaubStartTag04, month = UrlaubStartMonat04, year = UrlaubStartJahr04})
local UrlaubEnde04 = os.time({day= UrlaubEndeTag04, month = UrlaubEndeMonat04, year = UrlaubEndeJahr04})

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- FEIERTAGE BERECHNEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

--- oTag berechnen Anfang ---

function FeiertageFunc()
  local Datum = os.date("%d.%m.") -- heutiges Datum (ohne Jahr)
  local zaehler= 1

-- OSTERDATUM BERECHNEN
  local Jahr = os.date("%Y") -- Das aktuelle Jahr ermitteln
  local oTag -- Das Tagesdatum vom oTag
  local oMonat -- Das Monatsdatum von oTag
  local oDatum -- Das komplette Datum vom oTag
  local mTage -- Variable für die interne Berechnung
  local LVar1 -- Variable für die interne Berechnung
  local LVar2 -- Variable für die interne Berechnung
  local LVar3 -- Variable für die interne Berechnung
  local zahl -- Variable für die interne Berechnung

-- Berechne Ostersonntag, basiert auf Meeus/Jones/Butcher
local a = math.fmod(Jahr,19)
local b = math.floor(Jahr / 100)
local c = math.fmod(Jahr,100)
local d = math.floor(b / 4)
local e = math.fmod(b,4)
local f = math.floor((b + 8) / 25) 
local g = math.floor((b - f + 1) / 3)
local h = math.fmod((19 * a + b - d - g + 15),30)
local i = math.floor(c / 4)
local k = math.fmod(c,4)
local L = math.fmod((32 + 2 * e + 2 * i - h - k),7)
local m = math.floor((a + 11 * h + 22 * L) / 451)
local oMonat = math.floor((h + L - 7 * m + 114) / 31)
local oTag = math.fmod((h + L - 7 * m + 114),31) + 1

-- Das Ergebnis in Variable oDatum hinterlegen
  if (oTag < 10) then
    oDatum = "0" .. oTag .. "." .. oMonat .. "." .. Jahr;
  else
    oDatum = oTag .. "." .. oMonat .. "." .. Jahr;
  end

Debug("gray", "Osterdatum: ".. oDatum)
Debug("gray", "Datum: ".. Datum)

-- Ermitteln, wieviele Tage der Februar im aktuellen Jahr hat
zahl4 = Jahr % 4;
zahl100 = Jahr % 100;
zahl400 = Jahr % 400;
 
  if ((zahl4 == 0) and (zahl100 ~= 0)) or (zahl400 == 0)  then -- Ein Schaltjahr -> Feb. = 29 Tage
    mTage = {31,29,31,30,31,30,31,31,30,31,30,31}; -- Anzahl der Tage im Monat Jan.-Dez.
    Debug("gray", Jahr.. " ist ein Schaltjahr.")
  else
    mTage = {31,28,31,30,31,30,31,31,30,31,30,31}; -- Anzahl der Tage im Monat Jan.-Dez.
    Debug("gray", Jahr.. " ist kein Schaltjahr.")
  end    
  
-- Feiertage mit dem heutigen & morgigen Datum vergleichen und Ergebnis
-- in den Variablen "Feiertag_heute" bzw. "Feiertag_morgen" speichern
  while zaehler< 3 do
    local Feiertag = 0

    if (Land == "DE") then -- Bundeseinheitliche Feiertage in Deutschland
      if (Datum == "01.01.") then Feiertag = 1 end -- Neujahr
      if (Datum == "01.05.") then Feiertag = 1 end -- Tag der Arbeit
      if (Datum == "03.10.") then Feiertag = 1 end -- Tag der Deutschen Einheit
      if (Datum == "31.10.") and (Jahr == "2017") then Feiertag = 1 end -- Reformationstag (nur 2017 Bundeseinheitlich!)
      if (Datum == "25.12.") then Feiertag = 1 end -- 1. Weihnachtstag
      if (Datum == "26.12.") then Feiertag = 1 end -- 2. Weihnachtstag
      
      if Bundesland =="BW" then  -- spezifische Feiertage für Baden-Würtenberg
        if (Datum == "06.01.") then Feiertag = 1 end -- Heilige Drei Könige
        if (Datum == "26.05.") then Feiertag = 1 end -- Fronleichnam
        if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
            
      if Bundesland =="BY" then  -- spezifische Feiertage für Bayern
        if (Datum == "06.01.") then Feiertag = 1 end -- Heilige Drei Könige
        if (Datum == "26.05.") then Feiertag = 1 end -- Fronleichnam
        if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
        if (katholische_Gemeinde == "ja") then
          if (Datum == "15.08.") then Feiertag = 1 end -- Mariä Himmelfahrt
        end
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end
      
      if Bundesland =="BE" then  -- spezifische Feiertage für Berlin
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
      
      if Bundesland =="BB" then  -- spezifische Feiertage für Brandenburg
        if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
        -- Aray mit Differenztagen zum oTag:
        -- oTag, Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstsonntag,Pfingstmontag
        feiertage = {-2,0,1,39,48,49}
      end       
            
      if Bundesland =="HB" then  -- spezifische Feiertage für Bremen
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
      
      if Bundesland =="HH" then  -- spezifische Feiertage für Hamburg
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
      
      if Bundesland =="HE" then  -- spezifische Feiertage für Hessen
        if (Datum == "26.05.") then Feiertag = 1 end -- Fronleichnam

        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
      
      if Bundesland =="MV" then  -- spezifische Feiertage für Mecklenburg-Vorpommern
        if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag

        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
      
      if Bundesland =="NI" then  -- spezifische Feiertage für Niedersachsen
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
            
      if Bundesland =="NW" then  -- spezifische Feiertage für NRW
        if (Datum == "26.05.") then Feiertag = 1 end -- Fronleichnam
        if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
      
      if Bundesland =="RP" then  -- spezifische Feiertage für Rheinland-Pfalz
        if (Datum == "26.05.") then Feiertag = 1 end -- Fronleichnam
        if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
    
      if Bundesland =="SL" then  -- spezifische Feiertage für Saarland
        if (Datum == "26.05.") then Feiertag = 1 end -- Fronleichnam
        if (Datum == "15.08.") then Feiertag = 1 end -- Mariä Himmelfahrt
        if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
    
      if Bundesland =="SN" then  -- spezifische Feiertage für Sachsen
        if (Datum == "26.05.") then Feiertag = 1 end -- Fronleichnam
        if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
        if (Datum == "16.11.") then Feiertag = 1 end -- Buß- und Bettag
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
    
      if Bundesland =="SL" then  -- spezifische Feiertage für Sachsen-Anhalt
        if (Datum == "06.01.") then Feiertag = 1 end -- Heiligen-Drei-Könige
        if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
    
      if Bundesland =="SH" then  -- spezifische Feiertage für Schleswig-Holstein
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
    
      if Bundesland =="TH" then  -- spezifische Feiertage für Thüringen
        if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
        -- Aray mit Differenztagen zum oTag:
        -- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        feiertage = {-2,1,39,49}
      end 
    end

    if (Land == "CH") then -- FESTE FEIERTAGE IN DER GANZEN SCHWEIZ
      if (Datum == "01.01.") then Feiertag = 1 end -- Neujahr
      if (Datum == "01.08.") then Feiertag = 1 end -- Nationalfeiertag
      if (Datum == "25.12.") then Feiertag = 1 end -- Weihnachten
      if (Datum == "26.12.") then Feiertag = 1 end -- Stephanstag
-- FEIERTAGE IM KANTON ZÜRICH
      if (Kanton == "ZH") then
        if (Datum == "01.05.") then Feiertag = 1 end -- Tag der Arbeit
      end
-- FEIERTAGE IM KANTON AARGAU
      if (Kanton == "AG") then
        if (Datum == "02.01.") then Feiertag = 1 end -- Berchtoldstag
      end

-- VARIABLE FEIERTAG IN DER GANZEN SCHWEIZ
-- Aray mit Differenztagen zum oTag:
-- Ostermontag, Karfreitag, Auffahrt, Pfingstmontag
      feiertage = {-2,1,39,49}
    end

  
-- VARIABLE FEIERTAGE: DATEN BERECHNEN
    oTage = mTage[tonumber(oMonat)] -- Anzahl Tage im Ostermonat
    Debug("grey", "Anzahl Tage im Ostermonat: "..oTage)

    local fDatum; -- Feiertagsdatum
    local fDiff; -- Anzahl der Tage vom oTag entfernt
    local Schleife; -- Für die Berechnungen in der while-Schleife notwendig    
    
    for x in next, feiertage do
      Debug("red", "Feiertag: "..feiertage[x])

      fDiff = feiertage[x]
      Schleife = true;

      zahl = oTag + fDiff; -- Differenztage zum Referenztag hinzurechnen
      Debug("grey", "Zahl: "..zahl..", oTag: "..oTag..", fDiff: "..fDiff..", index: "..x)

      if (fDiff > 0) then
        if (zahl > oTage) then
          zahl = zahl - oTage; -- Sind wir ausserhalb des Referenzmonats?
          Debug("grey", "Ausserhalb des Referenzmonats > Schleife durchlaufen.")
        else -- Nein => Berechnungschleife nicht durchlaufen.
          Schleife = false;
          LVar2 = oMonat;
          Debug("grey", "Innerhalb des Referenzmonats > Schleife nicht durchlaufen.")
        end
      else
        if (zahl > 0) then -- Wenn innerhalb des Referenzmonats => Berechnungsschleife nicht durchlaufen.
          Schleife = false;
          LVar2 = oMonat;
          Debug("grey", "Innerhalb des Referenzmonats > Schleife nicht durchlaufen.")
        else
          Debug("grey", "Ausserhalb des Referenzmonats > Schleife durchlaufen.")
        end
      end

      LVar1 = 0;

-- Schleife 'Monatsberechnung', falls nicht im gleichen Monat wie Ostern
      if (fDiff > 0) then
      while (Schleife) do
        LVar1 = LVar1 + 1.00;
        LVar2 = oMonat + LVar1;
        zahl = zahl - mTage[tonumber(oMonat)];
        if (zahl <= 0) then -- Aktueller Monat gefunden
          Schleife = false;
          zahl = zahl + mTage[tonumber(oMonat)] -- Wieder addieren, um den Tag zu berechnen
        end
      end
        
if heute >= UrlaubStart01 and heute <= UrlaubEnde01 or heute >= UrlaubStart02 and heute <= UrlaubEnde02 or heute >= UrlaubStart03 and heute <= UrlaubEnde03 or heute >= UrlaubStart04 and heute <= UrlaubEnde04 then
  Feiertag = 1

end

    else
      if (fDiff < 0) then
        while (Schleife) do
          LVar1 = LVar1 + 1.00;
          LVar2 = oMonat - LVar1;
          zahl = zahl + mTage[tonumber(oMonat)]
          if (zahl > 0) then -- Aktueller Monat gefunden
            Schleife = false;
          end
        end
      end
    end

-- Datum des Feiertags berechnen
      Debug("grey", "Datum des Feiertags berechnen...")
      if (zahl < 10 and tonumber(LVar2) < 10) then
    fDatum = "0" .. zahl .. ".0"..tonumber(LVar2).. ".";
  elseif (zahl < 10) then
    fDatum = "0" .. zahl .. "."..tonumber(LVar2).. ".";
  elseif (tonumber(LVar2) < 10) then
    fDatum = zahl .. ".0"..tonumber(LVar2).. ".";
  else
    fDatum = zahl .. "."..tonumber(LVar2).. ".";
  end

      Debug("white", "Feiertag: "..fDatum)

-- Prüfen, ob Datum heute/morgen mit Feiertag übereinstimmt
      if (Datum == fDatum) then
    Feiertag = 1
    fibaro:debug("Feiertag ("..fDatum..") gefunden.")
  end
    end

-- VARIABLEN SETZTEN
    if zaehler== 1 then
-- 1. Durchgang: Datum heute mit den Feiertagen prüfen
      Debug("grey", "1. Durchgang: Datum heute="..Datum..", Feiertag="..Feiertag)
      fibaro:setGlobal("Feiertag_heute", Feiertag)
      zaehler= 2
      Datum = os.date("%d.%m.", os.time()+24*60*60) -- Datum auf morgen setzen
    else
-- 1. Durchgang: Datum morgen mit den Feiertagen prüfen
      Debug("grey", "2. Durchgang: Datum morgen="..Datum..", Feiertag="..Feiertag)
      fibaro:setGlobal("Feiertag_morgen", Feiertag)
      zaehler= 3
    end

  end

-- ERGEBNIS AUSGEBEN
  if fibaro:getGlobal("Feiertag_heute") == '0' then
    fibaro:debug("Heute ist kein Feiertag.")
  else
    fibaro:debug("Heute ist ein Feiertag. Variable gesetzt!")
  end
  if fibaro:getGlobal("Feiertag_morgen") == '0' then
    fibaro:debug("Morgen ist kein Feiertag.")
  else
    fibaro:debug("Morgen ist ein Feiertag. Variable gesetzt!")
  end

end

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SZENE JEDEN TAG UM 00:01 AUSFÜHREN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local sourceTrigger = fibaro:getSourceTrigger();

function tempFunc()
  local currentDate = os.date("*t");
  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 string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "00:01") )) then
    FeiertageFunc()
  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
    FeiertageFunc()
  end
end

ICh stecke im Script nicht drin, aber das

if heute >= UrlaubStart01 and heute <= UrlaubEnde01 or heute >= UrlaubStart02 and heute <= UrlaubEnde02 or heute >= UrlaubStart03 and heute <= UrlaubEnde03 or heute >= UrlaubStart04 and heute <= UrlaubEnde04 then
  Feiertag = 1 end

hätte ich weiter unten gesetzt, da er danach noch Feiertage berechnet und es dann ggf wieder überschreibt…

Oder Du basut Dir nur mit den Ferien ein eigenständiges Script und schreibst da Ergebnis in eine neue global Var.

Hallo Hoggle,

ich habe es jetzt an verschiedenen Stellen probiert, aber bekomm den bereits genannten Fehler nicht weg. Hm, ein extra Script? Gut Idee, nur wie mache ich das am komfortabelsten?

das müsste dann so etwas sein:
Wobei Du Zeile 59 einkommentieren musst und eine entsprechenden globale Var anlegen musst


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

-- Grundfunktion: Debug("red", "Nachrichtentext")
Debug = function(color, message)
  if (debuging) then
    fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
  end
end

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Urlaubstage definieren
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function FeiertageFunc()

local heute = os.date("%d.%m.%Y")
print("Heute ist :"..heute)
  
local UrlaubStart01 = "07.04.2017" -- Osterferien
local UrlaubEnde01 = "21.04.2017"
local UrlaubStart02 = "24.07.2017" -- Sommerferien
local UrlaubEnde02 = "02.09.2017"
local UrlaubStart03 = "16.10.2017" -- Herbstferien
local UrlaubEnde03 = "27.10.2017"
local UrlaubStart04 = "21.12.2017" -- Weihnachtsferien
local UrlaubEnde04 = "06.01.2018"

local pattern = "(%d+).(%d+).(%d+)"

local tag0, monat0, jahr0 = heute:match(pattern)
local UrlaubStartTag01, UrlaubStartMonat01, UrlaubStartJahr01 = UrlaubStart01:match(pattern)
local UrlaubEndeTag01, UrlaubEndeMonat01, UrlaubEndeJahr01 = UrlaubEnde01:match(pattern)
local UrlaubStartTag02, UrlaubStartMonat02, UrlaubStartJahr02 =  UrlaubStart02:match(pattern)
local UrlaubEndeTag02, UrlaubEndeMonat02, UrlaubEndeJahr02 = UrlaubEnde02:match(pattern)
local UrlaubStartTag03, UrlaubStartMonat03, UrlaubStartJahr03 = UrlaubStart03:match(pattern)
local UrlaubEndeTag03, UrlaubEndeMonat03, UrlaubEndeJahr03 = UrlaubEnde03:match(pattern)
local UrlaubStartTag04, UrlaubStartMonat04, UrlaubStartJahr04 = UrlaubStart04:match(pattern)
local UrlaubEndeTag04, UrlaubEndeMonat04, UrlaubEndeJahr04 = UrlaubEnde04:match(pattern)

local heute = os.time({day = tag0, month = monat0, year = jahr0})
local UrlaubStart01 = os.time({day = UrlaubStartTag01, month = UrlaubStartMonat01, year = UrlaubStartJahr01})
local UrlaubEnde01 = os.time({day= UrlaubEndeTag01, month = UrlaubEndeMonat01, year = UrlaubEndeJahr01})
local UrlaubStart02 = os.time({day = UrlaubStartTag02, month = UrlaubStartMonat02, year = UrlaubStartJahr02})
local UrlaubEnde02 = os.time({day= UrlaubEndeTag02, month = UrlaubEndeMonat02, year = UrlaubEndeJahr02})
local UrlaubStart03 = os.time({day = UrlaubStartTag03, month = UrlaubStartMonat03, year = UrlaubStartJahr03})
local UrlaubEnde03 = os.time({day= UrlaubEndeTag03, month = UrlaubEndeMonat03, year = UrlaubEndeJahr03})
local UrlaubStart04 = os.time({day = UrlaubStartTag04, month = UrlaubStartMonat04, year = UrlaubStartJahr04})
local UrlaubEnde04 = os.time({day= UrlaubEndeTag04, month = UrlaubEndeMonat04, year = UrlaubEndeJahr04})
local Feiertag = 0
        
if heute >= UrlaubStart01 and heute <= UrlaubEnde01 or heute >= UrlaubStart02 and heute <= UrlaubEnde02 or heute >= UrlaubStart03 and heute <= UrlaubEnde03 or heute >= UrlaubStart04 and heute <= UrlaubEnde04 
  then Feiertag = 1
  print("Heute ist ein Urlaubstag") 
  --fibaro:setGlobal("Urlaub", Feiertag)
end

end --der function

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SZENE JEDEN TAG UM 00:01 AUSFÜHREN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local sourceTrigger = fibaro:getSourceTrigger();

function tempFunc()
  print("tempFunc gestartet")
  local currentDate = os.date("*t");
  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 string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "00:01") )) then
    FeiertageFunc()
  end
  setTimeout(tempFunc, 58*1000)
end

if (sourceTrigger["type"] == "autostart") then
  tempFunc()
else
  local currentDate = os.date("*t");
  local startSource = fibaro:getSourceTrigger();
  if (startSource["type"] == "other") then
    FeiertageFunc()
  end
end

Hallo zusammen,

habe heute das Script überarbeitet und erweitert.
– Version: 1.3
– Berechnung für Fronleichnam hinzugefügt (abhängig von Pfingsten)
– Berechnung für Buß- und Bettag hinzugefügt (immer der vorletzte Mittwoch vor dem 1. Advent)
– Erweiterung für Wochenenden
– Variable für tägliche Ausführen ergänzt
– Änderung von Manuel Hoefs


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

-- ************************************************************************
-- FEIERTAGE-SCRIPT
-- ************************************************************************

-- Das Skript berechnet die Feiertage in Deutschland im aktuellen Jahr und prüft,
-- ob heute oder morgen ein Feiertag ist und hinterlegt das Ergebnis in den
-- Systemvariablen "Feiertag_heute" und "Feiertag_morgen".

-- (c) Simon Betschmann (01-2015)
-- Version: 1.0
-- Basierend auf einer Idee von Peter Beck (01-2011)
-- Version: 1.1
-- Erweiterung für Deutschland und Bundeländer von Udo Haß
-- Version: 1.2
-- Routine zur Berechnung der Osterfeiertage und Schaltjahr vollständig ersetzt.
-- Quelle der Berechnung der Osterfeiertage teilweise von http://wiki.contextgarden.net/Calendar_script
-- Feiertage, welche auf Ostern basieren im Aray korrigiert
-- Änderungen von Udo Haß 
-- Version: 1.3
-- Berechnung für Fronleichnam hinzugefügt (abhängig von Pfingsten)
-- Berechnung für Buß- und Bettag hinzugefügt (immer der vorletzte Mittwoch vor dem 1. Advent)
-- Erweiterung für Wochenenden
-- Variable für tägliche Ausführen ergänzt
-- Änderung von Manuel Hoefs

-- Es werden folgende Systemvariablen benötigt:
-- Feiertag_heute
-- Feiertag_morgen

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- EINSTELLUNGEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- Bitte nur in dieser Sektion Einstellungen vornehmen
local debuging = true -- TOGGLE DEBUGING (true|false)
local Land = "DE"  -- LAND angeben (DE, CH)
local Bundesland = "NW" -- Bundesland eingeben (BW,BY,BE,BB,HB,HH,HE,MV,NI,NW,RP,SL,SN,ST,SH,TH) -- Kürzel http://www.schnelle-online.info/Feiertage-Deutschland.html
local katholische_Gemeinde = false -- (true|false) spezielle Feiertage für katholische Gemeinden (München, Ingolstadt, Rosenheim)
local Kanton = "" -- Kanton angeben für kantonale Feiertage (ZH, AG,...) -- leer lassen, um Funktion auszuschalten
local scenerun = "00:30" -- SZENE JEDEN TAG AUSFÜHREN UM
local wochenende = true -- (true|false) Wochenenden werden ebenfalls als Feiertag/Frei erkannt

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DEBUG
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- Grundfunktion: Debug("red", "Nachrichtentext")
Debug = function(color, message)
	if (debuging) then
		fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
	end
end

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- FEIERTAGE BERECHNEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
fibaro:debug("start instanz " .. os.date("%c"));

function FeiertageFunc()
-- Notwendige Variablen
	local Datum = os.date("%d.%m.") -- heutiges Datum (ohne Jahr)
	local Jahr = os.date("%Y") -- Das aktuelle Jahr ermitteln
	local WeekDate = os.date("*t").wday -- Den aktuellen Wochentag ermitteln

-- Berechne Ostersonntag, basiert auf Meeus/Jones/Butcher
	local a = math.fmod(Jahr,19)
	local b = math.floor(Jahr / 100)
	local c = math.fmod(Jahr,100)
	local d = math.floor(b / 4)
	local e = math.fmod(b,4)
	local f = math.floor((b + 8) / 25) 
	local g = math.floor((b - f + 1) / 3)
	local h = math.fmod((19 * a + b - d - g + 15),30)
	local i = math.floor(c / 4)
	local k = math.fmod(c,4)
	local L = math.fmod((32 + 2 * e + 2 * i - h - k),7)
	local m = math.floor((a + 11 * h + 22 * L) / 451)
	local oMonat = math.floor((h + L - 7 * m + 114) / 31)
	local oTag = math.fmod((h + L - 7 * m + 114),31) + 1

-- Das Ergebnis in Variable oDatum hinterlegen
	local oDatum -- Das komplette Datum vom Ostersonntag
	if (oTag < 10) then
		oDatum = "0" .. oTag .. "." .. oMonat .. "." .. Jahr;
	else
		oDatum = oTag .. "." .. oMonat .. "." .. Jahr;
	end
	Debug("gray", "Osterdatum: ".. oDatum)
	Debug("gray", "Datum: ".. Datum)

-- Berechne Buß- und Bettag
	local bubTag	
	wTag = os.time({year=Jahr, month=12, day=25})
	wTable = os.date("*t", wTag)
	if (wTable.wday == 1) then
    	bubTag = 16
    else
    	bubTag = 23 - wTable.wday + 1
   	end

-- Ermitteln, wieviele Tage der Februar im aktuellen Jahr hat
	zahl4 = Jahr % 4;
	zahl100 = Jahr % 100;
	zahl400 = Jahr % 400;
 
	local mTage -- Variable für die interne Berechnung
	if ((zahl4 == 0) and (zahl100 ~= 0)) or (zahl400 == 0) then -- Ein Schaltjahr -> Feb. = 29 Tage
		mTage = {31,29,31,30,31,30,31,31,30,31,30,31}; -- Anzahl der Tage im Monat Jan.-Dez.
		Debug("gray", Jahr.. " ist ein Schaltjahr.")
	else
		mTage = {31,28,31,30,31,30,31,31,30,31,30,31}; -- Anzahl der Tage im Monat Jan.-Dez.
		Debug("gray", Jahr.. " ist kein Schaltjahr.")
	end

-- Feiertage mit dem heutigen & morgigen Datum vergleichen und Ergebnis
-- in den Variablen "Feiertag_heute" bzw. "Feiertag_morgen" speichern
	local zaehler = 1
	while zaehler < 3 do
		local Feiertag = 0

		if (wochenende) then
			if (WeekDate == 1 or WeekDate == 7) then
				Feiertag = 1;
				Debug("gray", "Wochentag " .. WeekDate .. " ist ein Wochenendtag.")
			else
				Debug("gray", "Wochentag " .. WeekDate .. " ist KEIN Wochenendtag.")
			end
		end

		if (Land == "DE") then -- Bundeseinheitliche Feiertage in Deutschland
			if (Datum == "01.01.") then Feiertag = 1 end -- Neujahr
			if (Datum == "01.05.") then Feiertag = 1 end -- Tag der Arbeit
			if (Datum == "03.10.") then Feiertag = 1 end -- Tag der Deutschen Einheit
			if (Datum == "31.10.") and (Jahr == "2017") then Feiertag = 1 end -- Reformationstag (nur 2017 Bundeseinheitlich!)
			if (Datum == "25.12.") then Feiertag = 1 end -- 1. Weihnachtstag
			if (Datum == "26.12.") then Feiertag = 1 end -- 2. Weihnachtstag

			if Bundesland =="BW" then  -- spezifische Feiertage für Baden-Würtenberg
				if (Datum == "06.01.") then Feiertag = 1 end -- Heilige Drei Könige
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,59}
			end

			if Bundesland =="BY" then  -- spezifische Feiertage für Bayern
				if (Datum == "06.01.") then Feiertag = 1 end -- Heilige Drei Könige
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				if (katholische_Gemeinde) then
					if (Datum == "15.08.") then Feiertag = 1 end -- Mariä Himmelfahrt
				end
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,59}
			end

			if Bundesland =="BE" then  -- spezifische Feiertage für Berlin
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="BB" then  -- spezifische Feiertage für Brandenburg
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostersonntag, Ostermontag, Christi Himmelfahrt, Pfingstsonntag, Pfingstmontag
				feiertage = {-2,0,1,39,49,49}
			end

			if Bundesland =="HB" then  -- spezifische Feiertage für Bremen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="HH" then  -- spezifische Feiertage für Hamburg
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="HE" then  -- spezifische Feiertage für Hessen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,59}
			end

			if Bundesland =="MV" then  -- spezifische Feiertage für Mecklenburg-Vorpommern
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag

				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="NI" then  -- spezifische Feiertage für Niedersachsen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end
            
			if Bundesland =="NW" then  -- spezifische Feiertage für NRW
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,59}
			end

			if Bundesland =="RP" then  -- spezifische Feiertage für Rheinland-Pfalz
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,59}
			end

			if Bundesland =="SL" then  -- spezifische Feiertage für Saarland
				if (Datum == "15.08.") then Feiertag = 1 end -- Mariä Himmelfahrt
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,59}
			end

			if Bundesland =="SN" then  -- spezifische Feiertage für Sachsen
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
				if (Datum == bubTag .. ".11.") then Feiertag = 1 end -- Buß- und Bettag
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="ST" then  -- spezifische Feiertage für Sachsen-Anhalt
				if (Datum == "06.01.") then Feiertag = 1 end -- Heilige Drei Könige
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="SH" then  -- spezifische Feiertage für Schleswig-Holstein
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="TH" then  -- spezifische Feiertage für Thüringen
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end
		end

		if (Land == "CH") then -- FESTE FEIERTAGE IN DER GANZEN SCHWEIZ
			if (Datum == "01.01.") then Feiertag = 1 end -- Neujahr
			if (Datum == "01.08.") then Feiertag = 1 end -- Nationalfeiertag
			if (Datum == "25.12.") then Feiertag = 1 end -- Weihnachten
			if (Datum == "26.12.") then Feiertag = 1 end -- Stephanstag

			if (Kanton == "ZH") then -- FEIERTAGE IM KANTON ZÜRICH
				if (Datum == "01.05.") then Feiertag = 1 end -- Tag der Arbeit
			end

			if (Kanton == "AG") then -- FEIERTAGE IM KANTON AARGAU
				if (Datum == "02.01.") then Feiertag = 1 end -- Berchtoldstag
			end

		-- VARIABLE FEIERTAG IN DER GANZEN SCHWEIZ
			-- Aray mit Differenztagen zum oTag:
			-- Ostermontag, Karfreitag, Auffahrt, Pfingstmontag
			feiertage = {-2,1,39,49}
		end
		
-- VARIABLE FEIERTAGE: DATEN BERECHNEN
		local LVar1 -- Variable für die interne Berechnung
		local LVar2 -- Variable für die interne Berechnung
		local zahl -- Variable für die interne Berechnung

		oTage = mTage[tonumber(oMonat)] -- Anzahl Tage im Ostermonat
		Debug("grey", "Anzahl Tage im Ostermonat: "..oTage)

		local fDatum; -- Feiertagsdatum
		local fDiff; -- Anzahl der Tage vom Ostersonntag entfernt
		local Schleife; -- Für die Berechnungen in der while-Schleife notwendig    
    
		for x in next, feiertage do
			Debug("red", "Feiertag: "..feiertage[x])

			fDiff = feiertage[x]
			Schleife = true;

			zahl = oTag + fDiff; -- Differenztage zum Referenztag hinzurechnen
			Debug("grey", "Zahl: "..zahl..", oTag: "..oTag..", fDiff: "..fDiff..", index: "..x)

			if (fDiff > 0) then
				if (zahl > oTage) then
					zahl = zahl - oTage; -- Sind wir ausserhalb des Referenzmonats?
					Debug("grey", "Ausserhalb des Referenzmonats > Schleife durchlaufen.")
				else -- Nein => Berechnungschleife nicht durchlaufen.
					Schleife = false;
					LVar2 = oMonat;
					Debug("grey", "Innerhalb des Referenzmonats > Schleife nicht durchlaufen.")
				end
			else
				if (zahl > 0) then -- Wenn innerhalb des Referenzmonats => Berechnungsschleife nicht durchlaufen.
					Schleife = false;
					LVar2 = oMonat;
					Debug("grey", "Innerhalb des Referenzmonats > Schleife nicht durchlaufen.")
				else
					Debug("grey", "Ausserhalb des Referenzmonats > Schleife durchlaufen.")
				end
			end
			LVar1 = 0;

-- Schleife 'Monatsberechnung', falls nicht im gleichen Monat wie Ostern
			if (fDiff > 0) then
				while (Schleife) do
					LVar1 = LVar1 + 1.00;
					LVar2 = oMonat + LVar1;
					zahl = zahl - mTage[tonumber(oMonat)];
					if (zahl <= 0) then -- Aktueller Monat gefunden
						Schleife = false;
						zahl = zahl + mTage[tonumber(oMonat)] -- Wieder addieren, um den Tag zu berechnen
					end
				end
			else
				if (fDiff < 0) then
					while (Schleife) do
						LVar1 = LVar1 + 1.00;
						LVar2 = oMonat - LVar1;
						zahl = zahl + mTage[tonumber(oMonat)]
						if (zahl > 0) then -- Aktueller Monat gefunden
							Schleife = false;
						end
					end
				end
			end

-- Datum des Feiertags berechnen
			Debug("grey", "Datum des Feiertags berechnen...")
			if (zahl < 10 and tonumber(LVar2) < 10) then
				fDatum = "0" .. zahl .. ".0"..tonumber(LVar2).. ".";
			elseif (zahl < 10) then
				fDatum = "0" .. zahl .. "."..tonumber(LVar2).. ".";
			elseif (tonumber(LVar2) < 10) then
				fDatum = zahl .. ".0"..tonumber(LVar2).. ".";
			else
				fDatum = zahl .. "."..tonumber(LVar2).. ".";
			end
			Debug("white", "Feiertag: "..fDatum)

-- Prüfen, ob Datum heute/morgen mit Feiertag übereinstimmt
			if (Datum == fDatum) then
				Feiertag = 1
				fibaro:debug("Feiertag ("..fDatum..") gefunden.")
			end
		end

-- VARIABLEN SETZTEN
		if zaehler == 1 then
-- 1. Durchgang: Datum heute mit den Feiertagen prüfen
			Debug("grey", "1. Durchgang: Datum heute="..Datum..", Feiertag="..Feiertag)
			fibaro:setGlobal("Feiertag_heute", Feiertag)
			zaehler = 2
			Datum = os.date("%d.%m.", os.time()+24*60*60) -- Datum auf morgen setzen
			WeekDate = WeekDate + 1
		else
-- 1. Durchgang: Datum morgen mit den Feiertagen prüfen
			if (wochenende) then
				if (WeekDate > 6) then
					Feiertag = 1
				end
			end
			Debug("grey", "2. Durchgang: Datum morgen="..Datum..", Feiertag="..Feiertag)
			fibaro:setGlobal("Feiertag_morgen", Feiertag)
			zaehler = 3
		end
	end

-- ERGEBNIS AUSGEBEN
	if fibaro:getGlobal("Feiertag_heute") == '0' then
		if (wochenende) then
			fibaro:debug("Heute ist kein Feiertag / Wochenende.")
		else
			fibaro:debug("Heute ist kein Feiertag.")
		end
	else
		if (wochenende) then
			fibaro:debug("Heute ist ein Feiertag / Wochenende. Variable gesetzt!")
		else
			fibaro:debug("Heute ist ein Feiertag. Variable gesetzt!")
		end
	end
	if fibaro:getGlobal("Feiertag_morgen") == '0' then
		if (wochenende) then
			fibaro:debug("Morgen ist kein Feiertag / Wochenende.")
		else
			fibaro:debug("Morgen ist kein Feiertag.")
		end
	else
		if (wochenende) then
			fibaro:debug("Morgen ist ein Feiertag / Wochenende. Variable gesetzt!")
		else
			fibaro:debug("Morgen ist ein Feiertag. Variable gesetzt!")
		end
	end
end

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SZENE JEDEN TAG AUSFÜHREN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
	local currentDate = os.date("*t");
	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 string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == scenerun) )) then
		FeiertageFunc()
	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
		FeiertageFunc()
	end
end

Sehr schön.

Bedeutet:
local wochenende = true – (true|false) Wochenenden werden ebenfalls als Feiertag/Frei erkannt
er setzt alle Sonntage auf Feiertag?

Ja, sowohl Samstag als auch Sonntag wird in der Variable als Feiertag gesetzt.
Kann in Zeile 129 auch angepasst werden.
Dadurch benötige ich nur noch ein Script, so dass die Rolläden an Feiertagen als auch am Wochenende länger unten bleiben.

Hab das Skript mal probeweise installiert statt meines bisherigen Skriptes, das auf simpleren statischen Tabellen für die Feiertage basierte.

Stelle aber gerade fest, dass für mein Bundesland “BW” Fronleichnam (z.B. heute, 15.06.2017) als Feiertag nicht korrekt berechnet wird.

Hab den Code nicht wirklich vollständig geprüft - sehe aber eine Codezeile, die 26.05. fix als Fronleichnam annimmt.

Das wäre falsch - Fronleichnam ist variabel, 11 Tage nach dem Pfingstsonntag, siehe z.B. https://www.dagmar-mueller.de/wdz/html/feiertagsberechnung.html

Statt dem fixen 26.05. muss dann wohl für alle betreffenden Bundesländer feiertage = {-2,1,39,49,59} gesetzt werden (59 ist Fronleichnam, 10 Tage nach dem Pfingstmontag).

@Zottel - kannst Du das fixen? Ansonsten danke für das Skript!

Hi Mickey,

Kann es sein das du das falsche Script kopiert hast? In der Version von mir ist Fronleichnam bereits berechnet und nicht mehr fix!

@zottel - Du hast wahrscheinlich recht, in der neuen Version weiter oben auf dieser Seite wird Fronleichnam korrekt variabel berechnet. Ich hatte wohl eine ältere Version des Skripts erwischt, wo Fronleichnam fix am 26.05. war. Danke.

Abend,

nach dem Feiertagsscript 1.3 ist morgen Feiertag. Hat jemand das selbe Problem !? Karfreitag ist erst am 30.03.2018 ! Ich glaube hier stimmt was mit der Berechnung nicht.

Grüße

Guido

Hier ein Bugfix. Es gibt anscheinend mit der Urberechnung ein Problem. Für dieses Jahr geht es jetzt, ob es eine dauerhafte Lösung ist, konnte ich noch nicht testen.


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

-- ************************************************************************
-- FEIERTAGE-SCRIPT
-- ************************************************************************

-- Das Skript berechnet die Feiertage in Deutschland im aktuellen Jahr und prüft,
-- ob heute oder morgen ein Feiertag ist und hinterlegt das Ergebnis in den
-- Systemvariablen "Feiertag_heute" und "Feiertag_morgen".

-- (c) Simon Betschmann (01-2015)
-- Version: 1.0
-- Basierend auf einer Idee von Peter Beck (01-2011)
-- Version: 1.1
-- Erweiterung für Deutschland und Bundeländer von Udo Haß
-- Version: 1.2
-- Routine zur Berechnung der Osterfeiertage und Schaltjahr vollständig ersetzt.
-- Quelle der Berechnung der Osterfeiertage teilweise von http://wiki.contextgarden.net/Calendar_script
-- Feiertage, welche auf Ostern basieren im Aray korrigiert
-- Änderungen von Udo Haß 
-- Version: 1.3
-- Berechnung für Fronleichnam hinzugefügt (abhängig von Pfingsten)
-- Berechnung für Buß- und Bettag hinzugefügt (immer der vorletzte Mittwoch vor dem 1. Advent)
-- Erweiterung für Wochenenden
-- Variable für tägliche Ausführen ergänzt
-- Änderung von Manuel Hoefs
-- Version: 1.4 (Manuel Hoefs)
-- Fehler für Pfingsten behoben
-- Anpassung der Osterberechnung (temp fix)

-- Es werden folgende Systemvariablen benötigt:
-- Feiertag_heute
-- Feiertag_morgen

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- EINSTELLUNGEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- Bitte nur in dieser Sektion Einstellungen vornehmen
local debuging = true -- TOGGLE DEBUGING (true|false)
local Land = "DE"  -- LAND angeben (DE, CH)
local Bundesland = "NW" -- Bundesland eingeben (BW,BY,BE,BB,HB,HH,HE,MV,NI,NW,RP,SL,SN,ST,SH,TH) -- Kürzel http://www.schnelle-online.info/Feiertage-Deutschland.html
local katholische_Gemeinde = false -- (true|false) spezielle Feiertage für katholische Gemeinden (München, Ingolstadt, Rosenheim)
local Kanton = "" -- Kanton angeben für kantonale Feiertage (ZH, AG,...) -- leer lassen, um Funktion auszuschalten
local scenerun = "00:30" -- SZENE JEDEN TAG AUSFÜHREN UM
local wochenende = true -- (true|false) Wochenenden werden ebenfalls als Feiertag/Frei erkannt

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DEBUG
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- Grundfunktion: Debug("red", "Nachrichtentext")
Debug = function(color, message)
	if (debuging) then
		fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
	end
end

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- FEIERTAGE BERECHNEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
fibaro:debug("start instanz " .. os.date("%c"));

function FeiertageFunc()
-- Notwendige Variablen
	local Datum = os.date("%d.%m.") -- heutiges Datum (ohne Jahr)
	local Jahr = os.date("%Y") -- Das aktuelle Jahr ermitteln
	local WeekDate = os.date("*t").wday -- Den aktuellen Wochentag ermitteln

-- Berechne Ostersonntag, basiert auf Meeus/Jones/Butcher
	local a = math.fmod(Jahr,19)
	local b = math.floor(Jahr / 100)
	local c = math.fmod(Jahr,100)
	local d = math.floor(b / 4)
	local e = math.fmod(b,4)
	local f = math.floor((b + 8) / 25) 
	local g = math.floor((b - f + 1) / 3)
	local h = math.fmod((19 * a + b - d - g + 15),30)
	local i = math.floor(c / 4)
	local k = math.fmod(c,4)
	local L = math.fmod((32 + 2 * e + 2 * i - h - k),7)
	local m = math.floor((a + 11 * h + 22 * L) / 451)
	local oMonat = math.floor((h + L - 7 * m + 114) / 31)
	local oTag = math.fmod((h + L - 7 * m + 114),31) + 1

-- Das Ergebnis in Variable oDatum hinterlegen
	local oDatum -- Das komplette Datum vom Ostersonntag
	if (oTag < 10) then
		oDatum = "0" .. oTag .. "." .. oMonat .. "." .. Jahr;
	else
		oDatum = oTag .. "." .. oMonat .. "." .. Jahr;
	end
	Debug("gray", "Osterdatum: ".. oDatum)
	Debug("gray", "Datum: ".. Datum)

-- Berechne Buß- und Bettag
	local bubTag	
	wTag = os.time({year=Jahr, month=12, day=25})
	wTable = os.date("*t", wTag)
	if (wTable.wday == 1) then
    	bubTag = 16
    else
    	bubTag = 23 - wTable.wday + 1
   	end

-- Ermitteln, wieviele Tage der Februar im aktuellen Jahr hat
	zahl4 = Jahr % 4;
	zahl100 = Jahr % 100;
	zahl400 = Jahr % 400;
 
	local mTage -- Variable für die interne Berechnung
	if ((zahl4 == 0) and (zahl100 ~= 0)) or (zahl400 == 0) then -- Ein Schaltjahr -> Feb. = 29 Tage
		mTage = {31,29,31,30,31,30,31,31,30,31,30,31}; -- Anzahl der Tage im Monat Jan.-Dez.
		Debug("gray", Jahr.. " ist ein Schaltjahr.")
	else
		mTage = {31,28,31,30,31,30,31,31,30,31,30,31}; -- Anzahl der Tage im Monat Jan.-Dez.
		Debug("gray", Jahr.. " ist kein Schaltjahr.")
	end

-- Feiertage mit dem heutigen & morgigen Datum vergleichen und Ergebnis
-- in den Variablen "Feiertag_heute" bzw. "Feiertag_morgen" speichern
	local zaehler = 1
	while zaehler < 3 do
		local Feiertag = 0

		if (wochenende) then
			if (WeekDate == 1 or WeekDate == 7) then
				Feiertag = 1;
				Debug("gray", "Wochentag " .. WeekDate .. " ist ein Wochenendtag.")
			else
				Debug("gray", "Wochentag " .. WeekDate .. " ist KEIN Wochenendtag.")
			end
		end

		if (Land == "DE") then -- Bundeseinheitliche Feiertage in Deutschland
			if (Datum == "01.01.") then Feiertag = 1 end -- Neujahr
			if (Datum == "01.05.") then Feiertag = 1 end -- Tag der Arbeit
			if (Datum == "03.10.") then Feiertag = 1 end -- Tag der Deutschen Einheit
			if (Datum == "31.10.") and (Jahr == "2017") then Feiertag = 1 end -- Reformationstag (nur 2017 Bundeseinheitlich!)
			if (Datum == "25.12.") then Feiertag = 1 end -- 1. Weihnachtstag
			if (Datum == "26.12.") then Feiertag = 1 end -- 2. Weihnachtstag

			if Bundesland =="BW" then  -- spezifische Feiertage für Baden-Würtenberg
				if (Datum == "06.01.") then Feiertag = 1 end -- Heilige Drei Könige
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,60}
			end

			if Bundesland =="BY" then  -- spezifische Feiertage für Bayern
				if (Datum == "06.01.") then Feiertag = 1 end -- Heilige Drei Könige
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				if (katholische_Gemeinde) then
					if (Datum == "15.08.") then Feiertag = 1 end -- Mariä Himmelfahrt
				end
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,60}
			end

			if Bundesland =="BE" then  -- spezifische Feiertage für Berlin
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="BB" then  -- spezifische Feiertage für Brandenburg
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostersonntag, Ostermontag, Christi Himmelfahrt, Pfingstsonntag, Pfingstmontag
				feiertage = {-2,0,1,39,48,49}
			end

			if Bundesland =="HB" then  -- spezifische Feiertage für Bremen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="HH" then  -- spezifische Feiertage für Hamburg
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="HE" then  -- spezifische Feiertage für Hessen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,60}
			end

			if Bundesland =="MV" then  -- spezifische Feiertage für Mecklenburg-Vorpommern
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag

				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="NI" then  -- spezifische Feiertage für Niedersachsen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end
            
			if Bundesland =="NW" then  -- spezifische Feiertage für NRW
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,60}
			end

			if Bundesland =="RP" then  -- spezifische Feiertage für Rheinland-Pfalz
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,60}
			end

			if Bundesland =="SL" then  -- spezifische Feiertage für Saarland
				if (Datum == "15.08.") then Feiertag = 1 end -- Mariä Himmelfahrt
				if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
				feiertage = {-2,1,39,49,60}
			end

			if Bundesland =="SN" then  -- spezifische Feiertage für Sachsen
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
				if (Datum == bubTag .. ".11.") then Feiertag = 1 end -- Buß- und Bettag
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="ST" then  -- spezifische Feiertage für Sachsen-Anhalt
				if (Datum == "06.01.") then Feiertag = 1 end -- Heilige Drei Könige
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="SH" then  -- spezifische Feiertage für Schleswig-Holstein
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end

			if Bundesland =="TH" then  -- spezifische Feiertage für Thüringen
				if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
				-- Aray mit Differenztagen zum Ostersonntag:
				-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
				feiertage = {-2,1,39,49}
			end
		end

		if (Land == "CH") then -- FESTE FEIERTAGE IN DER GANZEN SCHWEIZ
			if (Datum == "01.01.") then Feiertag = 1 end -- Neujahr
			if (Datum == "01.08.") then Feiertag = 1 end -- Nationalfeiertag
			if (Datum == "25.12.") then Feiertag = 1 end -- Weihnachten
			if (Datum == "26.12.") then Feiertag = 1 end -- Stephanstag

			if (Kanton == "ZH") then -- FEIERTAGE IM KANTON ZÜRICH
				if (Datum == "01.05.") then Feiertag = 1 end -- Tag der Arbeit
			end

			if (Kanton == "AG") then -- FEIERTAGE IM KANTON AARGAU
				if (Datum == "02.01.") then Feiertag = 1 end -- Berchtoldstag
			end

		-- VARIABLE FEIERTAG IN DER GANZEN SCHWEIZ
			-- Aray mit Differenztagen zum oTag:
			-- Ostermontag, Karfreitag, Auffahrt, Pfingstmontag
			feiertage = {-2,1,39,49}
		end
		
-- VARIABLE FEIERTAGE: DATEN BERECHNEN
		local LVar1 -- Variable für die interne Berechnung
		local LVar2 -- Variable für die interne Berechnung
		local zahl -- Variable für die interne Berechnung

		oTage = mTage[tonumber(oMonat)] -- Anzahl Tage im Ostermonat
		Debug("grey", "Anzahl Tage im Ostermonat: "..oTage)

		local fDatum; -- Feiertagsdatum
		local fDiff; -- Anzahl der Tage vom Ostersonntag entfernt
		local Schleife; -- Für die Berechnungen in der while-Schleife notwendig    
    
		for x in next, feiertage do
			Debug("red", "Feiertag: "..feiertage[x])

			fDiff = feiertage[x]
			Schleife = true;

			zahl = oTag + fDiff; -- Differenztage zum Referenztag hinzurechnen
			Debug("grey", "Zahl: "..zahl..", oTag: "..oTag..", fDiff: "..fDiff..", index: "..x)

			if (fDiff > 0) then
				if (zahl > oTage) then
					zahl = zahl - oTage; -- Sind wir ausserhalb des Referenzmonats?
					Debug("grey", "Ausserhalb des Referenzmonats > Schleife durchlaufen.")
				else -- Nein => Berechnungschleife nicht durchlaufen.
					Schleife = false;
					LVar2 = oMonat;
					Debug("grey", "Innerhalb des Referenzmonats > Schleife nicht durchlaufen.")
				end
			else
				if (zahl > 0) then -- Wenn innerhalb des Referenzmonats => Berechnungsschleife nicht durchlaufen.
					Schleife = false;
					LVar2 = oMonat;
					Debug("grey", "Innerhalb des Referenzmonats > Schleife nicht durchlaufen.")
				else
					Debug("grey", "Ausserhalb des Referenzmonats > Schleife durchlaufen.")
				end
			end
			LVar1 = 0;

-- Schleife 'Monatsberechnung', falls nicht im gleichen Monat wie Ostern
			if (fDiff > 0) then
				while (Schleife) do
					LVar1 = LVar1 + 1.00;
					LVar2 = oMonat + LVar1;
					zahl = zahl - mTage[tonumber(oMonat)];
					if (zahl <= 0) then -- Aktueller Monat gefunden
						Schleife = false;
						zahl = zahl + mTage[tonumber(oMonat)] -- Wieder addieren, um den Tag zu berechnen
					end
				end
			else
				if (fDiff < 0) then
					while (Schleife) do
						LVar1 = LVar1 + 1.00;
						LVar2 = oMonat - LVar1;
						zahl = zahl + mTage[tonumber(oMonat)-1]
						if (zahl > 0) then -- Aktueller Monat gefunden
							Schleife = false;
						end
					end
				end
			end

-- Datum des Feiertags berechnen
			Debug("grey", "Datum des Feiertags berechnen...")
			if (zahl < 10 and tonumber(LVar2) < 10) then
				fDatum = "0" .. zahl .. ".0"..tonumber(LVar2).. ".";
			elseif (zahl < 10) then
				fDatum = "0" .. zahl .. "."..tonumber(LVar2).. ".";
			elseif (tonumber(LVar2) < 10) then
				fDatum = zahl .. ".0"..tonumber(LVar2).. ".";
			else
				fDatum = zahl .. "."..tonumber(LVar2).. ".";
			end
			Debug("white", "Feiertag: "..fDatum)

-- Prüfen, ob Datum heute/morgen mit Feiertag übereinstimmt
			if (Datum == fDatum) then
				Feiertag = 1
				fibaro:debug("Feiertag ("..fDatum..") gefunden.")
			end
		end

-- VARIABLEN SETZTEN
		if zaehler == 1 then
-- 1. Durchgang: Datum heute mit den Feiertagen prüfen
			Debug("grey", "1. Durchgang: Datum heute="..Datum..", Feiertag="..Feiertag)
			fibaro:setGlobal("Feiertag_heute", Feiertag)
			zaehler = 2
			Datum = os.date("%d.%m.", os.time()+24*60*60) -- Datum auf morgen setzen
			WeekDate = WeekDate + 1
		else
-- 1. Durchgang: Datum morgen mit den Feiertagen prüfen
			if (wochenende) then
				if (WeekDate > 6) then
					Feiertag = 1
				end
			end
			Debug("grey", "2. Durchgang: Datum morgen="..Datum..", Feiertag="..Feiertag)
			fibaro:setGlobal("Feiertag_morgen", Feiertag)
			zaehler = 3
		end
	end

-- ERGEBNIS AUSGEBEN
	if fibaro:getGlobal("Feiertag_heute") == '0' then
		if (wochenende) then
			fibaro:debug("Heute ist kein Feiertag / Wochenende.")
		else
			fibaro:debug("Heute ist kein Feiertag.")
		end
	else
		if (wochenende) then
			fibaro:debug("Heute ist ein Feiertag / Wochenende. Variable gesetzt!")
		else
			fibaro:debug("Heute ist ein Feiertag. Variable gesetzt!")
		end
	end
	if fibaro:getGlobal("Feiertag_morgen") == '0' then
		if (wochenende) then
			fibaro:debug("Morgen ist kein Feiertag / Wochenende.")
		else
			fibaro:debug("Morgen ist kein Feiertag.")
		end
	else
		if (wochenende) then
			fibaro:debug("Morgen ist ein Feiertag / Wochenende. Variable gesetzt!")
		else
			fibaro:debug("Morgen ist ein Feiertag. Variable gesetzt!")
		end
	end
end

-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SZENE JEDEN TAG AUSFÜHREN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
	local currentDate = os.date("*t");
	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 string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == scenerun) )) then
		FeiertageFunc()
	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
		FeiertageFunc()
	end
end

Super, Danke hat für das erste funktioniert. Ich werde es beobachten.

Schöne Ostern