mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +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 dataclasses import dataclass
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import timedelta
|
||||
from typing import Any
|
||||
|
||||
from pydrawise.schema import ControllerWaterUseSummary
|
||||
|
||||
from homeassistant.components.sensor import (
|
||||
SensorDeviceClass,
|
||||
SensorEntity,
|
||||
@ -30,66 +32,8 @@ class HydrawiseSensorEntityDescription(SensorEntityDescription):
|
||||
value_fn: Callable[[HydrawiseSensor], Any]
|
||||
|
||||
|
||||
def _get_zone_watering_time(sensor: HydrawiseSensor) -> int:
|
||||
if (current_run := sensor.zone.scheduled_runs.current_run) is not None:
|
||||
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
|
||||
def _get_water_use(sensor: HydrawiseSensor) -> ControllerWaterUseSummary:
|
||||
return sensor.coordinator.data.daily_water_summary[sensor.controller.id]
|
||||
|
||||
|
||||
WATER_USE_CONTROLLER_SENSORS: tuple[HydrawiseSensorEntityDescription, ...] = (
|
||||
@ -98,7 +42,9 @@ WATER_USE_CONTROLLER_SENSORS: tuple[HydrawiseSensorEntityDescription, ...] = (
|
||||
translation_key="daily_active_water_time",
|
||||
device_class=SensorDeviceClass.DURATION,
|
||||
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",
|
||||
device_class=SensorDeviceClass.DURATION,
|
||||
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",
|
||||
device_class=SensorDeviceClass.VOLUME,
|
||||
suggested_display_precision=1,
|
||||
value_fn=_get_controller_daily_total_water_use,
|
||||
value_fn=lambda sensor: _get_water_use(sensor).total_use,
|
||||
),
|
||||
HydrawiseSensorEntityDescription(
|
||||
key="daily_active_water_use",
|
||||
translation_key="daily_active_water_use",
|
||||
device_class=SensorDeviceClass.VOLUME,
|
||||
suggested_display_precision=1,
|
||||
value_fn=_get_controller_daily_active_water_use,
|
||||
value_fn=lambda sensor: _get_water_use(sensor).total_active_use,
|
||||
),
|
||||
HydrawiseSensorEntityDescription(
|
||||
key="daily_inactive_water_use",
|
||||
translation_key="daily_inactive_water_use",
|
||||
device_class=SensorDeviceClass.VOLUME,
|
||||
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",
|
||||
device_class=SensorDeviceClass.VOLUME,
|
||||
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",
|
||||
translation_key="next_cycle",
|
||||
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(
|
||||
key="watering_time",
|
||||
translation_key="watering_time",
|
||||
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