Skip to main content

A unofficial package for Airthings Wave communication.

Project description

Build Status codecov PyPI version

Summary

This is an unofficial Airthings Wave library designed to provide software developers a more developer-friendly library for BTLE handling for Airthings Wave devices. This library wouldn't be possible without the documentation and scripts available by Airthings. I hope to continue making updates through Airthings continued open-source contributions.

This library uses bleak as a dependency instead of bluepy for platform cross-compatibility and support for asynchronous operation.

This project is currently in alpha state.

Goals

These are the goals for this project, in no particular order:

  • Support platform cross-compatibility. Windows, Mac and Linux.
  • Support WavePlus, Wave (Version 2) and Wave Mini devices.
  • Support operation across multiple devices asynchronously.
  • Code testing, linting, type hinting, formatting and coverage reporting.
  • Discover all Wave devices or inherit WaveDevice class for sensor readings.
  • Add battery life support.
  • Implement reconnection logic for BTLE client.
  • Support other devices like Wave (Version 1) and more.

Requirements

In Ubuntu Linux, make sure you have libglib2.0-dev and bluez installed:

sudo apt-get install libglib2.0-dev bluez -y

In theory, other platforms (Windows, Mac) are supported by using bleak as a dependency, but open a ticket if you run into any issues.

Installation

You can install the library by running:

pip install wave-reader

Example Usage

There are various concrete examples available in the examples directory. This includes CLI interaction and other scnearios that demonstrate API usage.

import asyncio

from wave_reader import discover_devices

if __name__ == "__main__":
    # Event loop to run asynchronous tasks.
    loop = asyncio.get_event_loop()
    # Scan for BTLE Wave devices.
    devices = loop.run_until_complete(discover_devices())
    # Get sensor readings from available wave devices.
    for device in devices:
        sensor_readings = loop.run_until_complete(device.get_sensor_values())
        print(sensor_readings)

# >>> DeviceSensors (humidity: 32.5, radon_sta: 116, radon_lta: 113 ...

Testing

You can run the entire test suite by running tox. It will run flake8, isort and pytest. If you'd like to just run unit tests, running pytest ./tests is sufficient.

Special Thanks

I'd like to thank Airthings for their open-source work and commitment to air quality. Radon and other air pollutants often go unnoticed, so knowledge (really) is power here.

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

wave-reader-0.0.3.tar.gz (6.4 kB view hashes)

Uploaded Source

Built Distribution

wave_reader-0.0.3-py3-none-any.whl (6.9 kB view hashes)

Uploaded Python 3

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