diff --git a/homeassistant/helpers/service_info/bluetooth.py b/homeassistant/helpers/service_info/bluetooth.py index 003a4228d80..d4d74a45be4 100644 --- a/homeassistant/helpers/service_info/bluetooth.py +++ b/homeassistant/helpers/service_info/bluetooth.py @@ -1,60 +1,4 @@ """The bluetooth integration service info.""" -from __future__ import annotations - -import dataclasses -from functools import cached_property -from typing import TYPE_CHECKING - -from homeassistant.data_entry_flow import BaseServiceInfo - -if TYPE_CHECKING: - from bleak.backends.device import BLEDevice - from bleak.backends.scanner import AdvertisementData - - -@dataclasses.dataclass -class BluetoothServiceInfo(BaseServiceInfo): - """Prepared info from bluetooth entries.""" - - name: str - address: str - rssi: int - manufacturer_data: dict[int, bytes] - service_data: dict[str, bytes] - service_uuids: list[str] - source: str - - @classmethod - def from_advertisement( - cls, device: BLEDevice, advertisement_data: AdvertisementData, source: str - ) -> BluetoothServiceInfo: - """Create a BluetoothServiceInfo from an advertisement.""" - return cls( - name=advertisement_data.local_name or device.name or device.address, - address=device.address, - rssi=device.rssi, - manufacturer_data=advertisement_data.manufacturer_data, - service_data=advertisement_data.service_data, - service_uuids=advertisement_data.service_uuids, - source=source, - ) - - @cached_property - def manufacturer(self) -> str | None: - """Convert manufacturer data to a string.""" - from bleak.backends.device import ( # pylint: disable=import-outside-toplevel - MANUFACTURERS, - ) - - for manufacturer in self.manufacturer_data: - if manufacturer in MANUFACTURERS: - name: str = MANUFACTURERS[manufacturer] - return name - return None - - @cached_property - def manufacturer_id(self) -> int | None: - """Get the first manufacturer id.""" - for manufacturer in self.manufacturer_data: - return manufacturer - return None +from home_assistant_bluetooth import ( # pylint: disable=unused-import # noqa: F401 + BluetoothServiceInfo, +) diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index d19b95fa2d3..0d81d485829 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -15,6 +15,7 @@ ciso8601==2.2.0 cryptography==36.0.2 fnvhash==0.1.0 hass-nabucasa==0.54.1 +home-assistant-bluetooth==1.3.0 home-assistant-frontend==20220707.1 httpx==0.23.0 ifaddr==0.1.7 diff --git a/pyproject.toml b/pyproject.toml index 41059773977..9b4c99c1152 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ dependencies = [ # When bumping httpx, please check the version pins of # httpcore, anyio, and h11 in gen_requirements_all "httpx==0.23.0", + "home-assistant-bluetooth==1.3.0", "ifaddr==0.1.7", "jinja2==3.1.2", "lru-dict==1.1.8", diff --git a/requirements.txt b/requirements.txt index 84d8711753e..ea29bc59435 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,6 +11,7 @@ bcrypt==3.1.7 certifi>=2021.5.30 ciso8601==2.2.0 httpx==0.23.0 +home-assistant-bluetooth==1.3.0 ifaddr==0.1.7 jinja2==3.1.2 lru-dict==1.1.8