mirror of
https://github.com/elisspace/core.git
synced 2026-10-05 16:56:19 +00:00
Relocate BluetoothServiceInfo to helpers.service_info (#75195)
This commit is contained in:
@@ -2,16 +2,14 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Callable
|
||||
import dataclasses
|
||||
from enum import Enum
|
||||
import fnmatch
|
||||
from functools import cached_property
|
||||
import logging
|
||||
import platform
|
||||
from typing import Final, TypedDict
|
||||
|
||||
from bleak import BleakError
|
||||
from bleak.backends.device import MANUFACTURERS, BLEDevice
|
||||
from bleak.backends.device import BLEDevice
|
||||
from bleak.backends.scanner import AdvertisementData
|
||||
from lru import LRU # pylint: disable=no-name-in-module
|
||||
|
||||
@@ -23,8 +21,8 @@ from homeassistant.core import (
|
||||
HomeAssistant,
|
||||
callback as hass_callback,
|
||||
)
|
||||
from homeassistant.data_entry_flow import BaseServiceInfo
|
||||
from homeassistant.helpers import discovery_flow
|
||||
from homeassistant.helpers.service_info.bluetooth import BluetoothServiceInfo
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
from homeassistant.loader import (
|
||||
BluetoothMatcher,
|
||||
@@ -74,48 +72,6 @@ MANUFACTURER_ID: Final = "manufacturer_id"
|
||||
MANUFACTURER_DATA_FIRST_BYTE: Final = "manufacturer_data_first_byte"
|
||||
|
||||
|
||||
@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]
|
||||
|
||||
@classmethod
|
||||
def from_advertisement(
|
||||
cls, device: BLEDevice, advertisement_data: AdvertisementData
|
||||
) -> 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,
|
||||
)
|
||||
|
||||
@cached_property
|
||||
def manufacturer(self) -> str | None:
|
||||
"""Convert manufacturer data to a string."""
|
||||
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
|
||||
|
||||
|
||||
BluetoothChange = Enum("BluetoothChange", "ADVERTISEMENT")
|
||||
BluetoothCallback = Callable[[BluetoothServiceInfo, BluetoothChange], None]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user