Daemon for bme280 sensor reporting through MQTT on the raspberry pi under python3
This code uses the Pimoroni bme280-python code to scan the BME280 sensor attached to a raspberry pi and report the results over MQTT.
The daemon uses configparser() to read an .ini style file to get information on the MQTT server to contact. It is also possible to set the i2c address for the sensor, and provide measurement offsets. If elevation is provided (in meters), a sealevel pressure value is calculated and provided in the MQTT feed.
I am currently running this code on a raspberry pi zero W.
A systemd service file is also included and is part of the install process in the Makefile.
The following packages are required beyond stock python3.5 to get this running:
argparse
configparser
python-daemon
paho-mqtt
smbus2
pimoroni-bme280
You can install these using pip3 like so:
sudo pip3 install -r requirements.txt
Install the requirements in the root
enviroment, or whichever enviroment make sense for you. Currently I run the daemon as root for easy access to /dev/i2c
Run these commands from the repo's folder:
# Edit the configuration file, fill the values for the MQTT server, elevation (in meters) and offset values:
cp ./mqtt-example.ini ./mqtt.ini
vi ./mqtt.ini
sudo make install
sudo mv ./mqtt.ini /etc/mqtt.ini
sudo systemctl start bme280-mqtt
configparser has recently been upgraded past python3.5, but that's the latest version of python on jesse, so you may have to install it like so:
sudo pip3 install configparser==4.0.2
The following configuration yaml could be used with Home Assistant:
sensor:
- platform: mqtt
state_topic: 'environment/den/BME280_temperature'
unit_of_measurement: '°F'
name: 'Den Temperature'
- platform: mqtt
state_topic: 'environment/den/BME280_humidity'
unit_of_measurement: '% RH'
name: 'Den Humidity'
- platform: mqtt
state_topic: 'environment/den/BME280_pressure'
unit_of_measurement: 'hPa'
name: 'Den Pressure'
- platform: mqtt
state_topic: 'environment/den/BME280_sealevel_pressure'
unit_of_measurement: 'hPa'
name: 'Den Sealevel Pressure'
And for lovelace display:
cards:
- entities:
- entity: sensor.den_temperature
- entity: sensor.den_humidity
- entity: sensor.den_pressure
- entity: sensor.den_sealevel_pressure
title: Den BME280
type: entities