Homematic Script Tageszeit berechnen

Homematic kennt leider keine Tageszeit als Variable oder Astrofunktion. In diesem Beitrag zeige ich euch ein kleines Script, mit dem ihr die Tageszeit berechnen und in eine Systemvariable schreiben lassen könnt.
Anschließend kann die Variable in Programmen verwendet (z.B. in der Dämmerung Licht auf 10% dimmen,..) werden.

Los geht’s!

  • Variable anlegen
  • Quicktipp: Variable anlegen

    • Name: Tageszeit
      Typ: Werteliste
      Werte: Nacht; frühmorgens; Morgengauen; Vormittag; Mittag; Nachmittag; Dämmerung; Abend;
  • Programm anlegen
  • Quicktipp: Programm anlegen

    • Bedingung: Wenn… Zeitsteuerung, Zeitspannung ganztägig, Serienmuster Zeitintervall alle 5 Minuten

    • Aktivität: Dann… Script einfügen
    • ! Tageszeiten berechnen
      ! www.homematic-guru.de
      ! Tageszeiten
      ! Tagesbeginn - 2 <04.00 Nacht
      ! Tagesbeginn - 2 <04.00 Tagesbeginn - 1        frühmorgens
      ! Tagesbeginn - 1        Tagesbeginn            Morgengrauen
      ! Tagesbeginn            Mittag - 1             Vormittag
      ! Mittag - 1             Mittag + 1             Mittag
      ! Mittag + 1             Tagesende              Nachmittag
      ! Tagesende              Tagesende + 1          Dämmerung
      ! Tagesende + 1          Tagesende + 2 >2200    Abend
      ! Tagesende + 2 >2200                           Nacht
      
      real c_zeit = 
        (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
      real c_tagesbeginn = 
        (0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger();
      real c_tagesende =  
        (0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger();
      real c_mittag = 0.5 * (c_tagesbeginn + c_tagesende);
      
      integer v_tageszeit = 0; ! Nacht
      
      if ((c_zeit < c_tagesende + 2) || (c_zeit < 22.00)) {
        v_tageszeit = 7; ! Abend
      }
      
      if (c_zeit < c_tagesende + 1) {
        v_tageszeit = 6; ! Abenddaemmerung
      }
      
      if (c_zeit < c_tagesende) {
        v_tageszeit = 5; ! Nachmittag
      }
      
      if (c_zeit < c_mittag + 1) {
        v_tageszeit = 4; ! Mittag
      }
      
      if (c_zeit < c_mittag - 1) {
        v_tageszeit = 3; ! Vormittag
      }
      
      if (c_zeit < c_tagesbeginn) {
        v_tageszeit = 2; ! Morgengrauen
      }
      
      if (c_zeit < c_tagesbeginn - 1) {
        v_tageszeit = 1; ! fruemorgens;
      }
      
      if ((c_zeit < c_tagesbeginn - 2) && (c_zeit < 04.00)) {
        v_tageszeit = 0; ! Nacht
      }
      
      object s_tageszeit = dom.GetObject("Tageszeit");
      if (s_tageszeit.Value() != v_tageszeit) {
        s_tageszeit.State(v_tageszeit);
      }
      
      
      

    Fertig!

    Verwendete Hardware

    Ich empfehle solche Programme als „Systemintern“ zu markieren. So wird es in der Programmliste versteckt und trägt zur Übersichtlichkeit bei.

    Dir hat der Beitrag gefallen?

    Trage dich kostenlos & unverbindlich in den Newsletter ein
    und verpasse keinen Beitrag mehr!

    Schaue auch gerne auf Facebook vorbei: