| Crates.io | apollo-air1-exporter |
| lib.rs | apollo-air1-exporter |
| version | 0.0.9 |
| created_at | 2025-07-22 16:25:24.610728+00 |
| updated_at | 2025-07-23 18:04:43.041875+00 |
| description | Prometheus exporter for Apollo AIR-1 air quality monitors |
| homepage | https://github.com/rvben/apollo-air1-exporter |
| repository | https://github.com/rvben/apollo-air1-exporter |
| max_upload_size | |
| id | 1763705 |
| size | 114,441 |
A Prometheus exporter for Apollo Air-1 air quality monitors (ESPHome-based devices).
The exporter provides the following metrics (when available on the device):
apollo_air1_device_up - Device availability (1 = up, 0 = down)apollo_air1_co2_ppm - CO2 concentration in parts per millionapollo_air1_pm1_0_ugm3 - PM1.0 particulate matter in µg/m³apollo_air1_pm2_5_ugm3 - PM2.5 particulate matter in µg/m³apollo_air1_pm10_0_ugm3 - PM10 particulate matter in µg/m³apollo_air1_voc_index - Volatile Organic Compounds indexapollo_air1_nox_index - Nitrogen Oxides indexapollo_air1_temperature_celsius - Temperature in degrees Celsiusapollo_air1_humidity_percent - Relative humidity percentageapollo_air1_pressure_hpa - Atmospheric pressure in hectopascalsapollo_air1_illuminance_lux - Light level in luxapollo_air1_esp_temperature_celsius - ESP32 internal temperatureapollo_air1_wifi_rssi_dbm - WiFi signal strength in dBmAll metrics include device and host labels for identification.
The exporter is configured via environment variables:
APOLLO_HOSTS (required) - Comma-separated list of device URLs (e.g., http://192.168.1.100,http://192.168.1.101)APOLLO_NAMES (optional) - Comma-separated list of device names (same order as hosts)APOLLO_EXPORTER_PORT (default: 9926) - Port to expose metrics onAPOLLO_EXPORTER_BIND (default: 0.0.0.0) - Bind address for metrics serverAPOLLO_POLL_INTERVAL (default: 30) - Poll interval in secondsAPOLLO_HTTP_TIMEOUT (default: 10) - HTTP timeout in secondsAPOLLO_LOG_LEVEL (default: info) - Log level (trace, debug, info, warn, error)Pull the pre-built multi-architecture image from Docker Hub:
docker pull rvben/apollo-air1-exporter:latest
Run with Docker:
docker run -d \
--name apollo-air1-exporter \
-p 9926:9926 \
-e APOLLO_HOSTS="http://192.168.1.100,http://192.168.1.101" \
-e APOLLO_NAMES="Living Room,Bedroom" \
rvben/apollo-air1-exporter:latest
git clone https://github.com/rvben/apollo-air1-exporter.git
cd apollo-air1-exporter
cargo build --release
# Single device
APOLLO_HOSTS="http://192.168.1.100" ./target/release/apollo-air1-exporter
# Multiple devices with names
APOLLO_HOSTS="http://192.168.1.100,http://192.168.1.101" \
APOLLO_NAMES="Living Room,Bedroom" \
./target/release/apollo-air1-exporter
version: '3'
services:
apollo-air1-exporter:
build: .
ports:
- "9926:9926"
environment:
- APOLLO_HOSTS=http://192.168.1.100,http://192.168.1.101
- APOLLO_NAMES=Living Room,Bedroom
- APOLLO_POLL_INTERVAL=30
- APOLLO_LOG_LEVEL=info
restart: unless-stopped
/metrics - Prometheus metrics/health - Health check endpoint/ - Welcome pagecargo build --release
Add the following to your prometheus.yml:
scrape_configs:
- job_name: 'apollo_air1'
static_configs:
- targets: ['localhost:9926']
Same as the other exporters in this repository.