X-Git-Url: https://wylark.com/src/infoex-autowx.git/blobdiff_plain/6980e4fef8dad4b47cb03b879860b5981c1e67cc..1d5b976b9dfc1a208fe8725cdea20834618ab737:/infoex-autowx.py?ds=inline diff --git a/infoex-autowx.py b/infoex-autowx.py index 3d8762c..78c4d49 100755 --- a/infoex-autowx.py +++ b/infoex-autowx.py @@ -2,14 +2,15 @@ # -*- coding: utf-8 -*- """ -InfoEx <-> NRCS Auto Wx implementation +InfoEx <-> NRCS/MesoWest Auto Wx implementation Alexander Vasarab Wylark Mountaineering LLC -Version 1.0.0 +Version 2.0.0 -This program fetches data from an NRCS SNOTEL site and pushes it to -InfoEx using the new automated weather system implementation. +This program fetches data from either an NRCS SNOTEL site or MesoWest +weather station and pushes it to InfoEx using the new automated weather +system implementation. It is designed to be run hourly, and it asks for the last three hours of data of each desired type, and selects the most recent one. This @@ -56,10 +57,12 @@ except: log.addHandler(handler) parser = OptionParser() + parser.add_option("--config", dest="config", metavar="FILE", help="location of config file") + parser.add_option("--dry-run", action="store_true", dest="dry_run", @@ -109,6 +112,11 @@ try: 'PREC' # PRECIPITATION ACCUMULATION (in) ] + # XXX: For NRCS, we're manually overriding units for now! Once + # unit conversion is supported for NRCS, REMOVE THIS! + if 'units' not in data: + data['units'] = 'imperial' + if data['provider'] == 'mesowest': data['source'] = 'https://api.synopticdata.com/v2/stations/timeseries' data['station_id'] = config['station']['station_id'] @@ -189,10 +197,35 @@ if data['provider'] == 'nrcs': iemap['PREC'] = 'precipitationGauge' iemap['TOBS'] = 'tempPres' iemap['SNWD'] = 'hS' + iemap['PRES'] = 'baro' + iemap['RHUM'] = 'rH' + iemap['WSPD'] = 'windSpeedNum' + iemap['WDIR'] = 'windDirectionNum' + # unsupported by NRCS: + # windGustSpeedNum elif data['provider'] == 'mesowest': iemap['precip_accum'] = 'precipitationGauge' iemap['air_temp'] = 'tempPres' iemap['snow_depth'] = 'hS' + iemap['pressure'] = 'baro' + iemap['relative_humidity'] = 'rH' + iemap['wind_speed'] = 'windSpeedNum' + iemap['wind_direction'] = 'windDirectionNum' + iemap['wind_gust'] = 'windGustSpeedNum' + +# override units if user selected metric +# +# NOTE: to update this, use the fmap<->final_data mapping laid out above +# +# NOTE: this only 'works' with MesoWest for now, as the MesoWest API +# itself handles the unit conversion; in the future, we will also +# support NRCS unit conversion, but this must be done by this +# program. +if data['units'] == 'metric': + final_data[fmap['tempPresUnit']] = 'C' + final_data[fmap['hsUnit']] = 'm' + final_data[fmap['windSpeedUnit']] = 'm/s' + final_data[fmap['windGustSpeedNumUnit']] = 'm/s' # floor time to nearest hour dt = datetime.datetime.now()