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

81 lines
2.5 KiB
Python

"""AdGuard Control Hub binary sensor platform."""
from __future__ import annotations
import logging
from typing import Any
from homeassistant.components.binary_sensor import BinarySensorEntity
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
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 binary sensor based on a config entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
entities = [
AdGuardBinarySensor(
coordinator,
entry,
"running",
"AdGuard Home Running",
"mdi:shield-check-outline",
),
]
async_add_entities(entities)
class AdGuardBinarySensor(CoordinatorEntity[AdGuardDataUpdateCoordinator], BinarySensorEntity):
"""Representation of an AdGuard Control Hub binary sensor."""
def __init__(
self,
coordinator: AdGuardDataUpdateCoordinator,
entry: ConfigEntry,
sensor_type: str,
name: str,
icon: str,
) -> None:
"""Initialize the binary sensor."""
super().__init__(coordinator)
self._sensor_type = sensor_type
self._entry = entry
self._attr_name = name
self._attr_icon = icon
self._attr_unique_id = f"{entry.entry_id}_{sensor_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 the binary sensor is on."""
if self.coordinator.data is None:
return None
# If we can fetch data, AdGuard Home is running
return self.coordinator.data.get("status") is not None