Airrohr-mqtt is a Homeassistant compatible mqtt bridge for the Airrohr. It sets up a webserver that takes requests from the Airrohr and converts them into MQTT messages.
- Device advertisement via MQTT
- Updating sensor values via MQTT
- Configurable sensor properties
- SDS011 (
pm10
,pm25
) - BME280 (
temperature
,humidity
,pressure
)
Cargo brings most of the dependencies, however some libraries depend on native C libraries. On Debian based systems the following packages are required:
cmake
libssl-dev
pkg-config
The webserver is based on Rocket so it supports any
environment variables supported by Rocket. It will take the POST
requests
generated by the Airrohr under the /api
path.
Attention: The webserver does not support any authentication. Only make it accessible in trusted environments. Otherwise anyone is able to write any data into Homeassistant.
The server looks for a Settings.toml
file in the local directory. This file
contains the following keys:
server
: MQTT serveruser
: MQTT usernamepassword
: MQTT passwordsensors
: Sensors configuration file
An example configuration can be found in Settings.toml.def
.
The sensors are configured in sensors.json
. It is a map of Airrohr
sensors to Homeassistant sensors with additional information. E.g. the Airrohr sensor value
{"value_type": "BME280_temperature", "value": "23.50"}
will be transformed into a sensor configuration for Homeassistant to properly interpret the value received via MQTT:
{"BME280_temperature": {"class": "temperature", "unit": "°C", "value_template": "{{ value }}"}}
Additional sensors or different units can be configured without recompilation.
To configure your Airrohr enter the IP, domain and path into the custom API part of the API
configuration. The path should end on /api
but can also have a prefix if you're using a
reverse proxy.
To run the server just provide a Settings.toml
file and run
$ cargo run
By default it will listen to localhost:8000
.
One way to persist the execution, is to start it with systemd in the context of the current user.
An example configuration is provided in airrohr-mqtt.service.EXAMPLE
.
You want to copy this file to ~/.config/systemd/user/airrohr-mqtt.service
. Enable it with
systemctl --user enable airrohr-mqtt.service
, start with
systemctl --user start airrohr-mqtt.service
.
Console output can be observed by journalctl --user-unit airrohr-mqtt.service
.
In order to make it run, even when the user is not logged in, make sure to enable lingering.
You can use loginctl
like so: loginctl enable-linger
The bridge publishes a device per Airrohr with all of its sensors with the following topics:
homeassistant/sensor/airrohr-12345678/<sensor name>/config
The configuration will include the topic for the value of each sensor. They look as follows:
airrohr/airrohr-12345678/<sensor name>