Source code for pi_portal.modules.integrations.gpio.components.dht11_sensor

"""DHT11 class."""

from typing import Any

from pi_portal.modules.integrations.gpio.components.bases import (
    temperature_sensor_base,
)
from pi_portal.modules.python.rpi import adafruit_dht, board


[docs]class DHT11(temperature_sensor_base.TemperatureSensorBase[adafruit_dht.DHT11]): """DHT11 Temperature Sensor class. :param: pin_number: The GPIO input number. :param pin_name: The name of this sensor in alerts and logs. """
[docs] def hook_board_pin(self) -> Any: """Retrieve the hardware location of the GPIO pin. :returns: The hardware pin location. """ return getattr(board, f"D{self.pin_number}")
[docs] def hook_setup_hardware(self) -> adafruit_dht.DHT11: """Retrieve the adafruit_dht sensor object for the DHT11. :returns: The hardware sensor interface. """ return adafruit_dht.DHT11( self.hook_board_pin(), use_pulseio=False, )
[docs] def hook_update_state( self, retries: int = 3, ) -> temperature_sensor_base.TypeTemperatureData: """Retrieve new state for the GPIO input. :param retries: The number of times to retry a failed sensor reading. :returns: The new GPIO state value. """ if retries < 1: return self.current_state try: temperature = self.hardware.temperature humidity = self.hardware.humidity except RuntimeError: return self.hook_update_state(retries - 1) return temperature_sensor_base.TypeTemperatureData( temperature=temperature, humidity=humidity, )