A Rust application that reads sensor data from TFA Dostmann AIRCO2NTROL devices and publishes the readings to an MQTT broker.
- Real-time monitoring of CO2, temperature, and humidity sensors
- MQTT integration for remote data collection
- Home Assistant auto-discovery support
Supported sensor readings:
- CO2: Parts per million (ppm)
- Temperature: Degrees Celsius (°C)
- Humidity: Percentage (%)
MQTT Payload Example
{
"time": "2025-01-01T12:00:00.000Z",
"co2": 400,
"temperature": 22.5,
"humidity": 45.2
}
Configuration is handled through environment variables:
MQTT_HOST
: MQTT broker hostnameMQTT_PORT
: MQTT broker port (default: 1883)MQTT_CLIENT_ID
: MQTT client identifier (default: airctrl_client)MQTT_USERNAME
: MQTT authentication username (optional)MQTT_PASSWORD
: MQTT authentication password (optional)MQTT_TOPIC
: MQTT topic for sensor data (default: airctrl/sensors)
HA_DISCOVERY_ENABLED
: Enable Home Assistant auto-discovery (default: true)HA_DISCOVERY_PREFIX
: Home Assistant discovery prefix (default: homeassistant)HA_OBJECT_ID
: Unique device identifier for Home Assistant (default: AirCtrlMqtt_7d269530)
- Supported air quality monitoring device (see above)
- MQTT broker for data collection
- Docker (for containerized deployment)
- (optional) Home Assistant MQTT
First, create a udev rule to create a stable device symlink. Create the file /etc/udev/rules.d/99-aircontrol.rules
:
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", SYMLINK+="aircontrol", MODE="0666"
Then reload udev rules:
sudo udevadm control --reload-rules
sudo udevadm trigger
Create a docker-compose.yml
file:
services:
airctrl-mqtt:
image: cupcaker/air-ctrl-mqtt:latest
container_name: airctrl-mqtt
environment:
- MQTT_HOST=your-mqtt-broker-host
- MQTT_PORT=1883
- MQTT_CLIENT_ID=airctrl_client
- MQTT_TOPIC=airctrl/sensors
- MQTT_USERNAME=your-username # Optional
- MQTT_PASSWORD=your-password # Optional
- HA_DISCOVERY_ENABLED=true
- HA_DISCOVERY_PREFIX=homeassistant
- HA_OBJECT_ID=AirCtrlMqtt_7d269530
devices:
- /dev/aircontrol:/dev/aircontrol
restart: unless-stopped
stop_grace_period: 2s
Update the environment variables with your MQTT broker settings, then run:
docker-compose up -d
Alternatively, run directly with Docker:
docker run -d \
--name airctrl-mqtt \
--device /dev/aircontrol:/dev/aircontrol \
-e MQTT_HOST=your-mqtt-broker-host \
-e MQTT_PORT=1883 \
-e MQTT_CLIENT_ID=airctrl_client \
-e MQTT_TOPIC=airctrl/sensors \
-e MQTT_USERNAME=your-username \
-e MQTT_PASSWORD=your-password \
-e HA_DISCOVERY_ENABLED=true \
-e HA_DISCOVERY_PREFIX=homeassistant \
-e HA_OBJECT_ID=AirCtrlMqtt_7d269530 \
--restart unless-stopped \
cupcaker/air-ctrl-mqtt:latest
The application automatically publishes device discovery information to Home Assistant via MQTT. Once running, your TFA AIRCO2NTROL device will appear in Home Assistant with three sensors:
- CO2 sensor (ppm)
- Temperature sensor (°C)
- Humidity sensor (%)
No manual configuration required - just ensure your Home Assistant MQTT integration is properly configured.
Thanks to DJE98 for the aircontrol crate!