Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Bluetooth support for shelly."""
2 
3 from __future__ import annotations
4 
5 from typing import TYPE_CHECKING
6 
7 from aioshelly.ble import async_start_scanner, create_scanner
8 from aioshelly.ble.const import BLE_SCAN_RESULT_EVENT, BLE_SCAN_RESULT_VERSION
9 
10 from homeassistant.components.bluetooth import async_register_scanner
11 from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback as hass_callback
12 from homeassistant.helpers.device_registry import format_mac
13 
14 from ..const import BLEScannerMode
15 
16 if TYPE_CHECKING:
17  from ..coordinator import ShellyRpcCoordinator
18 
19 
21  hass: HomeAssistant,
22  coordinator: ShellyRpcCoordinator,
23  scanner_mode: BLEScannerMode,
24 ) -> CALLBACK_TYPE:
25  """Connect scanner."""
26  device = coordinator.device
27  entry = coordinator.entry
28  source = format_mac(coordinator.mac).upper()
29  scanner = create_scanner(source, entry.title)
30  unload_callbacks = [
31  async_register_scanner(hass, scanner),
32  scanner.async_setup(),
33  coordinator.async_subscribe_events(scanner.async_on_event),
34  ]
35  await async_start_scanner(
36  device=device,
37  active=scanner_mode == BLEScannerMode.ACTIVE,
38  event_type=BLE_SCAN_RESULT_EVENT,
39  data_version=BLE_SCAN_RESULT_VERSION,
40  )
41 
42  @hass_callback
43  def _async_unload() -> None:
44  for callback in unload_callbacks:
45  callback()
46 
47  return _async_unload
CALLBACK_TYPE async_register_scanner(HomeAssistant hass, BaseHaScanner scanner, int|None connection_slots=None)
Definition: api.py:181
None _async_unload(list[CALLBACK_TYPE] unload_callbacks)
Definition: bluetooth.py:19
CALLBACK_TYPE async_connect_scanner(HomeAssistant hass, ShellyRpcCoordinator coordinator, BLEScannerMode scanner_mode)
Definition: __init__.py:24