From 828ea99c61c170bb096e6d64cb3fb6042d6ec920 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 10 Aug 2022 15:34:48 -1000 Subject: [PATCH] Add door sensors to Yale Access Bluetooth (#76571) --- .coveragerc | 1 + .../components/yalexs_ble/__init__.py | 2 +- .../components/yalexs_ble/binary_sensor.py | 41 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 homeassistant/components/yalexs_ble/binary_sensor.py diff --git a/.coveragerc b/.coveragerc index 2616f4b6e16..4e88d171d57 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1484,6 +1484,7 @@ omit = homeassistant/components/xmpp/notify.py homeassistant/components/xs1/* homeassistant/components/yalexs_ble/__init__.py + homeassistant/components/yalexs_ble/binary_sensor.py homeassistant/components/yalexs_ble/entity.py homeassistant/components/yalexs_ble/lock.py homeassistant/components/yalexs_ble/util.py diff --git a/homeassistant/components/yalexs_ble/__init__.py b/homeassistant/components/yalexs_ble/__init__.py index 5a1cf461e5d..e38dba00ef8 100644 --- a/homeassistant/components/yalexs_ble/__init__.py +++ b/homeassistant/components/yalexs_ble/__init__.py @@ -16,7 +16,7 @@ from .const import CONF_KEY, CONF_LOCAL_NAME, CONF_SLOT, DEVICE_TIMEOUT, DOMAIN from .models import YaleXSBLEData from .util import async_find_existing_service_info, bluetooth_callback_matcher -PLATFORMS: list[Platform] = [Platform.LOCK] +PLATFORMS: list[Platform] = [Platform.BINARY_SENSOR, Platform.LOCK] async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: diff --git a/homeassistant/components/yalexs_ble/binary_sensor.py b/homeassistant/components/yalexs_ble/binary_sensor.py new file mode 100644 index 00000000000..3ee88dbaa5e --- /dev/null +++ b/homeassistant/components/yalexs_ble/binary_sensor.py @@ -0,0 +1,41 @@ +"""Support for yalexs ble binary sensors.""" +from __future__ import annotations + +from yalexs_ble import ConnectionInfo, DoorStatus, LockInfo, LockState + +from homeassistant import config_entries +from homeassistant.components.binary_sensor import ( + BinarySensorDeviceClass, + BinarySensorEntity, +) +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from .const import DOMAIN +from .entity import YALEXSBLEEntity +from .models import YaleXSBLEData + + +async def async_setup_entry( + hass: HomeAssistant, + entry: config_entries.ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Set up YALE XS binary sensors.""" + data: YaleXSBLEData = hass.data[DOMAIN][entry.entry_id] + async_add_entities([YaleXSBLEDoorSensor(data)]) + + +class YaleXSBLEDoorSensor(YALEXSBLEEntity, BinarySensorEntity): + """Yale XS BLE binary sensor.""" + + _attr_device_class = BinarySensorDeviceClass.DOOR + _attr_has_entity_name = True + + @callback + def _async_update_state( + self, new_state: LockState, lock_info: LockInfo, connection_info: ConnectionInfo + ) -> None: + """Update the state.""" + self._attr_is_on = new_state.door == DoorStatus.OPENED + super()._async_update_state(new_state, lock_info, connection_info)