Fix version (version bump in code)
[infoex-autowx.git] / infoex-autowx.py
index f05939412945b367b39167c53e5c4572793862eb..f1303f860f6485f2e33af512db3c0d58f7f83e09 100755 (executable)
@@ -43,7 +43,7 @@ import zeep
 import zeep.cache
 import zeep.transports
 
 import zeep.cache
 import zeep.transports
 
-__version__ = '3.3.1'
+__version__ = '3.4.0'
 
 LOG = logging.getLogger(__name__)
 LOG.setLevel(logging.NOTSET)
 
 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
         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'
     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
 
         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):
     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)
         #
         # 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 = hn24_values[0] - hn24_values[len(hn24_values)-1]
 
         if hn24 < 0.0:
+            hn24 = abs(hn24)
+        else:
             # this case represents HS settlement
             # this case represents HS settlement
-            #
-            # TODO: determine if InfoEx supports auto-stations reporting
-            #       HS settlement values
             hn24 = 0.0
 
             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) 
 
     if len(wind_speed_values) > 0:
         wind_speed_avg = sum(wind_speed_values) / len(wind_speed_values)