Ankündigung

Einklappen
Keine Ankündigung bisher.

Berechnung der Tagesmitteltemperatur und davon abgeleitete Werte

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

    Berechnung der Tagesmitteltemperatur und davon abgeleitete Werte

    Hallo,

    ich würde gern die Tagesmitteltemperatur nach der "24-Punkt-Methode" berechnen.

    Diese ist wie folgt definiert:
    • Berechnung der Tagesmittel aus 24 Stundenwerten jeweils zur vollen Stunde (Summe der 24 Temperaturen zur vollen Stunde beginnend ab 0:00 Uhr geteilt durch die Anzahl von Werten)
    • Bezugszeit für einen Tag i.d.R. 23:51 UTC des Vortages bis 23:50 UTC
    • Wenn mehr als 3 Stundenwerte fehlen -> Berechnung aus 4 Hauptterminen (00, 06, 12, 18 UTC)
    Verfügbar habe ich die Außentemperatur (via 1wire) in einem Item.

    Wie würdet ihr da vorgehen? Ähnlich wie die Logik zur DIN Sommer/Winter Berechnung?

    Code:
    #!/usr/bin/env python3
    # sommer_winter_berechnung.py
    import time
    
    lvar=[]
    actual_temp=round(float(sh.raumtemp.aussen.nord()),1)
    
    #einlesen der list
    if not sh.raumtemp.aussen.nord.sommer.digits():
        sh.raumtemp.aussen.nord.sommer.digits(['','','','',''])
    for i in range(5):
        if sh.raumtemp.aussen.nord.sommer.digits()[i] == '':
            lvar.append(actual_temp)
        else:
            lvar.append(float(sh.raumtemp.aussen.nord.sommer.digits()[i]))
    
    # logger.info('Time: '+time.strftime('%H')+' Temp: '+str(aktual))
    # logger.info('var1: '+str(lvar[0])+' var2:'+str(lvar[1])+' var3: '+str(lvar[2])+' var4: '+str(lvar[3])+' var5: '+str(lvar[4]))
    
    if time.strftime('%H') == '07':
       lvar[0]=actual_temp
       lvar[4]=lvar[3]
       lvar[3]=round((lvar[0]+lvar[1]+lvar[2]+lvar[2])/4,1)
    
    if time.strftime('%H') == '14':
       lvar[1]=actual_temp
    
    if time.strftime('%H') == '22':
       lvar[2]=actual_temp
    
    # logger.info('var1: '+str(lvar[0])+' var2:'+str(lvar[1])+' var3: '+str(lvar[2])+' var4: '+str(lvar[3])+' var5: '+str(lvar[4]))
    
    avg=round((((lvar[0]+lvar[1]+lvar[2]+lvar[2])/4)+lvar[3]+lvar[4])/3,1)
    logger.info('Sommerauswertung: '+str(avg))
    
    sh.raumtemp.aussen.nord.sommer.digits([str(lvar[0]),str(lvar[1]),str(lvar[2]),str(lvar[3]),str(lvar[4])])


    Basierend darauf würde ich gern die Kältesumme des Jahres, die Wärmesumme des Jahres sowie die Grünlandtemperatursumme berechnen.
    Die Kältesumme ist die Summe aller negativen Tagesmitteltemperaturen im Winterhalbjahr (September - März)
    Die Wärmesumme ist die Summe aller positiven Tagesmitteltemperaturen im Sommerhalbjahr.
    Die Grünlandtemperatursumme (GTS) ist eine rechnerische Wärmesumme, anhand welcher im Frühjahr der Beginn der Feldarbeit bestimmt wird. Sobald der Wert von 200 überschritten wird, markiert dies das Ende der winterlichen Vegetationsruhe und den Beginn von nachhaltigem Pflanzenwachstum. Es werden ab Jahresbeginn alle positiven Tagesmittel erfasst. Im Januar wird mit dem Faktor 0,5 multipliziert, im Februar mit dem Faktor 0,75, und ab März geht dann der „volle“ Tageswert (mal Faktor 1) in die Rechnung ein.

    Danke Euch

    #2
    Also ich würde per eval stündlich jeweils ein 24stel der aktuellen Temperatur auf ein Zwischenitem addieren.
    Das Zwischenitem kannst du dann einmal am Tag auslesen, speichern und anschließend zurücksetzen.

    Die anderen Summen kann man ähnlich lösen.

    Gruß Stefan

    Kommentar


      #3
      Hallo,

      ich habe eine Logik für die Ermittlung der Tagesdurchschnittstemperatur nach der 24-Punkt Methode erstellt.

      Code:
      #!/usr/bin/env python3
      # temperaturtagesmittel.py
      
      # Die Logik ermittelt die Tagesmitteltempertur mit der 24 Punkt Methode
      
      logger.warning("Logik '{}' durch: {} und {}".format(logic.id(), trigger['by'], trigger['source'] ))
      
      from lib.item import Items
      items = Items.get_instance()
      
      # Speicher für Temperaturwerte einrichten
      if not hasattr(logic, 'stundentemperaturwerte'):
          logic.stundentemperaturwerte = sh.raumtemp.aussen.nord.tagesmittelwert.digits()
      
      # Temperaturwert einlesen
      actual_temp=round(sh.raumtemp.aussen.nord(),1)
      
      if trigger['by'] == 'Scheduler':
          if sh.shtime.utcnow().hour == 0:
              # Auswertung, Tagesmittel berechnen, rücksetzen
              tempsumme = 0
              tagesmittel = 0
              if len(logic.stundentemperaturwerte) >= 21:
                  for key in logic.stundentemperaturwerte:
                      tempsumme += logic.stundentemperaturwerte[key]
                  tagesmittel = round(tempsumme / len(logic.stundentemperaturwerte), 1)
              elif 0 in logic.stundentemperaturwerte and 6 in logic.stundentemperaturwerte and 12 in logic.stundentemperaturwerte and 18 in logic.stundentemperaturwerte:
                  tagesmittel = round((logic.stundentemperaturwerte[0] + logic.stundentemperaturwerte[6] + logic.stundentemperaturwerte[12] + logic.stundentemperaturwerte[18]) / 4, 1)
              else:
                  for key in logic.stundentemperaturwerte:
                      tempsumme += logic.stundentemperaturwerte[key]
                  tagesmittel = round(tempsumme / len(logic.stundentemperaturwerte), 1)
              logger.info("Berechnerte Tagesmitteltemperartur: " + str(tagesmittel))
              sh.raumtemp.aussen.nord.tagesmittelwert(tagesmittel)
              # dict leeren
              logic.stundentemperaturwerte.clear()
      
          logic.stundentemperaturwerte[sh.shtime.utcnow().hour]=actual_temp
          logger.info("Geloggter Stundentemperturwert: " + str(logic.stundentemperaturwerte))
          sh.raumtemp.aussen.nord.tagesmittelwert.digits(logic.stundentemperaturwerte)
      Anwendung / Feedback sind willkommen.

      Kommentar

      Lädt...
      X