mirror of
https://github.com/markqvist/Sideband.git
synced 2025-03-13 17:26:28 -04:00
Added BME280 telemetry plugin
This commit is contained in:
parent
fbd5896856
commit
3faa7e2203
67
docs/example_plugins/bme280_telemetry.py
Normal file
67
docs/example_plugins/bme280_telemetry.py
Normal file
@ -0,0 +1,67 @@
|
||||
# This plugin provides temperature, humidity
|
||||
# and pressure data via a BME280 sensor
|
||||
# connected over I2C. The plugin requires
|
||||
# the "smbus2" and "RPi.bme280" modules to
|
||||
# be available on your system. These can be
|
||||
# installed with:
|
||||
#
|
||||
# pip install smbus2 RPi.bme280
|
||||
|
||||
import os
|
||||
import RNS
|
||||
from importlib.util import find_spec
|
||||
|
||||
class BME280Plugin(SidebandTelemetryPlugin):
|
||||
plugin_name = "telemetry_bme280"
|
||||
|
||||
I2C_ADDRESS = 0x76
|
||||
I2C_BUS = 1
|
||||
|
||||
# If your BME280 has an offset from the true
|
||||
# temperature, you can compensate for this
|
||||
# by modifying this parameter.
|
||||
TEMPERATURE_CORRECTION = 0.0
|
||||
|
||||
def start(self):
|
||||
RNS.log("BME280 telemetry plugin starting...")
|
||||
|
||||
if find_spec("smbus2"): import smbus2
|
||||
else: raise OSError(f"No smbus2 module available, cannot start BME280 telemetry plugin")
|
||||
|
||||
if find_spec("bme280"): import bme280
|
||||
else: raise OSError(f"No bme280 module available, cannot start BME280 telemetry plugin")
|
||||
|
||||
self.sensor_connected = False
|
||||
|
||||
try:
|
||||
self.bme280 = bme280
|
||||
self.address = self.I2C_ADDRESS
|
||||
self.bus = smbus2.SMBus(self.I2C_BUS)
|
||||
self.calibration = self.bme280.load_calibration_params(self.bus, self.address)
|
||||
self.sensor_connected = True
|
||||
self.tc = self.TEMPERATURE_CORRECTION
|
||||
|
||||
except Exception as e:
|
||||
RNS.log(f"Could not connect to I2C device while starting BME280 telemetry plugin", RNS.LOG_ERROR)
|
||||
RNS.log(f"The contained exception was: {e}", RNS.LOG_ERROR)
|
||||
|
||||
super().start()
|
||||
|
||||
def stop(self):
|
||||
self.bus.close()
|
||||
super().stop()
|
||||
|
||||
def update_telemetry(self, telemeter):
|
||||
if telemeter != None:
|
||||
if self.sensor_connected:
|
||||
try:
|
||||
sample = self.bme280.sample(self.bus, self.address, self.calibration); ts = telemeter.sensors
|
||||
telemeter.synthesize("temperature"); ts["temperature"].data = {"c": round(sample.temperature+self.tc,1)}
|
||||
telemeter.synthesize("humidity"); ts["humidity"].data = {"percent_relative": round(sample.humidity,1)}
|
||||
telemeter.synthesize("pressure"); ts["pressure"].data = {"mbar": round(sample.pressure,1)}
|
||||
|
||||
except Exception as e:
|
||||
RNS.log("An error occurred while updating BME280 sensor data", RNS.LOG_ERROR)
|
||||
RNS.log(f"The contained exception was: {e}", RNS.LOG_ERROR)
|
||||
|
||||
plugin_class = BME280Plugin
|
Loading…
x
Reference in New Issue
Block a user