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.
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.
- Support other devices like Wave (Version 1).
- Add battery life support.
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.
You can install the library by running:
pip install wave-reader
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 ...
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.
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.