Added TimeDurationSensor entity.

This commit is contained in:
Fabio Manganiello 2023-02-23 01:02:13 +01:00
parent c3e16f9f9d
commit d961e2a997
Signed by untrusted user: blacklight
GPG key ID: D90FBA7F76362774
4 changed files with 38 additions and 1 deletions

View file

@ -143,6 +143,14 @@
}
},
"time_duration_sensor": {
"name": "Sensor",
"name_plural": "Sensors",
"icon": {
"class": "fas fa-clock"
}
},
"muted": {
"name": "Switch",
"name_plural": "Switches",

View file

@ -0,0 +1,23 @@
from sqlalchemy import Column, Integer, ForeignKey
from platypush.common.db import Base
from .sensors import NumericSensor
if 'time_duration_sensor' not in Base.metadata:
class TimeDurationSensor(NumericSensor):
"""
A sensor that measures a time duration.
"""
__tablename__ = 'time_duration_sensor'
id = Column(
Integer, ForeignKey(NumericSensor.id, ondelete='CASCADE'), primary_key=True
)
__mapper_args__ = {
'polymorphic_identity': __tablename__,
}

View file

@ -27,6 +27,7 @@ from platypush.entities.motion import MotionSensor
from platypush.entities.sensors import BinarySensor, NumericSensor, RawSensor
from platypush.entities.steps import StepsSensor
from platypush.entities.temperature import TemperatureSensor
from platypush.entities.time import TimeDurationSensor
@dataclass
@ -55,6 +56,7 @@ class NullSensor:
# Maps property names to transformer methods (first mapper choice).
_property_to_entity: Dict[str, Callable[[Any, Dict[str, Any]], Entity]] = {
'activity heart rate': lambda value, _: HeartRateSensor(value=value),
'battery': lambda value, conf: Battery(
value=value,
unit=conf.get('unit', '%'),
@ -65,11 +67,14 @@ _property_to_entity: Dict[str, Callable[[Any, Dict[str, Any]], Entity]] = {
value=value,
unit=conf.get('unit', 'A'),
),
'duration': lambda value, conf: TimeDurationSensor(
value=value,
unit=conf.get('unit'),
),
'energy': lambda value, conf: EnergySensor(
value=value,
unit=conf.get('unit', 'kWh'),
),
'activity heart rate': lambda value, _: HeartRateSensor(value=value),
'humidity': lambda value, conf: HumiditySensor(
value=value,
unit=conf.get('unit', '%'),