### Navigation

- index
- modules |
- next |
- previous |
- pywws 13.10_r1085 documentation »
- Python programs and modules »

# 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)

  Upload weather data to weather services such as Weather Underground.

  Parameters: | params (`pywws.DataStore.params`) – pywws configuration. status (`pywws.DataStore.status`) – pywws status store. calib_data (`pywws.DataStore.calib_store`) – ‘calibrated’ data. service_name (string) – name of service to upload to.

  `encode_data`(data)

    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)

    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)

    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`()

    Get datetime of first ‘catchup’ record to send.

    Return type: | datetime

  `Upload`(catchup=True, live_data=None)

    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)

### Navigation

- index
- modules |
- next |
- previous |
- pywws 13.10_r1085 documentation »
- Python programs and modules »