Send back BLE address type when connecting via esphome proxies (#82890)

This commit is contained in:
J. Nick Koston 2022-11-28 18:54:53 -10:00 committed by GitHub
parent 1748a19242
commit 46b18367f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 19 additions and 4 deletions

View File

@ -73,6 +73,7 @@ class BaseHaScanner:
"address": device_adv[0].address, "address": device_adv[0].address,
"rssi": device_adv[0].rssi, "rssi": device_adv[0].rssi,
"advertisement_data": device_adv[1], "advertisement_data": device_adv[1],
"details": device_adv[0].details,
} }
for device_adv in self.discovered_devices_and_advertisement_data.values() for device_adv in self.discovered_devices_and_advertisement_data.values()
], ],
@ -162,6 +163,7 @@ class BaseHaRemoteScanner(BaseHaScanner):
service_data: dict[str, bytes], service_data: dict[str, bytes],
manufacturer_data: dict[int, bytes], manufacturer_data: dict[int, bytes],
tx_power: int | None, tx_power: int | None,
details: dict[Any, Any],
) -> None: ) -> None:
"""Call the registered callback.""" """Call the registered callback."""
now = MONOTONIC_TIME() now = MONOTONIC_TIME()
@ -201,7 +203,7 @@ class BaseHaRemoteScanner(BaseHaScanner):
device = BLEDevice( # type: ignore[no-untyped-call] device = BLEDevice( # type: ignore[no-untyped-call]
address=address, address=address,
name=local_name, name=local_name,
details=self._details, details=self._details | details,
rssi=rssi, # deprecated, will be removed in newer bleak rssi=rssi, # deprecated, will be removed in newer bleak
) )
self._discovered_device_advertisement_datas[address] = ( self._discovered_device_advertisement_datas[address] = (

View File

@ -147,6 +147,7 @@ class ESPHomeClient(BaseBleakClient):
device_info = self.entry_data.device_info device_info = self.entry_data.device_info
assert device_info is not None assert device_info is not None
self._connection_version = device_info.bluetooth_proxy_version self._connection_version = device_info.bluetooth_proxy_version
self._address_type = address_or_ble_device.details["address_type"]
def __str__(self) -> str: def __str__(self) -> str:
"""Return the string representation of the client.""" """Return the string representation of the client."""
@ -292,6 +293,7 @@ class ESPHomeClient(BaseBleakClient):
timeout=timeout, timeout=timeout,
has_cache=has_cache, has_cache=has_cache,
version=self._connection_version, version=self._connection_version,
address_type=self._address_type,
) )
) )
except Exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except

View File

@ -27,6 +27,7 @@ class ESPHomeScanner(BaseHaRemoteScanner):
adv.service_data, adv.service_data,
adv.manufacturer_data, adv.manufacturer_data,
None, None,
{"address_type": adv.address_type},
) )
async def async_diagnostics(self) -> dict[str, Any]: async def async_diagnostics(self) -> dict[str, Any]:
@ -39,6 +40,7 @@ class ESPHomeScanner(BaseHaRemoteScanner):
"address": device_adv[0].address, "address": device_adv[0].address,
"rssi": device_adv[0].rssi, "rssi": device_adv[0].rssi,
"advertisement_data": device_adv[1], "advertisement_data": device_adv[1],
"details": device_adv[0].details,
} }
for device_adv in self.discovered_devices_and_advertisement_data.values() for device_adv in self.discovered_devices_and_advertisement_data.values()
], ],

View File

@ -3,7 +3,7 @@
"name": "ESPHome", "name": "ESPHome",
"config_flow": true, "config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/esphome", "documentation": "https://www.home-assistant.io/integrations/esphome",
"requirements": ["aioesphomeapi==12.1.0"], "requirements": ["aioesphomeapi==12.2.0"],
"zeroconf": ["_esphomelib._tcp.local."], "zeroconf": ["_esphomelib._tcp.local."],
"dhcp": [{ "registered_devices": true }], "dhcp": [{ "registered_devices": true }],
"codeowners": ["@OttoWinter", "@jesserockz"], "codeowners": ["@OttoWinter", "@jesserockz"],

View File

@ -44,4 +44,5 @@ class ShellyBLEScanner(BaseHaRemoteScanner):
parsed.service_data, parsed.service_data,
parsed.manufacturer_data, parsed.manufacturer_data,
parsed.tx_power, parsed.tx_power,
{},
) )

View File

@ -156,7 +156,7 @@ aioecowitt==2022.09.3
aioemonitor==1.0.5 aioemonitor==1.0.5
# homeassistant.components.esphome # homeassistant.components.esphome
aioesphomeapi==12.1.0 aioesphomeapi==12.2.0
# homeassistant.components.flo # homeassistant.components.flo
aioflo==2021.11.0 aioflo==2021.11.0

View File

@ -143,7 +143,7 @@ aioecowitt==2022.09.3
aioemonitor==1.0.5 aioemonitor==1.0.5
# homeassistant.components.esphome # homeassistant.components.esphome
aioesphomeapi==12.1.0 aioesphomeapi==12.2.0
# homeassistant.components.flo # homeassistant.components.flo
aioflo==2021.11.0 aioflo==2021.11.0

View File

@ -64,6 +64,7 @@ async def test_remote_scanner(hass, enable_bluetooth):
advertisement_data.service_data, advertisement_data.service_data,
advertisement_data.manufacturer_data, advertisement_data.manufacturer_data,
advertisement_data.tx_power, advertisement_data.tx_power,
{"scanner_specific_data": "test"},
) )
new_info_callback = manager.scanner_adv_received new_info_callback = manager.scanner_adv_received
@ -134,6 +135,7 @@ async def test_remote_scanner_expires_connectable(hass, enable_bluetooth):
advertisement_data.service_data, advertisement_data.service_data,
advertisement_data.manufacturer_data, advertisement_data.manufacturer_data,
advertisement_data.tx_power, advertisement_data.tx_power,
{"scanner_specific_data": "test"},
) )
new_info_callback = manager.scanner_adv_received new_info_callback = manager.scanner_adv_received
@ -204,6 +206,7 @@ async def test_remote_scanner_expires_non_connectable(hass, enable_bluetooth):
advertisement_data.service_data, advertisement_data.service_data,
advertisement_data.manufacturer_data, advertisement_data.manufacturer_data,
advertisement_data.tx_power, advertisement_data.tx_power,
{"scanner_specific_data": "test"},
) )
new_info_callback = manager.scanner_adv_received new_info_callback = manager.scanner_adv_received
@ -297,6 +300,7 @@ async def test_base_scanner_connecting_behavior(hass, enable_bluetooth):
advertisement_data.service_data, advertisement_data.service_data,
advertisement_data.manufacturer_data, advertisement_data.manufacturer_data,
advertisement_data.tx_power, advertisement_data.tx_power,
{"scanner_specific_data": "test"},
) )
new_info_callback = manager.scanner_adv_received new_info_callback = manager.scanner_adv_received

View File

@ -155,6 +155,7 @@ async def test_diagnostics(
], ],
"name": "x", "name": "x",
"rssi": -60, "rssi": -60,
"details": None,
} }
], ],
"last_detection": ANY, "last_detection": ANY,
@ -179,6 +180,7 @@ async def test_diagnostics(
], ],
"name": "x", "name": "x",
"rssi": -60, "rssi": -60,
"details": None,
} }
], ],
"last_detection": ANY, "last_detection": ANY,
@ -203,6 +205,7 @@ async def test_diagnostics(
], ],
"name": "x", "name": "x",
"rssi": -60, "rssi": -60,
"details": None,
} }
], ],
"last_detection": ANY, "last_detection": ANY,
@ -366,6 +369,7 @@ async def test_diagnostics_macos(
], ],
"name": "x", "name": "x",
"rssi": -60, "rssi": -60,
"details": None,
} }
], ],
"last_detection": ANY, "last_detection": ANY,