From c7416c0bb95dd40d7f8bebc6fc5773a849e5c300 Mon Sep 17 00:00:00 2001 From: Matrix Date: Sat, 4 Jun 2022 23:54:39 +0800 Subject: [PATCH] Add yolink vibration sensor (#72926) * Add yolink vibration sensor * add battery entity * fix suggest --- .../components/yolink/binary_sensor.py | 9 +++++++ homeassistant/components/yolink/const.py | 1 + homeassistant/components/yolink/sensor.py | 25 +++++++++++++------ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/yolink/binary_sensor.py b/homeassistant/components/yolink/binary_sensor.py index cacba484fe9..d5c9ddedb84 100644 --- a/homeassistant/components/yolink/binary_sensor.py +++ b/homeassistant/components/yolink/binary_sensor.py @@ -21,6 +21,7 @@ from .const import ( ATTR_DEVICE_DOOR_SENSOR, ATTR_DEVICE_LEAK_SENSOR, ATTR_DEVICE_MOTION_SENSOR, + ATTR_DEVICE_VIBRATION_SENSOR, DOMAIN, ) from .coordinator import YoLinkCoordinator @@ -40,6 +41,7 @@ SENSOR_DEVICE_TYPE = [ ATTR_DEVICE_DOOR_SENSOR, ATTR_DEVICE_MOTION_SENSOR, ATTR_DEVICE_LEAK_SENSOR, + ATTR_DEVICE_VIBRATION_SENSOR, ] SENSOR_TYPES: tuple[YoLinkBinarySensorEntityDescription, ...] = ( @@ -66,6 +68,13 @@ SENSOR_TYPES: tuple[YoLinkBinarySensorEntityDescription, ...] = ( value=lambda value: value == "alert" if value is not None else None, exists_fn=lambda device: device.device_type in [ATTR_DEVICE_LEAK_SENSOR], ), + YoLinkBinarySensorEntityDescription( + key="vibration_state", + name="Vibration", + device_class=BinarySensorDeviceClass.VIBRATION, + value=lambda value: value == "alert" if value is not None else None, + exists_fn=lambda device: device.device_type in [ATTR_DEVICE_VIBRATION_SENSOR], + ), ) diff --git a/homeassistant/components/yolink/const.py b/homeassistant/components/yolink/const.py index 97252c5c989..16304e0de4b 100644 --- a/homeassistant/components/yolink/const.py +++ b/homeassistant/components/yolink/const.py @@ -17,5 +17,6 @@ ATTR_DEVICE_DOOR_SENSOR = "DoorSensor" ATTR_DEVICE_TH_SENSOR = "THSensor" ATTR_DEVICE_MOTION_SENSOR = "MotionSensor" ATTR_DEVICE_LEAK_SENSOR = "LeakSensor" +ATTR_DEVICE_VIBRATION_SENSOR = "VibrationSensor" ATTR_DEVICE_OUTLET = "Outlet" ATTR_DEVICE_SIREN = "Siren" diff --git a/homeassistant/components/yolink/sensor.py b/homeassistant/components/yolink/sensor.py index 463d8b14da4..917a93c310d 100644 --- a/homeassistant/components/yolink/sensor.py +++ b/homeassistant/components/yolink/sensor.py @@ -23,6 +23,7 @@ from .const import ( ATTR_DEVICE_DOOR_SENSOR, ATTR_DEVICE_MOTION_SENSOR, ATTR_DEVICE_TH_SENSOR, + ATTR_DEVICE_VIBRATION_SENSOR, DOMAIN, ) from .coordinator import YoLinkCoordinator @@ -45,6 +46,21 @@ class YoLinkSensorEntityDescription( value: Callable = lambda state: state +SENSOR_DEVICE_TYPE = [ + ATTR_DEVICE_DOOR_SENSOR, + ATTR_DEVICE_MOTION_SENSOR, + ATTR_DEVICE_TH_SENSOR, + ATTR_DEVICE_VIBRATION_SENSOR, +] + +BATTERY_POWER_SENSOR = [ + ATTR_DEVICE_DOOR_SENSOR, + ATTR_DEVICE_TH_SENSOR, + ATTR_DEVICE_MOTION_SENSOR, + ATTR_DEVICE_VIBRATION_SENSOR, +] + + SENSOR_TYPES: tuple[YoLinkSensorEntityDescription, ...] = ( YoLinkSensorEntityDescription( key="battery", @@ -57,8 +73,7 @@ SENSOR_TYPES: tuple[YoLinkSensorEntityDescription, ...] = ( ) if value is not None else None, - exists_fn=lambda device: device.device_type - in [ATTR_DEVICE_DOOR_SENSOR, ATTR_DEVICE_TH_SENSOR, ATTR_DEVICE_MOTION_SENSOR], + exists_fn=lambda device: device.device_type in BATTERY_POWER_SENSOR, ), YoLinkSensorEntityDescription( key="humidity", @@ -78,12 +93,6 @@ SENSOR_TYPES: tuple[YoLinkSensorEntityDescription, ...] = ( ), ) -SENSOR_DEVICE_TYPE = [ - ATTR_DEVICE_DOOR_SENSOR, - ATTR_DEVICE_MOTION_SENSOR, - ATTR_DEVICE_TH_SENSOR, -] - async def async_setup_entry( hass: HomeAssistant,