Skip to main content

AQIMON

A simple Air Quality Index monitor, designed to work on the Raspberry Pi with the SDS011 Nova PM Sensor.

Screenshot

Screenshot

Installation

Pre-Requisites

  • Python 3.9+

Install

pip install aqimon

Running Aqimon

Aqimon is a simple web server. To start with all the defaults (assuming available SDS011 hardware on /dev/ttyUSB0), you can just run:

aqimon

And then go to your browser at http://{serveraddress}:8000/ to view the UI.

If you don't have the requisite SDS011 hardware, you can use a mock data source via a mock reader.

Configure With Systemd

Generally, you'd want to run Aqimon as an always-on service, using systemd.

To do so, create a file at /etc/systemd/system/aqimin.service with the following contents:

[Unit]
Description=AQIMON
After=multi-user.target

[Service]
Type=simple
Restart=always
ExecStart=aqimon

[Install]
WantedBy=multi-user.target

And then run:

sudo systemctl daemon-reload
sudo systemctl start aqimon

Configuration

Aqimon uses environment variables for configuration, but all values should ship with sensible defaults.

Variable Default Description
AQIMON_DB_PATH ~/.aqimon/db.sqlite The path to the database file, where read information is stored. It should be an absolute path; user home expansion is supported.
AQIMON_POLL_FREQUENCY_SEC 900 (15 minutes) Sets how frequently to read from the device, in seconds.
AQIMON_RETENTION_MINUTES 10080 (1 week) Sets how long data will be kept in the database, in minutes.
AQIMON_READER_TYPE NOVAPM The reader type to use, either NOVAPM or MOCK.
AQIMON_USB_PATH /dev/ttyUSB0 The path to the USB device for the sensor.
AQIMON_SLEEP_SEC_BETWEEN_READS 5 The number of seconds to wait for between each read in a set of reads.
AQIMON_SAMPLE_COUNT_PER_READ 5 The number of reads to take with each sample.
AQIMON_WARM_UP_SEC 15 The number of seconds to wait for the device to warm up before reading.
AQIMON_COMMAND_WAIT_TIME 1 The number of seconds to wait for the device respond to a command.
AQIMON_EPA_LOOKBACK_MIN 60*8 The number of minutes to look back at read data to calculate the EPA AQI.
AQIMON_SERVER_PORT 8000 The port to run the server on.
AQIMON_SERVER_HOST 0.0.0.0 The host to run the server on.

Contributing

Toolset

To start developing, you'll need to install the following tools:

Optionally, we have pre-commit hooks available as well. To install hooks, just run pre-commit install and then linters and autoformatting will be applied automatically on commit.

Quickstart

To build the project, and install all dev-dependencies, run:

just build

To start the server in develop mode, run:

poetry run aqimond

To compile elm changes, run:

just compile_elm

To manually run lint checks on the code, run:

just lint

To run auto-formatters, run:

just format

Using the Mock Reader

Aqimon ships with a mock reader class that you can use in the event that you don't have a reader available on your development computer. The mock reader just returns randomized reads. To use it, you can start the server like:

AQIMON_READER_TYPE=MOCK poetry run aqimon

Submitting a PR

Master branch is locked, but you can open a PR on the repo. Build checks must pass, and changes approved by a code owner, before merging.

Metadata

Release files for aqimon 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aqimon 0.6.0
File Size Uploaded
aqimon-0.6.0.tar.gz 183.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aqimon 0.6.0
File Interpreter ABI Platform
aqimon-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 368.9 kB

Release files / aqimon-0.6.0.tar.gz

Download URL aqimon-0.6.0.tar.gz
Size 183.8 kB
Tags Source
SHA-256 checksum
How to use checksums
ecc38dc45db668c7ad2e4f0f47eea662ce62ca3d4979c61fc572dffd8169e9d6
BLAKE2b-256 checksum
How to use checksums
8798c7fa3591bd9be848a897c81b4db0abce5a231d3cff6da8674f0208791282
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.11.0 Linux/5.15.0-1037-azure

Release files / aqimon-0.6.0-py3-none-any.whl

Download URL aqimon-0.6.0-py3-none-any.whl
Size 185.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0d1ebabfc373343a11b07c4decc210cf3d9669984418dd210f8cc09e86354a70
BLAKE2b-256 checksum
How to use checksums
5a7771ee5e5308e5bbaced887e03e68008d2d0ce921efea373aba7818d35298d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.5.1 CPython/3.11.0 Linux/5.15.0-1037-azure

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page