Files

49 lines
1.5 KiB
Python

"""Binary sensors for Victron MK2 MQTT integration."""
from __future__ import annotations
from typing import Any
from homeassistant.components.binary_sensor import BinarySensorEntity
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from .const import DATA_BRIDGE, DOMAIN
from .coordinator import VictronMqttBridge
from .entity import VictronMqttEntity
async def async_setup_platform(
hass: HomeAssistant,
config: dict[str, Any],
async_add_entities,
discovery_info: dict[str, Any] | None = None,
) -> None:
"""Set up Victron binary sensors."""
bridge: VictronMqttBridge = hass.data[DOMAIN][DATA_BRIDGE]
async_add_entities([VictronDataValidBinarySensor(bridge)])
class VictronDataValidBinarySensor(VictronMqttEntity, BinarySensorEntity):
"""MQTT data validity sensor."""
_attr_name = "Data Valid"
_attr_entity_category = EntityCategory.DIAGNOSTIC
_attr_icon = "mdi:check-network-outline"
def __init__(self, bridge: VictronMqttBridge) -> None:
super().__init__(bridge)
self._attr_unique_id = f"{bridge.topic_root}_data_valid"
@property
def is_on(self) -> bool:
value = self.bridge.metric("Valid")
if isinstance(value, bool):
return value
if isinstance(value, (int, float)):
return value != 0
if isinstance(value, str):
normalized = value.strip().lower()
return normalized in {"1", "true", "on", "yes"}
return False