The bluetooth BLE plugin must also implement get_measurement to work with the scanner backend

This commit is contained in:
Fabio Manganiello 2020-03-08 23:50:23 +01:00
parent 59e3f81202
commit fc7982378a

View file

@ -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',