pywws.toservice

Post weather update to services such as Weather Underground

usage: python -m pywws.toservice [options] data_dir service_name
options are:
 -h or --help     display this help
 -c or --catchup  upload all data since last upload
 -v or --verbose  increase amount of reassuring messages
data_dir is the root directory of the weather data
service_name is the service to upload to, e.g. underground

Introduction

Several organisations allow weather stations to upload data using a simple HTTP ‘POST’ or ‘GET’ request, with the data encoded as a sequence of key=value pairs separated by & characters.

This module enables pywws to upload readings to these organisations. It is highly customisable using configuration files. Each ‘service’ requires a configuration file and two templates in pywws/services (that should not need to be edited by the user) and a section in weather.ini containing user specific data such as your site ID and password.

There are currently six services for which configuration files have been written.

organisation service name config file
UK Met Office metoffice ../../pywws/services/metoffice.ini
Open Weather Map openweathermap ../../pywws/services/openweathermap.ini
PWS Weather pwsweather ../../pywws/services/pwsweather.ini
Stacja Pogody stacjapogodywawpl ../../pywws/services/stacjapogodywawpl.ini
temperatur.nu temperaturnu ../../pywws/services/temperaturnu.ini
Weather Underground underground ../../pywws/services/underground.ini
wetter.com wetterarchivde ../../pywws/services/wetterarchivde.ini

Configuration

If you haven’t already done so, visit the organisation’s web site and create an account for your weather station. Make a note of any site ID and password details you are given.

Stop any pywws software that is running and then run toservice to create a section in weather.ini:

python -m pywws.toservice data_dir service_name

service_name is a single word service name, such as metoffice, data_dir is your weather data directory, as usual.

Edit weather.ini and find the section corresponding to the service name, e.g. [underground]. Copy your site details into this section, for example:

[underground]
password = secret
station = ABCDEFG1A

Now you can test your configuration:

python -m pywws.toservice -vvv data_dir service_name

This should show you the data string that is uploaded. Any failure should generate an error message.

Upload old data

Now you can upload your last 7 days’ data, if the service supports it. Edit your status.ini file and remove the appropriate line from the last update section, then run toservice with the catchup option:

python -m pywws.toservice -cvv data_dir service_name

This may take 20 minutes or more, depending on how much data you have.

Add service(s) upload to regular tasks

Edit your weather.ini again, and add a list of services to the [live], [logged], [hourly], [12 hourly] or [daily] section, depending on how often you want to send data. For example:

[live]
twitter = []
plot = []
text = []
services = ['underground_rf']

[logged]
twitter = []
plot = []
text = []
services = ['metoffice', 'stacjapogodywawpl']

[hourly]
twitter = []
plot = []
text = []
services = ['underground']

Note that the [live] section is only used when running LiveLog. It is a good idea to repeat any service selected in [live] in the [logged] or [hourly] section in case you switch to running Hourly.

Restart your regular pywws program (Hourly or LiveLog) and visit the appropriate web site to see regular updates from your weather station.

API

Functions

ApplicationLogger(verbose[, logfile])
main([argv])

Classes

SafeConfigParser([defaults, dict_type, ...])
ToService(params, status, calib_data, ...) Upload weather data to weather services such as Weather
datetime datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
timedelta Difference between two datetime values.
class pywws.toservice.ToService(params, status, calib_data, service_name)[source]

Upload weather data to weather services such as Weather Underground.

Parameters:
encode_data(data)[source]

Encode a weather data record.

The data parameter contains the data to be encoded. It should be a ‘calibrated’ data record, as stored in pywws.DataStore.calib_store.

Parameters:data (dict) – the weather data record.
Returns:urlencoded data.
Return type:string
send_data(coded_data)[source]

Upload a weather data record.

The coded_data parameter contains the data to be uploaded. It should be a urlencoded string.

Parameters:coded_data – the data to upload.
Returns:success status
Return type:bool
next_data(start, live_data)[source]

Get weather data records to upload.

This method returns either the most recent weather data record, or all records since a given datetime, according to the value of start.

Parameters:
  • start (datetime) – datetime of first record to get, or None to get most recent data only.
  • live_data (dict) – a current ‘live’ data record, or None.
Returns:

yields weather data records.

Return type:

dict

set_status(timestamp)
catchup_start()[source]

Get datetime of first ‘catchup’ record to send.

Return type:datetime
Upload(catchup=True, live_data=None)[source]

Upload one or more weather data records.

This method uploads either the most recent weather data record, or all records since the last upload (up to 7 days), according to the value of catchup.

It sets the last update configuration value to the time stamp of the most recent record successfully uploaded.

Parameters:catchup (bool) – upload all data since last upload.
Returns:success status
Return type:bool
pywws.toservice.main(argv=None)[source]

Table Of Contents

Previous topic

pywws.ToTwitter

Next topic

pywws.YoWindow