From 3d29638804077662b87d4d295f4af8e0b4930b99 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 14 Nov 2022 20:12:53 +0200 Subject: [PATCH] Deduplicate `sensor_device_info_to_device_info` (#81905) Co-authored-by: J. Nick Koston --- .../components/bluemaestro/device.py | 18 +----------- .../components/bluemaestro/sensor.py | 5 ++-- .../components/bthome/binary_sensor.py | 5 ++-- homeassistant/components/bthome/device.py | 18 +----------- homeassistant/components/bthome/sensor.py | 5 ++-- homeassistant/components/govee_ble/sensor.py | 23 ++------------- homeassistant/components/inkbird/sensor.py | 23 ++------------- homeassistant/components/kegtron/device.py | 18 +----------- homeassistant/components/kegtron/sensor.py | 5 ++-- homeassistant/components/moat/sensor.py | 23 ++------------- homeassistant/components/oralb/device.py | 18 +----------- homeassistant/components/oralb/sensor.py | 5 ++-- .../components/qingping/binary_sensor.py | 5 ++-- homeassistant/components/qingping/device.py | 18 +----------- homeassistant/components/qingping/sensor.py | 5 ++-- .../components/ruuvitag_ble/sensor.py | 19 ++----------- homeassistant/components/sensorpro/device.py | 18 +----------- homeassistant/components/sensorpro/sensor.py | 5 ++-- homeassistant/components/sensorpush/sensor.py | 23 ++------------- .../components/thermobeacon/device.py | 18 +----------- .../components/thermobeacon/sensor.py | 5 ++-- homeassistant/components/thermopro/sensor.py | 22 ++------------- homeassistant/components/tilt_ble/sensor.py | 28 +++---------------- .../components/xiaomi_ble/binary_sensor.py | 5 ++-- homeassistant/components/xiaomi_ble/device.py | 18 +----------- homeassistant/components/xiaomi_ble/sensor.py | 5 ++-- homeassistant/helpers/sensor.py | 28 +++++++++++++++++++ 27 files changed, 89 insertions(+), 299 deletions(-) create mode 100644 homeassistant/helpers/sensor.py diff --git a/homeassistant/components/bluemaestro/device.py b/homeassistant/components/bluemaestro/device.py index 3d6e45468828..19d955dd945b 100644 --- a/homeassistant/components/bluemaestro/device.py +++ b/homeassistant/components/bluemaestro/device.py @@ -1,13 +1,11 @@ """Support for BlueMaestro devices.""" from __future__ import annotations -from bluemaestro_ble import DeviceKey, SensorDeviceInfo +from bluemaestro_ble import DeviceKey from homeassistant.components.bluetooth.passive_update_processor import ( PassiveBluetoothEntityKey, ) -from homeassistant.const import ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME -from homeassistant.helpers.entity import DeviceInfo def device_key_to_bluetooth_entity_key( @@ -15,17 +13,3 @@ def device_key_to_bluetooth_entity_key( ) -> PassiveBluetoothEntityKey: """Convert a device key to an entity key.""" return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) - - -def sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a bluemaestro device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info diff --git a/homeassistant/components/bluemaestro/sensor.py b/homeassistant/components/bluemaestro/sensor.py index 8afdef48d51c..7fff348d587f 100644 --- a/homeassistant/components/bluemaestro/sensor.py +++ b/homeassistant/components/bluemaestro/sensor.py @@ -31,9 +31,10 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key SENSOR_DESCRIPTIONS = { (BlueMaestroSensorDeviceClass.BATTERY, Units.PERCENTAGE): SensorEntityDescription( @@ -96,7 +97,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/bthome/binary_sensor.py b/homeassistant/components/bthome/binary_sensor.py index a048f9202b6b..bbd77f271a49 100644 --- a/homeassistant/components/bthome/binary_sensor.py +++ b/homeassistant/components/bthome/binary_sensor.py @@ -22,9 +22,10 @@ from homeassistant.components.bluetooth.passive_update_processor import ( ) from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key BINARY_SENSOR_DESCRIPTIONS = { BTHomeBinarySensorDeviceClass.BATTERY: BinarySensorEntityDescription( @@ -147,7 +148,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a binary sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/bthome/device.py b/homeassistant/components/bthome/device.py index bd011752db18..eecd8161d6c5 100644 --- a/homeassistant/components/bthome/device.py +++ b/homeassistant/components/bthome/device.py @@ -1,13 +1,11 @@ """Support for BTHome Bluetooth devices.""" from __future__ import annotations -from bthome_ble import DeviceKey, SensorDeviceInfo +from bthome_ble import DeviceKey from homeassistant.components.bluetooth.passive_update_processor import ( PassiveBluetoothEntityKey, ) -from homeassistant.const import ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME -from homeassistant.helpers.entity import DeviceInfo def device_key_to_bluetooth_entity_key( @@ -15,17 +13,3 @@ def device_key_to_bluetooth_entity_key( ) -> PassiveBluetoothEntityKey: """Convert a device key to an entity key.""" return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) - - -def sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info diff --git a/homeassistant/components/bthome/sensor.py b/homeassistant/components/bthome/sensor.py index 61f7603039e7..6493b2910852 100644 --- a/homeassistant/components/bthome/sensor.py +++ b/homeassistant/components/bthome/sensor.py @@ -39,9 +39,10 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key SENSOR_DESCRIPTIONS = { (BTHomeSensorDeviceClass.TEMPERATURE, Units.TEMP_CELSIUS): SensorEntityDescription( @@ -243,7 +244,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/govee_ble/sensor.py b/homeassistant/components/govee_ble/sensor.py index 4faa6befa06d..1d1932874195 100644 --- a/homeassistant/components/govee_ble/sensor.py +++ b/homeassistant/components/govee_ble/sensor.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Optional, Union -from govee_ble import DeviceClass, DeviceKey, SensorDeviceInfo, SensorUpdate, Units +from govee_ble import DeviceClass, DeviceKey, SensorUpdate, Units from homeassistant import config_entries from homeassistant.components.bluetooth.passive_update_processor import ( @@ -20,16 +20,13 @@ from homeassistant.components.sensor import ( SensorStateClass, ) from homeassistant.const import ( - ATTR_MANUFACTURER, - ATTR_MODEL, - ATTR_NAME, PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN @@ -72,27 +69,13 @@ def _device_key_to_bluetooth_entity_key( return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) -def _sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to hass device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info - - def sensor_update_to_bluetooth_data_update( sensor_update: SensorUpdate, ) -> PassiveBluetoothDataUpdate: """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: _sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/inkbird/sensor.py b/homeassistant/components/inkbird/sensor.py index 71d6f00ea403..d0e06e816470 100644 --- a/homeassistant/components/inkbird/sensor.py +++ b/homeassistant/components/inkbird/sensor.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Optional, Union -from inkbird_ble import DeviceClass, DeviceKey, SensorDeviceInfo, SensorUpdate, Units +from inkbird_ble import DeviceClass, DeviceKey, SensorUpdate, Units from homeassistant import config_entries from homeassistant.components.bluetooth.passive_update_processor import ( @@ -20,16 +20,13 @@ from homeassistant.components.sensor import ( SensorStateClass, ) from homeassistant.const import ( - ATTR_MANUFACTURER, - ATTR_MODEL, - ATTR_NAME, PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN @@ -72,27 +69,13 @@ def _device_key_to_bluetooth_entity_key( return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) -def _sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info - - def sensor_update_to_bluetooth_data_update( sensor_update: SensorUpdate, ) -> PassiveBluetoothDataUpdate: """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: _sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/kegtron/device.py b/homeassistant/components/kegtron/device.py index b97aed76b7d5..85516a3aea32 100644 --- a/homeassistant/components/kegtron/device.py +++ b/homeassistant/components/kegtron/device.py @@ -3,13 +3,11 @@ from __future__ import annotations import logging -from kegtron_ble import DeviceKey, SensorDeviceInfo +from kegtron_ble import DeviceKey from homeassistant.components.bluetooth.passive_update_processor import ( PassiveBluetoothEntityKey, ) -from homeassistant.const import ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME -from homeassistant.helpers.entity import DeviceInfo _LOGGER = logging.getLogger(__name__) @@ -19,17 +17,3 @@ def device_key_to_bluetooth_entity_key( ) -> PassiveBluetoothEntityKey: """Convert a device key to an entity key.""" return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) - - -def sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info diff --git a/homeassistant/components/kegtron/sensor.py b/homeassistant/components/kegtron/sensor.py index 892d8651185e..b9386dd9bb43 100644 --- a/homeassistant/components/kegtron/sensor.py +++ b/homeassistant/components/kegtron/sensor.py @@ -26,9 +26,10 @@ from homeassistant.const import SIGNAL_STRENGTH_DECIBELS_MILLIWATT, VOLUME_LITER from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key SENSOR_DESCRIPTIONS = { KegtronSensorDeviceClass.PORT_COUNT: SensorEntityDescription( @@ -85,7 +86,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/moat/sensor.py b/homeassistant/components/moat/sensor.py index c5e02a38dcd9..29133e11283e 100644 --- a/homeassistant/components/moat/sensor.py +++ b/homeassistant/components/moat/sensor.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Optional, Union -from moat_ble import DeviceClass, DeviceKey, SensorDeviceInfo, SensorUpdate, Units +from moat_ble import DeviceClass, DeviceKey, SensorUpdate, Units from homeassistant import config_entries from homeassistant.components.bluetooth.passive_update_processor import ( @@ -20,17 +20,14 @@ from homeassistant.components.sensor import ( SensorStateClass, ) from homeassistant.const import ( - ATTR_MANUFACTURER, - ATTR_MODEL, - ATTR_NAME, ELECTRIC_POTENTIAL_VOLT, PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN @@ -79,27 +76,13 @@ def _device_key_to_bluetooth_entity_key( return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) -def _sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to hass device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info - - def sensor_update_to_bluetooth_data_update( sensor_update: SensorUpdate, ) -> PassiveBluetoothDataUpdate: """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: _sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/oralb/device.py b/homeassistant/components/oralb/device.py index 0b9da5c3779b..3cc46fd27c66 100644 --- a/homeassistant/components/oralb/device.py +++ b/homeassistant/components/oralb/device.py @@ -1,13 +1,11 @@ """Support for OralB devices.""" from __future__ import annotations -from oralb_ble import DeviceKey, SensorDeviceInfo +from oralb_ble import DeviceKey from homeassistant.components.bluetooth.passive_update_processor import ( PassiveBluetoothEntityKey, ) -from homeassistant.const import ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME -from homeassistant.helpers.entity import DeviceInfo def device_key_to_bluetooth_entity_key( @@ -15,17 +13,3 @@ def device_key_to_bluetooth_entity_key( ) -> PassiveBluetoothEntityKey: """Convert a device key to an entity key.""" return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) - - -def sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a oralb device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info diff --git a/homeassistant/components/oralb/sensor.py b/homeassistant/components/oralb/sensor.py index 6fbc19b092ab..af1edd582f9d 100644 --- a/homeassistant/components/oralb/sensor.py +++ b/homeassistant/components/oralb/sensor.py @@ -22,9 +22,10 @@ from homeassistant.const import SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TIME_SECONDS from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key SENSOR_DESCRIPTIONS: dict[str, SensorEntityDescription] = { OralBSensor.TIME: SensorEntityDescription( @@ -67,7 +68,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/qingping/binary_sensor.py b/homeassistant/components/qingping/binary_sensor.py index 046792a2ff22..b3cb80ad0f23 100644 --- a/homeassistant/components/qingping/binary_sensor.py +++ b/homeassistant/components/qingping/binary_sensor.py @@ -22,9 +22,10 @@ from homeassistant.components.bluetooth.passive_update_processor import ( ) from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key BINARY_SENSOR_DESCRIPTIONS = { QingpingBinarySensorDeviceClass.MOTION: BinarySensorEntityDescription( @@ -52,7 +53,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/qingping/device.py b/homeassistant/components/qingping/device.py index 4e4f29b8db89..ec6bb23c2afe 100644 --- a/homeassistant/components/qingping/device.py +++ b/homeassistant/components/qingping/device.py @@ -1,13 +1,11 @@ """Support for Qingping devices.""" from __future__ import annotations -from qingping_ble import DeviceKey, SensorDeviceInfo +from qingping_ble import DeviceKey from homeassistant.components.bluetooth.passive_update_processor import ( PassiveBluetoothEntityKey, ) -from homeassistant.const import ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME -from homeassistant.helpers.entity import DeviceInfo def device_key_to_bluetooth_entity_key( @@ -15,17 +13,3 @@ def device_key_to_bluetooth_entity_key( ) -> PassiveBluetoothEntityKey: """Convert a device key to an entity key.""" return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) - - -def sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a qingping device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info diff --git a/homeassistant/components/qingping/sensor.py b/homeassistant/components/qingping/sensor.py index 1affd320af2e..6f1ad8118ab7 100644 --- a/homeassistant/components/qingping/sensor.py +++ b/homeassistant/components/qingping/sensor.py @@ -34,9 +34,10 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key SENSOR_DESCRIPTIONS = { (QingpingSensorDeviceClass.BATTERY, Units.PERCENTAGE): SensorEntityDescription( @@ -120,7 +121,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/ruuvitag_ble/sensor.py b/homeassistant/components/ruuvitag_ble/sensor.py index 463d6da2de27..e02851b38d5f 100644 --- a/homeassistant/components/ruuvitag_ble/sensor.py +++ b/homeassistant/components/ruuvitag_ble/sensor.py @@ -7,7 +7,6 @@ from sensor_state_data import ( DeviceKey, SensorDescription, SensorDeviceClass, - SensorDeviceInfo, SensorUpdate, Units, ) @@ -26,8 +25,8 @@ from homeassistant.components.sensor import ( SensorStateClass, ) from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN @@ -85,20 +84,6 @@ def _device_key_to_bluetooth_entity_key( return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) -def _sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to a sensor device info.""" - hass_device_info = DeviceInfo() - if sensor_device_info.name is not None: - hass_device_info[const.ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[const.ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[const.ATTR_MODEL] = sensor_device_info.model - return hass_device_info - - def _to_sensor_key( description: SensorDescription, ) -> tuple[SensorDeviceClass, Units | None]: @@ -112,7 +97,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: _sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/sensorpro/device.py b/homeassistant/components/sensorpro/device.py index b5b44eef50fa..326eb8b8bbd7 100644 --- a/homeassistant/components/sensorpro/device.py +++ b/homeassistant/components/sensorpro/device.py @@ -1,13 +1,11 @@ """Support for SensorPro devices.""" from __future__ import annotations -from sensorpro_ble import DeviceKey, SensorDeviceInfo +from sensorpro_ble import DeviceKey from homeassistant.components.bluetooth.passive_update_processor import ( PassiveBluetoothEntityKey, ) -from homeassistant.const import ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME -from homeassistant.helpers.entity import DeviceInfo def device_key_to_bluetooth_entity_key( @@ -15,17 +13,3 @@ def device_key_to_bluetooth_entity_key( ) -> PassiveBluetoothEntityKey: """Convert a device key to an entity key.""" return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) - - -def sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensorpro device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info diff --git a/homeassistant/components/sensorpro/sensor.py b/homeassistant/components/sensorpro/sensor.py index 8866ed445879..deb79e62bdc1 100644 --- a/homeassistant/components/sensorpro/sensor.py +++ b/homeassistant/components/sensorpro/sensor.py @@ -31,9 +31,10 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key SENSOR_DESCRIPTIONS = { (SensorProSensorDeviceClass.BATTERY, Units.PERCENTAGE): SensorEntityDescription( @@ -87,7 +88,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/sensorpush/sensor.py b/homeassistant/components/sensorpush/sensor.py index 8a4db7aff14a..58b569d5227e 100644 --- a/homeassistant/components/sensorpush/sensor.py +++ b/homeassistant/components/sensorpush/sensor.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Optional, Union -from sensorpush_ble import DeviceClass, DeviceKey, SensorDeviceInfo, SensorUpdate, Units +from sensorpush_ble import DeviceClass, DeviceKey, SensorUpdate, Units from homeassistant import config_entries from homeassistant.components.bluetooth.passive_update_processor import ( @@ -20,17 +20,14 @@ from homeassistant.components.sensor import ( SensorStateClass, ) from homeassistant.const import ( - ATTR_MANUFACTURER, - ATTR_MODEL, - ATTR_NAME, PERCENTAGE, PRESSURE_MBAR, SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN @@ -73,27 +70,13 @@ def _device_key_to_bluetooth_entity_key( return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) -def _sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info - - def sensor_update_to_bluetooth_data_update( sensor_update: SensorUpdate, ) -> PassiveBluetoothDataUpdate: """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: _sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/thermobeacon/device.py b/homeassistant/components/thermobeacon/device.py index 327a206042af..fe8a499d6ed0 100644 --- a/homeassistant/components/thermobeacon/device.py +++ b/homeassistant/components/thermobeacon/device.py @@ -1,13 +1,11 @@ """Support for ThermoBeacon devices.""" from __future__ import annotations -from thermobeacon_ble import DeviceKey, SensorDeviceInfo +from thermobeacon_ble import DeviceKey from homeassistant.components.bluetooth.passive_update_processor import ( PassiveBluetoothEntityKey, ) -from homeassistant.const import ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME -from homeassistant.helpers.entity import DeviceInfo def device_key_to_bluetooth_entity_key( @@ -15,17 +13,3 @@ def device_key_to_bluetooth_entity_key( ) -> PassiveBluetoothEntityKey: """Convert a device key to an entity key.""" return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) - - -def sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a thermobeacon device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info diff --git a/homeassistant/components/thermobeacon/sensor.py b/homeassistant/components/thermobeacon/sensor.py index 83b616f8d84d..900aacbf7a7f 100644 --- a/homeassistant/components/thermobeacon/sensor.py +++ b/homeassistant/components/thermobeacon/sensor.py @@ -31,9 +31,10 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key SENSOR_DESCRIPTIONS = { (ThermoBeaconSensorDeviceClass.BATTERY, Units.PERCENTAGE): SensorEntityDescription( @@ -87,7 +88,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/thermopro/sensor.py b/homeassistant/components/thermopro/sensor.py index 505f620229ce..22a6e2f086ab 100644 --- a/homeassistant/components/thermopro/sensor.py +++ b/homeassistant/components/thermopro/sensor.py @@ -6,7 +6,6 @@ from typing import Optional, Union from thermopro_ble import ( DeviceKey, SensorDeviceClass as ThermoProSensorDeviceClass, - SensorDeviceInfo, SensorUpdate, Units, ) @@ -26,16 +25,13 @@ from homeassistant.components.sensor import ( SensorStateClass, ) from homeassistant.const import ( - ATTR_MANUFACTURER, - ATTR_MODEL, - ATTR_NAME, PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN @@ -75,27 +71,13 @@ def _device_key_to_bluetooth_entity_key( return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) -def _sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info - - def sensor_update_to_bluetooth_data_update( sensor_update: SensorUpdate, ) -> PassiveBluetoothDataUpdate: """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: _sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/tilt_ble/sensor.py b/homeassistant/components/tilt_ble/sensor.py index 54d05b3c9001..bddae2ca0270 100644 --- a/homeassistant/components/tilt_ble/sensor.py +++ b/homeassistant/components/tilt_ble/sensor.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import Optional, Union -from tilt_ble import DeviceClass, DeviceKey, SensorDeviceInfo, SensorUpdate, Units +from tilt_ble import DeviceClass, DeviceKey, SensorUpdate, Units from homeassistant import config_entries from homeassistant.components.bluetooth.passive_update_processor import ( @@ -19,16 +19,10 @@ from homeassistant.components.sensor import ( SensorEntityDescription, SensorStateClass, ) -from homeassistant.const import ( - ATTR_MANUFACTURER, - ATTR_MODEL, - ATTR_NAME, - SIGNAL_STRENGTH_DECIBELS_MILLIWATT, - TEMP_FAHRENHEIT, -) +from homeassistant.const import SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_FAHRENHEIT from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN @@ -63,27 +57,13 @@ def _device_key_to_bluetooth_entity_key( return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) -def _sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info - - def sensor_update_to_bluetooth_data_update( sensor_update: SensorUpdate, ) -> PassiveBluetoothDataUpdate: """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: _sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/xiaomi_ble/binary_sensor.py b/homeassistant/components/xiaomi_ble/binary_sensor.py index 4de491ab9ddb..6fc6c3c27619 100644 --- a/homeassistant/components/xiaomi_ble/binary_sensor.py +++ b/homeassistant/components/xiaomi_ble/binary_sensor.py @@ -22,9 +22,10 @@ from homeassistant.components.bluetooth.passive_update_processor import ( ) from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key BINARY_SENSOR_DESCRIPTIONS = { XiaomiBinarySensorDeviceClass.MOTION: BinarySensorEntityDescription( @@ -51,7 +52,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/components/xiaomi_ble/device.py b/homeassistant/components/xiaomi_ble/device.py index 4ddfc31ae51d..5714db4eadd7 100644 --- a/homeassistant/components/xiaomi_ble/device.py +++ b/homeassistant/components/xiaomi_ble/device.py @@ -1,13 +1,11 @@ """Support for Xioami BLE devices.""" from __future__ import annotations -from xiaomi_ble import DeviceKey, SensorDeviceInfo +from xiaomi_ble import DeviceKey from homeassistant.components.bluetooth.passive_update_processor import ( PassiveBluetoothEntityKey, ) -from homeassistant.const import ATTR_MANUFACTURER, ATTR_MODEL, ATTR_NAME -from homeassistant.helpers.entity import DeviceInfo def device_key_to_bluetooth_entity_key( @@ -15,17 +13,3 @@ def device_key_to_bluetooth_entity_key( ) -> PassiveBluetoothEntityKey: """Convert a device key to an entity key.""" return PassiveBluetoothEntityKey(device_key.key, device_key.device_id) - - -def sensor_device_info_to_hass( - sensor_device_info: SensorDeviceInfo, -) -> DeviceInfo: - """Convert a sensor device info to a sensor device info.""" - hass_device_info = DeviceInfo({}) - if sensor_device_info.name is not None: - hass_device_info[ATTR_NAME] = sensor_device_info.name - if sensor_device_info.manufacturer is not None: - hass_device_info[ATTR_MANUFACTURER] = sensor_device_info.manufacturer - if sensor_device_info.model is not None: - hass_device_info[ATTR_MODEL] = sensor_device_info.model - return hass_device_info diff --git a/homeassistant/components/xiaomi_ble/sensor.py b/homeassistant/components/xiaomi_ble/sensor.py index 033d6b7daf06..831b5d0910be 100644 --- a/homeassistant/components/xiaomi_ble/sensor.py +++ b/homeassistant/components/xiaomi_ble/sensor.py @@ -31,9 +31,10 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info from .const import DOMAIN -from .device import device_key_to_bluetooth_entity_key, sensor_device_info_to_hass +from .device import device_key_to_bluetooth_entity_key SENSOR_DESCRIPTIONS = { (DeviceClass.BATTERY, Units.PERCENTAGE): SensorEntityDescription( @@ -121,7 +122,7 @@ def sensor_update_to_bluetooth_data_update( """Convert a sensor update to a bluetooth data update.""" return PassiveBluetoothDataUpdate( devices={ - device_id: sensor_device_info_to_hass(device_info) + device_id: sensor_device_info_to_hass_device_info(device_info) for device_id, device_info in sensor_update.devices.items() }, entity_descriptions={ diff --git a/homeassistant/helpers/sensor.py b/homeassistant/helpers/sensor.py new file mode 100644 index 000000000000..f206ac55bddf --- /dev/null +++ b/homeassistant/helpers/sensor.py @@ -0,0 +1,28 @@ +"""Common functions related to sensor device management.""" +from __future__ import annotations + +from typing import TYPE_CHECKING + +from homeassistant import const + +from .entity import DeviceInfo + +if TYPE_CHECKING: + # `sensor_state_data` is a second-party library (i.e. maintained by Home Assistant + # core members) which is not strictly required by Home Assistant. + # Therefore, we import it as a type hint only. + from sensor_state_data import SensorDeviceInfo + + +def sensor_device_info_to_hass_device_info( + sensor_device_info: SensorDeviceInfo, +) -> DeviceInfo: + """Convert a sensor_state_data sensor device info to a Home Assistant device info.""" + device_info = DeviceInfo() + if sensor_device_info.name is not None: + device_info[const.ATTR_NAME] = sensor_device_info.name + if sensor_device_info.manufacturer is not None: + device_info[const.ATTR_MANUFACTURER] = sensor_device_info.manufacturer + if sensor_device_info.model is not None: + device_info[const.ATTR_MODEL] = sensor_device_info.model + return device_info