Files
Rafal Zielinski d4cdcc04c0
Some checks failed
Tests / test (3.13) (push) Failing after 23s
Tests / lint (push) Failing after 20s
Tests / hacs (push) Failing after 52s
Initial commit
Signed-off-by: Rafal Zielinski <sq4ind@gmail.com>
2025-10-02 16:00:15 +01:00

92 lines
2.9 KiB
Python

"""AdGuard Control Hub switch platform."""
from __future__ import annotations
import logging
from typing import Any
from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN, SWITCHES
from .coordinator import AdGuardDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up AdGuard Control Hub switch based on a config entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
entities = []
for switch_type, switch_info in SWITCHES.items():
entities.append(
AdGuardSwitch(
coordinator,
entry,
switch_type,
switch_info,
)
)
async_add_entities(entities)
class AdGuardSwitch(CoordinatorEntity[AdGuardDataUpdateCoordinator], SwitchEntity):
"""Representation of an AdGuard Control Hub switch."""
def __init__(
self,
coordinator: AdGuardDataUpdateCoordinator,
entry: ConfigEntry,
switch_type: str,
switch_info: dict[str, Any],
) -> None:
"""Initialize the switch."""
super().__init__(coordinator)
self._switch_type = switch_type
self._switch_info = switch_info
self._entry = entry
self._attr_name = switch_info["name"]
self._attr_icon = switch_info["icon"]
self._attr_unique_id = f"{entry.entry_id}_{switch_type}"
@property
def device_info(self) -> DeviceInfo:
"""Return device information about this AdGuard Home instance."""
return DeviceInfo(
identifiers={(DOMAIN, self._entry.entry_id)},
name="AdGuard Control Hub",
manufacturer="AdGuard",
model="AdGuard Home",
sw_version=self.coordinator.data.get("status", {}).get("version"),
configuration_url=f"http://{self._entry.data['host']}:{self._entry.data['port']}",
)
@property
def is_on(self) -> bool | None:
"""Return True if entity is on."""
if self.coordinator.data is None:
return None
status_data = self.coordinator.data.get("status", {})
api_key = self._switch_info["api_key"]
return status_data.get(api_key, False)
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the entity on."""
await self.coordinator.async_set_switch(self._switch_type, True)
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the entity off."""
await self.coordinator.async_set_switch(self._switch_type, False)