Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Tag/Nacht-Logik

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

    #16
    Ich vermute, dass es was mit einem Fehler in ephem zu tun hat, zu dem ich aber noch keine wirkliche Lösung gefunden habe..
    Code:
    2014-07-30 23:05:27 ERROR    env_loc      Logic: env_loc, File: /usr/local/lib/python3.2/dist-packages/ephem/__init__.py, Line: 397, Method: visit_transit, Exception: 'Moon' transits below the horizon at 2014/7/31 14:39:14
    Traceback (most recent call last):
      File "/usr/local/smarthome/lib/scheduler.py", line 339, in _task
        exec(obj.bytecode)
      File "/usr/local/smarthome/lib/env/location.py", line 8, in <module>
        sh.env.location.moonrise(sh.moon.rise().astimezone(sh.tzinfo()))
      File "/usr/local/smarthome/lib/orb.py", line 67, in rise
        next_rising = self._obs.next_rising(self._orb).datetime()
      File "/usr/local/lib/python3.2/dist-packages/ephem/__init__.py", line 478, in next_rising
        return self._riset_helper(body, start, use_center, True, False)
      File "/usr/local/lib/python3.2/dist-packages/ephem/__init__.py", line 453, in _riset_helper
        d1 = visit_transit()
      File "/usr/local/lib/python3.2/dist-packages/ephem/__init__.py", line 397, in visit_transit
        % (body.name, d))
    ephem.NeverUpError: 'Moon' transits below the horizon at 2014/7/31 14:39:14
    Werde aber schauen, dass ich nächstes Mal ein Log von Smarthome posten kann, sobald das Problem mit der falschen Nacht wieder auftaucht.

    Kommentar


      #17
      Zitat von JuMi2006 Beitrag anzeigen
      So wie hier beschrieben: https://github.com/mknx/smarthome/wiki/Tag-Nacht

      Überschreiben von env.location.day:
      Code:
      [env]
          [[location]]
              [[[day]]]
                  name  = Tag
                  knx_dpt = 1
                  knx_send = 1/0/133
                  knx_reply = 1/0/133
      Oder als eigenes item:
      Code:
      [tag]
          type = num
          knx_dpt = 1
          knx_send = 1/0/133
          knx_reply = 1/0/133
          eval = sh.env.location.day()
          eval_trigger = env.location.day
      Wie muss man das denn verstehen muss ich ein eigenes item bauen und wenn nein wo steht der Teil denn drin? in der system.conf finde ich dies leider nicht.

      Kommentar


        #18
        Ja Du musst eigene items bauen:

        Variante 1:
        Du legst noch mal ein env.location.day an und trägst nur die KNX-Parameter ein. Damit fügst Du dem schon intern vorhandenen Item noch die KNX-Funktion hinzu. Das item ist schon fest im smarthome-Code drin.
        Code:
        [env]
            [[location]]
                [[[day]]]
                    name  = Tag
                    knx_dpt = 1
                    knx_send = 1/0/133
                    knx_reply = 1/0/133

        Variante 2:
        Du legst Dir ein eigenes item an mein.item.tag und beziehst Dich via eval auf das System-Item env.location.day
        Code:
        [mein]
        [[item]]
        [[[tag]]]
            type = num
            knx_dpt = 1
            knx_send = 1/0/133
            knx_reply = 1/0/133
            eval = sh.env.location.day()
            eval_trigger = env.location.day
        https://github.com/mknx/smarthome/wiki/Tag-Nacht
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #19
          Zitat von JuMi2006 Beitrag anzeigen
          Ja Du musst eigene items bauen:

          Variante 1:
          Du legst noch mal ein env.location.day an und trägst nur die KNX-Parameter ein. Damit fügst Du dem schon intern vorhandenen Item noch die KNX-Funktion hinzu. Das item ist schon fest im smarthome-Code drin.
          Code:
          [env]
              [[location]]
                  [[[day]]]
                      name  = Tag
                      knx_dpt = 1
                      knx_send = 1/0/133
                      knx_reply = 1/0/133

          Variante 2:
          Du legst Dir ein eigenes item an mein.item.tag und beziehst Dich via eval auf das System-Item env.location.day
          Code:
          [mein]
          [[item]]
          [[[tag]]]
              type = num
              knx_dpt = 1
              knx_send = 1/0/133
              knx_reply = 1/0/133
              eval = sh.env.location.day()
              eval_trigger = env.location.day
          https://github.com/mknx/smarthome/wiki/Tag-Nacht
          Hi ich habe es hin bekommen. Jetzt aber noch eine Frage ich verwende env.location.day ab wann stellt sich denn nu. Tag auf Nacht und umgekehrt. Wie ist der zeitliche Focus im Standard gesetzt? Ich habe irgendwas mit 6 Std gefunden aber von was?Danke und Gruß Jens

          Kommentar


            #20
            Es sind wohl 6 Grad der Sonnenposition, die zum errechneten Sonnenauf/untergang dazu kommen / abgezogen werden. Soweit hätte ich das mal verstanden.

            Irgendwie ist mir die Sonnenuntergangszeit aber etwas suspekt - zumindest was den Dunkelheitsgrad anlangt, kann man leider überhaupt keine Aussage treffen. Manchmal gehen bei mir die Jalousien runter, obwohl es draußen noch recht hell wäre, manchmal erst wenn es richtig dunkel ist. Und das innerhalb der gleichen Woche, find ich etwas schräg. Zeitlich hab ich das aber noch nicht kontrolliert.

            Noch was anderes: der env_loc Thread startet bei mir verdächtig spät. Das führt dazu, dass Logiken, die auf env.loc.day zugreifen und vor der ersten env_loc Abfrage ausgeführt werden, eine falsche Info über Tag/Nacht erhalten. Gibt es da irgendwelche Tricks, wie ich das ändern kann?

            Kommentar


              #21
              Ich muss da auch noch mal nachhaken da die ersten Sachen jetzt nicht so wie gewünscht funktionieren.

              Momentan schalte ich damit das Nachtlicht vom Kind, hier erstmal die Fakten:

              smarthome.conf
              Code:
              LOGLEVEL = debug
              # | info | warning | error | critical
              
              lat = 51.1633
              lon = 10.4476
              elev = 500
              
              tz = 'Europe/Berlin'
              item.conf
              Code:
              [tag]
                  type = num
                  knx_dpt = 1
                  knx_send = 0/0/103
                  knx_reply = 0/0/103
                  enforce_updates = true
                  eval = sh.env.location.day()
                  eval_trigger = env.location.day
                  cycle = 300
              
              [nacht]
                  type = num
                  knx_dpt = 1
                  knx_send = 0/0/104
                  knx_reply = 0/0/104
                  enforce_updates = true
                  eval = sh.env.location.night()
                  eval_trigger = env.location.night
                  cycle = 300
              Nun gibt mir die smartvisu und smarthome folgendes aus:

              Code:
              Items:
              ======
              env
              env.core
              env.core.version = 1.0-12-gbc7779f+
              env.core.start = 2014-09-21 20:50:20.247640+02:00
              env.core.memory = 22695936
              env.core.threads = 8.0
              env.core.garbage = 0.0
              env.location
              env.location.day = True
              env.location.night = False
              env.location.sunrise = 2014-09-23 07:05:16.326411+02:00
              env.location.sunset = 2014-09-22 19:17:14.722515+02:00
              env.location.moonrise = 2014-09-23 06:11:28.175375+02:00
              env.location.moonset = 2014-09-22 18:21:40.994013+02:00
              env.location.moonphase = 8
              env.location.moonlight = 2
              env.system
              env.system.start = 2013-12-19 18:33:48.265848+01:00
              env.system.load = 0.13
              env.system.name = black-automation
              Allerdings passiert folgendes:
              Code:
              2014-09-22 06:34:57,836 INFO     Main         knx: 1.1.253 set 0/0/103 to 01 -- __init__.py:parse_telegram:181
              2014-09-22 06:34:57,864 INFO     Main         knx: 1.1.253 set 0/0/104 to 00 -- __init__.py:parse_telegram:181
              Wobei gestern das Nachtlicht auch erst 19:59 angegangen ist, da bin ich mir aber nicht sicher ob sich das mit einem manuellen Befehl oder einem "up nacht=1" überschnitten hat. Dennoch passt der Wert des Sonnenaufgangs nicht mit Tag/Nacht oder haben wir einfach das "Problem" mit unterschiedlichen Arten von Sonnenaufgang/-untergang ?
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #22
                Hi Mirko,

                passt soweit.
                Die Umschaltzeit ist sunrise(-6) == Beginn der bürgerlichen Dämmerung.

                Bis bald

                Marcus

                Kommentar


                  #23
                  Also ich bin wohl kein Standardbürger denn jetzt ist es für mich einfach zu dunkel und die Dämmerung ist in meinen Augen abgeschlossen bzw. kurz vor "dunkel".

                  Wo kann man jetzt am einfachsten das Offset korrigieren?
                  Ich sehe da momentan nur den Ansatz die location.py zu kopieren/modifizieren oder geht das einfacher/minimalinvasiver?
                  Wer triggert denn location.py?

                  Grüße
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #24
                    Hi Mirko,

                    ja, momentan ist es am besten eigene Items anzulegen.
                    Die location.py wird von sunset/sunrise getriggert. Die Conf und die Logiken liegen in lib/env.

                    Evtl. ändere ich das bei dem nächsten Release ab, damit nicht sunset(-6) sonder nur sunset() verwendet wird. Evtl. gibt es noch ein twilight...

                    Bis bald

                    Marcus

                    Kommentar


                      #25
                      Hallo Marcus,

                      so hatte ich es mir geändert, hatte es dann doch noch im source gefunden. Zwischenzeitlich kam mir allerdings noch eine andere Idee die auf zwei simplen Bedingungen beruht.

                      Grafisch dargestellt ergibt sich da folgendes:
                      |=Mitternacht, ss=sunset, sr=sunrise, *=angenommener aktueller Zeitpunkt
                      Code:
                      #|------sr-----*-----ss------|------sr
                      #|--*---sr-----------ss------|------sr
                      #|------sr-----------ss--*---|------sr--------ss
                      #
                      #ss<sr #tag
                      #sr<ss #nacht
                      #sr<ss #nacht
                      Also würde ein einfaches eval das Problem ja schon lösen können oder liege ich da falsch? Leider bekomme ich das nicht ans fliegen, ich tippe auf einen Fehler in meinen test-item-eval:
                      Code:
                      [tag]
                          type = num
                          knx_dpt = 1
                          knx_send = 0/0/103
                          knx_reply = 0/0/103
                          enforce_updates = true
                          cycle = 300
                      
                          [[test]]
                      	type = bool
                      	knx_dpt = 1
                      	knx_send = 0/0/113
                      	knx_reply = 0/0/113
                      	enforce_updates = true
                      	cycle = 60
                      	eval = True if sh.env.location.sunset() < sh.env.location.sunrise() else False
                      
                      [nacht]
                          type = num
                          knx_dpt = 1
                          knx_send = 0/0/104
                          knx_reply = 0/0/104
                          enforce_updates = true
                          cycle = 300
                      
                          [[test]]
                      	type = bool
                      	knx_dpt = 1
                      	knx_send = 0/0/114
                      	knx_reply = 0/0/114
                      	enforce_updates = true
                      	crontab = * * * *
                      	eval = True if sh.env.location.sunrise() < sh.env.location.sunset() else False
                      Die funktionierende Logik für tag/nacht sieht sieht so aus ... dies aber nur zur Info für die Allgemeinheit.
                      Code:
                      #/logics/sun.py
                      #!/usr/bin/env python
                      # sunset + sunrise fuer Tag/nacht
                      
                      if sh.sun:
                          sh.env.location.sunrise(sh.sun.rise().astimezone(sh.tzinfo()))
                          sh.env.location.sunset(sh.sun.set().astimezone(sh.tzinfo()))
                      
                          # setting day and night
                          day = sh.sun.rise(0).day != sh.sun.set(+6).day
                          sh.tag(day)
                          sh.nacht(not day)
                      Wo liegt der Fehler beim eval von tag.test/nacht.test ?

                      Grüße
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #26
                        Hi Mirko,

                        nimm doch einfach die Logik. Braucht weniger Ressourcen (läuft nicht alles 60s) und kann einfacher gelesen werden.

                        Die sh.env.location.sunx() können ja weg, die werden ja richtig gesetzt.

                        Bis bald

                        Marcus

                        Kommentar


                          #27
                          Danke, kannst Du mir dennoch ein funktionierendes eval verraten ;-)?
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            #28
                            Nee, ich verwende eval nur für ganz einfache Sachen.

                            Kommentar


                              #29
                              Hi Mirko,

                              wie sieht denn Dein Trigger in der logic.conf dazu aus?

                              Zitat von JuMi2006 Beitrag anzeigen
                              Die funktionierende Logik für tag/nacht sieht sieht so aus ... dies aber nur zur Info für die Allgemeinheit.
                              Code:
                              #/logics/sun.py
                              #!/usr/bin/env python
                              # sunset + sunrise fuer Tag/nacht
                              
                              if sh.sun:
                                  sh.env.location.sunrise(sh.sun.rise().astimezone(sh.tzinfo()))
                                  sh.env.location.sunset(sh.sun.set().astimezone(sh.tzinfo()))
                              
                                  # setting day and night
                                  day = sh.sun.rise(0).day != sh.sun.set(+6).day
                                  sh.tag(day)
                                  sh.nacht(not day)
                              Viele Grüße
                              Martin

                              There is no cloud. It's only someone else's computer.

                              Kommentar


                                #30
                                Puh, da bin ich ein wenig überfragt. Ich nutze das aktuell nicht und konnte mich da auch nicht mehr reinlesen (so dass ich das verstehe).

                                Meine logic.conf sagt aber folgendes:
                                Code:
                                [day_by_sunrise]
                                    filename = sun.py
                                    crontab = init | sunrise+1m | sunset+1m | sunrise-5 | sunset-7
                                    cycle = 1800
                                Jetzt frag mich aber nicht was ich mir dabei gedacht habe. Sorry.
                                Umgezogen? Ja! ... Fertig? Nein!
                                Baustelle 2.0 !

                                Kommentar

                                Lädt...
                                X