Ankündigung

Einklappen
Keine Ankündigung bisher.

Tag/Nacht und Sunrise/Sunset

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Tag/Nacht und Sunrise/Sunset

    Hallo Forum,

    ich hatte ja mittlerweile auf SmarthomeNG umgestellt (und auch auf das aktuelle Python). Dabei ist mir aufgefallen, dass bei mir nun der bisherige Code (auskommentiert) mit einer Fehlermeldung quittiert wird

    Code:
    [Zentral]
        [[Uhrzeiten]]
            [[[Sonne]]]
                [[[[Berechnung]]]]
                    type = bool
                    visu = yes
                    crontab = init | 30 * * *
    
                [[[[Aufgang]]]]
                    name = Sonnenaufgang
                    type = foo
                    knx_dpt = 10
                    knx_send = 0/2/2
                    visu = yes
    #                eval = sh.sun.rise().astimezone(sh.tzinfo()).strftime("%H:%M")
                    eval = sh.sun.rise()
                    eval_trigger = Zentral.Uhrzeiten.Sonne.Berechnung
                    enforce_updates = true
    
                [[[[Untergang]]]]
                    name = Sonnenuntergang
                    type = foo
                    knx_dpt = 10
                    knx_send = 0/2/3
                    visu = yes
    #                eval = sh.env.sun.set().astimezone(sh.tzinfo()).strftime("%H:%M")
                    eval = sh.sun.set()
                    eval_trigger = Zentral.Uhrzeiten.Sonne.Berechnung
                    enforce_updates = true
    
                [[[[Tag]]]]
                    name = Tag
                    type = bool
                    knx_dpt = 1
                    knx_send = 0/4/0
                    eval = sh.env.location.day()
                    eval_trigger = env.location.day
    
                [[[[Nacht]]]]
                    name = Nacht
                    type = bool
                    knx_dpt = 1
                    knx_send = 0/4/1
                    eval = sh.env.location.night()
                    eval_trigger = env.location.night
    Ich habe die Fehlermeldung jetzt nicht mehr genau im Kopf, sie bezieht sich aber auf einen Parameter isoweek...

    Mit der verkürzten Version eval = sh.sun.rise() läuft es wieder, aber mir fällt Folgendes auf:

    Der Sonnenuntergang wird beispielsweise mit 20:45 errechnet und in der SmartVisu angezeigt, die Umschaltung von Tag auf Nacht erfolgt aber um 21:30. Für mich wäre es unabhängig von diesem Unterschied wichtig, die Angaben so zu setzen, dass beides mit einem Offset schon früher passiert, weil ich z.B. über das Tag/Nacht-Objekt im KNX verhindern will, dass tagsüber das Flurlicht dauernd angeht, es aber z.B. ab 19:00 schon sein sollte - also Tag/Nacht nicht erst um 21:30 wechselt sondern z.B. um 19:00.

    Wie löse ich das am Besten mit den integrierten Funktionen (sh.sun.rise()...), ohne eine extra Logik bauen zu müssen?

    Danke und viele Grüße
    Andi

    #2
    Hallo

    Ich glaube, das ist in /usr/smarthome/lib/env/location.py festgelegt.

    Code:
    # lib/env/location.py
    
    if sh.sun:
        sh.env.location.sunrise(sh.sun.rise().astimezone(sh.tzinfo()))
        sh.env.location.sunset(sh.sun.set().astimezone(sh.tzinfo()))
    
        sh.env.location.moonrise(sh.moon.rise().astimezone(sh.tzinfo()))
        sh.env.location.moonset(sh.moon.set().astimezone(sh.tzinfo()))
        sh.env.location.moonphase(sh.moon.phase())
    
        # setting day and night
        # lib/env/location.py
    
    if sh.sun:
        sh.env.location.sunrise(sh.sun.rise().astimezone(sh.tzinfo()))
        sh.env.location.sunset(sh.sun.set().astimezone(sh.tzinfo()))
    
        sh.env.location.moonrise(sh.moon.rise().astimezone(sh.tzinfo()))
        sh.env.location.moonset(sh.moon.set().astimezone(sh.tzinfo()))
        sh.env.location.moonphase(sh.moon.phase())
    
        # setting day and night
        day = sh.sun.rise().day != sh.sun.set().day
        sh.env.location.day(day)
        sh.env.location.night(not day)
        sh.env.location.day(day)
        sh.env.location.night(not day)
    Im Original steht etwas, wie
    Code:
    # lib/env/location.py
    
    
        # setting day and night
        day = sh.sun.rise(-[B]6[/B]).day != sh.sun.set([B]-6[/B]).day
        sh.env.location.day(day)
        sh.env.location.night(not day)
    oder so ähnlich. Hab das ebenfalls so geändert, dass bei Sunset die Tag/Nacht Umschaltung erfolgt.

    Gruß Max
    Zuletzt geändert von Max2612; 04.08.2016, 10:48.

    Kommentar


      #3
      Hallo Max,

      dann wird die Datei aber bei einem Update überschrieben werden, oder?

      In meinem (unveränderten) Original steht:

      Code:
      # lib/env/location.py
      
      if sh.sun:
          sh.env.location.sunrise(sh.sun.rise().astimezone(sh.tzinfo()))
          sh.env.location.sunset(sh.sun.set().astimezone(sh.tzinfo()))
      
          sh.env.location.moonrise(sh.moon.rise().astimezone(sh.tzinfo()))
          sh.env.location.moonset(sh.moon.set().astimezone(sh.tzinfo()))
          sh.env.location.moonphase(sh.moon.phase())
      
          # setting day and night
          day = sh.sun.rise(-6).day != sh.sun.set(-6).day
          sh.env.location.day(day)
          sh.env.location.night(not day)
      Was bedeutet die -6 in sh.sun.rise(-6) genau?

      Und noch eine Unklarheit:

      Soll ich in meiner items das sh.sun.rise() oder das sh.env.location.sunrise() verwenden?

      Viele Grüße
      Andi
      Zuletzt geändert von awknx; 04.08.2016, 12:57.

      Kommentar


        #4
        Das mit dem Update, kann ich dir nicht sagen.

        Ein sunset(-6) gibt den Offset in Grad unter dem Horizont an = bürgerliche Dämmerung.
        Du kannst aber auch sunset(-30m) verwenden. Das wäre dann 30 Minuten vor Sonnenuntergang.

        Mein item sieht so aus
        Code:
        [TagNacht]
            [[Nacht]]
                type = num
                    eval = sh.env.location.night()
                    eval_trigger = env.location.night
        Gruß Max

        Kommentar


          #5
          Danke, jetzt sehe ich klarer. Dann teste ich jetzt mal verschiedene Einstellungen :-)

          Jetzt kommt mir aber grad noch was, wenn ich das Original von SmarthomeNG location.py anschaue:

          Hier wird doch der Sonnenaufgang korrigiert um die Zeitzone des Standortes:

          sh.env.location.sunrise(sh.sun.rise().astimezone(s h.tzinfo())) während hier: day = sh.sun.rise(-6).day != sh.sun.set(-6).day die Zeitzone nicht, dafür aber der Sonnenstand berücksichtigt wird, oder? Das würde dann ev. die unterschiedlichen Zeiten erklären, die bei mir rauskommen.
          Zuletzt geändert von awknx; 04.08.2016, 14:27.

          Kommentar

          Lädt...
          X