Feiertagsberechnung - Skript

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

DanielP
Beiträge: 69
Registriert: 13.10.2015, 07:27

Re: Feiertagsberechnung - Skript

Beitrag von DanielP » 06.06.2016, 06:17

BadenPower hat geschrieben:
DanielP hat geschrieben: Ich habe die tmpA genommen, die oben deklariert und mit der aktuellen Jahreszahl gefüllt, aber nie benutzt wird. Also so wie im Originalskript hier, nur mit einer tmp-Variable.
tmpA wird im Skript benutzt und darf natürlich nicht mit dem Jahr gefüllt werden..

tmpA ist der Wochentag und wird 2 Zeilen darunter zur Auswertung von tmpB verwendet.

Code: Alles auswählen

integer tmpA= system.Date("%w").ToInteger();
string tmpB = "Sonntag;Montag;Dienstag;Mittwoch;Donnerstag;Freitag;Samstag";
tmpB = tmpB.StrValueByIndex(";",tmpA);
Wenn Du möchtest, dann kannst Du ja auch einmal mein Skript testen. :mrgreen:
In AndiNs Version ist tmpA das aktuelle Kalenderjahr.
http://homematic-forum.de/forum/viewtop ... 00#p275416

Benutzeravatar
dogfight76
Beiträge: 322
Registriert: 27.08.2014, 16:26
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: Feiertagsberechnung - Skript

Beitrag von dogfight76 » 13.06.2016, 03:16

BadenPower hat geschrieben:
AndiN hat geschrieben: werden.


@AndiN
Du könntest mir mal eine Liste zukommen lassen, welche tmp-Variabeln Du in der Sammlung schon benutzt, dann könnte ich mein neues all-Inclusive-Kalenderskript V2.0.0, welches noch diese Woche kommen wird, Dir gleich mit tmp-Variablen zur Verfügung stellen. Das neue Skript ist noch umfangreicher und bedient über 300 Systemvariabeln zum Thema Kalender/Tagesberechnungen in einem Aufwasch.


.
Wo ist die V2.0.0 zu finden ?

Gruß
RaspberryMatic CCU3 mit aktueller FW

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: Feiertagsberechnung - Skript

Beitrag von fischmir » 13.06.2016, 04:07

Sobald diese fertig ist, wird es hier geben:

http://homematic-forum.de/forum/viewtop ... 31&t=30848

TomCCU2
Beiträge: 1
Registriert: 06.11.2016, 09:43

Re: Feiertagsberechnung - Skript

Beitrag von TomCCU2 » 06.11.2016, 09:48

Hallo zusammen,

ich habe das Skript zur Berechnung der Arbeitstage als eigenständiges Skript angelegt. Bei mir wird aber immer für beide Variablen wahr angezeigt, also immer Arbeitstag, obwohl z.B. Sonntag ist.
Woran könnte das liegen?

Gruß, Thomas

dondaik
Beiträge: 12935
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1612 Mal
Danksagung erhalten: 222 Mal

Re: Feiertagsberechnung - Skript

Beitrag von dondaik » 06.11.2016, 10:07

:-) - wohl daran das ein fehler vorliegt ...
raten kann man nicht, deshalb bitte das prg einstellen ..
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Cash » 06.11.2016, 14:15

Wohl eher kein Fehler sondern max. ein Denkfehler.

Das Feiertagsscript guckt ob ein Feiertag ist und da in Deutschland der Samstag und Sonntag kein Feiertag ist sondern lediglich und nur für manche Menschdn ein freier Tag ist, ist die Anzeige korrekt.

Gleiches gilt für die Urlaubstage. Sofern Du den Samstag und Sonntag nicht als Urlaubstag eingibst wird er Dir nichts anderes anzeigen.

tsa
Beiträge: 725
Registriert: 03.01.2008, 17:42
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Feiertagsberechnung - Skript

Beitrag von tsa » 17.11.2016, 13:32

Betrifft den Download Feiertage_V2.2.1r2.txt
In der Methode zur Berechnung des Buß- und Bettages ist ein Fehler enthalten. In Schaltjahren wird dieser Feiertag einen Tag zu spät berechnet.
Grund ist die falsch implementierte Methode der Wochentagberechnung. Bei dieser Methode (Siehe Wikipedia) darf die hineinprogrammierte
Schaltjahreskorrektur...

Code: Alles auswählen

! SJK = Zahl                                  => Schaltjahreskorrektur: Zahl = 0 wenn kein Schaltjahr, sonst Zahl = 6
...nur für Datumswerte VOR dem 1. März ausgeführt werden, hier wird aber der Wochentag vom 24.12. ermittelt.

Zur Korrektur, kann im Quelltext an dieser Stelle:

Code: Alles auswählen

       !****************************
        ! Beweglicher Feiertag im SN
        !****************************

        if (bland == "SN") {

            ! Buß- und Bettag (Mittwoch vor dem Sonntag vor dem 1. Advent)

            fDiff = 32; ! 32 Tage vor dem 4. Advent

            ! Um den 4. Advent zu ermitteln, muss zunächst der Wochentag des 24. Dez. ermittelt werden

            ! Wochentagberechnung wie folgt:

            ! TZ  = Tag mod 7                             => Tag = 24 fuer den 24.12.
            ! MZ = 5                                      => 0,3,3,6,1,4,6,2,5,0,3,5 (Fuer jeden Monat Jan. bis Dez. eine Ziffer)
            ! JZ = (Zahl + (Zahl / 4)) mod 7              => Zahl = 10, die letzten beiden Ziffern der Jahreszahl 2010
            ! JHZ = (3 - (Zahl mod 4)) * 2                => Zahl = 20, die ersten beiden Ziffern der Jahreszahl 2010
            ! SJK = Zahl                                  => Schaltjahreskorrektur: Zahl = 0 wenn kein Schaltjahr, sonst Zahl = 6
            ! Ergebnis = (TZ + MZ + JZ + JHZ + SJK) mod 7 => 0 = So, 1 = Mo, 2 = Di, 3 = Mi, 4 = Do, 5 = Fr, 6 = Sa

            ! Mit dieser Rechnung kann man zu jedem Datum den Wochentag berechnen.

            LVar1 = oDatum.Substr(8, 2).ToInteger();
            zahl  = (LVar1 + (LVar1 / 4)) % 7;
            LVar1 = oDatum.Substr(6, 2).ToInteger();
            LVar2 = ((3 - (LVar1 % 4)) * 2) + zahl;
            LVar1 = oDatum.Substr(6, 4).ToInteger() % 4;

            if (LVar1 == 0) { zahl = 6; } else { zahl = 0; }

            LVar1 = ((24 % 7) + 5 + LVar2 + zahl) % 7; ! Ergebnis (LVar1) ist die Wochentagszahl
...einfach die Zeile...

Code: Alles auswählen

if (LVar1 == 0) { zahl = 6; } else { zahl = 0; }
...durch die Zeile...

Code: Alles auswählen

zahl = 0;
...ersetzt werden.

BadenPower

Re: Feiertagsberechnung - Skript

Beitrag von BadenPower » 17.11.2016, 13:55

Und nicht vergessen, den 31.10.2017 als bundesweiten Feiertag zu integrieren.

.

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Cash » 17.11.2016, 16:10

@tsa bist Du Dir sicher? Das Script ist von 2010 es gab also 2012 bereits ein Schaltjahr. Es hätte also auffallen müssen. Habe den Thread aber nicht komplett gelesen.

Bisher passten 2016 zumindest alle Feiertage?
Hat die Änderung Auswirkung auf nicht Schaltjahre?

@BadenPower der 31.10. ist ja leider nur ein einmalgier Feiertag. Ich vermute da wird es für viele leichter sein ein das einmlaig durch ein zeitgedteuertes Programm zu regeln :D
Zuletzt geändert von Cash am 17.11.2016, 20:34, insgesamt 1-mal geändert.

BadenPower

Re: Feiertagsberechnung - Skript

Beitrag von BadenPower » 17.11.2016, 16:28

Cash hat geschrieben:@BadenPower der 31.10. ist ja leider nur ein einmalgier Feiertag. Ich vermute da wird es für viele leichter sein ein das einmlaig durch ein zeitgedteuertes Programm zu regeln :D
Derjenige, welcher mein Skript verwendet, der muß nur in die Systemvariable "SYS-Feiertag-TermineZusatz" das Datum 31.10.2017 eintragen und der Feiertag wird dann automatisch und einmalig erkannt und als Feiertag ausgegeben.

Fertig. :mrgreen:
.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“