forked from platypush/platypush
Support for custom Bluetooth adapter on switchbot.bluetooth
.
This commit is contained in:
parent
8469a1027f
commit
f30e077a5a
1 changed files with 10 additions and 2 deletions
|
@ -53,11 +53,13 @@ class SwitchbotBluetoothPlugin(AsyncRunnablePlugin, EnumSwitchEntityManager):
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
interface: Optional[str] = None,
|
||||||
connect_timeout: Optional[float] = 5,
|
connect_timeout: Optional[float] = 5,
|
||||||
device_names: Optional[Dict[str, str]] = None,
|
device_names: Optional[Dict[str, str]] = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
|
:param interface: Name of the Bluetooth interface to use (default: first available).
|
||||||
:param connect_timeout: Timeout in seconds for the connection to the
|
:param connect_timeout: Timeout in seconds for the connection to the
|
||||||
Switchbot device. Default: 5 seconds
|
Switchbot device. Default: 5 seconds
|
||||||
:param device_names: Bluetooth address -> device name mapping. If not
|
:param device_names: Bluetooth address -> device name mapping. If not
|
||||||
|
@ -75,6 +77,7 @@ class SwitchbotBluetoothPlugin(AsyncRunnablePlugin, EnumSwitchEntityManager):
|
||||||
"""
|
"""
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
self._interface = interface
|
||||||
self._connect_timeout = connect_timeout if connect_timeout else 5
|
self._connect_timeout = connect_timeout if connect_timeout else 5
|
||||||
self._scan_lock = RLock()
|
self._scan_lock = RLock()
|
||||||
self._devices: Dict[str, BLEDevice] = {}
|
self._devices: Dict[str, BLEDevice] = {}
|
||||||
|
@ -95,7 +98,9 @@ class SwitchbotBluetoothPlugin(AsyncRunnablePlugin, EnumSwitchEntityManager):
|
||||||
Switchbot registered ``tx`` service.
|
Switchbot registered ``tx`` service.
|
||||||
"""
|
"""
|
||||||
dev = await self._get_device(device)
|
dev = await self._get_device(device)
|
||||||
async with BleakClient(dev.address, timeout=self._connect_timeout) as client:
|
async with BleakClient(
|
||||||
|
dev.address, adapter=self._interface, timeout=self._connect_timeout
|
||||||
|
) as client:
|
||||||
await client.write_gatt_char(str(uuid), command.value)
|
await client.write_gatt_char(str(uuid), command.value)
|
||||||
|
|
||||||
async def _get_device(self, device: str) -> BLEDevice:
|
async def _get_device(self, device: str) -> BLEDevice:
|
||||||
|
@ -196,7 +201,10 @@ class SwitchbotBluetoothPlugin(AsyncRunnablePlugin, EnumSwitchEntityManager):
|
||||||
async def _scan(self, duration: Optional[float] = None) -> Collection[Entity]:
|
async def _scan(self, duration: Optional[float] = None) -> Collection[Entity]:
|
||||||
with self._scan_lock:
|
with self._scan_lock:
|
||||||
timeout = duration or self.poll_interval or 5
|
timeout = duration or self.poll_interval or 5
|
||||||
devices = await BleakScanner.discover(timeout=timeout)
|
devices = await BleakScanner.discover(
|
||||||
|
adapter=self._interface, timeout=timeout
|
||||||
|
)
|
||||||
|
|
||||||
compatible_devices = [
|
compatible_devices = [
|
||||||
d
|
d
|
||||||
for d in devices
|
for d in devices
|
||||||
|
|
Loading…
Reference in a new issue