diff --git a/requirements.txt b/requirements.txt index a150cb9..8ab3505 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,11 @@ pycron redis -picamera +picamera; platform_machine=='armv7l' or platform_machine=='armv6l' Adafruit-Blinka adafruit-circuitpython-dht adafruit-circuitpython-mcp3xxx adafruit-circuitpython-bme680 +adafruit-circuitpython-debouncer>=1.3.7 smbus https://github.com/olixr/nanpy/archive/master.zip git+https://github.com/olixr/Adafruit_CircuitPython_CharLCD.git#egg=adafruit-circuitpython-charlcd diff --git a/sensors/linux/humidity_sensor.py b/sensors/linux/humidity_sensor.py index 85a3c67..d7c6641 100644 --- a/sensors/linux/humidity_sensor.py +++ b/sensors/linux/humidity_sensor.py @@ -1,14 +1,15 @@ import json -import sys import time -import board + import adafruit_dht +import board +from logger.Logger import Logger, LOG_LEVEL from sensors.linux.sensor import Sensor -from logger.Logger import Logger, LOG_LEVEL class HumiditySensor(Sensor): + sensor = adafruit_dht.DHT11 def __init__(self, pin, name=None, key=None, model='11', redis_conn=None): super().__init__(pin, name=name, key=key, redis_conn=redis_conn) @@ -26,26 +27,15 @@ def init_sensor(self): '22': adafruit_dht.DHT22, '2302': adafruit_dht.DHT22 } # AM2302 = DHT22 + if self.type in sensor_types: self.sensor = sensor_types[self.type] + else: Logger.log( LOG_LEVEL["warning"], 'Sensor Model Error: Defaulting to DHT11' ) - self.sensor = adafruit_dht.DHT11 - - try: - self.dht_device = self.sensor(self.pin_obj) - Logger.log( - LOG_LEVEL["debug"], - 'Sensor Initializing: DHT' - ) - except Exception as error: - Logger.log( - LOG_LEVEL["error"], - 'Sensor Initialize Error: DHT Failed to Init' - ) return def read(self): @@ -58,20 +48,25 @@ def read(self): humidity = None temperature_c = None - try: - # Calling temperature or humidity triggers measure() - temperature_c = self.dht_device.temperature - humidity = self.dht_device.humidity - except RuntimeError as error: - # Errors happen fairly often, DHT's are hard to read - Logger.log(LOG_LEVEL["error"], error) + # read_retry() not implemented in new lib + for i in range(15): + dht_device = self.sensor(self.pin_obj) time.sleep(2) - except Exception as error: - Logger.log( - LOG_LEVEL["error"], - 'DHT Device Encountered an Error.' - ) - self.dht_device.exit() + + try: + dht_device.measure() + temperature_c = dht_device.temperature + humidity = dht_device.humidity + if humidity is not None and temperature_c is not None: + break + + except RuntimeError: + # Errors happen fairly often, DHT's are hard to read, + # just keep going: + continue + + finally: + dht_device.exit() if humidity is not None and temperature_c is not None: self.r.set( @@ -87,6 +82,7 @@ def read(self): } self.r.set(self.key, json.dumps(readings)) return readings + else: Logger.log( LOG_LEVEL["error"], diff --git a/workers/linux/control_worker.py b/workers/linux/control_worker.py index 10d1c7d..53b28d3 100644 --- a/workers/linux/control_worker.py +++ b/workers/linux/control_worker.py @@ -36,7 +36,7 @@ def init(self): # conditionally include optional variables below if they exist control_kwargs = { 'name': control.get('name', None), - 'pin': int(control.get('pin')), + 'pin': control.get('pin'), 'key': control.get('key', None), 'topic': control.get('topic', None), 'resistor': control.get('resistor', None),