mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 10:17:09 +00:00
Inline hydrawise sensor value_fn definitions as lambdas (#130702)
This commit is contained in:
parent
c3857661f1
commit
9a07f58890
@ -4,9 +4,11 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime, timedelta
|
from datetime import timedelta
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
from pydrawise.schema import ControllerWaterUseSummary
|
||||||
|
|
||||||
from homeassistant.components.sensor import (
|
from homeassistant.components.sensor import (
|
||||||
SensorDeviceClass,
|
SensorDeviceClass,
|
||||||
SensorEntity,
|
SensorEntity,
|
||||||
@ -30,66 +32,8 @@ class HydrawiseSensorEntityDescription(SensorEntityDescription):
|
|||||||
value_fn: Callable[[HydrawiseSensor], Any]
|
value_fn: Callable[[HydrawiseSensor], Any]
|
||||||
|
|
||||||
|
|
||||||
def _get_zone_watering_time(sensor: HydrawiseSensor) -> int:
|
def _get_water_use(sensor: HydrawiseSensor) -> ControllerWaterUseSummary:
|
||||||
if (current_run := sensor.zone.scheduled_runs.current_run) is not None:
|
return sensor.coordinator.data.daily_water_summary[sensor.controller.id]
|
||||||
return int(current_run.remaining_time.total_seconds() / 60)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
def _get_zone_next_cycle(sensor: HydrawiseSensor) -> datetime | None:
|
|
||||||
if (next_run := sensor.zone.scheduled_runs.next_run) is not None:
|
|
||||||
return dt_util.as_utc(next_run.start_time)
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def _get_zone_daily_active_water_use(sensor: HydrawiseSensor) -> float:
|
|
||||||
"""Get active water use for the zone."""
|
|
||||||
daily_water_summary = sensor.coordinator.data.daily_water_summary[
|
|
||||||
sensor.controller.id
|
|
||||||
]
|
|
||||||
return float(daily_water_summary.active_use_by_zone_id.get(sensor.zone.id, 0.0))
|
|
||||||
|
|
||||||
|
|
||||||
def _get_zone_daily_active_water_time(sensor: HydrawiseSensor) -> float | None:
|
|
||||||
"""Get active water time for the zone."""
|
|
||||||
daily_water_summary = sensor.coordinator.data.daily_water_summary[
|
|
||||||
sensor.controller.id
|
|
||||||
]
|
|
||||||
return daily_water_summary.active_time_by_zone_id.get(
|
|
||||||
sensor.zone.id, timedelta()
|
|
||||||
).total_seconds()
|
|
||||||
|
|
||||||
|
|
||||||
def _get_controller_daily_active_water_use(sensor: HydrawiseSensor) -> float | None:
|
|
||||||
"""Get active water use for the controller."""
|
|
||||||
daily_water_summary = sensor.coordinator.data.daily_water_summary[
|
|
||||||
sensor.controller.id
|
|
||||||
]
|
|
||||||
return daily_water_summary.total_active_use
|
|
||||||
|
|
||||||
|
|
||||||
def _get_controller_daily_inactive_water_use(sensor: HydrawiseSensor) -> float | None:
|
|
||||||
"""Get inactive water use for the controller."""
|
|
||||||
daily_water_summary = sensor.coordinator.data.daily_water_summary[
|
|
||||||
sensor.controller.id
|
|
||||||
]
|
|
||||||
return daily_water_summary.total_inactive_use
|
|
||||||
|
|
||||||
|
|
||||||
def _get_controller_daily_active_water_time(sensor: HydrawiseSensor) -> float:
|
|
||||||
"""Get active water time for the controller."""
|
|
||||||
daily_water_summary = sensor.coordinator.data.daily_water_summary[
|
|
||||||
sensor.controller.id
|
|
||||||
]
|
|
||||||
return daily_water_summary.total_active_time.total_seconds()
|
|
||||||
|
|
||||||
|
|
||||||
def _get_controller_daily_total_water_use(sensor: HydrawiseSensor) -> float | None:
|
|
||||||
"""Get inactive water use for the controller."""
|
|
||||||
daily_water_summary = sensor.coordinator.data.daily_water_summary[
|
|
||||||
sensor.controller.id
|
|
||||||
]
|
|
||||||
return daily_water_summary.total_use
|
|
||||||
|
|
||||||
|
|
||||||
WATER_USE_CONTROLLER_SENSORS: tuple[HydrawiseSensorEntityDescription, ...] = (
|
WATER_USE_CONTROLLER_SENSORS: tuple[HydrawiseSensorEntityDescription, ...] = (
|
||||||
@ -98,7 +42,9 @@ WATER_USE_CONTROLLER_SENSORS: tuple[HydrawiseSensorEntityDescription, ...] = (
|
|||||||
translation_key="daily_active_water_time",
|
translation_key="daily_active_water_time",
|
||||||
device_class=SensorDeviceClass.DURATION,
|
device_class=SensorDeviceClass.DURATION,
|
||||||
native_unit_of_measurement=UnitOfTime.SECONDS,
|
native_unit_of_measurement=UnitOfTime.SECONDS,
|
||||||
value_fn=_get_controller_daily_active_water_time,
|
value_fn=lambda sensor: _get_water_use(
|
||||||
|
sensor
|
||||||
|
).total_active_time.total_seconds(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -109,7 +55,11 @@ WATER_USE_ZONE_SENSORS: tuple[HydrawiseSensorEntityDescription, ...] = (
|
|||||||
translation_key="daily_active_water_time",
|
translation_key="daily_active_water_time",
|
||||||
device_class=SensorDeviceClass.DURATION,
|
device_class=SensorDeviceClass.DURATION,
|
||||||
native_unit_of_measurement=UnitOfTime.SECONDS,
|
native_unit_of_measurement=UnitOfTime.SECONDS,
|
||||||
value_fn=_get_zone_daily_active_water_time,
|
value_fn=lambda sensor: (
|
||||||
|
_get_water_use(sensor)
|
||||||
|
.active_time_by_zone_id.get(sensor.zone.id, timedelta())
|
||||||
|
.total_seconds()
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -119,21 +69,21 @@ FLOW_CONTROLLER_SENSORS: tuple[HydrawiseSensorEntityDescription, ...] = (
|
|||||||
translation_key="daily_total_water_use",
|
translation_key="daily_total_water_use",
|
||||||
device_class=SensorDeviceClass.VOLUME,
|
device_class=SensorDeviceClass.VOLUME,
|
||||||
suggested_display_precision=1,
|
suggested_display_precision=1,
|
||||||
value_fn=_get_controller_daily_total_water_use,
|
value_fn=lambda sensor: _get_water_use(sensor).total_use,
|
||||||
),
|
),
|
||||||
HydrawiseSensorEntityDescription(
|
HydrawiseSensorEntityDescription(
|
||||||
key="daily_active_water_use",
|
key="daily_active_water_use",
|
||||||
translation_key="daily_active_water_use",
|
translation_key="daily_active_water_use",
|
||||||
device_class=SensorDeviceClass.VOLUME,
|
device_class=SensorDeviceClass.VOLUME,
|
||||||
suggested_display_precision=1,
|
suggested_display_precision=1,
|
||||||
value_fn=_get_controller_daily_active_water_use,
|
value_fn=lambda sensor: _get_water_use(sensor).total_active_use,
|
||||||
),
|
),
|
||||||
HydrawiseSensorEntityDescription(
|
HydrawiseSensorEntityDescription(
|
||||||
key="daily_inactive_water_use",
|
key="daily_inactive_water_use",
|
||||||
translation_key="daily_inactive_water_use",
|
translation_key="daily_inactive_water_use",
|
||||||
device_class=SensorDeviceClass.VOLUME,
|
device_class=SensorDeviceClass.VOLUME,
|
||||||
suggested_display_precision=1,
|
suggested_display_precision=1,
|
||||||
value_fn=_get_controller_daily_inactive_water_use,
|
value_fn=lambda sensor: _get_water_use(sensor).total_inactive_use,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -143,7 +93,9 @@ FLOW_ZONE_SENSORS: tuple[SensorEntityDescription, ...] = (
|
|||||||
translation_key="daily_active_water_use",
|
translation_key="daily_active_water_use",
|
||||||
device_class=SensorDeviceClass.VOLUME,
|
device_class=SensorDeviceClass.VOLUME,
|
||||||
suggested_display_precision=1,
|
suggested_display_precision=1,
|
||||||
value_fn=_get_zone_daily_active_water_use,
|
value_fn=lambda sensor: float(
|
||||||
|
_get_water_use(sensor).active_use_by_zone_id.get(sensor.zone.id, 0.0)
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -152,13 +104,24 @@ ZONE_SENSORS: tuple[HydrawiseSensorEntityDescription, ...] = (
|
|||||||
key="next_cycle",
|
key="next_cycle",
|
||||||
translation_key="next_cycle",
|
translation_key="next_cycle",
|
||||||
device_class=SensorDeviceClass.TIMESTAMP,
|
device_class=SensorDeviceClass.TIMESTAMP,
|
||||||
value_fn=_get_zone_next_cycle,
|
value_fn=lambda sensor: (
|
||||||
|
dt_util.as_utc(sensor.zone.scheduled_runs.next_run.start_time)
|
||||||
|
if sensor.zone.scheduled_runs.next_run is not None
|
||||||
|
else None
|
||||||
|
),
|
||||||
),
|
),
|
||||||
HydrawiseSensorEntityDescription(
|
HydrawiseSensorEntityDescription(
|
||||||
key="watering_time",
|
key="watering_time",
|
||||||
translation_key="watering_time",
|
translation_key="watering_time",
|
||||||
native_unit_of_measurement=UnitOfTime.MINUTES,
|
native_unit_of_measurement=UnitOfTime.MINUTES,
|
||||||
value_fn=_get_zone_watering_time,
|
value_fn=lambda sensor: (
|
||||||
|
int(
|
||||||
|
sensor.zone.scheduled_runs.current_run.remaining_time.total_seconds()
|
||||||
|
/ 60
|
||||||
|
)
|
||||||
|
if sensor.zone.scheduled_runs.current_run is not None
|
||||||
|
else 0
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user