auch hier einen riesigen Dank an die Programmierer und allen schöne Feiertage
Ich sage auch Dankeschön und es funktioniert super. Euch allen Frohe Osterfeiertage
Ich frage mal als Anfänger - reicht das wenn der Feiertagsskript nur im System hinterlegt ist oder muss der bei jeder Programmierung mit eingebunden werden ?
das Skript brauchst du nur einmal
Super, Danke und frohe Ostern noch
Du musst nur die beiden von dem Script gesetzten Variablen nach deinen Bedürfnissen einbinden.
Ja so ein To Do für Leute die ganz neu mit dem Thema sind, wäre schon was ? mal sehen, wie ich das machen muss - Danke Dir ?
Fang mit Blockszenen an und wandele die dann in LUA um.
So kommt man gut rein.
Oder:
https://manuals.fibaro.com/knowledge-base-browse/?kb_cat=use-cases
Guten Morgen,
mir ist Aufgefallen, dass nach dem Script auch heute noch Feiertag ist. Irgendwie haut die Berechnung für Ostern nicht hin. Könnte da nochmal einer der Programmierer überschauen. Bei den Feiertagsberechnungen fehlt mir einfach das Verständnis !
Grüße Guido und Danke
@Guido, sorry aber da muss ein anderer Fehler sein, bei mir läuft fast alles so wie es soll.
@All
Habe mir die ganze Sache noch mal angeschaut und die Berechnung der Feiertage basierend auf Ostern war von meinem Vorgängern einfach zu kompliziert und leider auch falsch. Habe daher heute einige Änderungen vorgenommen. Und zur Vereinfachung kann nun über eine separate Variable, die Feiertage eines ganzen Jahres ausgegeben werden. Nach der aktuellen Prüfung sollten alle Feiertage basierend auf Ostern für die kommenden 3 Jahre passen. Mehr hatte ich kein Bock zu 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 (Manuel Hoefs)
-- - 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ägliches Ausführen ergänzt
-- Version: 1.4 (Manuel Hoefs)
-- - Anpassung der Osterberechnung (temp fix)
-- Version: 1.5 (Manuel Hoefs April 2018)
-- - kompletter Neuberechnung der Feiertage abhängig von Ostern
-- - Konfigurationserweiterung um Feiertage des kompletten Jahres auszugeben
-- Es werden folgende Systemvariablen benötigt:
-- Feiertag_heute
-- Feiertag_morgen
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- EINSTELLUNGEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Bitte nur in dieser Sektion Einstellungen vornehmen
debuging = true -- TOGGLE DEBUGING (true|false)
Land = "DE" -- LAND angeben (DE, CH)
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
katholische_Gemeinde = false -- (true|false) spezielle Feiertage für katholische Gemeinden (München, Ingolstadt, Rosenheim)
Kanton = "" -- Kanton angeben für kantonale Feiertage (ZH, AG,...) -- leer lassen, um Funktion auszuschalten
scenerun = "00:30" -- SZENE JEDEN TAG AUSFÜHREN UM
wochenende = true -- (true|false) Wochenenden werden ebenfalls als Feiertag/Frei erkannt
showholidays = false -- Liste alle Feiertage im Jahr (true|false)
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 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
--oDatum -- Das komplette Datum vom Ostersonntag
if (oTag < 10) then
oDatum = "0" .. oTag .. ".0" .. oMonat .. "." .. Jahr
else
oDatum = oTag .. ".0" .. oMonat .. "." .. Jahr
end
Debug("gray", "Osterdatum: ".. oDatum)
Debug("gray", "Datum: ".. Datum)
-- Berechne Buß- und Bettag
--bubTag
local wTag = os.time({year=Jahr, month=12, day=25})
local 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
local zahl4 = Jahr % 4
local zahl100 = Jahr % 100
local zahl400 = Jahr % 400
--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
local feiertagliste = ""
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 (showholidays == true) and (zaehler == 1) then
fibaro:debug("Liste der Feiertage für "..Jahr)
fibaro:debug("01.01. Neujahr")
fibaro:debug("01.05. Tag der Arbeit")
fibaro:debug("03.10. Tag der Deutschen Einheit")
fibaro:debug("25.12. 1. Weihnachtstag")
fibaro:debug("26.12. 2. Weihnachtstag")
end
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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("06.01. Heilige Drei Könige")
fibaro:debug("01.11. Allerheiligen")
end
-- 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 (showholidays == true) and (zaehler == 1) then
fibaro:debug("06.01. Heilige Drei Könige")
fibaro:debug("01.11. Allerheiligen")
end
if (katholische_Gemeinde) then
if (Datum == "15.08.") then Feiertag = 1 end -- Mariä Himmelfahrt
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("15.08. Mariä Himmelfahrt")
end
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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("31.10. Reformationstag")
end
-- 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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("31.10. Reformationstag")
end
-- 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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("01.11. Allerheiligen")
end
-- 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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("01.11. Allerheiligen")
end
-- 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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("15.08. Mariä Himmelfahrt")
fibaro:debug("01.11. Allerheiligen")
end
-- 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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("31.10. Reformationstag")
fibaro:debug(bubTag ..".11. Buß- und Bettag")
end
-- 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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("06.01. Heilige Drei Könige")
fibaro:debug("31.10. Reformationstag")
end
-- 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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("31.10. Reformationstag")
end
-- 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 (showholidays == true) and (zaehler == 1) then
fibaro:debug("01.01. Neujahr")
fibaro:debug("01.08. Nationalfeiertag")
fibaro:debug("25.12. Weihnachten")
fibaro:debug("26.12. Stephanstag")
end
if (Kanton == "ZH") then -- FEIERTAGE IM KANTON ZÜRICH
if (Datum == "01.05.") then Feiertag = 1 end -- Tag der Arbeit
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("01.05. Tag der Arbeit")
end
end
if (Kanton == "AG") then -- FEIERTAGE IM KANTON AARGAU
if (Datum == "02.01.") then Feiertag = 1 end -- Berchtoldstag
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("02.01. Berchtoldstag")
end
end
-- VARIABLE FEIERTAG IN DER GANZEN SCHWEIZ
-- Aray mit Differenztagen zum oTag:
-- Ostermontag, Karfreitag, Auffahrt, Pfingstmontag
feiertage = {-2,1,39,49}
end
-- VARIABLE FEIERTAGE BASIEREND AUF OSTERN: DATEN BERECHNEN
--calcTag -- Variable für die interne Berechnung
--calcMonat -- Variable für die interne Berechnung
--zahl -- Variable für die interne Berechnung
--fDatum -- Feiertagsdatum
--fDiff -- Anzahl der Tage vom Ostersonntag entfernt
--Schleife -- Für die Berechnungen in der while-Schleife notwendig
oTage = mTage[tonumber(oMonat)] -- Anzahl Tage im Ostermonat
Debug("grey", "Anzahl Tage im Ostermonat: "..oTage)
for x in next, feiertage do
Debug("red", "Feiertag: "..feiertage[x])
fDiff = oTag + feiertage[x]-- Differenztage zum Referenztag hinzurechnen
Debug("grey", "oTag: "..oTag..", fDiff: "..fDiff..", index: "..x)
if (fDiff < 1) then
calcTag = mTage[tonumber(oMonat-1)]+fDiff
calcMonat = oMonat-1
elseif (fDiff <= oTage) then
calcTag = fDiff
calcMonat = oMonat
else
local Schleife = true
local count = 0
while (Schleife) do
local zahl = fDiff - mTage[tonumber(oMonat+count)]
if (zahl > mTage[tonumber(oMonat+count+1)]) then
count = count + 1
fDiff = zahl
Debug("grey", "Ausserhalb des Referenzmonats > Schleife durchlaufen.")
else
calcTag = zahl
calcMonat = oMonat+count+1
Schleife = false
Debug("grey", "Innerhalb des Referenzmonats > Schleife nicht durchlaufen.")
end
end
end
-- Datum des Feiertags berechnen
Debug("grey", "Datum des Feiertags berechnen...")
if (calcTag < 10) then
fDatum = "0" .. calcTag .. ".0"..calcMonat.. "."
else
fDatum = calcTag .. ".0"..calcMonat.. "."
end
Debug("white", "Feiertag: "..fDatum)
if (showholidays == true) and (zaehler == 1) then
local feiertag = ""
if (feiertage[x] == -2) then
feiertag = "Karfeitag"
elseif (feiertage[x] == 0) then
feiertag = "Ostersonntag"
elseif (feiertage[x] == 1) then
feiertag = "Ostermontag"
elseif (feiertage[x] == 39) then
feiertag = "Christi Himmelfahrt"
elseif (feiertage[x] == 48) then
feiertag = "Pfingstsonntag"
elseif (feiertage[x] == 49) then
feiertag = "Pfingstmontag"
elseif (feiertage[x] == 60) then
feiertag = "Fronleichnam"
end
fibaro:debug(fDatum .." ".. feiertag)
end
-- 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
-- 2. 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(os.date("%c") .. " - Heute ist kein Feiertag / Wochenende.")
else
fibaro:debug(os.date("%c") .. " - Heute ist kein Feiertag.")
end
else
if (wochenende) then
fibaro:debug(os.date("%c") .. " - Heute ist ein Feiertag / Wochenende. Variable gesetzt!")
else
fibaro:debug(os.date("%c") .. " - Heute ist ein Feiertag. Variable gesetzt!")
end
end
if fibaro:getGlobal("Feiertag_morgen") == '0' then
if (wochenende) then
fibaro:debug(os.date("%c") .. " - Morgen ist kein Feiertag / Wochenende.")
else
fibaro:debug(os.date("%c") .. " - Morgen ist kein Feiertag.")
end
else
if (wochenende) then
fibaro:debug(os.date("%c") .. " - Morgen ist ein Feiertag / Wochenende. Variable gesetzt!")
else
fibaro:debug(os.date("%c") .. " - 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
Guten Morgen,
Danke, hab das neue Script jetzt am laufen. Hoffe doch das es jetzt perfekt läuft.
Schöne Tag und Grüße
Guido
Danke für Dein Engagement, Zottel!
Ich Oute mich mal als Kann Nix ? Hatte das Script eingebunden und Variable erstellt - der Kaffee, welcher heute früh nicht gebrüht werden sollte, da Feiertag hat heute Nacht um 0.30 Uhr heißen Kaffee gemacht, der heute morgen nicht der Brüder war ?
Wo kann ich denn den Fehler suchen - bei Mir habe ich den gefunden, aber was kann ich falsch gemacht haben ?? Hilfe ?
Will mir denn mal keiner auf die Sprünge helfen ?
Hi,
Also mir viel es schwer, Deinen Text zu deuten.
Da steht „bei Mir habe ich den gefunden“ - also doch nicht den Fehler gelöst?
Überarbeite doch noch mal Beschreibungn…
Viele Grüße Hoggle
Ich habe mir eben alle Feiertage ausgeben lassen (danke für die Funktion!) und der morgige Pfingstmontag wird für den 20.05. terminiert. Da scheint noch eine Kleinigkeit nicht zu passen…
Hi,
anbei die Korrektur für Ostermontag
--[[
%% 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 (Manuel Hoefs)
-- - 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ägliches Ausführen ergänzt
-- Version: 1.4 (Manuel Hoefs)
-- - Anpassung der Osterberechnung (temp fix)
-- Version: 1.5 (Manuel Hoefs April 2018)
-- - kompletter Neuberechnung der Feiertage abhängig von Ostern
-- - Konfigurationserweiterung um Feiertage des kompletten Jahres auszugeben
-- Version: 1.6 (Thomas Ehehalt Mai 2018)
-- - Hot fix für die Berechnung von Pfingstmontag
-- Es werden folgende Systemvariablen benötigt:
-- Feiertag_heute
-- Feiertag_morgen
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- EINSTELLUNGEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Bitte nur in dieser Sektion Einstellungen vornehmen
debuging = true -- TOGGLE DEBUGING (true|false)
Land = "DE" -- LAND angeben (DE, CH)
Bundesland = "BY" -- 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
katholische_Gemeinde = true -- (true|false) spezielle Feiertage für katholische Gemeinden (München, Ingolstadt, Rosenheim)
Kanton = "" -- Kanton angeben für kantonale Feiertage (ZH, AG,...) -- leer lassen, um Funktion auszuschalten
scenerun = "00:30" -- SZENE JEDEN TAG AUSFÜHREN UM
wochenende = true -- (true|false) Wochenenden werden ebenfalls als Feiertag/Frei erkannt
showholidays = true -- Liste alle Feiertage im Jahr (true|false)
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 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
--oDatum -- Das komplette Datum vom Ostersonntag
if (oTag < 10) then
oDatum = "0" .. oTag .. ".0" .. oMonat .. "." .. Jahr
else
oDatum = oTag .. ".0" .. oMonat .. "." .. Jahr
end
Debug("gray", "Osterdatum: ".. oDatum)
Debug("gray", "Datum: ".. Datum)
-- Berechne Buß- und Bettag
--bubTag
local wTag = os.time({year=Jahr, month=12, day=25})
local 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
local zahl4 = Jahr % 4
local zahl100 = Jahr % 100
local zahl400 = Jahr % 400
--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
local feiertagliste = ""
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 (showholidays == true) and (zaehler == 1) then
fibaro:debug("Liste der Feiertage für "..Jahr)
fibaro:debug("01.01. Neujahr")
fibaro:debug("01.05. Tag der Arbeit")
fibaro:debug("03.10. Tag der Deutschen Einheit")
fibaro:debug("25.12. 1. Weihnachtstag")
fibaro:debug("26.12. 2. Weihnachtstag")
end
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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("06.01. Heilige Drei Könige")
fibaro:debug("01.11. Allerheiligen")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
feiertage = {-2,1,39,50,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 (showholidays == true) and (zaehler == 1) then
fibaro:debug("06.01. Heilige Drei Könige")
fibaro:debug("01.11. Allerheiligen")
end
if (katholische_Gemeinde) then
if (Datum == "15.08.") then Feiertag = 1 end -- Mariä Himmelfahrt
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("15.08. Mariä Himmelfahrt")
end
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
feiertage = {-2,1,39,50,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,50}
end
if Bundesland =="BB" then -- spezifische Feiertage für Brandenburg
if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("31.10. Reformationstag")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostersonntag, Ostermontag, Christi Himmelfahrt, Pfingstsonntag, Pfingstmontag
feiertage = {-2,0,1,39,49,50}
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,50}
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,50,60}
end
if Bundesland =="MV" then -- spezifische Feiertage für Mecklenburg-Vorpommern
if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("31.10. Reformationstag")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
feiertage = {-2,1,39,50}
end
if Bundesland =="NI" then -- spezifische Feiertage für Niedersachsen
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
feiertage = {-2,1,39,50}
end
if Bundesland =="NW" then -- spezifische Feiertage für NRW
if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("01.11. Allerheiligen")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
feiertage = {-2,1,39,50,60}
end
if Bundesland =="RP" then -- spezifische Feiertage für Rheinland-Pfalz
if (Datum == "01.11.") then Feiertag = 1 end -- Allerheiligen
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("01.11. Allerheiligen")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
feiertage = {-2,1,39,50,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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("15.08. Mariä Himmelfahrt")
fibaro:debug("01.11. Allerheiligen")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag, Fronleichnam
feiertage = {-2,1,39,50,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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("31.10. Reformationstag")
fibaro:debug(bubTag ..".11. Buß- und Bettag")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
feiertage = {-2,1,39,50}
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
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("06.01. Heilige Drei Könige")
fibaro:debug("31.10. Reformationstag")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
feiertage = {-2,1,39,50}
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,50}
end
if Bundesland =="TH" then -- spezifische Feiertage für Thüringen
if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("31.10. Reformationstag")
end
-- Aray mit Differenztagen zum Ostersonntag:
-- Karfreitag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
feiertage = {-2,1,39,50}
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 (showholidays == true) and (zaehler == 1) then
fibaro:debug("01.01. Neujahr")
fibaro:debug("01.08. Nationalfeiertag")
fibaro:debug("25.12. Weihnachten")
fibaro:debug("26.12. Stephanstag")
end
if (Kanton == "ZH") then -- FEIERTAGE IM KANTON ZÜRICH
if (Datum == "01.05.") then Feiertag = 1 end -- Tag der Arbeit
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("01.05. Tag der Arbeit")
end
end
if (Kanton == "AG") then -- FEIERTAGE IM KANTON AARGAU
if (Datum == "02.01.") then Feiertag = 1 end -- Berchtoldstag
if (showholidays == true) and (zaehler == 1) then
fibaro:debug("02.01. Berchtoldstag")
end
end
-- VARIABLE FEIERTAG IN DER GANZEN SCHWEIZ
-- Aray mit Differenztagen zum oTag:
-- Ostermontag, Karfreitag, Auffahrt, Pfingstmontag
feiertage = {-2,1,39,50}
end
-- VARIABLE FEIERTAGE BASIEREND AUF OSTERN: DATEN BERECHNEN
--calcTag -- Variable für die interne Berechnung
--calcMonat -- Variable für die interne Berechnung
--zahl -- Variable für die interne Berechnung
--fDatum -- Feiertagsdatum
--fDiff -- Anzahl der Tage vom Ostersonntag entfernt
--Schleife -- Für die Berechnungen in der while-Schleife notwendig
oTage = mTage[tonumber(oMonat)] -- Anzahl Tage im Ostermonat
Debug("grey", "Anzahl Tage im Ostermonat: "..oTage)
for x in next, feiertage do
Debug("red", "Feiertag: "..feiertage[x])
fDiff = oTag + feiertage[x]-- Differenztage zum Referenztag hinzurechnen
Debug("grey", "oTag: "..oTag..", fDiff: "..fDiff..", index: "..x)
if (fDiff < 1) then
calcTag = mTage[tonumber(oMonat-1)]+fDiff
calcMonat = oMonat-1
elseif (fDiff <= oTage) then
calcTag = fDiff
calcMonat = oMonat
else
local Schleife = true
local count = 0
while (Schleife) do
local zahl = fDiff - mTage[tonumber(oMonat+count)]
if (zahl > mTage[tonumber(oMonat+count+1)]) then
count = count + 1
fDiff = zahl
Debug("grey", "Ausserhalb des Referenzmonats > Schleife durchlaufen.")
else
calcTag = zahl
calcMonat = oMonat+count+1
Schleife = false
Debug("grey", "Innerhalb des Referenzmonats > Schleife nicht durchlaufen.")
end
end
end
-- Datum des Feiertags berechnen
Debug("grey", "Datum des Feiertags berechnen...")
if (calcTag < 10) then
fDatum = "0" .. calcTag .. ".0"..calcMonat.. "."
else
fDatum = calcTag .. ".0"..calcMonat.. "."
end
Debug("white", "Feiertag: "..fDatum)
if (showholidays == true) and (zaehler == 1) then
local feiertag = ""
if (feiertage[x] == -2) then
feiertag = "Karfeitag"
elseif (feiertage[x] == 0) then
feiertag = "Ostersonntag"
elseif (feiertage[x] == 1) then
feiertag = "Ostermontag"
elseif (feiertage[x] == 39) then
feiertag = "Christi Himmelfahrt"
elseif (feiertage[x] == 49) then
feiertag = "Pfingstsonntag"
elseif (feiertage[x] == 50) then
feiertag = "Pfingstmontag"
elseif (feiertage[x] == 60) then
feiertag = "Fronleichnam"
end
fibaro:debug(fDatum .." ".. feiertag)
end
-- 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
-- 2. 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(os.date("%c") .. " - Heute ist kein Feiertag / Wochenende.")
else
fibaro:debug(os.date("%c") .. " - Heute ist kein Feiertag.")
end
else
if (wochenende) then
fibaro:debug(os.date("%c") .. " - Heute ist ein Feiertag / Wochenende. Variable gesetzt!")
else
fibaro:debug(os.date("%c") .. " - Heute ist ein Feiertag. Variable gesetzt!")
end
end
if fibaro:getGlobal("Feiertag_morgen") == '0' then
if (wochenende) then
fibaro:debug(os.date("%c") .. " - Morgen ist kein Feiertag / Wochenende.")
else
fibaro:debug(os.date("%c") .. " - Morgen ist kein Feiertag.")
end
else
if (wochenende) then
fibaro:debug(os.date("%c") .. " - Morgen ist ein Feiertag / Wochenende. Variable gesetzt!")
else
fibaro:debug(os.date("%c") .. " - 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
Dankeschön!
Hallo Hoggle,
bei mir habe ich den gefunden, als krieg es nicht hin - sorry für die dumme Schreibweise !!
Den Script habe ich eingefügt und Variablen erstellt.
Nun habe ich mal das Beispiel Kaffee hier eingefügt.
Die Maschine geht mitten in der Nacht an und morgens auch noch mal, nehme ich die Variable raus - läuft es normal zu den Zeiten.
Würde aber gerne das die Maschine weiß, keine Arbeitszeit und bleibt aus.
Variable habe ich mal auf 0 und mal auf 1 gesetzt, macht immer das gleiche
Ich hoffe so ist es verständlicher
Heute - Pfingstmontag soll auch kein Feiertag sein, oder habe ich den Skript falsch verstanden ?