Official Site | Support | Changelog
This script is used by OpenSprinkler Unified Firmware to update the water level of the device. It also provides timezone information based on user location along with other local information (sunrise, sunset, daylights saving time, etc).
server.js is the primary file launching the API daemon.
routes/*.js contains all the endpoints for the API service. Currently, only two exists for weather adjustment and logging a PWS observation.
Installating a Local Weather Service
If you would like to choose between different Weather Providers (currently OpenWeatherMap and DarkSky are supported) or use your local PWS to provide the weather information used by OpenSprinkler then you can install and configure the Weather Service on a device within your own local network.
You will need a 24x7 "always on" machine to host the service (this can be a Windows or Linux machine or even a Raspberry Pi device) provided it supports the
For detailed instructions on setup and configuration of a local Weather Service running on a Raspberry Pi then click here
Connecting a Personal Weather Station to a Local Weather Service
If you are running a local instance of the Weather Service then you may be able to send the data directly from your PWS to the Weather Service avoiding any "cloud" based services. The weather data can then be used by the Weather Service to calculate Zimmerman based watering levels.
Options for PWS Owners
1 ) PWS supporting RESTfull output
Some PWS allow the user to specify a
GET request to send weather observations onto a local service for processing. For example, the MeteoBridge Pro allows for requests to be specified in a custom template that translates the PWS weather values and units into a format that the local Weather Service can accept. If available, the user documentation for the PWS should detail how to configure a custom GET request.
For more information on the RESTfull protocol click here
2 ) Networked PWS that support Weather Underground
Many PWS already support the Weather Underground format and can be connected to the user's home network to send data directly to the WU cloud service. For these PWS, it is possible to physically intercept the data stream heading to the WU cloud and redirect it to the Weather Service server instead.
To do this intercepting, you place a physical device - such as a Raspberry Pi - in-between the PWS and the home network. It is this "man-in-the-middle" device that will look for information heading from the PWS toward the WU cloud and redirect that information to the local Weather Service.
For more information on configuring a Raspberry Pi Zero W to act as a "Man In The Middle" solution follow these links:
- If you have a PWS that connects to your home network using an ethernet cable then click here
- If you have a PWS that connects to your home network via wifi then click here
3 ) PWS Supported By WeeWX
The WeeWX project provides a mechanism for OpenSprinkler owners to capture the data from many different manufacturer's PWS and to both store the information locally and to publish the data to a number of destinations. OpenSprinkler owners can use this solution to send their PWS weather observations onto a local Weather Service server.
For more information on the "WeeWX Solution" click here
4 ) Solutions for specific PWS (provided by OpenSprinkler Forum members)
- Davis Vantage: a solution for this PWS has been kindly provided by @rmloeb here
- Netatmo: instructions for configuring this PWS have been greatfully provided by @franzstein here
It is possible to build a self-contained docker image from this repository. It can then be used to run the service without installing any prerequisites or setting up systemd.
Building the Docker image
./build-docker.sh # run with -h for other options
The above will generate baselineEtoData (if not already done) and then build a complete opensprinkler-weather docker image.
Running the Docker image
docker create --name=osweather -p 3000:3000 --restart unless-stopped opensprinkler-weather docker start osweather # Instead of the above, use this for testing/troubleshooting by running it in the foreground: docker run --rm -it -p 3000:3000 opensprinkler-weather
Note: to expose a different port, change
-p 3000:3000 to, eg