, , , , , , , ,

Homematic – Erweiterung des Zeitmodules 02 – Berechnung der Jahreszeiten

Heute möchte ich euch den zweiten Teil der Kurzserie „Erweiterungen des Homematic Zeitmodules“ vorstellen. Im ersten Teil habe ich euch im Artikel „Homematic – Erweiterung des Zeitmodules 01 – Berechnung von Feiertagen“ die Berechnung von Feiertagen beschrieben. Heute möchte ich euch zeigen, wie ihr mit zwei kleinen Skripten die Jahreszeiten berechnen könnt. Wenn ihr die Jahreszeit berechnet und in eine Systemvariable schreibt, könnt ihr diese Information für diverse Steuerungen in eurem smarten Zuhause verwenden. So könnt ihr beispielsweise über die Jahreszeit Rollladen oder Lampen steuern. In dem Artikel beschreibe ich was die Unterschiede zwischen der Meteorologischen und der Astronomischen Jahreszeit ist und wie ihr diese berechnen könnt.

Allgemeines – wie sinnvoll ist die Unterscheidung?

Meteorologisch hat der Winter am 1. Dezember begonnen, astronomisch bzw. kalendarisch startet er erst am 22. Dezember. Diese unterschiedlichen Daten werden damit begründet, dass es deutlich einfacher ist, statistische Auswertungen zu erstellen, wenn die Berechnung auf vollen Monaten basiert. Ist das aktuell noch zeitgemäß?

Meteorologisch beginnen die Jahreszeiten so definiert, dass die entsprechende Jahreszeit immer am 1. eines Monats beginnt – der Frühling beginnt am 1. März, der Sommer am 1. Juni, der Herbst am 1. September und der Winter am 1. Dezember. Damit ist klar definiert, dass jede Jahreszeit immer drei vollständige Monate beinhaltet. Diese meteorologische Einteilung wurde eingeführt, um statistische Berechnungen zu vereinfachen. Das Argument der Vergleichbarkeit ist immer noch aktuell, dagegen ist die Berechnung von Zeiten mit modernster Technik überholt.

Im Gegensatz dazu variieren die astronomischen Jahreszeitenanfänge. Der Frühlingsanfang ist manchmal am 20. oder 21. März, der Sommeranfang am 20., 21. oder sogar am 22. Juni, der Herbstanfang ist manchmal am 22., oder am 23. September und der Winteranfang am 21. oder 22. Dezember. Das macht die Berechnung deutlich schwieriger und in Bezug auf Statistiken müssten diese jeweils mit Zusätzen versehen werden. Was das Ganze auch deutlich komplizierter macht.

Meteorologischen Jahreszeiten

Die sogenannten meteorologischen Jahreszeiten sind schlicht nach den Kalendermonaten eingeteilt und umfassen jeweils immer drei komplette Monate. Damit werden sie insgesamt etwa drei Wochen früher angesetzt als die astronomischen Jahreszeiten. Mit der meteorologischen Definition fallen die auf der Nordhalbkugel wie in Deutschland im Durchschnitt wärmsten Monate Juni, Juli und August in den (meteorologischen) Sommer, und die durchschnittlich kältesten Monate Dezember, Januar und Februar fallen in den (meteorologischen) Winter. Diese nach Beginn und Ende von Kalendermonaten bestimmten vierteljährlichen Zeitspannen erlauben oft eine einfachere statistische Erfassung meteorologischer Daten; sie sind nicht nach aktuellen Wetterveränderungen ausgerichtet.

  • Frühling: 1. März – 31. Mai
  • Sommer: 1. Juni – 31. August
  • Herbst: 1. September – 30. November
  • Winter: 1. Dezember – 28./ 29. Februar

Kalendarische bzw. Astronomische Jahreszeiten

Astronomisch werden die Jahreszeiten nach der scheinbaren geozentrischen Länge des Sonnenstandes bestimmt. Die astronomischen Jahreszeiten sind definiert als jene Zeitspannen, die während des Durchlaufens eines bestimmten der vier Abschnitte jeweils vergehen und dauern wegen der unterschiedlichen Winkelgeschwindigkeit nicht gleich lange. Aufgrund der geozentrischen, auf den Erdmittelpunkt bezogenen Definition beginnt oder endet eine astronomische Jahreszeit standortunabhängig weltweit zum selben Zeitpunkt (dem aber in verschiedenen Zeitzonen unterschiedliche Uhrzeiten entsprechen).

Beginn der Jahreszeiten

Die Tabelle listet die astronomischen Jahreszeitenanfänge bis 2025 für die Mitteleuropäische Zeitzone auf:

Systemvariable anlegen

Bevor ihr die Skripte durchführen könnt, müsst ihr noch die jeweilige Systemvariable anlegen (siehe Screenshot).

Skript – Berechnung meteorologische Jahreszeit

!
! ***   Meteorologische Jahreszeit berechnen
!
! ***   Monat und Tag ermitteln und an Systemvariable Monat.Tag uebergeben
dom.GetObject("Monat.Tag").State( (0.01 * system.Date("%d").ToInteger()) + system.Date("%m").ToInteger());
!
! ***   Fruehling (meteorologisch) Maerz,April,Mai
if ((dom.GetObject("Monat.Tag").State()<6.1) && (dom.GetObject("Monat.Tag").State()>3.0)) 
{ dom.GetObject("Jahreszeit meteorologisch").State(0); }
!
! ***   Sommer (meteorologisch) Juni,Juli,August
if ((dom.GetObject("Monat.Tag").State()<9.1) && (dom.GetObject("Monat.Tag").State()>6.0)) 
{ dom.GetObject("Jahreszeit meteorologisch").State(1); } 
!
! ***   Herbst (meteorologisch) September,Oktober,November 
if ((dom.GetObject("Monat.Tag").State()<12.1) && (dom.GetObject("Monat.Tag").State()>9.0)) 
{ dom.GetObject("Jahreszeit meteorologisch").State(2); 020 }
!
! ***   Winter (meteorologisch) Dezember,Januar,Februar 
if ((dom.GetObject("Monat.Tag").State()<3.1) || (dom.GetObject("Monat.Tag").State()>12.0)) 
{ dom.GetObject("Jahreszeit meteorologisch").State(3); }

Skript – Berechnung astronomische Jahreszeit

!
! ***   Astronomische Jahreszeit berechnen
!
! ***   Monat und Tag ermitteln und an Systemvariable Monat.Tag uebergeben
dom.GetObject("Monat.Tag").State( (0.01 * system.Date("%d").ToInteger()) + system.Date("%m").ToInteger());
!
! ***   Fruehling (astronomisch) 20. Maerz bis 19. Juni
if ((dom.GetObject("Monat.Tag").State()<6.20) && (dom.GetObject("Monat.Tag").State()>3.19)) 
{dom.GetObject("Jahreszeit astronomisch").State(0); }
!
! ***   Sommer (astronomisch) 20. Juni bis 21. September
if ((dom.GetObject("Monat.Tag").State()<9.22) && (dom.GetObject("Monat.Tag").State()>6.20)) 
{ dom.GetObject("Jahreszeit astronomisch").State(1); } 
!
! ***   Herbst (astronomisch) 22. September bis 20. Dezember 
if ((dom.GetObject("Monat.Tag").State()<12.21) && (dom.GetObject("Monat.Tag").State()>9.21)) 
{ dom.GetObject("Jahreszeit astronomisch").State(2); 020 }
!
! ***   Winter (astronomisch) 21. Dezember bis 19. Maerz 
if ((dom.GetObject("Monat.Tag").State()<3.20) || (dom.GetObject("Monat.Tag").State()>12.20)) 
{ dom.GetObject("Jahreszeit astronomisch").State(3); }

Skript über WebUI Programm ausrufen

Nachfolgend seht ihr ein Beispiel um das Skript zur Berechnung der meteorologischen Jahreszeit auszuführen. Diesen Programm habe ich für 00:05 Uhr geplant und es funktioniert so seit mehreren Monaten einwandfrei.

Inhalt der Systemvariablen

In dem folgenden Screenshot seht ihr den Inhalt der beiden Jahreszeit Systemvariablen. Da die Skripte beide am 28. Dezember durchgeführt worden sind, haben sie natürlich den gleichen Inhalt.

Fazit

Ich hoffe ihr könnt diese Skripte verwenden um bestimmte Aufgaben in eurem Smart Home umzusetzen. Viel Spass beim Ausprobieren und ich wünsche euch alles gute für das neue Jahr 2020, vor allem Gesundheit.

15 Kommentare
  1. Markus
    Markus sagte:

    Hallo Werner,
    habe dein Script so in die RaspiMatic übernommen. Erhalte aber im Moment als Ausgabe Frühling statt Sommer.
    Finde den Fehler aber nicht? Woran könnte dies liegen.
    Vielen Dank Vorab
    Gruß
    Markus

    Antworten
  2. Christoph
    Christoph sagte:

    Hallo,

    ich suche sowas nur mit Sommerzeit.

    Also systemvariable „Sommerzeit“ = ist wahr

    Bin gerade dabei sowas selber zu machen, aber es klappt nicht, da ich nur zu 5% Programmieren kann.

    Gruß

    Antworten
  3. Klaus
    Klaus sagte:

    Hallo Werner,
    bin in der C-änlichen Programmierung der homematic unerfahren.
    Was bewirkt die „020“ am Ende in Zeile 17 der jeweiligen Skripts?
    Gruss
    Klaus

    Antworten
  4. Petr
    Petr sagte:

    Hi Werner,
    thanks a lot, it’s working both :-)

    I would like to ask, why the execution of the script in the HM program is delayed by 1 minute?

    Thanks Petr

    Antworten
    • Werner
      Werner sagte:

      Hello Petr,

      nice to hear that our blog is also read in the Czech Republic.
      Now to your question. The only reason for the delayed execution of the script is the fact that I have planned several programs/scripts at 00:05 a.m. and I would like to relieve the system a bit.
      Hope to have answered your question.

      greetings
      Werner

      Antworten
  5. Helmut Riethmeier
    Helmut Riethmeier sagte:

    Hallo HomeMaticFreunde wenn ich den Script kopiere und einfüge und dann die Fehlerprüfung starte bekomme ich folgende Meldung:
    Error 1 at row 8 col 53 near ^;6.20) && (dom.GetObject(„Monat.Tag“).State()>3.19))
    { dom.GetObject(„J
    Parse following code failed:
    !
    ! *** Astronomische Jahreszeit berechnen
    !
    ! *** Monat und Tag ermitteln und an Systemvariable Monat.Tag uebergeben
    dom.GetObject(„Monat.Tag“).State( (0.01 * system.Date(„%d“).ToInteger()) + system.Date(„%m“).ToInteger());
    !
    ! *** Fruehling (astronomisch) 20. Maerz bis 19. Juni
    if ((dom.GetObject(„Monat.Tag“).State()<6.20) && (dom.GetObject(„Monat.Tag“).State()>3.19))
    { dom.GetObject(„Jahreszeit astronomisch“).State(0); }
    !
    ! *** Sommer (astronomisch) 20. Juni bis 21. September
    if ((dom.GetObject(„Monat.Tag“).State()<9.22) && (dom.GetObject(„Monat.Tag“).State()>6.20))
    { dom.GetObject(„Jahreszeit astronomisch“).State(1); }
    !
    ! *** Herbst (astronomisch) 22. September bis 20. Dezember
    if ((dom.GetObject(„Monat.Tag“).State()<12.21) && (dom.GetObject(„Monat.Tag“).State()>9.21))
    { dom.GetObject(„Jahreszeit astronomisch“).State(2); 020 }
    !
    ! *** Winter (astronomisch) 21. Dezember bis 19. Maerz
    if ((dom.GetObject(„Monat.Tag“).State()<3.20) || (dom.GetObject(„Monat.Tag“).State()>12.20))
    { dom.GetObject(„Jahreszeit astronomisch“).State(3); }

    Ich bedanke mich für deine Hilfe
    Gruß Helmut

    Antworten
    • Werner
      Werner sagte:

      Hallo Helmut,

      ich habe gerade festgetellt, dass WordPress die Formatierung des Codes verändert. Im EDIT Modus wird der Code korrekt angezeigt. Wenn ich den Artikel mit einem Browser (unabhängig welcher) wird der Code verändert dargestellt. Du kannst das auch selbst im Artikel vergleichen.
      Im Screenshot des WebUI Programmes siehst du den korrekten code.

      Bin noch unterwegs und werde heute Abend versuchen das Problem zu beheben.

      Gruss
      Werner

      Antworten
    • Werner
      Werner sagte:

      Hallo Helmut,

      der Code wird jetzt richtig formatiert angezeigt. Habe es getestet und es existiert kein Skript Fehler mehr.

      Gruss
      Werner

      Antworten
      • herby
        herby sagte:

        Hallo Werner,
        der Fehler ist bei mir auch aufgetreten.
        Habe die Scripte neu eingefügt, dann sind sie auch ohne Fehler durchgelaufen.
        Nur zeigen beide Sys Variablen Frühling an, habe die Einstellungen im Zeitmodul mehrmals geändert.
        Sind auch zwei Programme für meteo und astro angelegt worden, es bleibt bei Frühling.
        mfg
        herby

        Antworten
        • Werner
          Werner sagte:

          Hallo Herbert,

          mein erster Eindruck ist das die Namen der Sys Variablen nicht mit dem Namen im Skript übereinstimmen. Wenn du eine Sys Variable vom Typ Werteliste anlegst, steht automatisch nach dem Anlegen der erste Wert in der Sys Variablen.

          Wenn das nach dem Durchführen des Skriptes so bleibt, wird die angelegte Sys Variable nicht aktualisiert.

          Bitte mal die Namen überprüfen und evtl. via Mail ein paar Screenshots senden.

          Gruss
          Werner

          Antworten
          • herby
            herby sagte:

            Hallo Werner,
            kann man die LED-Kerzen für Advent auch als Notlicht benutzen, wenn der Strom ausfällt?
            Über eine Funkschaltsteckdose?
            Direkte Verknüpfung?
            Separates Relai, oder nicht möglich?
            Habe in den Foren nicht gefunden.
            mfg
            herby

        • Martin
          Martin sagte:

          Hallo Herby,
          ist das Problem mit dem Frühling bei Dir behoben ?

          Ich habe auch beide Sys Variablen:

          „Jahreszeit meteorologisch“
          „Jahreszeit astronomisch“

          angelegt und habe die Programme gerade Manuell an meiner CCU3 unter
          „Status und Bedienung“ gestartet. Es bleibt leider Frühling stehen ?
          Zusätzlich bleibt die Sys Variable „Monat,Tag“ auf 0.00 stehen ?

          Liebe Grüße

          Martin

          Antworten
          • herby
            herby sagte:

            Hallo Martin,
            bei mir läuft alles rund.
            Es lag an den Namen, die müssen im Programm und Variable gleich sein.
            Werner vom 29.12.19
            mfg
            herby

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar zu Werner Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert