1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-30 12:14:20 +01:00
Files

87 lines
2.5 KiB
Python

"""Support for the Hive switches."""
from datetime import timedelta
from typing import Any
from apyhiveapi import Hive
from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
from homeassistant.const import ATTR_MODE, EntityCategory
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from . import HiveConfigEntry, refresh_system
from .entity import HiveEntity
PARALLEL_UPDATES = 0
SCAN_INTERVAL = timedelta(seconds=15)
SWITCH_TYPES: tuple[SwitchEntityDescription, ...] = (
SwitchEntityDescription(
key="activeplug",
),
SwitchEntityDescription(
key="Heating_Heat_On_Demand",
entity_category=EntityCategory.CONFIG,
),
)
async def async_setup_entry(
hass: HomeAssistant,
entry: HiveConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up Hive thermostat based on a config entry."""
hive = entry.runtime_data
devices = hive.session.deviceList.get("switch")
if not devices:
return
async_add_entities(
(
HiveSwitch(hive, dev, description)
for dev in devices
for description in SWITCH_TYPES
if dev["hiveType"] == description.key
),
True,
)
class HiveSwitch(HiveEntity, SwitchEntity):
"""Hive Active Plug."""
def __init__(
self,
hive: Hive,
hive_device: dict[str, Any],
entity_description: SwitchEntityDescription,
) -> None:
"""Initialise hive switch."""
super().__init__(hive, hive_device)
self.entity_description = entity_description
@refresh_system
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the switch on."""
await self.hive.switch.turnOn(self.device)
@refresh_system
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the device off."""
await self.hive.switch.turnOff(self.device)
async def async_update(self) -> None:
"""Update all Node data from Hive."""
await self.hive.session.updateData(self.device)
self.device = await self.hive.switch.getSwitch(self.device)
self.attributes.update(self.device.get("attributes", {}))
self._attr_extra_state_attributes = {
ATTR_MODE: self.attributes.get(ATTR_MODE),
}
self._attr_available = self.device["deviceData"].get("online")
if self._attr_available:
self._attr_is_on = self.device["status"]["state"]