Hat jemand eine Möglichkeit gefunden automatisch Feiertage festzustellen und in einer Variable abzulegen?
Ich habe im Moment nur eine manuelle Variante.
Hat jemand eine Möglichkeit gefunden automatisch Feiertage festzustellen und in einer Variable abzulegen?
Ich habe im Moment nur eine manuelle Variante.
Hi,
Simon, hier aus dem Forum hat mir mal ein Script geschickt zum berechnen der Feiertage. Allerdings bin ich noch nicht zum testen gekommen.
Schau es dir gern mal an:
… Es berechnet, ob heute
bzw. morgen ein Feiertag ist und schreibt das Ergebnis in zwei
Systemvariablen. Damit lassen sich dann z.B. weitere Szenen steuern. …
--[[ %% 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) -- Es werden folgende Systemvariablen benötigt: -- Feiertag_heute -- Feiertag_morgen -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- EINSTELLUNGEN -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- Bitte nur in dieser Sektion Einstellungen vornehmen local debuging = false -- TOGGLE DEBUGING (true|false) local Kanton = "ZH" -- 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 -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- FEIERTAGE BERECHNEN -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ function FeiertageFunc() local Datum = os.date("%d.%m.") -- heutiges Datum (ohne Jahr) local i = 1 -- OSTERDATUM BERECHNEN local Jahr = os.date("%Y") -- Das aktuelle Jahr ermitteln local oTag -- Das Tagesdatum vom Ostersonntag local oMonat -- Das Monatsdatum von Ostersonntag local oDatum -- Das komplette Datum vom Ostersonntag 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 -- Interne Funktion zum Runden auf Ganzzahlen function round(x) return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5) end -- Die modifizierte Gauss-Formel nach Lichtenberg local LVar1 = ((19 * (Jahr % 19)) + (15 + (((3 * (Jahr / 100)) + 3) / 4) - (((8 * (Jahr / 100)) + 13) / 25))) % 30; local LVar2 = (LVar1 / 29) + (((LVar1 / 28) - (LVar1 / 29)) * ((Jahr % 19) / 11)); local LVar3 = 7 - (((21 + LVar1 - LVar2) - (7 - ((Jahr + (Jahr / 4) + (2 - (((3 * (Jahr / 100)) + 3) / 4))) % 7))) % 7); local oTag = round((21 + LVar1 - LVar2) + LVar3); -- Monat und Tag von Ostern bestimmen if (oTag > 31) then -- Der Monat März hat nur 31 Tage -> Ostern im April oMonat = "04"; oTag = oTag - 31; else oMonat = "03"; -- Ostern ist im März end -- 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) -- Ermitteln, wieviele Tage der Februar im aktuellen Jahr hat zahl = Jahr % 4; if (zahl == 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 i < 3 do local Feiertag = 0 -- 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 Ostersonntag: -- Ostermontag, Karfreitag, Auffahrt, Pfingstmontag local feiertage = {1,-2,39,50} -- 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 Ostersonntag entfernt local Schleife; -- Für die Berechnungen in der while-Schleife notwendig for x in next, feiertage do 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 i == 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) i = 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) i = 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
Das das Script mal jemand umgesetzt?
hab das Script heute mal getestet. Leider scheint es nicht richtig zu funktionieren. Es zeigt für heute und morgen einen Freitag bei mir an.
[DEBUG] 15:01:52: Heute ist ein Feiertag. Variable gesetzt!
[DEBUG] 15:01:52: Morgen ist ein Feiertag. Variable gesetzt!
Gruß, Valle
Zumindest war gestern ein Feiertag in der Schweiz, darauf zielt das Script ja ab
https://www.feiertagskalender.ch/index.php?geo=3056
habe gerade mal den Parameter “Kanton” leer gelassen. Leider ändert sich am Ergebnis nichts. Die Parameter “Feiertag_heute” und “Feiertag_morgen” haben auch den Wert 0. Eigentlich müsste ja bei einem Wert von 0 angezeigt werden, dass kein Feiertag ist. Trotzdem wird immer angezeigt, dass ein Feiertag ist.
Hier mal die Debug Ausgabe
[DEBUG] 15:44:22: Osterdatum: 28.03.2016
[DEBUG] 15:44:22: 2016 ist ein Schaltjahr.
[DEBUG] 15:44:22: Anzahl Tage im Ostermonat: 31
[DEBUG] 15:44:22: Zahl: 29, oTag: 28, fDiff: 1, index: 1
[DEBUG] 15:44:22: Innerhalb des Referenzmonats > Schleife nicht durchlaufen.
[DEBUG] 15:44:22: Datum des Feiertags berechnen...
[DEBUG] 15:44:22: Feiertag: 29.03.
[DEBUG] 15:44:22: Zahl: 26, oTag: 28, fDiff: -2, index: 2
[DEBUG] 15:44:22: Innerhalb des Referenzmonats > Schleife nicht durchlaufen.
[DEBUG] 15:44:22: Datum des Feiertags berechnen...
[DEBUG] 15:44:22: Feiertag: 26.03.
[DEBUG] 15:44:22: Zahl: 67, oTag: 28, fDiff: 39, index: 3
[DEBUG] 15:44:22: Ausserhalb des Referenzmonats > Schleife durchlaufen.
[DEBUG] 15:44:22: Datum des Feiertags berechnen...
[DEBUG] 15:44:22: Feiertag: 05.05.
[DEBUG] 15:44:22: Zahl: 78, oTag: 28, fDiff: 50, index: 4
[DEBUG] 15:44:22: Ausserhalb des Referenzmonats > Schleife durchlaufen.
[DEBUG] 15:44:22: Datum des Feiertags berechnen...
[DEBUG] 15:44:22: Feiertag: 16.05.
[DEBUG] 15:44:22: 1. Durchgang: Datum heute=26.07., Feiertag=0
[DEBUG] 15:44:22: Anzahl Tage im Ostermonat: 31
[DEBUG] 15:44:22: Zahl: 29, oTag: 28, fDiff: 1, index: 1
[DEBUG] 15:44:22: Innerhalb des Referenzmonats > Schleife nicht durchlaufen.
[DEBUG] 15:44:22: Datum des Feiertags berechnen...
[DEBUG] 15:44:22: Feiertag: 29.03.
[DEBUG] 15:44:22: Zahl: 26, oTag: 28, fDiff: -2, index: 2
[DEBUG] 15:44:22: Innerhalb des Referenzmonats > Schleife nicht durchlaufen.
[DEBUG] 15:44:22: Datum des Feiertags berechnen...
[DEBUG] 15:44:22: Feiertag: 26.03.
[DEBUG] 15:44:22: Zahl: 67, oTag: 28, fDiff: 39, index: 3
[DEBUG] 15:44:22: Ausserhalb des Referenzmonats > Schleife durchlaufen.
[DEBUG] 15:44:22: Datum des Feiertags berechnen...
[DEBUG] 15:44:22: Feiertag: 05.05.
[DEBUG] 15:44:22: Zahl: 78, oTag: 28, fDiff: 50, index: 4
[DEBUG] 15:44:22: Ausserhalb des Referenzmonats > Schleife durchlaufen.
[DEBUG] 15:44:22: Datum des Feiertags berechnen...
[DEBUG] 15:44:22: Feiertag: 16.05.
[DEBUG] 15:44:22: 2. Durchgang: Datum morgen=27.07., Feiertag=0
[DEBUG] 15:44:22: Heute ist ein Feiertag. Variable gesetzt!
[DEBUG] 15:44:22: Morgen ist ein Feiertag. Variable gesetzt!
So, konnte das Problem lösen. Warum auch immer, werden die Variablen “Feiertag_heute” und “Feiertag_morgen” nicht richtig ausgewertet, wenn der Wert in der Abfrage aus Zeile 228 sowie 233 nicht in einem Anführungszeichen oder Hochkomma gesetzt werden.
Es sieht jetzt bei mir wie folgt aus:
-- 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
So klappt es jetzt auch bei mir mit dem Script.
Gruß, Valle
Super.
Mit dem Para “Kanton” werden sicherlich die kantonspezifische Feiertage angezeigt. Ansonsten nur die für die ganze Schweiz.
ja der Parameter Kanton ist für die spezifischen Gliedstaaten der Schweiz. Ich passe mir das Script gerade für Deutschland an.
Hallo,
ich habe das Script mal angepasst auf Feiertage für Deutschland und den jeweiligen Bundesländern. Ich hoffe es ist fehlerfrei.
--[[
%% 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ß
-- Es werden folgende Systemvariablen benötigt:
-- Feiertag_heute
-- Feiertag_morgen
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- EINSTELLUNGEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Bitte nur in dieser Sektion Einstellungen vornehmen
local debuging = false -- 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 ="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
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- FEIERTAGE BERECHNEN
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function FeiertageFunc()
local Datum = os.date("%d.%m.") -- heutiges Datum (ohne Jahr)
local i = 1
-- OSTERDATUM BERECHNEN
local Jahr = os.date("%Y") -- Das aktuelle Jahr ermitteln
local oTag -- Das Tagesdatum vom Ostersonntag
local oMonat -- Das Monatsdatum von Ostersonntag
local oDatum -- Das komplette Datum vom Ostersonntag
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
-- Interne Funktion zum Runden auf Ganzzahlen
function round(x)
return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5)
end
-- Die modifizierte Gauss-Formel nach Lichtenberg
local LVar1 = ((19 * (Jahr % 19)) + (15 + (((3 * (Jahr / 100)) + 3) / 4) - (((8 * (Jahr / 100)) + 13) / 25))) % 30;
local LVar2 = (LVar1 / 29) + (((LVar1 / 28) - (LVar1 / 29)) * ((Jahr % 19) / 11));
local LVar3 = 7 - (((21 + LVar1 - LVar2) - (7 - ((Jahr + (Jahr / 4) + (2 - (((3 * (Jahr / 100)) + 3) / 4))) % 7))) % 7);
local oTag = round((21 + LVar1 - LVar2) + LVar3);
-- Monat und Tag von Ostern bestimmen
if (oTag > 31) then -- Der Monat März hat nur 31 Tage -> Ostern im April
oMonat = "04";
oTag = oTag - 31;
else
oMonat = "03"; -- Ostern ist im März
end
-- 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)
-- Ermitteln, wieviele Tage der Februar im aktuellen Jahr hat
zahl = Jahr % 4;
if (zahl == 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 i < 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 Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
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 Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
end
if Bundesland =="BE" then -- spezifische Feiertage für Berlin
-- Aray mit Differenztagen zum Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
end
if Bundesland =="BB" then -- spezifische Feiertage für Brandenburg
if (Datum == "31.10.") then Feiertag = 1 end -- Reformationstag
-- Aray mit Differenztagen zum Ostersonntag:
-- Ostersonntag, Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstsonntag,Pfingstmontag
feiertage = {0,1,-2,40,49,50}
end
if Bundesland =="HB" then -- spezifische Feiertage für Bremen
-- Aray mit Differenztagen zum Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
end
if Bundesland =="HH" then -- spezifische Feiertage für Hamburg
-- Aray mit Differenztagen zum Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
end
if Bundesland =="HE" then -- spezifische Feiertage für Hessen
if (Datum == "26.05.") then Feiertag = 1 end -- Fronleichnam
-- Aray mit Differenztagen zum Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
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:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
end
if Bundesland =="NI" then -- spezifische Feiertage für Niedersachsen
-- Aray mit Differenztagen zum Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
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 Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
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 Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
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 Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
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 Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
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 Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
end
if Bundesland =="SH" then -- spezifische Feiertage für Schleswig-Holstein
-- Aray mit Differenztagen zum Ostersonntag:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,50}
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:
-- Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
feiertage = {1,-2,40,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
-- 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 Ostersonntag:
-- Ostermontag, Karfreitag, Auffahrt, Pfingstmontag
feiertage = {1,-2,39,50}
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 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 i == 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)
i = 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)
i = 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
Hi,
danke für deine Arbeit
Gruß
Hallo,
sehr gute Arbeit. Auch von mir ein großes Dankeschön!
Kleine Ergänzung. Halb ernst und halb zur Belustigung und nur für die jüngere Generation. Das Jahr 2100 ist zwar durch 4 teilbar, aber kein Schaltjahr. Hier wird es Abweichungen geben
Ergänzung der Formel:
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
Sehr Interessant.
Werde ich auch mal probieren.
@ Bastian ab welcher Zeile mus dein Block eingebaut werden.
Bastian noch mal danke das du mir geholfen hast bei der Scene mit den Rollo´s die läuft jetzt,
und ich habe schon mehr bestehende Scenen mit elseif zusammenfügen können aus 2 mach eine Scene Danke.
Kleine Korrektur in Zeile 5 (ehemals Zeile 6; es fehlt ein 2. Gleichheitszeichen):
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
Ach so: im Script bitte ab Zeile 95 einfügen bzw. ersetzen ?.
HI,
wofür nutzt Ihr diese Variable im Anschluss. Mir fällt nur ein, das im der Heizungssteuerung zu verwenden. Wobei ich jetzt nicht wüsste wie ich dies bewerkstelligen würde.
Das soll heißen, wenn Feiertag dann Sonntagsplan
http://www.siio.de/heizenenergiesparen/bares-geld-sparen-fibaro-heizung-aus-bei-fenster-auf/
Gruß
ChrisBeat
Hi ChrisBeat,
für die Heozungssteuerung lässt sich die Variable nicht verwenden. Diese kennt nur Montag bis Sonntag.
Aber für jegliche Art von Szene ist die Variable interessant, wenn beispielsweise an Wochenenden andere Funktionen ausgeführt werden sollen als in der Woche. Auch für zeitgesteuerte Szenen ist es relevant. Oder für den Wecker der an einem Feiertag nicht um 6 Uhr klingeln soll.
Genau.
Am WE und Feiertagen sollen zB Rollos anders fahren.
Und bestimmte Szenen nicht.
ich nutze die Feiertagsoption für meine “Server- und Netzwerksteuern”. In der Nacht und an Werktagen werden alle Server autom. runtergefahren sowie Teilkomponenten des Netzwerks um eine definierte Uhrzeit abgeschaltet (WLAN, NAS, Plexserver, Mailserver z.B). Mit dem Script kann ich das halt an Feiertagen beeinflussen.
Gruß, Valle
Hallo Community,
wieder was gelernt und neue Ideen gesammelt. Danke Euch
Gruß
ChrisBeat