forked from platypush/platypush
Migrated dht
integration.
Removed `backend.sensor.dht` and `gpio.sensor.dht`. They have been merged into the new `sensor.dht` integration, which supports the new `SensorPlugin` API.
This commit is contained in:
parent
8f604445a2
commit
beff88986a
6 changed files with 150 additions and 149 deletions
|
@ -1,37 +0,0 @@
|
||||||
from platypush.backend.sensor import SensorBackend
|
|
||||||
|
|
||||||
|
|
||||||
class SensorDhtBackend(SensorBackend):
|
|
||||||
"""
|
|
||||||
Backend to poll a DHT11/DHT22/AM2302 temperature/humidity sensor.
|
|
||||||
|
|
||||||
Requires:
|
|
||||||
|
|
||||||
* ``Adafruit_Python_DHT`` (``pip install git+https://github.com/adafruit/Adafruit_Python_DHT.git``)
|
|
||||||
* The ``gpio.sensor.dht`` plugin configured and enabled.
|
|
||||||
|
|
||||||
Triggers:
|
|
||||||
|
|
||||||
* :class:`platypush.message.event.sensor.SensorDataChangeEvent` if the measurements of a sensor have changed
|
|
||||||
* :class:`platypush.message.event.sensor.SensorDataAboveThresholdEvent` if the measurements of a sensor have
|
|
||||||
gone above a configured threshold
|
|
||||||
* :class:`platypush.message.event.sensor.SensorDataBelowThresholdEvent` if the measurements of a sensor have
|
|
||||||
gone below a configured threshold
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, temperature: bool = True, humidity: bool = True, **kwargs):
|
|
||||||
"""
|
|
||||||
:param temperature: Enable temperature sensor poll.
|
|
||||||
:param humidity: Enable humidity sensor poll.
|
|
||||||
"""
|
|
||||||
|
|
||||||
enabled_sensors = {
|
|
||||||
'humidity': humidity,
|
|
||||||
'temperature': temperature,
|
|
||||||
}
|
|
||||||
|
|
||||||
super().__init__(plugin='gpio.sensor.dht', enabled_sensors=enabled_sensors, **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
|
|
@ -1,13 +0,0 @@
|
||||||
manifest:
|
|
||||||
events:
|
|
||||||
platypush.message.event.sensor.SensorDataAboveThresholdEvent: if the measurements
|
|
||||||
of a sensor havegone above a configured threshold
|
|
||||||
platypush.message.event.sensor.SensorDataBelowThresholdEvent: if the measurements
|
|
||||||
of a sensor havegone below a configured threshold
|
|
||||||
platypush.message.event.sensor.SensorDataChangeEvent: if the measurements of a
|
|
||||||
sensor have changed
|
|
||||||
install:
|
|
||||||
pip:
|
|
||||||
- Adafruit_Python_DHT
|
|
||||||
package: platypush.backend.sensor.dht
|
|
||||||
type: backend
|
|
|
@ -1,92 +0,0 @@
|
||||||
from typing import Optional, Dict
|
|
||||||
|
|
||||||
from platypush.plugins import action
|
|
||||||
from platypush.plugins.gpio.sensor import GpioSensorPlugin
|
|
||||||
|
|
||||||
|
|
||||||
class GpioSensorDhtPlugin(GpioSensorPlugin):
|
|
||||||
"""
|
|
||||||
Plugin to interact with a DHT11/DHT22/AM2302 temperature/humidity sensor through GPIO.
|
|
||||||
|
|
||||||
Requires:
|
|
||||||
|
|
||||||
* ``Adafruit_Python_DHT`` (``pip install git+https://github.com/adafruit/Adafruit_Python_DHT.git``)
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, sensor_type: str, pin: int, retries: int = 5,
|
|
||||||
retry_seconds: int = 2, **kwargs):
|
|
||||||
"""
|
|
||||||
:param sensor_type: Type of sensor to be used (supported types: DHT11, DHT22, AM2302).
|
|
||||||
:param pin: GPIO PIN where the sensor is connected.
|
|
||||||
:param retries: Number of retries in case of failed read (default: 5).
|
|
||||||
:param retry_seconds: Number of seconds to wait between retries (default: 2).
|
|
||||||
"""
|
|
||||||
super().__init__(**kwargs)
|
|
||||||
self.sensor_type = self._get_sensor_type(sensor_type)
|
|
||||||
self.pin = pin
|
|
||||||
self.retries = retries
|
|
||||||
self.retry_seconds = retry_seconds
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _get_sensor_type(sensor_type: str) -> int:
|
|
||||||
import Adafruit_DHT
|
|
||||||
sensor_type = sensor_type.upper()
|
|
||||||
assert hasattr(Adafruit_DHT, sensor_type), \
|
|
||||||
'Unknown sensor type: {}. Supported types: DHT11, DHT22, AM2302'.format(sensor_type)
|
|
||||||
|
|
||||||
return getattr(Adafruit_DHT, sensor_type)
|
|
||||||
|
|
||||||
@action
|
|
||||||
def read(self, sensor_type: Optional[str] = None, pin: Optional[int] = None,
|
|
||||||
retries: Optional[int] = None, retry_seconds: Optional[int] = None, **__) -> Dict[str, float]:
|
|
||||||
"""
|
|
||||||
Read data from the sensor.
|
|
||||||
|
|
||||||
:param sensor_type: Default ``sensor_type`` override.
|
|
||||||
:param pin: Default ``pin`` override.
|
|
||||||
:param retries: Default ``retries`` override.
|
|
||||||
:param retry_seconds: Default ``retry_seconds`` override.
|
|
||||||
:return: A mapping with the measured temperature and humidity. Example:
|
|
||||||
|
|
||||||
.. code-block:: json
|
|
||||||
|
|
||||||
{
|
|
||||||
"humidity": 30.0,
|
|
||||||
"temperature": 25.5
|
|
||||||
}
|
|
||||||
|
|
||||||
"""
|
|
||||||
import Adafruit_DHT
|
|
||||||
sensor_type = self._get_sensor_type(sensor_type) if sensor_type else self.sensor_type
|
|
||||||
pin = pin or self.pin
|
|
||||||
retries = retries or self.retries
|
|
||||||
retry_seconds = retry_seconds or self.retry_seconds
|
|
||||||
humidity, temperature = Adafruit_DHT.read_retry(sensor=sensor_type,
|
|
||||||
pin=pin, retries=retries, delay_seconds=retry_seconds)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'humidity': humidity,
|
|
||||||
'temperature': temperature,
|
|
||||||
}
|
|
||||||
|
|
||||||
@action
|
|
||||||
def get_measurement(self) -> Dict[str, float]:
|
|
||||||
"""
|
|
||||||
Get data from the sensor.
|
|
||||||
|
|
||||||
:return: A mapping with the measured temperature and humidity. Example:
|
|
||||||
|
|
||||||
.. code-block:: json
|
|
||||||
|
|
||||||
{
|
|
||||||
"humidity": 30.0,
|
|
||||||
"temperature": 25.5
|
|
||||||
}
|
|
||||||
|
|
||||||
"""
|
|
||||||
return self.read()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
|
|
@ -1,7 +0,0 @@
|
||||||
manifest:
|
|
||||||
events: {}
|
|
||||||
install:
|
|
||||||
pip:
|
|
||||||
- Adafruit_Python_DHT
|
|
||||||
package: platypush.plugins.gpio.sensor.dht
|
|
||||||
type: plugin
|
|
140
platypush/plugins/sensor/dht/__init__.py
Normal file
140
platypush/plugins/sensor/dht/__init__.py
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
from typing import List, Optional, Dict
|
||||||
|
from typing_extensions import override
|
||||||
|
from platypush.common.sensors import Numeric
|
||||||
|
from platypush.entities.devices import Device
|
||||||
|
|
||||||
|
from platypush.entities.humidity import HumiditySensor
|
||||||
|
from platypush.entities.temperature import TemperatureSensor
|
||||||
|
from platypush.plugins import action
|
||||||
|
from platypush.plugins.sensor import SensorPlugin
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=too-many-ancestors
|
||||||
|
class SensorDhtPlugin(SensorPlugin):
|
||||||
|
"""
|
||||||
|
Plugin to interact with a DHT11/DHT22/AM2302 temperature/humidity sensor through GPIO.
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
|
||||||
|
* ``Adafruit_Python_DHT`` (``pip install git+https://github.com/adafruit/Adafruit_Python_DHT.git``)
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
sensor_type: str,
|
||||||
|
pin: int,
|
||||||
|
retries: int = 5,
|
||||||
|
retry_seconds: int = 2,
|
||||||
|
poll_interval: float = 5.0,
|
||||||
|
**kwargs,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
:param sensor_type: Type of sensor to be used (supported types: DHT11, DHT22, AM2302).
|
||||||
|
:param pin: GPIO PIN where the sensor is connected.
|
||||||
|
:param retries: Number of retries in case of failed read (default: 5).
|
||||||
|
:param retry_seconds: Number of seconds to wait between retries (default: 2).
|
||||||
|
"""
|
||||||
|
super().__init__(poll_interval=poll_interval, **kwargs)
|
||||||
|
self.sensor_type = self._get_sensor_type(sensor_type)
|
||||||
|
self.pin = pin
|
||||||
|
self.retries = retries
|
||||||
|
self.retry_seconds = retry_seconds
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_sensor_type(sensor_type: str) -> int:
|
||||||
|
import Adafruit_DHT
|
||||||
|
|
||||||
|
sensor_type = sensor_type.upper()
|
||||||
|
assert hasattr(
|
||||||
|
Adafruit_DHT, sensor_type
|
||||||
|
), f'Unknown sensor type: {sensor_type}. Supported types: DHT11, DHT22, AM2302'
|
||||||
|
|
||||||
|
return getattr(Adafruit_DHT, sensor_type)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def read(
|
||||||
|
self,
|
||||||
|
sensor_type: Optional[str] = None,
|
||||||
|
pin: Optional[int] = None,
|
||||||
|
retries: Optional[int] = None,
|
||||||
|
retry_seconds: Optional[int] = None,
|
||||||
|
**__,
|
||||||
|
) -> Dict[str, float]:
|
||||||
|
"""
|
||||||
|
Read data from the sensor.
|
||||||
|
|
||||||
|
:param sensor_type: Default ``sensor_type`` override.
|
||||||
|
:param pin: Default ``pin`` override.
|
||||||
|
:param retries: Default ``retries`` override.
|
||||||
|
:param retry_seconds: Default ``retry_seconds`` override.
|
||||||
|
:return: A mapping with the measured temperature and humidity. Example:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"humidity": 30.0,
|
||||||
|
"temperature": 25.5
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
import Adafruit_DHT
|
||||||
|
|
||||||
|
sensor_type = ( # type: ignore
|
||||||
|
self._get_sensor_type(sensor_type) if sensor_type else self.sensor_type
|
||||||
|
)
|
||||||
|
pin = pin or self.pin
|
||||||
|
retries = retries or self.retries
|
||||||
|
retry_seconds = retry_seconds or self.retry_seconds
|
||||||
|
humidity, temperature = Adafruit_DHT.read_retry(
|
||||||
|
sensor=sensor_type, pin=pin, retries=retries, delay_seconds=retry_seconds
|
||||||
|
)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'humidity': humidity,
|
||||||
|
'temperature': temperature,
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@action
|
||||||
|
def get_measurement(self, *_, **__) -> Dict[str, float]:
|
||||||
|
"""
|
||||||
|
Get data from the sensor.
|
||||||
|
|
||||||
|
:return: A mapping with the measured temperature and humidity. Example:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"humidity": 30.0,
|
||||||
|
"temperature": 25.5
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
return self.read() # type: ignore
|
||||||
|
|
||||||
|
@override
|
||||||
|
def transform_entities(self, entities: Dict[str, Numeric]) -> List[Device]:
|
||||||
|
return [
|
||||||
|
Device(
|
||||||
|
id='dht',
|
||||||
|
name='DHT Sensor',
|
||||||
|
children=[
|
||||||
|
TemperatureSensor(
|
||||||
|
id='dht:temperature',
|
||||||
|
name='temperature',
|
||||||
|
value=entities['temperature'],
|
||||||
|
unit='°C',
|
||||||
|
),
|
||||||
|
HumiditySensor(
|
||||||
|
id='dht:humidity',
|
||||||
|
name='humidity',
|
||||||
|
value=entities['humidity'],
|
||||||
|
unit='%',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
10
platypush/plugins/sensor/dht/manifest.yaml
Normal file
10
platypush/plugins/sensor/dht/manifest.yaml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
manifest:
|
||||||
|
events:
|
||||||
|
platypush.message.event.sensor.SensorDataAboveThresholdEvent:
|
||||||
|
platypush.message.event.sensor.SensorDataBelowThresholdEvent:
|
||||||
|
platypush.message.event.sensor.SensorDataChangeEvent:
|
||||||
|
install:
|
||||||
|
pip:
|
||||||
|
- Adafruit_Python_DHT
|
||||||
|
package: platypush.plugins.sensor.dht
|
||||||
|
type: plugin
|
Loading…
Reference in a new issue