forked from platypush/platypush
Migrated ltr559
integration to the new API.
Merged `backend.sensor.ltr559` and `gpio.sensor.ltr559` into the new `sensor.ltr559` plugin, which extends the new `SensorPlugin` API.
This commit is contained in:
parent
8e0f88ea16
commit
c1d0f21ead
6 changed files with 103 additions and 98 deletions
|
@ -1,37 +0,0 @@
|
||||||
from platypush.backend.sensor import SensorBackend
|
|
||||||
|
|
||||||
|
|
||||||
class SensorLtr559Backend(SensorBackend):
|
|
||||||
"""
|
|
||||||
Backend to poll an `LTR559 <https://shop.pimoroni.com/products/ltr-559-light-proximity-sensor-breakout>`_
|
|
||||||
light/proximity sensor
|
|
||||||
|
|
||||||
Requires:
|
|
||||||
|
|
||||||
* ``ltr559`` (``pip install ltr559``)
|
|
||||||
|
|
||||||
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, light=True, proximity=True, **kwargs):
|
|
||||||
"""
|
|
||||||
:param light: Enable light sensor
|
|
||||||
:param proximity: Enable proximity sensor
|
|
||||||
"""
|
|
||||||
|
|
||||||
enabled_sensors = {
|
|
||||||
'light': light,
|
|
||||||
'proximity': proximity,
|
|
||||||
}
|
|
||||||
|
|
||||||
super().__init__(plugin='gpio.sensor.ltr559', 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:
|
|
||||||
- ltr559
|
|
||||||
package: platypush.backend.sensor.ltr559
|
|
||||||
type: backend
|
|
|
@ -1,41 +0,0 @@
|
||||||
from platypush.plugins import action
|
|
||||||
from platypush.plugins.gpio.sensor import GpioSensorPlugin
|
|
||||||
|
|
||||||
|
|
||||||
class GpioSensorLtr559Plugin(GpioSensorPlugin):
|
|
||||||
"""
|
|
||||||
Plugin to interact with an `LTR559 <https://shop.pimoroni.com/products/ltr-559-light-proximity-sensor-breakout>`_
|
|
||||||
light and proximity sensor
|
|
||||||
|
|
||||||
Requires:
|
|
||||||
|
|
||||||
* ``ltr559`` (``pip install ltr559``)
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
|
||||||
import ltr559
|
|
||||||
super().__init__(**kwargs)
|
|
||||||
self.ltr = ltr559.LTR559()
|
|
||||||
|
|
||||||
# noinspection PyUnresolvedReferences
|
|
||||||
@action
|
|
||||||
def get_measurement(self):
|
|
||||||
"""
|
|
||||||
:returns: dict. Example:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
output = {
|
|
||||||
"light": 109.3543, # Lux
|
|
||||||
"proximity": 103 # The higher the value, the nearest the object, within a ~5cm range
|
|
||||||
}
|
|
||||||
|
|
||||||
"""
|
|
||||||
self.ltr.update_sensor()
|
|
||||||
return {
|
|
||||||
'light': self.ltr.get_lux(),
|
|
||||||
'proximity': self.ltr.get_proximity(),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
|
|
@ -1,7 +0,0 @@
|
||||||
manifest:
|
|
||||||
events: {}
|
|
||||||
install:
|
|
||||||
pip:
|
|
||||||
- ltr559
|
|
||||||
package: platypush.plugins.gpio.sensor.ltr559
|
|
||||||
type: plugin
|
|
93
platypush/plugins/sensor/ltr559/__init__.py
Normal file
93
platypush/plugins/sensor/ltr559/__init__.py
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
from typing import Dict, List
|
||||||
|
|
||||||
|
from typing_extensions import override
|
||||||
|
|
||||||
|
from platypush.common.sensors import Numeric
|
||||||
|
from platypush.entities.devices import Device
|
||||||
|
from platypush.entities.distance import DistanceSensor
|
||||||
|
from platypush.entities.illuminance import IlluminanceSensor
|
||||||
|
from platypush.plugins import action
|
||||||
|
from platypush.plugins.sensor import SensorPlugin
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=too-many-ancestors
|
||||||
|
class SensorLtr559Plugin(SensorPlugin):
|
||||||
|
"""
|
||||||
|
Plugin to interact with an `LTR559 <https://shop.pimoroni.com/products/ltr-559-light-proximity-sensor-breakout>`_
|
||||||
|
light and proximity sensor
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
|
||||||
|
* ``ltr559`` (``pip install ltr559``)
|
||||||
|
|
||||||
|
Triggers:
|
||||||
|
|
||||||
|
* :class:`platypush.message.event.sensor.SensorDataAboveThresholdEvent`
|
||||||
|
* :class:`platypush.message.event.sensor.SensorDataBelowThresholdEvent`
|
||||||
|
* :class:`platypush.message.event.sensor.SensorDataChangeEvent`
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
import ltr559
|
||||||
|
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
self.ltr = ltr559.LTR559()
|
||||||
|
|
||||||
|
@override
|
||||||
|
@action
|
||||||
|
def get_measurement(self, *_, **__):
|
||||||
|
"""
|
||||||
|
:returns: dict. Example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
output = {
|
||||||
|
"light": 109.3543, # Lux
|
||||||
|
"proximity": 103 # The higher the value, the nearest the object, within a ~5cm range
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
self.ltr.update_sensor()
|
||||||
|
return {
|
||||||
|
'light': self.ltr.get_lux(),
|
||||||
|
'proximity': self.ltr.get_proximity(),
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
def transform_entities(self, entities: Dict[str, Numeric]) -> List[Device]:
|
||||||
|
sensors = []
|
||||||
|
|
||||||
|
if entities.get('light') is not None:
|
||||||
|
sensors.append(
|
||||||
|
IlluminanceSensor(
|
||||||
|
id='ltr559:illuminance',
|
||||||
|
name='illuminance',
|
||||||
|
value=entities['light'],
|
||||||
|
unit='lux',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if entities.get('proximity') is not None:
|
||||||
|
sensors.append(
|
||||||
|
DistanceSensor(
|
||||||
|
id='ltr559:proximity',
|
||||||
|
name='proximity',
|
||||||
|
value=entities['proximity'],
|
||||||
|
unit='mm',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if not sensors:
|
||||||
|
return []
|
||||||
|
|
||||||
|
return [
|
||||||
|
Device(
|
||||||
|
id='ltr559',
|
||||||
|
name='LTR559 Sensor',
|
||||||
|
children=sensors,
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
10
platypush/plugins/sensor/ltr559/manifest.yaml
Normal file
10
platypush/plugins/sensor/ltr559/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:
|
||||||
|
- ltr559
|
||||||
|
package: platypush.plugins.sensor.ltr559
|
||||||
|
type: plugin
|
Loading…
Reference in a new issue