* Update switchbot to be local push * fixes * fixes * fixes * fixes * adjust * cover is not assumed anymore * cleanups * adjust * adjust * add missing cover * import compat * fixes * uses lower * uses lower * bleak users upper case addresses * fixes * bump * keep conf_mac and deprecated options for rollback * reuse coordinator * adjust * move around * move around * move around * move around * refactor fixes * compat with DataUpdateCoordinator * fix available * Update homeassistant/components/bluetooth/passive_update_processor.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update homeassistant/components/bluetooth/passive_update_coordinator.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update homeassistant/components/bluetooth/update_coordinator.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Split bluetooth coordinator into PassiveBluetoothDataUpdateCoordinator and PassiveBluetoothProcessorCoordinator The PassiveBluetoothDataUpdateCoordinator is now used to replace instances of DataUpdateCoordinator where the data is coming from bluetooth advertisements, and the integration may also mix in active updates The PassiveBluetoothProcessorCoordinator is used for integrations that want to process each bluetooth advertisement with multiple processors which can be dispatched to individual platforms or areas or the integration as it chooes * change connections * reduce code churn to reduce review overhead * reduce code churn to reduce review overhead * Update homeassistant/components/bluetooth/passive_update_coordinator.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * add basic test * add basic test * complete coverage * Update homeassistant/components/switchbot/coordinator.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update homeassistant/components/switchbot/coordinator.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update homeassistant/components/switchbot/__init__.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update homeassistant/components/switchbot/__init__.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * lint Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
"""Support for SwitchBot binary sensors."""
|
|
from __future__ import annotations
|
|
|
|
from homeassistant.components.binary_sensor import (
|
|
BinarySensorEntity,
|
|
BinarySensorEntityDescription,
|
|
)
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_ADDRESS, CONF_NAME
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity import EntityCategory
|
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|
|
|
from .const import DOMAIN
|
|
from .coordinator import SwitchbotDataUpdateCoordinator
|
|
from .entity import SwitchbotEntity
|
|
|
|
PARALLEL_UPDATES = 1
|
|
|
|
BINARY_SENSOR_TYPES: dict[str, BinarySensorEntityDescription] = {
|
|
"calibration": BinarySensorEntityDescription(
|
|
key="calibration",
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
}
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
|
) -> None:
|
|
"""Set up Switchbot curtain based on a config entry."""
|
|
coordinator: SwitchbotDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
|
unique_id = entry.unique_id
|
|
assert unique_id is not None
|
|
async_add_entities(
|
|
[
|
|
SwitchBotBinarySensor(
|
|
coordinator,
|
|
unique_id,
|
|
binary_sensor,
|
|
entry.data[CONF_ADDRESS],
|
|
entry.data[CONF_NAME],
|
|
)
|
|
for binary_sensor in coordinator.data["data"]
|
|
if binary_sensor in BINARY_SENSOR_TYPES
|
|
]
|
|
)
|
|
|
|
|
|
class SwitchBotBinarySensor(SwitchbotEntity, BinarySensorEntity):
|
|
"""Representation of a Switchbot binary sensor."""
|
|
|
|
def __init__(
|
|
self,
|
|
coordinator: SwitchbotDataUpdateCoordinator,
|
|
unique_id: str,
|
|
binary_sensor: str,
|
|
mac: str,
|
|
switchbot_name: str,
|
|
) -> None:
|
|
"""Initialize the Switchbot sensor."""
|
|
super().__init__(coordinator, unique_id, mac, name=switchbot_name)
|
|
self._sensor = binary_sensor
|
|
self._attr_unique_id = f"{unique_id}-{binary_sensor}"
|
|
self._attr_name = f"{switchbot_name} {binary_sensor.title()}"
|
|
self.entity_description = BINARY_SENSOR_TYPES[binary_sensor]
|
|
|
|
@property
|
|
def is_on(self) -> bool:
|
|
"""Return the state of the sensor."""
|
|
return self.data["data"][self._sensor]
|