core/homeassistant/components/sense/binary_sensor.py

85 lines
2.5 KiB
Python

"""Support for monitoring a Sense energy sensor device."""
import logging
from sense_energy.sense_api import SenseDevice
from homeassistant.components.binary_sensor import (
BinarySensorDeviceClass,
BinarySensorEntity,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import SenseConfigEntry
from .const import DOMAIN
from .coordinator import SenseRealtimeCoordinator
from .entity import SenseDeviceEntity
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: SenseConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Sense binary sensor."""
sense_monitor_id = config_entry.runtime_data.data.sense_monitor_id
realtime_coordinator = config_entry.runtime_data.rt
devices = [
SenseBinarySensor(device, realtime_coordinator, sense_monitor_id)
for device in config_entry.runtime_data.data.devices
]
await _migrate_old_unique_ids(hass, devices)
async_add_entities(devices)
class SenseBinarySensor(SenseDeviceEntity, BinarySensorEntity):
"""Implementation of a Sense energy device binary sensor."""
_attr_device_class = BinarySensorDeviceClass.POWER
def __init__(
self,
device: SenseDevice,
coordinator: SenseRealtimeCoordinator,
sense_monitor_id: str,
) -> None:
"""Initialize the Sense binary sensor."""
super().__init__(device, coordinator, sense_monitor_id, device.id)
self._id = device.id
@property
def old_unique_id(self) -> str:
"""Return the old not so unique id of the binary sensor."""
return self._id
@property
def is_on(self) -> bool:
"""Return the state of the sensor."""
return self._device.is_on
async def _migrate_old_unique_ids(
hass: HomeAssistant, devices: list[SenseBinarySensor]
) -> None:
registry = er.async_get(hass)
for device in devices:
# Migration of old not so unique ids
old_entity_id = registry.async_get_entity_id(
"binary_sensor", DOMAIN, device.old_unique_id
)
updated_id = device.unique_id
if old_entity_id is not None and updated_id is not None:
_LOGGER.debug(
"Migrating unique_id from [%s] to [%s]",
device.old_unique_id,
device.unique_id,
)
registry.async_update_entity(old_entity_id, new_unique_id=updated_id)