forked from platypush/platypush
The bluetooth BLE plugin must also implement get_measurement to work with the scanner backend
This commit is contained in:
parent
59e3f81202
commit
fc7982378a
1 changed files with 18 additions and 3 deletions
|
@ -3,13 +3,15 @@ import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
from typing import Optional, Dict
|
||||||
|
|
||||||
from platypush.plugins import Plugin, action
|
from platypush.plugins import action
|
||||||
|
from platypush.plugins.sensor import SensorPlugin
|
||||||
from platypush.message.response.bluetooth import BluetoothScanResponse, BluetoothDiscoverPrimaryResponse, \
|
from platypush.message.response.bluetooth import BluetoothScanResponse, BluetoothDiscoverPrimaryResponse, \
|
||||||
BluetoothDiscoverCharacteristicsResponse
|
BluetoothDiscoverCharacteristicsResponse
|
||||||
|
|
||||||
|
|
||||||
class BluetoothBlePlugin(Plugin):
|
class BluetoothBlePlugin(SensorPlugin):
|
||||||
"""
|
"""
|
||||||
Bluetooth BLE (low-energy) plugin
|
Bluetooth BLE (low-energy) plugin
|
||||||
|
|
||||||
|
@ -76,7 +78,7 @@ class BluetoothBlePlugin(Plugin):
|
||||||
'\t[sudo] setcap "cap_net_raw,cap_net_admin+eip" {}'.format(exe))
|
'\t[sudo] setcap "cap_net_raw,cap_net_admin+eip" {}'.format(exe))
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def scan(self, interface: str = None, duration: int = 10) -> BluetoothScanResponse:
|
def scan(self, interface: Optional[str] = None, duration: int = 10) -> BluetoothScanResponse:
|
||||||
"""
|
"""
|
||||||
Scan for nearby bluetooth low-energy devices
|
Scan for nearby bluetooth low-energy devices
|
||||||
|
|
||||||
|
@ -93,6 +95,19 @@ class BluetoothBlePlugin(Plugin):
|
||||||
devices = svc.discover(duration)
|
devices = svc.discover(duration)
|
||||||
return BluetoothScanResponse(devices)
|
return BluetoothScanResponse(devices)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def get_measurement(self, interface: Optional[str] = None, duration: Optional[int] = 10, *args, **kwargs) \
|
||||||
|
-> Dict[str, dict]:
|
||||||
|
"""
|
||||||
|
Wrapper for ``scan`` that returns bluetooth devices in a format usable by sensor backends.
|
||||||
|
|
||||||
|
:param interface: Bluetooth adapter name to use (default configured if None)
|
||||||
|
:param duration: Scan duration in seconds
|
||||||
|
:return: Device address -> info map.
|
||||||
|
"""
|
||||||
|
devices = self.scan(interface=interface, duration=duration).output
|
||||||
|
return {device['addr']: device for device in devices}
|
||||||
|
|
||||||
# noinspection PyArgumentList
|
# noinspection PyArgumentList
|
||||||
@action
|
@action
|
||||||
def connect(self, device: str, interface: str = None, wait: bool = True, channel_type: str = 'public',
|
def connect(self, device: str, interface: str = None, wait: bool = True, channel_type: str = 'public',
|
||||||
|
|
Loading…
Reference in a new issue