47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
# environment/local_sensors.py
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
try:
|
|
import board
|
|
from adafruit_bme280 import basic as adafruit_bme280
|
|
except ImportError as e:
|
|
logger.warning(
|
|
f"BME280 dependencies not installed (Normal for test environments) | {e}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Error importing Raspberry Pi specific dependencies | {e}")
|
|
|
|
|
|
class Sensors:
|
|
def __init__(self):
|
|
self._bme280 = None
|
|
self._data = {}
|
|
try:
|
|
if "adafruit_bme280" in globals():
|
|
self._bme280 = adafruit_bme280.Adafruit_BME280_I2C(
|
|
board.I2C(), address=0x76
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"BME280 hardware not found on I2C bus! | {e}")
|
|
|
|
def _get_data(self):
|
|
if self._bme280 is None:
|
|
return
|
|
|
|
try:
|
|
self._data = {
|
|
"indoor_temp": round(self._bme280.temperature, 1),
|
|
"indoor_humidity": round(self._bme280.relative_humidity, 1),
|
|
"pressure": round(self._bme280.pressure, 1),
|
|
}
|
|
except Exception as e:
|
|
logger.error(f"Failed getting indoor sensor data: {e}")
|
|
|
|
def get(self) -> dict:
|
|
logger.debug("Measuring environment indoors...")
|
|
self._get_data()
|
|
return self._data
|