Merge branch 'custom_wx' into develop
[infoex-autowx.git] / README.md
index cda54b9a118d86ef34b4cfc0611209e3fe6df0d5..681feac7a7e0972b7c9fe82024c593bbec1332c7 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
 InfoEx AutoWx (IEAW)
 =============
 
 InfoEx AutoWx (IEAW)
 =============
 
-This program fetches data from an NRCS SNOTEL or MesoWest station and
-pushes it into the InfoEx system using the new automated weather system
-implementation.
+This program fetches data from an NRCS SNOTEL or MesoWest station, or
+your own custom data source, and pushes it into the InfoEx system using
+the new automated weather system implementation.
 
 
-License under the ISC license (see file: LICENSE).
+Licensed under the ISC license (see file: LICENSE).
 
 Disclaimer
 ----------
 
 Disclaimer
 ----------
@@ -35,18 +35,26 @@ This design allows you to run a separate program instance for each NRCS
 or MesoWest weather station from which you'd like to automate the
 importation of data into your InfoEx subscriber account.
 
 or MesoWest weather station from which you'd like to automate the
 importation of data into your InfoEx subscriber account.
 
+To get started, copy the included example config file
+(`config.ini.example` in the root source directoy) and modify the values
+for your own use.
+
 To run ad-hoc (be sure to activate the virtual environment, as detailed in the
 Installation section):
 
 `./infoex-autowx.py --config path/to/config-file.ini [--dry-run] [--log-level debug|info|warning]`
 
 To run ad-hoc (be sure to activate the virtual environment, as detailed in the
 Installation section):
 
 `./infoex-autowx.py --config path/to/config-file.ini [--dry-run] [--log-level debug|info|warning]`
 
-**NOTE: Specifying --dry-run will also not clean up the generated CSV
-file.** This is so that you can debug any issues more easily.
+**NOTE: Specifying --dry-run will not clean up the generated CSV file.**
+This is so that you can more easily debug any issues that arise in the
+setup process.
 
 You can also specify `--log-level` as debug, info, warning. The
 
 You can also specify `--log-level` as debug, info, warning. The
-resultant log messages will try to be logged to journald, but if that's
-not available, they will be printed to stdout. This output can be
-helpful early on in the setup process.
+log messages produced by the program will try to be logged to journald,
+but if that's not available, they will be printed to stdout. This output
+can be helpful early on in the setup process.
+
+Automation
+----------
 
 Here's an example of a crontab(5) with two SNOTEL sites, each of which
 will run once per hour (note that this will activate the virtual environment
 
 Here's an example of a crontab(5) with two SNOTEL sites, each of which
 will run once per hour (note that this will activate the virtual environment
@@ -70,11 +78,12 @@ weather station FTP server and other InfoEx-related configuration
 options.
 
 `[station]`  
 options.
 
 `[station]`  
-`type = # either mesowest or nrcs #`  
-`token = # MesoWest API token -- ignored when type is nrcs #`  
+`type = # mesowest, nrcs, or python #`  
+`token = # MesoWest API token -- only applies when type is mesowest #`  
 `station_id = # the NRCS/MesoWest identifier for a particular station #`  
 `desired_data = # a comma-delimited list of fields you're interested in #`  
 `station_id = # the NRCS/MesoWest identifier for a particular station #`  
 `desired_data = # a comma-delimited list of fields you're interested in #`  
-`units = # either english or metric -- ignored when type is nrcs #`  
+`units = # either english or metric -- only applies when type is mesowest #`  
+`path = # the filesystem path to the Python program -- only applies when type is python #`  
 
 `[infoex]`  
 `host = # InfoEx FTP host address #`  
 
 `[infoex]`  
 `host = # InfoEx FTP host address #`  
@@ -129,7 +138,7 @@ Once you've chosen your elements, combine all of their respective
 "elementCd" values into a comma-delimited string and put that into your
 configuration file as the `desired_data` value.
 
 "elementCd" values into a comma-delimited string and put that into your
 configuration file as the `desired_data` value.
 
-A complete example:
+A complete [station] section example:
 
 `[station]`  
 `type = nrcs`  
 
 `[station]`  
 `type = nrcs`  
@@ -165,12 +174,12 @@ you want to import data. Here are the steps to do that:
 
 https://developers.synopticdata.com/about/station-variables/
 
 
 https://developers.synopticdata.com/about/station-variables/
 
-The MesoWest API supports on-the-fly unit conversion, so that can be
-specified to infoex-autowx via the configuration option `units`. This
-can be either 'english' or 'metric', with 'english' meaning imperial
-units as used in the United States.
+The MesoWest API supports on-the-fly unit conversion. If desired, that
+can be specified to infoex-autowx via the configuration option `units`.
+This can be either 'english' or 'metric', with 'english' meaning
+imperial units as used in the United States.
 
 
-A complete example:
+A complete [station] section example:
 
 `[station]`  
 `type = mesowest`  
 
 `[station]`  
 `type = mesowest`  
@@ -183,6 +192,20 @@ indicates that I'd like to import "Temperature" and "Precipitation
 accumulated" from the MesoWest station at Santiam Pass, OR, into InfoEx,
 and that I want that data in imperial units.
 
 accumulated" from the MesoWest station at Santiam Pass, OR, into InfoEx,
 and that I want that data in imperial units.
 
+Custom weather station support
+------------------------------
+
+This program supports custom weather station data by allowing the user
+to specify the path to an external Python program. The external Python
+program should emit its data in the form expected by infoex-autowx.
+
+This is a powerful feature which enables the user to upload data from
+any source imaginable into InfoEx. Common examples are a local database
+or a remote web page which requires some custom parsing.
+
+Please see the program located at examples/custom-wx.example.py for a
+complete description of what's required.
+
 A note on supported measurements
 --------------------------------
 
 A note on supported measurements
 --------------------------------
 
@@ -192,7 +215,6 @@ weather station may not record them. In this case, the data will simply
 be ignored (i.e. it will NOT log "0" when there's no measurement
 available).
 
 be ignored (i.e. it will NOT log "0" when there's no measurement
 available).
 
-
 InfoEx provides a mechanism for inspecting your automated weather
 station data, so use that after setting this program up and compare it
 with the data you see in your web browser.
 InfoEx provides a mechanism for inspecting your automated weather
 station data, so use that after setting this program up and compare it
 with the data you see in your web browser.
@@ -218,6 +240,20 @@ wind\_speed
 wind\_direction  
 wind\_gust  
 
 wind\_direction  
 wind\_gust  
 
+**Custom Wx program**  
+*infoex-autowx expects a custom Wx data provider to provide at least one
+of the following:*  
+precipitationGauge  
+tempPres  
+tempMaxHour  
+tempMinHour  
+hS  
+baro  
+rH  
+windSpeedNum  
+windDirectionNum  
+windGustSpeedNum  
+
 Future plans
 ------------
 
 Future plans
 ------------
 
@@ -227,6 +263,26 @@ Future plans
 Version history
 ---------------
 
 Version history
 ---------------
 
+- 2.2.0 (Nov 2020)
+
+  Add support for Tmin/Tmax values (directly from MesoWest/NRCS).
+
+- 2.1.0 (Nov 2020)
+
+  Adjust precision of certain values before sending them to InfoEx.
+
+- 2.0.2 (Jul 2020)
+
+  Fix issues shown by pylint(1).
+
+- 2.0.1 (Jul 2020)
+
+  Major restructuring, but nothing which should impact the end user.
+
+  - Took the monolithic main () routine and broke it out into logical
+    components.
+  - Improved the names of variables.
+
 - 2.0.0 (Jul 2020)
 
   Implement MesoWest integration.
 - 2.0.0 (Jul 2020)
 
   Implement MesoWest integration.
@@ -235,6 +291,12 @@ Version history
   hence the major version bump. Such changes are not taken lightly but
   given the desire to support multiple data sources, were necessary.
 
   hence the major version bump. Such changes are not taken lightly but
   given the desire to support multiple data sources, were necessary.
 
+  Other minor changes include:
+
+  - New switches: --log-level and --version.
+  - Better documentation.
+  - Expanded supported measurement types (from three to eight, in number).
+
 - 1.0.0 (Jun 2020)
 
   First released version. Cleaned up the program and design.
 - 1.0.0 (Jun 2020)
 
   First released version. Cleaned up the program and design.