Skip to main content

Retrieve air quality data from the Clarity.io API

Project description

clarityio

This package wraps the API for Clarity air quality sensors. It makes calls to v2 of the API, which as of August 2024 is the newest version of the API.

Development status

This package is in beta status. Some functionality is still missing, but it is being used in production at the City of Ann Arbor.

Implemented endpoints

  • Recent measurements: POST {baseUrl}/v2/recent-datasource-measurements-query
  • Per-Org Datasources summary: GET {baseURl}/v2/datasources
  • Per-Datasource details: GET {baseURl}/v2/datasources/:datasourceId

Not yet implemented

  • Continuations
  • Historical measurements
  • All other endpoints.

Installation

Install from PyPI:

pip install clarityio

Usage

Initialize API connection

Find your API key and org in your Clarity.io user profile. Log in at https://dashboard.clarity.io, then click the person icon on the top-right corner.

Use these values to initialize a connection:

import clarityio
import pandas as pd
api_connection = clarityio.ClarityAPIConnection(api_key='YOUR_API_KEY', org='YOUR_ORG')

Both of these values are required to make calls to the Clarity API and are appended as needed by this package.

Retrieve recent measurements

See API docs for valid arguments to pass, e.g., retrieve daily data instead of hourly.

The default value of format is json-long, which returns the data in long format (one row per combination of metric and time). Here is such a call:

request_body = {
        'allDatasources': True,
        'outputFrequency': 'hour',
        'format': 'json-long',
        'startTime': '2024-07-22T00:00:00Z'
}
response = api_connection.get_recent_measurements(data=request_body)
df = pd.DataFrame(response['data'])

To get the data in wide format, with one row per timestamp and each metric in its own column, use the csv-wide format option and convert to a pandas dataframe:

request_body = {
        'allDatasources': True,
        'outputFrequency': 'hour',
        'format': 'csv-wide',
        'metricSelect': 'only pm2_5ConcMass24HourRollingMean' # Refer to API documentation for metric selection
}
response_wide = api_connection.get_recent_measurements(data=request_body)
from io import StringIO
df_wide = pd.read_csv(StringIO(response_wide), sep=",")

List data sources

datasources_response = api_connection.get_datasources()
datasources = pd.json_normalize(datasources_response['datasources'])

Get details for a specific data source

Obtain the IDs from the prior block of code.

source_details_response = api_connection.get_datasource_details('A_DATA_SOURCE_ID')
source_details = pd.json_normalize(source_details_response['datasource'])

Convert a raw measurement to the EPA AQI scale

The Clarity API provides some of these values, but this utility function offers more flexibility for custom data processing.

clarityio.scale_raw_to_aqi('pm2.5_24hr', 18.84) # 69.14676806083651
clarityio.scale_raw_to_aqi('nitrogen_dioxide_1hr', 300) # 138.64864864864865

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clarityio-0.3.0.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

clarityio-0.3.0-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file clarityio-0.3.0.tar.gz.

File metadata

  • Download URL: clarityio-0.3.0.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for clarityio-0.3.0.tar.gz
Algorithm Hash digest
SHA256 6559f8e916fa5b2dde72312b9bf8bdd483ba2c1f9c4bb86bff3ca55cd752ee12
MD5 eff6a86ecd64c7c1a0ac29c215f0fe6b
BLAKE2b-256 73d621d156c37fe40b5e70b3ed6203a4c6f062c8c34ba29745abcffc0163b112

See more details on using hashes here.

File details

Details for the file clarityio-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: clarityio-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for clarityio-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a8663ae8c23ba34a4c3d925f60f7898b0d61c9d23b3a3498e54ebc6554adbed
MD5 c102ca63b8fc6545f8748a516913dbf5
BLAKE2b-256 74df428467c136cf8e7c3c787ce7145a87d495c6f5328c73ae2106c9451389dc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page