core/homeassistant/components/broadlink/time.py

64 lines
2.0 KiB
Python

"""Support for Broadlink device time."""
from __future__ import annotations
from datetime import time
from typing import Any
from homeassistant.components.time import TimeEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import dt as dt_util
from . import BroadlinkDevice
from .const import DOMAIN
from .entity import BroadlinkEntity
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Broadlink time."""
device = hass.data[DOMAIN].devices[config_entry.entry_id]
async_add_entities([BroadlinkTime(device)])
class BroadlinkTime(BroadlinkEntity, TimeEntity):
"""Representation of a Broadlink device time."""
_attr_has_entity_name = True
_attr_native_value: time | None = None
def __init__(self, device: BroadlinkDevice) -> None:
"""Initialize the sensor."""
super().__init__(device)
self._attr_unique_id = f"{device.unique_id}-device_time"
def _update_state(self, data: dict[str, Any]) -> None:
"""Update the state of the entity."""
if data is None or "hour" not in data or "min" not in data or "sec" not in data:
self._attr_native_value = None
else:
self._attr_native_value = time(
hour=data["hour"],
minute=data["min"],
second=data["sec"],
tzinfo=dt_util.get_default_time_zone(),
)
async def async_set_value(self, value: time) -> None:
"""Change the value."""
await self._device.async_request(
self._device.api.set_time,
hour=value.hour,
minute=value.minute,
second=value.second,
day=self._coordinator.data["dayofweek"],
)
self._attr_native_value = value
self.async_write_ha_state()