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 » 03.06.2016, 10:34

Ich habe das Skript erst heute in Betrieb genommen, daher alles manuell ausgeführt.

Letzter Zugriff auf SV ware heute von mir, als ich sie testweise von "nein" auf "ja" geändert habe um zu sehen, ob das Skript sie ändert.

Programm verwendet CuxD-Timer mit Timer_GET kleiner gleich 0 bei Aktualisierung als Trigger. Ich habe sowohl das Programm manuell gestartet als auch den Timer manuell ausgelöst. In beiden Fällen werden die SVs nicht geändert.

Benutzeravatar
AndiN
Beiträge: 2621
Registriert: 10.06.2015, 08:54
Wohnort: Hennef
Hat sich bedankt: 10 Mal
Danksagung erhalten: 28 Mal

Re: Feiertagsberechnung - Skript

Beitrag von AndiN » 03.06.2016, 10:46

@Daniel: Ist doch sehr komisch. Gleiches tmp-Skript läuft bei Cash und bei mir.

Mich würde mal Folgendes interessieren

1.) Skript laufen lassen (über Skript testen).
2.) Im Log eine Meldung zu sehen?
3.) Zur Sicherheit nochmal Skript laufen lassen (wenn 2 JA war)
4.) Wieder eine Meldung?

Dann wäre das Skript vor den Baum gelaufen und würde uns vielleicht einen Schritt weiter bringen.

Andi
Andi (Greenhorn)

Letzter Reboot: 17.03.24 => FW Update (Uptime:Rekord:153 Tage)
Systeminfos: Raspberry Pi3 Firmware: 3.75.6.20240316 142 Geräte
System angebunden: 3 Roomba 650 - Sprachausgabe via Home24 Media - Pocket Control
- Zentrale: Asus TF103 mit Home24 Tablet
Addons: Drucken 2.5 - HQ WebUI 2.5.9 - XML-API 1.22 - CUx-Daemon 2.9.3 - E-Mail 1.7.4 - hm_pdetect 1.11 - VPN cloudmatic
Diverse Links

Benutzeravatar
AndiN
Beiträge: 2621
Registriert: 10.06.2015, 08:54
Wohnort: Hennef
Hat sich bedankt: 10 Mal
Danksagung erhalten: 28 Mal

Re: Feiertagsberechnung - Skript

Beitrag von AndiN » 03.06.2016, 10:49

[edit] hast Du eine Systemvariable "SV_Jahr" im Einsatz? Die muss man für das Skript auch noch haben.
Wenn nicht, dann läuft das Skript vor den Baum und Du müssstest aber auch ein ERR im Log haben ;-) [/edit]
Andi (Greenhorn)

Letzter Reboot: 17.03.24 => FW Update (Uptime:Rekord:153 Tage)
Systeminfos: Raspberry Pi3 Firmware: 3.75.6.20240316 142 Geräte
System angebunden: 3 Roomba 650 - Sprachausgabe via Home24 Media - Pocket Control
- Zentrale: Asus TF103 mit Home24 Tablet
Addons: Drucken 2.5 - HQ WebUI 2.5.9 - XML-API 1.22 - CUx-Daemon 2.9.3 - E-Mail 1.7.4 - hm_pdetect 1.11 - VPN cloudmatic
Diverse Links

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

Re: Feiertagsberechnung - Skript

Beitrag von DanielP » 03.06.2016, 11:00

Mit Log meinst du "Status und Bedienung" -> Systemprotokoll? Da steht nichts drin. Im Ausgabefenster von Skript-Testen steht auch nichts, aber es wird ja auch nichts ausgegeben. Zu Testzwecken habe ich zwei WriteLine eingefügt, eines vor den ersten Var-Deklarationen, eines ganz am Schluss (siehe unten). Wenn ich auf Ausführen gehe, erscheint nach ca. 30 s (nicht gemessen) im Ausgabefeld nur die erste WriteLine-Ausgabe.

Ich wette, es ist ein OSI Level 8-Fehler, ich sehe ihn nur nicht.

Code: Alles auswählen

! Feiertage
! =======
    ! Das Skript berechnet das Osterdatum und die Feiertage im aktuellen Jahr
    ! prueft ob heute und morgen ein tmpR ist und hinterlegt das Ergebnis in den
   
    ! Script von Peter Beck (01-2011)
    ! Österreichergänzung von randyp (05-2012)
    ! Version 2.2.1r2
    ! Sachsen eingearbeitet bzw. korrigiert von Matthias Herold (11-2013)
    ! Sachsen hat Buß- und Bettag: hinzugefügt, Saarland nicht: gelöscht
    ! von AndiN auf tmp-Variablen umgeschrieben v2.0.1 (Stand: 26.12.2015)

    ! Es werden folgende Systemvariablen benötigt:
    ! SV_Feiertag_heute  (Typ: Boolean)
    ! SV_Feiertag_morgen (Typ: Boolean)

WriteLine("Hallo Welt 1!");

    boolean tmpM = 0; ! Rosenmontag ein Brauchtumstag? 1=Ja/0=Nein
    boolean tmpO = 1; ! Silvester stets ein freier Tag? 1=Ja/0=Nein
    boolean tmpP = 1; ! Heiligabend stets ein freier Tag? 1=Ja/0=Nein

    string tmpB  = "DE";      ! AT oder DE
    string tmpC = "BW";     ! Bundesland in DE, in den wir wohnen (in Österreich auch für tmpC AT eintragen)

    ! Fuer "tmpC" 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 = RheintmpB-Pfalz
    ! SL = SaartmpB
    ! SN = Sachsen
    ! ST = Sachen-Anhalt
    ! SH = Schleswig-Holstein
    ! TH = Thüringen

    ! AT = Österreich


    !****************************************************
    ! Ab hier Script CODE - Don't change behind this line
    !****************************************************

    ! Berechnen des Ostersonntags im aktuellen Jahr

    integer tmpA= system.Date("%Y").ToInteger(); ! Das aktuelle Jahr
    integer tmpD;  ! Das Tagesdatum vom Ostersonntag
    integer tmpE;  ! Das Monatsdatum von Ostersonntag
    string  tmpF;  ! Das komplette Datum vom Ostersonntag

    integer tmpG;  ! Wird für die Berechnungen benötigt
    integer tmpH;  ! Wird für die Berechnungen benötigt
    integer tmpI;  ! Wird für die Berechnungen benötigt
    integer tmpJ;  ! Wird für die Berechnungen benötigt

    ! Die modifizierte Gauss-Formel nach Lichtenberg

    tmpG = ((19 * (tmpA% 19)) + (15 + (((3 * (tmpA/ 100)) + 3) / 4) - (((8 * (tmpA/ 100)) + 13) / 25))) % 30;
    tmpH = (tmpG / 29) + (((tmpG / 28) - (tmpG / 29)) * ((tmpA% 19) / 11));
    tmpI = 7 - (((21 + tmpG - tmpH) - (7 - ((tmpA+ (tmpA/ 4) + (2 - (((3 * (tmpA/ 100)) + 3) / 4))) % 7))) % 7);
    tmpD  = (21 + tmpG - tmpH) + tmpI;

    ! Den errechneten Wert formatieren. Ausgehend vom Monat März

    if (tmpD > 31) { ! Der Monat März hat nur 31 Tage -> Ostern im April

        tmpE = 4;
        tmpD = tmpD - 31;

    } else { tmpE = 3; } ! Ostern ist im März

    ! Das Ergebnis in Variable tmpF hinterlegen

    if (tmpD < 10) {
        tmpF = "0" # tmpD.ToString() # "." # "0" # tmpE.ToString() # "." # dom.GetObject("SV_Jahr").Value().ToString();
    } else {
        tmpF = tmpD.ToString() # "." # "0" # tmpE.ToString() # "." # dom.GetObject("SV_Jahr").Value().ToString();
    }

    ! Ermitteln, wieviele Tage der Februar im aktuellen dom.GetObject("SV_Jahr").Value() hat

    tmpJ = dom.GetObject("SV_Jahr").Value() % 4;

    if (tmpJ == 0) { ! Ein Schaltdom.GetObject("SV_Jahr").Value() -> Feb. = 29 Tage
        string mTage = "31,29,31,30,31,30,31,31,30,31,30,31"; ! Anzahl der Tage im Monat Jan.-Dez.
    } else {
        string mTage = "31,28,31,30,31,30,31,31,30,31,30,31"; ! Anzahl der Tage im Monat Jan.-Dez.
    }

    string tmpK = system.Date("%d.%m."); ! Das heutige Datum
    integer tmpL = 0;

    while (tmpL < 2)
    {
        boolean tmpR = 0; ! 0/1 = kein/tmpR

        !***************************************************************************
        ! Feste tmpQ bundesweit, fuer DE und AT
        !***************************************************************************

        if (tmpK == "01.01.") { tmpR = 1; } ! Neudom.GetObject("SV_Jahr").Value()
        if (tmpK == "01.05.") { tmpR = 1; } ! MaitmpR - Tag der Arbeit
        if (tmpK == "25.12.") { tmpR = 1; } ! 1. Weihnachtstag
        if (tmpK == "26.12.") { tmpR = 1; } ! 2. Weihnachtstag

        !***************************************************************************
        ! Feste tmpQ bundesweit in DE
        !***************************************************************************
        if (tmpB == "DE") {
            if (tmpK == "03.10.") { tmpR = 1; } ! Tag der Deutschen Einheit
        }

        !***************************************************************************
        ! Feste tmpQ bundesweit in AT
        !***************************************************************************
        if (tmpB == "AT") {
            if (tmpK == "26.10.") { tmpR = 1; } ! Österreichischer NationaltmpR
            if (tmpK == "08.12.") { tmpR = 1; } ! Maria Empfaengnis
        }

        !***************************************************************************
        ! Eigene, feste tmpQ?
        !***************************************************************************

        if ((tmpP) && (tmpK == "24.12.")) { tmpR = 1; } ! Weihnachten
        if ((tmpO) && (tmpK == "31.12."))   { tmpR = 1; } ! tmpO

        !***************************************************************************
        ! Fester tmpR in BW, BY, ST, AT
        !***************************************************************************

        if ((tmpC == "BW") || (tmpC == "BY") || (tmpC == "ST") || (tmpB == "AT")) {
            if (tmpK == "06.01.") { tmpR = 1; } ! Erscheinungsfest - Hl. 3 Koenige
        }

        !***************************************************************************
        ! Fester tmpR in BB, MV, SA, ST, TH, SN
        !***************************************************************************

        if ((tmpC == "BB") || (tmpC == "MV") || (tmpC == "SA") || (tmpC == "ST") || (tmpC == "TH") || (tmpC == "SN")) {
            if (tmpK == "31.10.") { tmpR = 1; } ! Reformationstag
        }

        !***************************************************************************
        ! Fester tmpR in BW, BY, NW, RP, SL, AT
        !***************************************************************************

        if ((tmpC == "BW") || (tmpC == "BY") || (tmpC == "NW") || (tmpC == "RP") || (tmpC == "SL") || (tmpB == "AT")) {
            if (tmpK == "01.11.") { tmpR = 1; } ! Allerheiligen
        }

        !***************************************************************************
        ! Fester tmpR in BY (nicht überall), SL, AT
        !***************************************************************************

        if ((tmpC == "BY") || (tmpC == "SL") || (tmpB == "AT")) {
           if (tmpK == "15.08.") { tmpR = 1; } ! Maria Himmelfahrt
        }

        !***************************************************************************
        !** Bewegliche tmpQ bundesweit **
        !***************************************************************************

        string tmpQ = "";

        if (tmpB == "DE") {
            tmpQ = "0,1,-2,39,50"; ! Array mit Differenztage zum Ostersonntag
                                        ! Ostersonntag, Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
        }

        if (tmpB == "AT") {
            tmpQ = "0,1,39,50";    ! Array mit Differenztage zum Ostersonntag
                                        ! Ostersonntag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
        }

        !***************************************************************************
        ! Bewegliche tmpQ BW, BY, HE, NW, RP, SL, (SA, TH nicht überall), AT
        !***************************************************************************

        if ((tmpC == "BW") || (tmpC == "BY") || (tmpC == "HE") || (tmpC == "NW") || (tmpC == "RP") || (tmpC == "SL") || (tmpC == "SA") || (tmpC == "TH") || (tmpB == "AT")) {
            tmpQ = tmpQ # ",60"; ! Fronleichnam
        }

        !***************************************************************************
        !***   Hier evtl. weitere Feier-/Brauchtumstage ***
        !***************************************************************************

        if (tmpM) {
            tmpQ = tmpQ # ",-48"; ! tmpM stets 48 Tage vor dem Ostersonntag
        }

        !***************************************************************************
        ! Ab hier werden die Feiertage berechnet
        !***************************************************************************

        ! Anzahl der Tage im Ostermonat
        tmpJ = (3 * tmpE) - 3;
        integer tmpS = mTage.Substr(tmpJ, 2).ToInteger(); ! Anzahl der Tage im Ostermonat

        string tmpT;    ! Das tmpRtmpK
        integer tmpU;    ! Anzahl der Tage von Ostersonntag entfernt
        boolean tmpV; ! Für die Berechnungen in der while-tmpV notwendig

        string tmpW;
        foreach(tmpW, tmpQ.Split(",")) {

            tmpU = tmpW.ToInteger();
            tmpV = 1;

            tmpJ = tmpD + tmpU; ! Differenztage zum Referenztag hinzurechnen

            if (tmpU > 0) {
                if (tmpJ > tmpS) {
                    tmpJ = tmpJ - tmpS; ! Sind wir ausserhalb des Referenzmonats?
                } else { ! Nein => BerechnungtmpV nicht tmpLen.
                   tmpV = 0;
                   tmpH = tmpE;
                }
            } else {
                if (tmpJ > 0) { ! Wenn innerhalb des Referenzmonats => BerechnungstmpV nicht tmpLen.
                    tmpV = 0;
                    tmpH = tmpE;
                }
            }

            tmpG = 0;

            if (tmpU > 0) {
                while (tmpV) {
                    tmpG = tmpG + 1.00;
                    tmpH = tmpE + tmpG;
                    tmpI = (3 * tmpH) - 3;
                    tmpJ = tmpJ - mTage.Substr(tmpI, 2).ToInteger();
                    if (tmpJ <= 0) { ! Aktueller Monat gefunden
                        tmpV = 0;
                        tmpJ = tmpJ + mTage.Substr(tmpI, 2).ToInteger(); ! Wieder addieren, um den Tag zu berechnen
                    }
                }
            } else {
                if (tmpU < 0) {
                    while (tmpV) {
                        tmpG = tmpG + 1.00;
                        tmpH = tmpE - tmpG;
                        tmpI = (3 * tmpH) - 3;
                        tmpJ = tmpJ + mTage.Substr(tmpI, 2).ToInteger();
                        if (tmpJ > 0) { ! Aktueller Monat gefunden
                            tmpV = 0;
                        }
                    }
                }
            }

            if (tmpJ < 10) {
                tmpT = "0" # tmpJ.ToString() # ".";
            } else {
                tmpT = tmpJ.ToString() # ".";
            }

            if (tmpH < 10) {
                tmpT = tmpT # "0" # tmpH.ToString() # ".";
            } else {
                tmpT = tmpT # tmpH.ToString() # ".";
            }

            if (tmpK == tmpT) { tmpR = 1; }
        }

        !****************************
        ! Beweglicher tmpR im SN
        !****************************

        if (tmpC == "SN") {

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

            tmpU = 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 = (tmpJ + (tmpJ / 4)) mod 7              => tmpJ = 10, die letzten beiden Ziffern der dom.GetObject("SV_Jahr").Value()estmpJ 2010
            ! JHZ = (3 - (tmpJ mod 4)) * 2                => tmpJ = 20, die ersten beiden Ziffern der dom.GetObject("SV_Jahr").Value()estmpJ 2010
            ! SJK = tmpJ                                  => Schaltdom.GetObject("SV_Jahr").Value()eskorrektur: tmpJ = 0 wenn kein Schaltdom.GetObject("SV_Jahr").Value(), sonst tmpJ = 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.

            tmpG = tmpF.Substr(8, 2).ToInteger();
            tmpJ  = (tmpG + (tmpG / 4)) % 7;
            tmpG = tmpF.Substr(6, 2).ToInteger();
            tmpH = ((3 - (tmpG % 4)) * 2) + tmpJ;
            tmpG = tmpF.Substr(6, 4).ToInteger() % 4;

            if (tmpG == 0) { tmpJ = 6; } else { tmpJ = 0; }

            tmpG = ((24 % 7) + 5 + tmpH + tmpJ) % 7; ! Ergebnis (tmpG) ist die WochentagstmpJ

            ! tmpR ermitteln: 30 Novembertage - (tmpU + WochentagstmpJ - 24)
            ! Der Monat ist stets der November

            tmpJ = 30 - (tmpU + tmpG - 24);

            tmpT = tmpJ.ToString() # ".11.";

            if (tmpK == tmpT) { tmpR = 1; }
        }

        if (tmpL == 0) {
            dom.GetObject('SV_Feiertag_heute').State(tmpR);
            tmpL = 1;

            ! Datum von morgen für den 2. tmpL ermitteln

            tmpG = system.Date("%d").ToInteger() + 1.00; ! Einen Tag weiter --> morgen
            tmpW = system.Date("%m");
            tmpH = tmpW.ToInteger();

            tmpJ = (3 * tmpH) - 3;
            tmpI = mTage.Substr(tmpJ, 2).ToInteger(); ! Anzahl der Tage im aktuellen Monat
            if (tmpG > tmpI) { ! Wenn Monatsgrenze überschritten wurde
                tmpK = "01.";
                if (tmpH == 12) {
                    tmpK = tmpK # "01.";
                } else {
                    tmpH = tmpH + 1.00;
                    if (tmpH < 10) { tmpK = tmpK # "0" # tmpH.ToString() # "."; } else { tmpK = tmpK # tmpH.ToString() # "."; }
                }
            } else {
                if (tmpG < 10) { tmpK = "0" # tmpG.ToString() # "." # tmpW # ".";} else { tmpK = tmpG.ToString() # "." # tmpW # "."; }
            }
        } else {
            dom.GetObject('SV_Feiertag_morgen').State(tmpR);
            tmpL = 2;
        }
    }
WriteLine("Hallo Welt 2!");

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

Re: Feiertagsberechnung - Skript

Beitrag von DanielP » 03.06.2016, 11:03

AndiN hat geschrieben:[edit] hast Du eine Systemvariable "SV_Jahr" im Einsatz? Die muss man für das Skript auch noch haben.
Wenn nicht, dann läuft das Skript vor den Baum und Du müssstest aber auch ein ERR im Log haben ;-) [/edit]
SV_Jahr habe ich nicht. Integer? Vierstellig? Muss ich diese manuell befüllen?

Edit: Gut, SV_Jahr als Zahl angelegt und mit 2016.0 gefüttert, jetzt läuft das Skript.

Darf ich noch den Hintergrund von SV_Jahr erfragen? Das Skript selbst liest doch das aktuelle Jahr aus und speichert es in eine Variable. Warum nicht damit arbeiten? Und wie befüllst du SV_Jahr?

Benutzeravatar
AndiN
Beiträge: 2621
Registriert: 10.06.2015, 08:54
Wohnort: Hennef
Hat sich bedankt: 10 Mal
Danksagung erhalten: 28 Mal

Re: Feiertagsberechnung - Skript

Beitrag von AndiN » 03.06.2016, 11:40

SV Jahr befülle ich mit einem Skript, was täglich läuft. Könnte das auch direkt nutzen. Aber da ich diverse Sachen (Bsp: Wochentag) in mehreren Skripts nutze habe ich dafür einfach direkt "sprechende" System-Variablen genommen.

Code: Alles auswählen

! Jahr bestimmen
! ===========

dom.GetObject("SV_Jahr").State(system.Date("%Y").ToInteger());

! Wochentag ermitteln
! ===============

integer tmpA= system.Date("%w").ToInteger();
string tmpB = "Sonntag;Montag;Dienstag;Mittwoch;Donnerstag;Freitag;Samstag";
tmpB = tmpB.StrValueByIndex(";",tmpA);
dom.GetObject("SV_Wochentag").State(tmpB);
Andi (Greenhorn)

Letzter Reboot: 17.03.24 => FW Update (Uptime:Rekord:153 Tage)
Systeminfos: Raspberry Pi3 Firmware: 3.75.6.20240316 142 Geräte
System angebunden: 3 Roomba 650 - Sprachausgabe via Home24 Media - Pocket Control
- Zentrale: Asus TF103 mit Home24 Tablet
Addons: Drucken 2.5 - HQ WebUI 2.5.9 - XML-API 1.22 - CUx-Daemon 2.9.3 - E-Mail 1.7.4 - hm_pdetect 1.11 - VPN cloudmatic
Diverse Links

BadenPower

Re: Feiertagsberechnung - Skript

Beitrag von BadenPower » 03.06.2016, 12:58

AndiN hat geschrieben:hast Du eine Systemvariable "SV_Jahr" im Einsatz? Die muss man für das Skript auch noch haben.
Wenn nicht, dann läuft das Skript vor den Baum und Du müssstest aber auch ein ERR im Log haben ;-)
Mach einmal im Skript aus

Code: Alles auswählen

tmpJ = dom.GetObject("SV_Jahr").Value() % 4;
dieses hier

Code: Alles auswählen

tmpJ = (system.Date("%Y")).ToInteger() % 4;
dann holt sich das Skript automatisch die aktuelle Jahreszahl und nicht erst umständlich über eine separat zu setzende Systemvariable.

Die anderen <dom.GetObject("SV_Jahr")> müßtem natürlich auch noch umgebaut 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.

@all

Wer noch eine Idee hat, welche Informationen zur Steuerung bei bestimmten Tage/Situationen man benötigen könnte der ist hiermit aufgerufen seine Wünsche/Träume zu äussern.

.

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

Re: Feiertagsberechnung - Skript

Beitrag von DanielP » 03.06.2016, 13:41

BadenPower hat geschrieben:
AndiN hat geschrieben:hast Du eine Systemvariable "SV_Jahr" im Einsatz? Die muss man für das Skript auch noch haben.
Wenn nicht, dann läuft das Skript vor den Baum und Du müssstest aber auch ein ERR im Log haben ;-)
Mach einmal im Skript aus

Code: Alles auswählen

tmpJ = dom.GetObject("SV_Jahr").Value() % 4;
dieses hier

Code: Alles auswählen

tmpJ = (system.Date("%Y")).ToInteger() % 4;
dann holt sich das Skript automatisch die aktuelle Jahreszahl und nicht erst umständlich über eine separat zu setzende Systemvariable.

Die anderen <dom.GetObject("SV_Jahr")> müßtem natürlich auch noch umgebaut werden.
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.

BadenPower

Re: Feiertagsberechnung - Skript

Beitrag von BadenPower » 03.06.2016, 14:01

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:

Benutzeravatar
AndiN
Beiträge: 2621
Registriert: 10.06.2015, 08:54
Wohnort: Hennef
Hat sich bedankt: 10 Mal
Danksagung erhalten: 28 Mal

Re: Feiertagsberechnung - Skript

Beitrag von AndiN » 03.06.2016, 21:58

@Baden: Ich benute tmpA-tmpZ und tmpA1-tmpZ1: Also maximal 52 Variablen. Der nächste Kreis wäre dann logischerweise tmpA2-tmpZ2.

P.S. SV_Jahr und SV_Wochentag etc. werden in dem täglichen Skript (da ermittel ich dann auch Sonnenaufgang für Rollo etc.) ermittelt. Daher kommen die sich nicht in die Quere ;-)

Andi
Andi (Greenhorn)

Letzter Reboot: 17.03.24 => FW Update (Uptime:Rekord:153 Tage)
Systeminfos: Raspberry Pi3 Firmware: 3.75.6.20240316 142 Geräte
System angebunden: 3 Roomba 650 - Sprachausgabe via Home24 Media - Pocket Control
- Zentrale: Asus TF103 mit Home24 Tablet
Addons: Drucken 2.5 - HQ WebUI 2.5.9 - XML-API 1.22 - CUx-Daemon 2.9.3 - E-Mail 1.7.4 - hm_pdetect 1.11 - VPN cloudmatic
Diverse Links

Antworten

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