X-Git-Url: https://wylark.com/src/infoex-autowx.git/blobdiff_plain/bfef0fa925cf5c02e220f93e7aa14f998ca2590e..cc8965dec8a376198391d05bebd97c06587d8c1b:/infoex-autowx.py diff --git a/infoex-autowx.py b/infoex-autowx.py index ab39f87..f1303f8 100755 --- a/infoex-autowx.py +++ b/infoex-autowx.py @@ -43,7 +43,7 @@ import zeep import zeep.cache import zeep.transports -__version__ = '3.3.0' +__version__ = '3.4.0' LOG = logging.getLogger(__name__) LOG.setLevel(logging.NOTSET) @@ -430,6 +430,10 @@ def setup_infoex_counterparts_mapping(provider): iemap['WDIR'] = 'windDirectionNum' # unsupported by NRCS: # windGustSpeedNum + + # NOTE: this doesn't exist in NRCS SNOTEL, we create it in this + # program, so add it to the map here + iemap['hn24'] = 'hn24Auto' elif provider == 'mesowest': iemap['precip_accum'] = 'precipitationGauge' iemap['air_temp'] = 'tempPres' @@ -499,6 +503,43 @@ def get_nrcs_data(begin, end, station): else: remote_data[element_cd] = None + + # calc hn24, if applicable + hn24 = None + + if station['hn24']: + hn24_values = [] + + if element_cd == "SNWD": + for idx, _ in enumerate(values): + val = values[idx] + if val is None: + continue + hn24_values.append(val['value']) + + if len(hn24_values) > 0: + # instead of taking MAX - MIN, we want the first + # value (most distant) - the last value (most + # recent) + # + # if the result is positive, then we have + # settlement; if it's not, then we have HN24 + hn24 = hn24_values[0] - hn24_values[len(hn24_values)-1] + + if hn24 < 0.0: + hn24 = abs(hn24) + else: + # this case represents HS settlement + hn24 = 0.0 + + # finally, if user wants hn24 and it's set to None at this + # point, then force it to 0.0 + if hn24 is None: + hn24 = 0.0 + + if hn24 is not None: + remote_data['hn24'] = hn24 + return remote_data def get_mesowest_data(begin, end, station): @@ -630,18 +671,22 @@ def get_mesowest_data(begin, end, station): # instead of taking MAX - MIN, we want the first value (most # distant) - the last value (most recent) # - # if the result is positive, then we have HN24; if it's not, - # then we have settlement - #hn24 = max(hn24_values) - min(hn24_values) + # if the result is positive, then we have settlement; if it's not, + # then we have HN24 hn24 = hn24_values[0] - hn24_values[len(hn24_values)-1] if hn24 < 0.0: + hn24 = abs(hn24) + else: # this case represents HS settlement - # - # TODO: determine if InfoEx supports auto-stations reporting - # HS settlement values hn24 = 0.0 + + # finally, if user wants hn24 and it's set to None at this + # point, then force it to 0.0 + if station['hn24'] and hn24 is None: + hn24 = 0.0 + if len(wind_speed_values) > 0: wind_speed_avg = sum(wind_speed_values) / len(wind_speed_values)