Air-Quality-Web/docs/05-API-Docs.md

8.9 KiB

API

The server-side API is accessed through api.php, and supports a number of GET parameters. On the main production instance, this can be found here.

The most important of these is the action parameter, Which determines what the API will do. The following values are supported:

Action Meaning
version Gets the version of Air Quality Web that's currently running.
fetch-data Fetches air quality data from the system for a specific data type at a specific date and time.
list-devices Fetches a list of devices currently in the system.
list-devices-near Lists the devices close to a given location (new since v0.11!)
device-info Gets (lots of) information about a single device.
list-reading-types Lists the different types of readings that can be specified.
device-data-bounds Gets the start and end DateTime bounds for the data recorded for a specific device.
device-data Gets data by device given a start and end time.
changelog Gets the changelog as a fragment of HTML.

These are explained in detail below. First though, a few notes:

  • All dates are in UTC.
  • All datetime-type fields support the keyword now.
  • Additional object properties MAY be returned by the API at a later date. Clients MUST ignore additional unknown properties they do not understand.
  • Clients SHOULD respect the cache-control headers returned by the API.

version

Returns the version of the application.

No parameters are currently supported by this action.

Examples:

https://example.com/path/to/api.php?action=version

fetch-data

Fetches air quality data from the system for a specific data type at a specific date and time.

Parameter Type Meaning
datetime date/time Required. Specifies the date and time for which readings are desired. For current data use the special keyword now.
reading_type string Required. Specifies the type of reading desired.
format string Optional. Specifies the format that the response will be returned in. Valid values: json, csv. Default: json.

Examples:

https://example.com/path/to/api.php?action=fetch-data&datetime=2019-01-03%2007:52:10&reading_type=PM10
https://example.com/path/to/api.php?action=fetch-data&datetime=now&reading_type=PM10

list-devices

Fetches a list of devices currently in the system.

Parameter Type Meaning
only-with-location bool Optional. If present only devices with a defined location will be returned. Useful for getting a list of devices to place on a map.
format string Optional. Specifies the format that the response will be returned in. Valid values: json, csv. Default: json.

Examples:

https://example.com/path/to/api.php?action=list-devices
https://example.com/path/to/api.php?action=list-devices&only-with-location=yes

list-devices-near

Lists devices close to a given location.

Remember: Don't forget that unlike most other API actions, this requires a POST request and not a GET! This is to preserve privacy, as the web server stores GET parameters along with request urls in the server logs.

GET Parameters

Parameter Type Meaning
count int Required. Specifies the number of devices to return.

POST Parameters

POST parameters should be specified as part of the request body. The request should have a content-type of application/x-www-form-urlencoded.

Parameter Type Meaning
latitude float Required. The latitude of the location to search for nearby devices.
longitude float Required. The longitude of the location to search for nearby devices.

Example HTTP Request

POST /api.php?action=list-devices-near&count=5 HTTP/1.1
host: airquality.example.com
content-length: 38
content-type: application/x-www-form-urlencoded

latitude=12.345678&longitude=98.765432

Response Object Properties

Since it may not be obvious, the properties returned in a response object are detailed below:

Property Meaning
id The device's unique id.
name The device's name. Should be unique, but don't count on it.
latitude The latitude of the device in question.
longitude The longitude of the aforementioned device.
distance_calc The distance between the specified point and the device, represented as the length of a relative (lat, long) vector between the 2. Should be accurate enough to get the devices in the right order with respect to the actual distance, but if not please open an issue
distance_actual The actual distance between the specified point and the device, in metres.

device-info

Gets (lots of) information about a single device.

Parameter Type Meaning
device-id int Required. The id of the device to get extended information for. See the list-device action for how to get a hold of one.

Examples:

list-reading-types

Lists the different types of readings that can be specified.

Parameter Type Meaning
device-id int Optional. If specified, this filters the list of measurement types to list only those reported by the device with the specified id.
format string Optional. Specifies the format that the response will be returned in. Valid values: json, csv. Default: json.
https://example.com/path/to/api.php?action=list-reading-types
https://example.com/path/to/api.php?action=list-reading-types&device-id=22
https://example.com/path/to/api.php?action=list-reading-types&device-id=54

device-data-bounds

Gets the start and end DateTime bounds for the data recorded for a specific device.

Parameter Type Meaning
device-id int Required. The id of the device to get the data DateTime bounds for.
https://example.com/path/to/api.php?action=device-data-bounds&device-id=18
https://example.com/path/to/api.php?action=device-data-bounds&device-id=11

device-data

Gets data by device given a start and end time.

Parameter Type Meaning
device-id int The id of the device to get data for.
reading-type string The type of reading to obtain data for.
start datetime The starting datetime, or the special keyword "now".
end datetime The ending datetime, or the special keyword "now".
average-seconds int Optional. If specified, readings will be grouped into lumps of this many seconds and averaged. For example a value of 3600 (1 hour) will return 1 data point per hour, with the value of each point an average of all the readings for that hour.
format string Optional. Specifies the format that the response will be returned in. Valid values: json, csv. Default: json.
https://example.com/path/to/api.php?action=device-data&device-id=18&reading-type=PM25&start=2019-01-19T18:14:59.992Z&end=2019-01-20T18:14:59.992Z
https://example.com/path/to/api.php?action=device-data&device-id=18&reading-type=PM25&start=2019-01-19T18:14:59.992Z&end=2019-01-20T18:14:59.992Z&average-seconds=3600
https://example.com/path/to/api.php?action=device-data&device-id=18&reading-type=PM25&start=2019-01-19T18:14:59.992Z&end=now&average-seconds=3600&format=csv
https://example.com/path/to/api.php?action=device-data&device-id=18&reading-type=PM25&start=2019-06-13T00:00:00&end=now&format=csv

device-data-recent

Gets a given number of the most recent readings for a specific device.

Parameter Type Meaning
device-id int The id of the device to get data for.
reading-type string The type of reading to obtain data for.
count int The number of recent readings to return.
format string Optional. Specifies the format that the response will be returned in. Valid values: json, csv. Default: json.
https://example.com/path/to/api.php?action=device-data-recent&device-id=21&reading-type=PM25&count=5
https://example.com/path/to/api.php?action=device-data-recent&device-id=36&reading-type=humidity&count=30

changelog

Gets the changelog as a fragment of HTML.

No parameters are currently supported by this action.

https://example.com/path/to/api.php?action=changelog