Ankündigung

Einklappen

Sammelbestellung ETS5-UPGRADE gestartet...

Die Sammelbestellung für ETS5 UPGRADE ist gestartet. Infos unter: Link
Mehr anzeigen
Weniger anzeigen

- √ - sh.sun.pos() in °

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

    #16
    Hehe Danke für den Hinweis, werde ich zukünftig versuchen "richtig" zu machen.. Auf Anfrage gibt es jetzt hier meinen Code für die Sonnenstandssteuerung. Ich muss dazu sagen, dass das Ganze eher laienhaft unterwegs ist... ab und an macht die Jalousie auch zu, obwohl ich das nicht will - kann aber an den zu geringen Thresholds für die Wetterwerte liegen. Here we go - sollte was Olles oder Kompliziertes auffallen, bitte melden. Optimierungspotenzial gibt es sicher massig:

    Item.conf:
    Code:
    [Sonne]
        [[aufgang]]
            type = foo
            visu_acl = r
            enforce_updates = true
        [[untergang]]
            type = foo
            visu_acl = r
            enforce_updates = true
        [[position]]
            type = foo
            visu = yes
            visu_acl = r
            knx_dpt = 16
            enforce_updates = true
    
    ['sicherheitjalousien']
       type = bool
       visu_acl = r
       enforce_updates = yes
       knx_dpt = 1
       knx_send = 0/1/22
    
    ['sicherheitscreens']
       type = bool
       visu_acl = r
       enforce_updates = yes   
       knx_dpt = 1
       knx_send = 0/1/23
    
    ['jalousien']
        [['automatik']]
        type = bool
        visu_acl = rw
        enforce_updates = yes
        knx_dpt = 1
        cache = True
    
    ['osten']
        [['j5_wohnen']]
            [[['hoehe']]]
                knx_send = 3/1/16
                knx_dpt = 5
                visu_acl = rw
                type = num
                knx_init =3/1/32
                cache = True
                sqlite = init
                enforce_updates  = yes
                beschattung = 75 | 110 | 20 | 254 | 24 | 4 | 500
                # Die Werte fuer Beschattung: azimut-start | azimut-stop | min altitude | jalousienhoehe | temperatur (Wunderground) | UV Wert (Wunderground) | Solarwert (Wunderground)
    
    usw.
    logic.conf:
    Code:
    [Wunderground]
    # Wunderground Setup siehe Beitrag zu entsprechender Logik im Forum
    filename = wunderground.py
    visu_acl = yes
    crontab = init
    cycle = 600
    
    [Sonne]
    filename = sonne.py
    crontab = init
    cycle = 600
    
    [Jalousien]
    filename = jalousien.py
    watch_item = jalousien.automatik
    Die sonne.py:
    Code:
    #!/usr/bin/python3.2
    # Sicherheit abhaengig von Windgeschwindigkeit von naechstgelegener Wunderground Station. Eigene Wetterstation waere besser ;)
    limitjalousien = 35
    limitscreens = 50
    
    if sh.Wetter.Windgeschwindigkeit.kmh() >= limitjalousien:
       sh.sicherheitjalousien(1)
       logger.error("Windgeschwindigkeit liegt bei {0} und somit ueber {1}, daher Jalousien gesperrt".format(sh.Wetter.Windgeschwindigkeit.kmh(),limitjalousien))
    else:
       if sh.sicherheitjalousien() == 1:
          sh.sicherheitjalousien(0)
          logger.warning("Windgeschwindigkeit liegt bei {0} und somit unter {1}, daher Jalousiesperre aufgehoben".format(sh.Wetter.Windgeschwindigkeit.kmh(),limitjalousien))
    
       
    if sh.Wetter.Windgeschwindigkeit.kmh() >= limitscreens:
       sh.sicherheitscreens(1)
       logger.error("Windgeschwindigkeit liegt bei {0} und somit ueber {1}, daher Screens gesperrt".format(sh.Wetter.Windgeschwindigkeit.kmh(),limitscreens))
    else:
       if sh.sicherheitscreens() == 1:
          sh.sicherheitscreens(0)
          logger.warning("Windgeschwindigkeit liegt bei {0} und somit unter {1}, daher Screensperre aufgehoben".format(sh.Wetter.Windgeschwindigkeit.kmh(),limitscreens))
    
    
    # aktuelle Sonnenposition
    sh.Sonne.position(sh.sun.pos(degree=True))
    azimut, altitude = sh.Sonne.position()
    
    # Zeiten fuer Reset
    sonnenaufgang = sh.sun.rise(-6).astimezone(sh.tzinfo()).time()
    sonnenaufgang2 = sh.sun.rise().astimezone(sh.tzinfo()).time()
    jetzt = sh.now().astimezone(sh.tzinfo()).time()
    
    
    # RESET am Morgen
    if jetzt >=sonnenaufgang and jetzt <=sonnenaufgang2:
      sh.jalousien.automatik(1)
      logger.warning("Jalousienautomatik aktiviert, da es Morgen ist")
    
    # Sofern Gesamtautomatik aktiviert ist...
    if sh.jalousien.automatik() == 1:  
       for jalousie in sh.find_items('beschattung'):
         # Auslesen der Jalousiewerte fuer die Beschattung
         start = int(jalousie.conf['beschattung'][0])
         stop = int(jalousie.conf['beschattung'][1])
         hoehe = int(jalousie.conf['beschattung'][2])
         # Das war mal dafuer gedacht, dass manche Objekte erst nach Sonnenuntergang triggern. Kann aber auch durch das "Nacht"-Objekt geloest werden, siehe unten.
         if hoehe <=0:
            hoehe2 = hoehe
         else:
            hoehe2 = -90
         zufahren = jalousie.conf['beschattung'][3]
         temperatur = int(jalousie.conf['beschattung'][4])
         uv = int(jalousie.conf['beschattung'][5])
         solar = int(jalousie.conf['beschattung'][6])
         
         try:
            # Wenn noch ein weiterer Wert in der item.conf angegeben ist, dann wird dieser Wert angefahren, sobald Nacht ist - unabhaengig also vom Wetter.
            nacht = int(jalousie.conf['beschattung'][7])
            logger.debug("Wert fuer Nacht gefunden: {0}".format(nacht))
    
         except:
            # Wenn kein Nachtwert angegeben ist, dann ist er auf Null gesetzt.
            nacht = 0
         
         try:
            # Eventuell koennte man das Ganze auch zweigleisig fahren. Also dass man nochmals verschiedene Werte fuer eine weitere Phase angibt. Wuerde Sinn machen, wenn auf eine Fensterfront zB bei Azimut 100-150 Sonne faellt und dann bei 200-250 wieder, dazwischen aber nicht (Baum oder so..) 
            start2 = int(jalousie.conf['beschattung'][8])
            stop2 = int(jalousie.conf['beschattung'][9])
            temperatur2 = int(jalousie.conf['beschattung'][10])
            uv2 = int(jalousie.conf['beschattung'][11])
            solar2 = int(jalousie.conf['beschattung'][12])
            hoehe3 = int(jalousie.conf['beschattung'][13])
         
         except:   
            # Und wenn es die oberen Werte nicht gibt, werden sie auf quasi auf unendlich gesetzt, damit sie in unterer Abfrage ignoriert werden.
            start2 = 1000
            stop2 = -1000
            temperatur2 = 1000
            uv2 = 1000
            solar2 = 10000000
            hoehe3 = 1000
            
         logger.debug("Nacht ist auf Wert: {0}. Laut Smarthome ist Nacht auf {1}".format(nacht,sh.env.location.night()))
    
         # Wenn die Jalousie nicht mittels KNX-Taster oder Visualisierung geaendert wurde, wird sie durch die Automatik geaendert...
         if not (jalousie.changed_by().startswith('KNX') or jalousie.changed_by().startswith('Visu')):
             # Abfrage ob Nacht ist und ein Nachtwert gesetzt wurde. Ausserdem Alternativabfrage, ob die in der item.conf angegeben Werte derzeit wahr sind. Wenn ja, dann fahren die Jalousien automatisch.
             if (sh.env.location.night() and not nacht == 0) or (azimut >= start and azimut <= stop and sh.Wetter.Temperatur() >=temperatur and (sh.Wetter.UV() >=uv or sh.Wetter.Solar() >=solar) and (altitude >= hoehe or altitude <= hoehe2)) or (azimut >= start2 and azimut <= stop2 and sh.Wetter.Temperatur() >=temperatur2 and (sh.Wetter.UV() >=uv2 or sh.Wetter.Solar() >=solar2) and altitude >= hoehe3):
               # Wenn Nacht und Jalousie einen Nachtwert hat, wird auf diesen Nachtwert gefahren
               if sh.env.location.night() and not nacht == 0:
                  jalousie(nacht)
                  logger.info("Fahre Jalousie {0} auf Wert {1} zu, weil Nachsituation aktiviert.".format(jalousie, nacht))
               # Ansonsten wird auf den in der item.conf angegeben Wert gefahren.
               else:
                    jalousie(zufahren)
                    logger.info("Fahre Jalousie {0} auf Wert {1} zu.".format(jalousie, zufahren))
             # Wenn die Mindestwerte fuer Temperatur, Azimut, etc. nicht erreicht sind, faehrt die Jalousie hoch. Wir moechten ja Sonne ins Zimmer lassen.
             else:
               jalousie(0)
               logger.info("Fahre Jalousie {0} auf Wert 0.".format(jalousie))
         # Und falls die Jalousie seit dem Morgen manuell betaetigt wurde, wird sie nicht mehr veraendert. So lange, bis die Gesamtautomatik wieder aktiviert wird.
         else:
              logger.info("Jalousie {0} zuletzt manuell durch {1} geaendert, daher kein Automatikbetrieb".format(jalousie,jalousie.changed_by()))
    jalousien.py - zum Aktivieren der Automatik auf Knopfdruck
    Code:
    #!/usr/bin/python3.2
    
    logger.info(trigger)
    
    
    if sh.jalousien.automatik() == 1:
       logger.warning("Jalousienautomatik aktiv")
       for jalousie in sh.find_items('beschattung'):
           fahren = jalousie()
           # Dies bewirkt, dass die letzte Aenderung fuer die Jalousie von der Logik kommt und nicht mehr vom KNX-Taster oder der Visualisierung. Alles wird wieder nach Sonnenstand gesteuert.
           jalousie(fahren+1)
           logger.debug("Fahre Jalousie {0} auf Wert {1} zu.".format(jalousie,fahren))

    Kommentar

    Lädt...
    X