summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
f41647a)
This commit cleans up the configuration file format expectations.
Whereas before there was separate [nrcs]/[mesowest] sections, there is
now one [station] section.
It also unifies the configuration options between the two in the config
file, as well as the code. Much cleaner and simpler.
Configuration File
------------------
Configuration File
------------------
-The configuration file is separated into two parts, the
-[nrcs]/[mesowest] portion, and the [infoex] portion.
+The configuration file is separated into two parts, the [station]
+portion, and the [infoex] portion.
-The [nrcs]/[mesowest] values describe which weather station's data
-you're after. See the next section in this README for instructions on
-obtaining these values.
+The [station] values describe which weather station's data you're after.
+See the next section in this README for instructions on obtaining these
+values.
The [infoex] values describe your credentials for the InfoEx automated
weather station FTP server and other InfoEx-related configuration
options.
The [infoex] values describe your credentials for the InfoEx automated
weather station FTP server and other InfoEx-related configuration
options.
-`[nrcs]`
-`station_triplet = [The NRCS identifier for a particular SNOTEL site]`
-`desired_data = [A comma-delimited list of NRCS elements you're interested in]`
+`[station]`
+`type = [Either mesowest or nrcs]`
+`token = [MesoWest API token -- ignored when type is nrcs]`
+`station_id = [The NRCS/MesoWest identifier for a particular station]`
+`desired_data = [A comma-delimited list of fields you're interested in]`
`[infoex]`
`host = [InfoEx FTP host address]`
`[infoex]`
`host = [InfoEx FTP host address]`
`csv_filename = [Arbitrary name of the file that will be uploaded to InfoEx]`
`location_uuid = [The UUID used by InfoEx to identify your automated Wx site]`
`csv_filename = [Arbitrary name of the file that will be uploaded to InfoEx]`
`location_uuid = [The UUID used by InfoEx to identify your automated Wx site]`
-Finding Your NRCS values
-------------------------
+Finding Your NRCS `station` values
+----------------------------------
-To complete the [nrcs] configuration section, you must fill in the
-attributes of the NRCS SNOTEL site from which you want to import data.
+To complete the [station] configuration section for an NRCS station, you
+must fill in the attributes of the NRCS SNOTEL site from which you want
+to import data.
Here are the steps to do that:
Here are the steps to do that:
4-digit number).
3. Combine your Station ID, state abbreviation, and the network type
4-digit number).
3. Combine your Station ID, state abbreviation, and the network type
- "SNTL" to get your station triplet (`station_triplet`, in the
+ "SNTL" to get your NRCS station triplet (`station_id`, in the
configuration file). For example:
655:OR:SNTL
configuration file). For example:
655:OR:SNTL
of Oregon (OR). SNTL just represents that the station is in the
SNOTEL network and is used internally by NRCS.
of Oregon (OR). SNTL just represents that the station is in the
SNOTEL network and is used internally by NRCS.
-Once you have your station triplet, fill in the field in your
-configuration file. Now you must select which data you'd like to pull
-from NRCS to push into InfoEx.
+Once you have your station ID, fill in the field in your configuration
+file. Now you must select which data you'd like to pull from NRCS to
+push into InfoEx.
For that, visit the NRCS web service:
For that, visit the NRCS web service:
-`station_triplet = 655:OR:SNTL`
+`station_id = 655:OR:SNTL`
`desired_data = TOBS,PREC`
indicates that I'd like to import "AIR TEMPERATURE OBSERVED" and
"PRECIPITATION ACCUMULATION" from the NRCS SNOTEL site at Mud Ridge, OR,
into InfoEx.
`desired_data = TOBS,PREC`
indicates that I'd like to import "AIR TEMPERATURE OBSERVED" and
"PRECIPITATION ACCUMULATION" from the NRCS SNOTEL site at Mud Ridge, OR,
into InfoEx.
-Finding your MesoWest values
-----------------------------
+Finding your MesoWest `station` values
+--------------------------------------
MesoWest has great documentation which can be found here:
https://developers.synopticdata.com/mesonet/v2/getting-started/
MesoWest has great documentation which can be found here:
https://developers.synopticdata.com/mesonet/v2/getting-started/
-To complete the [mesowest] configuration section, you must fill in the
-attributes of the MesoWest station ID from which you want to import
-data. Here are the steps to do that:
+To complete the [station] configuration section for a MesoWest station,
+you must fill in the attributes of the MesoWest station ID from which
+you want to import data. Here are the steps to do that:
1. Firstly, get set up with MesoWest's API by going to the above
'Getting Started' link. Once you're set up, you can copy a token from
1. Firstly, get set up with MesoWest's API by going to the above
'Getting Started' link. Once you're set up, you can copy a token from
+++ /dev/null
-[mesowest]
-token = <MesoWest token>
-stid = <MesoWest Station ID>
-desired_data = <Comma-separated list of MesoWest station variable names>
-units = <english|metric>
-
-[infoex]
-host = <InfoEx FTP host address>
-uuid = <InfoEx-supplied UUID>
-api_key = <InfoEx-supplied API Key>
-csv_filename = <Name of file to upload to InfoEx FTP>
-location_uuid = <InfoEx-supplied Location UUID>
+++ /dev/null
-[nrcs]
-station_triplet = <NRCS Station ID>
-desired_data = <Comma-separated list of NRCS elementCd values>
-
-[infoex]
-host = <InfoEx FTP host address>
-uuid = <InfoEx-supplied UUID>
-api_key = <InfoEx-supplied API Key>
-csv_filename = <Name of file to upload to InfoEx FTP>
-location_uuid = <InfoEx-supplied Location UUID>
--- /dev/null
+[station]
+type = # (mesowest|nrcs) #
+token = # MesoWest API token (ignored for NRCS) #
+station_id = # NRCS/MesoWest Station ID #
+desired_data = # Comma-separated list of values #
+units = # (english|metric) (ignored for NRCS) #
+
+[infoex]
+host = # InfoEx FTP host address #
+uuid = # InfoEx-supplied UUID #
+api_key = # InfoEx-supplied API Key #
+csv_filename = # Name of file to upload to InfoEx FTP #
+location_uuid = # InfoEx-supplied Location UUID #
+
config = configparser.ConfigParser(allow_no_value=False)
if not options.config:
config = configparser.ConfigParser(allow_no_value=False)
if not options.config:
- print("Please specify a configuration file via --config")
+ print("Please specify a configuration file via --config.")
sys.exit(1)
config.read(options.config)
sys.exit(1)
config.read(options.config)
-if 'nrcs' in config and 'mesowest' in config:
- print("Both MesoWest and NRCS configuration option specified, "
- "please choose just one.")
- sys.exit(1)
-
log.debug('STARTING UP')
try:
log.debug('STARTING UP')
try:
+ data['provider'] = config['station']['type']
+
+ if data['provider'] not in ['nrcs', 'mesowest']:
+ print("Please specify either nrcs or mesowest as the station type.")
+ sys.exit(1)
- if 'nrcs' in config:
- data['provider'] = 'nrcs'
+ if data['provider'] == 'nrcs':
data['source'] = 'https://www.wcc.nrcs.usda.gov/awdbWebService/services?WSDL'
data['source'] = 'https://www.wcc.nrcs.usda.gov/awdbWebService/services?WSDL'
- data['stationID'] = config['nrcs']['station_triplet']
+ data['station_id'] = config['station']['station_id']
- desired_data = config['nrcs']['desired_data'].split(',')
+ desired_data = config['station']['desired_data'].split(',')
except:
# desired_data malformed or missing, setting default
desired_data = [
except:
# desired_data malformed or missing, setting default
desired_data = [
'PREC' # PRECIPITATION ACCUMULATION (in)
]
'PREC' # PRECIPITATION ACCUMULATION (in)
]
- if 'mesowest' in config:
- data['provider'] = 'mesowest'
- #data['source'] = 'https://api.synopticdata.com/v2/stations/latest'
+ if data['provider'] == 'mesowest':
data['source'] = 'https://api.synopticdata.com/v2/stations/timeseries'
data['source'] = 'https://api.synopticdata.com/v2/stations/timeseries'
- data['stationID'] = config['mesowest']['stid']
- data['units'] = config['mesowest']['units']
+ data['station_id'] = config['station']['station_id']
+ data['units'] = config['station']['units']
- desired_data = config['mesowest']['desired_data']
+ desired_data = config['station']['desired_data']
except:
# desired_data malformed or missing, setting default
desired_data = 'air_temp,snow_depth'
except:
# desired_data malformed or missing, setting default
desired_data = 'air_temp,snow_depth'
- # construct full API URL
- data['source'] = data['source'] + '?token=' + config['mesowest']['token'] + '&within=60&units=' + data['units'] + '&stid=' + data['stationID'] + '&vars=' + desired_data
+ # construct full API URL (sans start/end time, added later)
+ data['source'] = data['source'] + '?token=' + config['station']['token'] + '&within=60&units=' + data['units'] + '&stid=' + data['station_id'] + '&vars=' + desired_data
except KeyError as e:
log.critical("%s not defined in %s" % (e, options.config))
except KeyError as e:
log.critical("%s not defined in %s" % (e, options.config))
fmap['hstAuto'] = 27 ; final_data[27] = None
fmap['hstAutoUnit'] = 28 ; final_data[28] = 'in'
fmap['hstAuto'] = 27 ; final_data[27] = None
fmap['hstAutoUnit'] = 28 ; final_data[28] = 'in'
-# one final mapping, the NRCS fields that this program supports to
+# one final mapping, the NRCS/MesoWest fields that this program supports to
# their InfoEx counterpart
iemap = {}
# their InfoEx counterpart
iemap = {}
# get the last three hours of data for this elementCd
tmp = client.service.getHourlyData(
# get the last three hours of data for this elementCd
tmp = client.service.getHourlyData(
- stationTriplets=[data['stationID']],
+ stationTriplets=[data['station_id']],
elementCd=elementCd,
ordinal=1,
beginDate=begin_date,
elementCd=elementCd,
ordinal=1,
beginDate=begin_date,