From abd32a0b901030074523e00a3e158ad13216addb Mon Sep 17 00:00:00 2001
From: adrian-vlad <adrian-vlad@github.com>
Date: Thu, 24 Sep 2020 00:07:24 +0300
Subject: [PATCH] Added bme280 sensor module

---
 pi_mqtt_gpio/modules/bme280.py | 48 ++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 pi_mqtt_gpio/modules/bme280.py

diff --git a/pi_mqtt_gpio/modules/bme280.py b/pi_mqtt_gpio/modules/bme280.py
new file mode 100644
index 0000000..f9fb234
--- /dev/null
+++ b/pi_mqtt_gpio/modules/bme280.py
@@ -0,0 +1,48 @@
+from pi_mqtt_gpio.modules import GenericSensor
+
+
+REQUIREMENTS = ("smbus", "RPi.bme280")
+CONFIG_SCHEMA = {
+    "i2c_bus_num": dict(type="integer", required=True, empty=False),
+    "chip_addr": dict(type="integer", required=True, empty=False),
+}
+SENSOR_SCHEMA = {
+    "type": dict(
+        type="string",
+        required=False,
+        empty=False,
+        default="temperature",
+        allowed=["temperature", "humidity", "pressure"],
+    )
+}
+
+
+class Sensor(GenericSensor):
+    """
+    Implementation of Sensor class for the BME280 sensor.
+    """
+
+    def __init__(self, config):
+        import smbus
+        import bme280
+
+        self.bus = smbus.SMBus(config["i2c_bus_num"])
+        self.address = config["chip_addr"]
+        self.calib = bme280.load_calibration_params(self.bus, self.address)
+
+    def setup_sensor(self, config):
+        return True  # nothing to do here
+
+    def get_value(self, config):
+        """get the temperature, humidity or pressure value from the sensor"""
+        import bme280
+
+        data = bme280.sample(self.bus, self.address, self.calib)
+
+        if config["type"] == "temperature":
+            return data.temperature
+        if config["type"] == "humidity":
+            return data.humidity
+        if config["type"] == "pressure":
+            return data.pressure
+        return None
-- 
GitLab