Feiertagsberechnung - Skript
Moderator: Co-Administratoren
-
- Beiträge: 1602
- Registriert: 16.08.2009, 23:18
- Wohnort: Landau/Südpfalz
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 4 Mal
Re: Feiertagsberechnung - Skript
... nur daß die Astro-Funktion der CCU nicht mit meinem Helligkeitsempfinden übereinstimmt. Ich verwende deshalb Teddys Tageszeiten-script - ist auf Kajus Seite: http://www.homematic-inside.de/tecbase/ ... eilen.html
V.
V.
Re: Feiertagsberechnung - Skript
Hallo.
Daraus stammen doch die Codezeilen. Damit ließe sich auch einfach ein Offset programmieren, wenn die Zeiten zu früh oder zu spät sind.
Lieben Gruß,
kaju
Daraus stammen doch die Codezeilen. Damit ließe sich auch einfach ein Offset programmieren, wenn die Zeiten zu früh oder zu spät sind.
Lieben Gruß,
kaju
HomeMatic-INSIDE: http://www.homematic-inside.de
-
- Beiträge: 1602
- Registriert: 16.08.2009, 23:18
- Wohnort: Landau/Südpfalz
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 4 Mal
Re: Feiertagsberechnung - Skript
Kaju: schon klar. Ich brauch aber die (korrigierte) Tageszeit, und nicht nur 'Tag'/'Nacht' auch noch für andere Funktionen, da ist es wohl besser ich lasse das Tageszeiten-script laufen, und kann dann von überall auf die globale Variable zugreifen.
-
- Beiträge: 761
- Registriert: 14.10.2008, 10:15
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Walldorf/Baden
- Danksagung erhalten: 2 Mal
Re: Feiertagsberechnung - Skript
Hallo Peter,
super Teil diese Feiertagsberechnung, hab das gleich mal als Makro in meine Homeputer-Programmierung aufgenommen (natrürlich nach der entsprechenden Übersetzung).
Endlich kann ich an Feiertagen ausschlafen, ohne von KeyMatic, oder irgendeinem Treppenlicht/Rollladen geweckt zu werden
Vielen Dank
Viele Grüsse,
Peter
super Teil diese Feiertagsberechnung, hab das gleich mal als Makro in meine Homeputer-Programmierung aufgenommen (natrürlich nach der entsprechenden Übersetzung).
Endlich kann ich an Feiertagen ausschlafen, ohne von KeyMatic, oder irgendeinem Treppenlicht/Rollladen geweckt zu werden
Vielen Dank
Viele Grüsse,
Peter
-
- Beiträge: 134
- Registriert: 13.01.2010, 20:53
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 25 Mal
Re: Feiertagsberechnung - Skript
Hallo Peter,
vielen Dank für die Lorbeeren. Habe mir seiner Zeit auch die Homeputer Software mit der Zentrale gekauft. Jedoch liegt die Software noch jungfräulich in der Ecke. Welche Vorteile hätte ich denn (abgesehen von der grafischen Bedienung), hinsichtlich der Programmierung und des funktionsumfangs, im Gegensatz zur direkten Programmierung im WebUI der Zentrale?
Sicher könnte ich mir die Doku des Hersteller durchlesen, um diese Frage im Detail zu klären, jedoch ist mir die Meinung eines Anwenders viel wichtiger!
Gruß
Peter
vielen Dank für die Lorbeeren. Habe mir seiner Zeit auch die Homeputer Software mit der Zentrale gekauft. Jedoch liegt die Software noch jungfräulich in der Ecke. Welche Vorteile hätte ich denn (abgesehen von der grafischen Bedienung), hinsichtlich der Programmierung und des funktionsumfangs, im Gegensatz zur direkten Programmierung im WebUI der Zentrale?
Sicher könnte ich mir die Doku des Hersteller durchlesen, um diese Frage im Detail zu klären, jedoch ist mir die Meinung eines Anwenders viel wichtiger!
Gruß
Peter
-
- Beiträge: 761
- Registriert: 14.10.2008, 10:15
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Walldorf/Baden
- Danksagung erhalten: 2 Mal
Re: Feiertagsberechnung - Skript
Hallo Peter,
ich mag Skript-Programmierung nicht. Das ist der Hauptgrund weshalb ich mich für HP entschieden habe.
Homeputer ist zwar nicht die hellste Programmiersprache, aber einfacher zu handhaben als Skript. Man kann in jeden Aktor ein Makro (= Programmierung) ablegen, oder von dort aus ein anderes Makro aufrufen, Makros aktivieren und deaktivieren, Protokolle schreiben und am Bildschirm anzeigen, Lokale und globale Variable (alle notwendigen Typen) definieren und verarbeiten. Makros können einmalig, oder in unterschiedlichen Intervallen (bis hin zu permanent) gestartet werden.
Mit Datum- und Uhrzeiten auf einfachste Art und Weise rechnen. Formeln muss man halt in einfache Schritte zerlegen, da Klammerungen einfach von links nach rechts verarbeitet werden, aber das ist ja kein Problem.
Man kann sie sehr einfach erlernen. Ich verwende HP paralell zu Skripten (auch wenn ich sie nicht mag), direkten Verknüpfungen und HM-Programmen. Auch das funktioniert, wenn man umsichtig arbeitet.
Ich glaube man kann hier nicht wirklich von Vor-/Nachteil sprechen - ist einfach ne Geschmacksfrage.
Viele Grüsse,
Peter
ich mag Skript-Programmierung nicht. Das ist der Hauptgrund weshalb ich mich für HP entschieden habe.
Homeputer ist zwar nicht die hellste Programmiersprache, aber einfacher zu handhaben als Skript. Man kann in jeden Aktor ein Makro (= Programmierung) ablegen, oder von dort aus ein anderes Makro aufrufen, Makros aktivieren und deaktivieren, Protokolle schreiben und am Bildschirm anzeigen, Lokale und globale Variable (alle notwendigen Typen) definieren und verarbeiten. Makros können einmalig, oder in unterschiedlichen Intervallen (bis hin zu permanent) gestartet werden.
Mit Datum- und Uhrzeiten auf einfachste Art und Weise rechnen. Formeln muss man halt in einfache Schritte zerlegen, da Klammerungen einfach von links nach rechts verarbeitet werden, aber das ist ja kein Problem.
Man kann sie sehr einfach erlernen. Ich verwende HP paralell zu Skripten (auch wenn ich sie nicht mag), direkten Verknüpfungen und HM-Programmen. Auch das funktioniert, wenn man umsichtig arbeitet.
Ich glaube man kann hier nicht wirklich von Vor-/Nachteil sprechen - ist einfach ne Geschmacksfrage.
Viele Grüsse,
Peter
Re: Feiertagsberechnung - Skript
Hallo Peter!
Kannst Du das Makro für CL mal hier posten - würde mir ´ne Menge Tipparbeit sparen!
Gruß Volker
Kannst Du das Makro für CL mal hier posten - würde mir ´ne Menge Tipparbeit sparen!
Gruß Volker
-
- Beiträge: 761
- Registriert: 14.10.2008, 10:15
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Walldorf/Baden
- Danksagung erhalten: 2 Mal
Re: Feiertagsberechnung - Skript
Hallo Volker,
ich gehe mal davon aus, dass Peter (der das eigentliche Skript geschrieben hat) nichts dagegen hat...
Der Name meines Makros lautet: MAC_Feiertag
Im Makro selbst müssen noch folgende Variablen angelegt werden:
Die Nullen sind sehr wichtig (wie manchmal auch im wirklichen Leben), sonst wird mit Dezimalen gerechnet was alles durcheinander bringt.
Desweiteren muessen folgende Objekte angelegt werden:
UVA_BLand (Typ Zeichen)
SVA_Feiertag (Typ Zeichen)
SVA_Ostern (Typ Zeichen)
UVA_Datum (Typ Zeichen)
Der Aufruf geschieht über:
UVA_Datum:= Datum (hier kann auch ein anderes Datum übergeben werden)
(wichtig ist hierbei, dass das Format immer dd.mm.yyyy sein muss, sonst läufts schief)
UVA_BLand:= "BW" (das Kürzel für euer Bundesland)
aufrufen(MAC_Feiertag)
(das habe ich in einem Makro, welches einmal nach Mitternacht aufgerufen wird - ändert sich ja nicht während des Tages )
Zurückgeliefert wird:
SVA_Ostern - enthält das Osterdatum für das in UVA_Datum übergebene Jahr
SVA_Feiertag - enthält den Namen des Feiertages (falls kein Feiertag, ist die Variable leer -> " ")
Die Gross-/Kleinschreibung in den Variablennamen ist unwichtig (ist nur so ne Angewohnheit).
Ich hoffe, ich habe alles. Wenn nicht, einfach melden - obwohl, das braucht man wohl nicht zu erwähnen
Viele Grüsse,
Peter
ich gehe mal davon aus, dass Peter (der das eigentliche Skript geschrieben hat) nichts dagegen hat...
Der Name meines Makros lautet: MAC_Feiertag
Code: Alles auswählen
//==========================================================================
// Feiertag berechnen
//==========================================================================
// Rosenmontag = 0 -> wird nicht gefeiert
// Rosenmontag = 1 -> wird gefeiert
Rosenmontag:= 1
// UVA_BLand:= "BW"
// Fuer "UVA_BLand" bitte folgende Abkuerzungen benutzen:
// BW = Baden-Württemberg
// BY = Bayern
// BE = Berlin
// BB = Brandenburg
// HB = Bremen
// HH = Hamburg
// HE = Hessen
// MV = Mecklenburg-Vorpommern
// NI = Niedersachsen
// NW = Nordrhein-Westfalen
// RP = Rheinland-Pfalz
// SL = Saarland
// SN = Sachsen
// ST = Sachen-Anhalt
// SH = Schleswig-Holstein
// TH = Thüringen
SVA_Feiertag:= " "
wenn UVA_Datum <> " " und
UVA_Datum <> "" dann
T:= Textteil(UVA_Datum,1,2)
M:= Textteil(UVA_Datum,4,2)
J:= Textteil(UVA_Datum,7,4)
sonst
T:= Monatstag
M:= Monat
J:= JAHR
UVA_Datum:= Datum
endewenn
// Berechnung Ostersonntag im aktuellen Jahr
// Modulo 19 aus dem aktuellen Jahr
M19:= J / 19
M19:= M19 * 19
M19:= J - M19
// Jahr / 100
J100:= J / 100
// Berechnung LVar1
LVar1:= 8 * J100
LVar1:= LVar1 + 13
LVar1:= LVar1 / 25
zahl:= 3 * J100
zahl:= zahl + 3
zahl:= zahl / 4
zahl:= zahl + 15
LVar1:= zahl - LVar1
zahl:= 19 * M19
LVar1:= LVar1 + zahl
// Modulo 30
zahl:= LVar1 / 30
zahl:= zahl * 30
LVar1:= LVar1 - zahl
// Berechnung LVar2
LVar2:= LVar1 / 29
zahl:= LVar1 / 28
zahl:= zahl - LVar2
zahl:= zahl * M19
zahl:= zahl / 11
LVar2:= LVar2 + zahl
// Berechnung LVar3
zahl:= 3 * J100
zahl:= zahl + 3
zahl:= zahl / 4
zahl:= 2 - zahl
LVar3:= J / 4
zahl:= LVar3 + J + zahl
// Modulo 7
LVar3:= zahl / 7
LVar3:= LVar3 * 7
LVar3:= zahl - LVar3
LVar3:= 7 - LVar3
LVar3:= 21 + LVar1 - LVar2 - LVar3
// Modulo 7
zahl:= LVar3 / 7
zahl:= zahl * 7
LVar3:= LVar3 - Zahl
LVar3:= 7 - LVar3
oMonat:= 3
oTag:= 21 + LVar1 - LVar2 + LVar3
wenn oTag > 31 dann
oTag:= oTag - 31
oMonat:= 4
endewenn
string:= oTag + "." + oMonat + "." + J
// string + 1, da sonst nach der Zuweisung 1 fehlt!!!!!!!
Ostern:= string + 1
SVA_Ostern:= Ostern
// feste Feiertage
// Neujahr
wenn M = 1 und
T = 1 dann
SVA_Feiertag:= "Neujahr"
verlassen
endewenn
// Maifeiertag - Tag der Arbeit
wenn M = 5 und
T = 1 dann
SVA_Feiertag:= "Maifeiertag"
verlassen
endewenn
// Tag der deutschen Einheit
wenn M = 10 und
T = 3 dann
SVA_Feiertag:= "Tag der deutschen Einheit"
verlassen
endewenn
// Weihnachten/Silvester
wenn M = 12 dann
wenn T = 24 dann
SVA_Feiertag:= "Heiligabend"
verlassen
endewenn
wenn T = 25 dann
SVA_Feiertag:= "1. Weihnachtsfeiertag"
verlassen
endewenn
wenn T = 26 dann
SVA_Feiertag:= "2. Weihnachtsfeiertag"
verlassen
endewenn
wenn T = 31 dann
SVA_Feiertag:= "Silvester"
verlassen
endewenn
endewenn
// Hl. 3 Könige nur in BW, BY und ST
wenn UVA_BLand = "BW" oder
UVA_BLand = "BY" oder
UVA_BLand = "ST" dann
wenn M = 1 und
T = 6 dann
SVA_Feiertag:= "Hl. 3 Könige"
verlassen
endewenn
endewenn
// Reformationstag in BB, MV, SA, ST und TH
wenn UVA_BLand = "BB" oder
UVA_BLand = "MV" oder
UVA_BLand = "SA" oder
UVA_BLand = "ST" oder
UVA_BLand = "TH" dann
wenn M = 10 und
T = 31 dann
SVA_Feiertag:= "Reformationstag"
verlassen
endewenn
endewenn
// Allerheiligen in BW, BY, NW, RP und SL
wenn UVA_BLand = "BW" oder
UVA_BLand = "BY" oder
UVA_BLand = "NW" oder
UVA_BLand = "RP" oder
UVA_BLand = "SL" dann
wenn M = 11 und
T = 1 dann
SVA_Feiertag:= "Allerheiligen"
verlassen
endewenn
endewenn
// Mariä Himmelfahrt in BY (aber nicht überall) und SL
wenn UVA_BLand = "BY" oder
UVA_BLand = "SL" dann
wenn M = 8 und
T = 15 dann
SVA_Feiertag:= "Mariä Himmelfahrt"
verlassen
endewenn
endewenn
// bewegliche Feiertage
// Fronleichnam in BW, BY, HE, NW, RP, SL, (SA, TH nicht überall)
wenn UVA_BLand = "BW" oder
UVA_BLand = "BY" oder
UVA_BLand = "HE" oder
UVA_BLand = "NW" oder
UVA_BLand = "RP" oder
UVA_BLand = "SL" oder
UVA_BLand = "SA" oder
UVA_BLand = "TH" dann
dat:= Ostern + 60
wenn UVA_Datum = dat dann
SVA_Feiertag:= "Fronleichnam"
verlassen
endewenn
endewenn
// Ostersonntag
wenn UVA_Datum = Ostern dann
SVA_Feiertag:= "Ostersonntag"
verlassen
endewenn
// Ostermontag
dat:= Ostern + 1
wenn UVA_Datum = dat dann
SVA_Feiertag:= "Ostermontag"
verlassen
endewenn
// Karfreitag
dat:= Ostern - 2
wenn UVA_Datum = dat dann
SVA_Feiertag:= "Karfreitag"
verlassen
endewenn
// Christi Himmelfahrt
dat:= Ostern + 39
wenn UVA_Datum = dat dann
SVA_Feiertag:= "Christi Himmelfahrt"
verlassen
endewenn
// Pfingstmontag
dat:= Ostern + 50
wenn UVA_Datum = dat dann
SVA_Feiertag:= "Pfingstmontag"
verlassen
endewenn
// Buß- und Bettag in SL
wenn UVA_BLand = "SL" dann
LVar1:= Textteil(J,3,2)
zahl:= LVar1 / 4
LVar1:= LVar1 + zahl
zahl:= LVar1 / 7
zahl:= zahl * 7
zahl:= LVar1 - zahl
LVar1:= Textteil(J,1,2)
LVar2:= LVar1 / 4
LVar2:= LVar2 * 4
LVar2:= LVar1 - LVar2
LVar2:= 3 - LVar2
LVar2:= LVar2 * 2
LVar2:= LVar2 + zahl
LVar1:= J / 4
LVar1:= LVar1 * 4
LVar1:= J - LVar1
wenn LVar1 = 0 dann
zahl:= 6
sonst
zahl:= 0
endewenn
LVar1:= 3 + 5 + LVar2 + zahl
zahl:= LVar1 / 7
zahl:= zahl * 7
LVar1:= LVar1 - zahl
zahl:= 32 + LVar1 - 24
zahl:= 30 - zahl
string:= zahl + ".11." + J
dat:= string
wenn UVA_Datum = dat dann
SVA_Feiertag:= "Buß- und Bettag"
verlassen
endewenn
endewenn
// Brauchtumstage
// Rosenmontag nur wenn gewünscht
wenn Rosenmontag = 1 dann
dat:= Ostern - 48
wenn UVA_Datum = dat dann
SVA_Feiertag:= "Rosenmontag"
verlassen
endewenn
endewenn
Code: Alles auswählen
Name Typ Startwert
---------------------------------------------
Rosenmontag Zahl
J Zahl
LVar1 Zahl 0
LVar2 Zahl 0
LVar3 Zahl 0
Zahl Zahl 0
M19 Zahl 0
J100 Zahl 0
Ostern Datum
String Zeichen
OTag Zahl
oMonat Zahl
M Zahl
T Zahl
dat Datum
Desweiteren muessen folgende Objekte angelegt werden:
UVA_BLand (Typ Zeichen)
SVA_Feiertag (Typ Zeichen)
SVA_Ostern (Typ Zeichen)
UVA_Datum (Typ Zeichen)
Der Aufruf geschieht über:
UVA_Datum:= Datum (hier kann auch ein anderes Datum übergeben werden)
(wichtig ist hierbei, dass das Format immer dd.mm.yyyy sein muss, sonst läufts schief)
UVA_BLand:= "BW" (das Kürzel für euer Bundesland)
aufrufen(MAC_Feiertag)
(das habe ich in einem Makro, welches einmal nach Mitternacht aufgerufen wird - ändert sich ja nicht während des Tages )
Zurückgeliefert wird:
SVA_Ostern - enthält das Osterdatum für das in UVA_Datum übergebene Jahr
SVA_Feiertag - enthält den Namen des Feiertages (falls kein Feiertag, ist die Variable leer -> " ")
Die Gross-/Kleinschreibung in den Variablennamen ist unwichtig (ist nur so ne Angewohnheit).
Ich hoffe, ich habe alles. Wenn nicht, einfach melden - obwohl, das braucht man wohl nicht zu erwähnen
Viele Grüsse,
Peter