Skip to main content

CO2 monitoring with Prometheus

This reads from the CO2 Meter and makes it available as a Prometheus service. The core logic comes from this hackaday article.

Setup

Note this assumes you are running on a Raspberry Pi running Raspberry Pi OS (Bullseye/Trixie)

  1. Install Python 3
  2. Install the monitor with python3 -m pip install co2mini[homekit] (remove [homekit] if you don't use HomeKit)
  3. Set up CO2 udev rules by copying 90-co2mini.rules to /etc/udev/rules.d/90-co2mini.rules
  4. Set up the service by copying co2mini.service to /etc/systemd/system/co2mini.service
  5. (Optional) Put a configuration file (see Configuration section below) in /etc/co2mini.env
  6. Run systemctl enable co2mini.service

Configuration

The /etc/co2mini.env file contains the environment variables used to configure co2mini beyond the defaults. This is mostly necessary when enabling MQTT.

Example:

MQTT_ENABLED=true
MQTT_BROKER=localhost

MQTT/Home Assistant

The MQTT feature is meant to work with Home Assistant, although nothing bad will happen if you just want to use the MQTT messages directly.

When co2mini starts up, it will send out the discovery message that Home Assistant expects, as well as responding to homeassistant's status when coming online. Be sure those are enabled in the Home Assistant MQTT integration (usually is enabled by default) if you have any issues.

To configure co2mini, the following environment variables are available:

Variable Default Description
NAME co2mini This is used for the default display name of the device in Home Assistant
MQTT_ENABLED False Used to enable/disable sending information over MQTT
MQTT_BROKER localhost MQTT Broker hostname
MQTT_PORT 1883 MQTT broker port number (1883 is the standard MQTT broker port)
MQTT_USERNAME Username for authenticating to MQTT broker (leave blank if no authentication is needed)
MQTT_PASSWORD Password for authenticating to MQTT broker (leave blank if no authentication is needed)
MQTT_DISCOVERY_PREFIX homeassistant Prefix for sending MQTT discovery and state messages.
MQTT_RETAIN_DISCOVERY False Flag to enable setting retain=True on the discovery messages. You probably don't need this.
MQTT_OBJECT_ID co2mini_{HOSTNAME} Override for setting the object_id in Home Assistant. Default builds using the hostname of the device.

Homekit

If you have the homekit dependencies installed, on the first startup you will need to check the logs to get the setup code to integrate with Homekit. You can find the code using journalctl -u co2mini.service or possibly by checking the status with systemctl status co2mini.service.

Note also that it's sometimes possible that co2mini will have some errors logged and won't be reporting in Homekit anymore. If this happens, it seems like the easiest thing to do is to remove the device from your homekit, remove the accessory.state file in your home (rm accessory.state) and restart co2mini (sudo systemctl restart co2mini.service) to get a new code to pair.

Special notes for Dietpi users

  • Be sure to install Python3 pip as well (ID 130)
  • Make sure the dietpi user is in plugdev group (sudo usermod -aG plugdev dietpi)

Development

This project assumes you will use uv to configure the virtual environment and manage dependencies. Formatting and linting is handled with ruff. Pre-commit is using prek, though pre-commit would also work (be sure to install it separately).

Metadata

Release files for co2mini 0.5.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 co2mini 0.5.0
File Size Uploaded
co2mini-0.5.0.tar.gz 14.4 kB Details

Built distribution (wheel)

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

Total release size: 23.9 kB

Release files / co2mini-0.5.0.tar.gz

Download URL co2mini-0.5.0.tar.gz
Size 14.4 kB
Tags Source
SHA-256 checksum
How to use checksums
dd671566b423b2ed8873d3259bbd7269f0392fce84e9ca922919eaa6b485df08
BLAKE2b-256 checksum
How to use checksums
c951f0064026e3613bc4c63ab49d5775586940fa700f735beedef8976bad66d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 1, 2026.

Transparency log

Release files / co2mini-0.5.0-py3-none-any.whl

Download URL co2mini-0.5.0-py3-none-any.whl
Size 9.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8ee14b92c15ddfb76195652e641f225f6c0a6e50c5037941f7166d21a4aceb46
BLAKE2b-256 checksum
How to use checksums
74c774268f67e436386d3d09e423ddafffe18d511621cc7ff1d9028e965d226b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

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