I have tried to program for myself for the last few days. And I included 
the function into the uploader that needs the value. So, when the new year 
starts, we will see, wether it works.

At the start of weewx the value ist calculated up to the actual day. It is 
saved within the thread class of the uploader. After that, once a day the 
value is updated according to the temperature average of the last day.

def calc_gts(self,time_ts,dbmanager): 
    """calculate Grünlandtemperatursumme GTS""" 

    # needed timestamps 
    _sod_ts = weeutil.weeutil.startOfDay(time_ts) # start of day 
    _soy_ts = weeutil.weeutil.archiveYearSpan(time_ts)[0] # start of year 
    _feb_ts = _soy_ts + 2678400 # Feb 1 
    _mar_ts = _feb_ts + 2419200 # Mar 1 (or Feb 29 in leap year) 
    _end_ts = _mar_ts + 7948800 # Jun 1 (or May 31 in leap year) 

    # initialize if program start or new year 
    if self.last_gts_date is None or self.last_gts_date < _soy_ts: 
        self.last_gts_date = _soy_ts 
        self.gts_value = None 
        self.gts_date = None 
        loginf("GTS initialized %s" % 
               time.strftime("%Y-%m-%d", 
               time.localtime(_soy_ts))) 

    # calculate 
    # This runs one loop for every day since New Year at program 
    # start and after that once a day one loop, only. After May 31th 
    # no loop is executed. 
    _loop_ct=0 
    while self.last_gts_date < _sod_ts and self.last_gts_date < _end_ts: 
        # the day the average is calculated for 
        _today = TimeSpan(self.last_gts_date,self.last_gts_date+86400) 
        # calculate the average of the outside temperature 
        _result = 
weewx.xtypes.get_aggregate('outTemp',_today,'avg',dbmanager) 
        # convert to centrigrade 
        if _result is not None: 
            _result = weewx.units.convert(_result,'degree_C') 
        # check condition and add to sum 
        if _result is not None and _result[0] is not None: 
            if self.gts_value is None: 
                self.gts_value=0 
            _dayavg = _result[0] 
            if _dayavg > 0: 
                if self.last_gts_date < _feb_ts: 
                    _dayavg *= 0.5 
                elif self.last_gts_date < _mar_ts: 
                    _dayavg *= 0.75 
                self.gts_value += _dayavg
                if self.gts_value >= 200 and self.gts_date is None: 
                    self.gts_date = self.last_gts_date 

        # next day 
        self.last_gts_date += 86400 
        _loop_ct+=1 

    loginf("GTS %s, %s loops" % (self.gts_value,_loop_ct)) 


>>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/5670f1ab-2cab-4f23-bb86-948d4fc65ae1n%40googlegroups.com.

Reply via email to