Skip to main content

使用 asyncio 扫描蓝牙以获取广告信息。

项目描述

aioblescan

aioblescan 是一个 Python 3/asyncio 库,用于侦听 BLE 广告数据包。

安装

我们在 PyPi 上,所以

pip3 install aioblescan

或者

python3 -m pip install aioblescan

如何使用

本质上,您创建了一个函数来处理传入的信息并将其附加到BTScanRequester。然后创建蓝牙连接,发出扫描命令并等待传入​​数据包并处理它们。

您可以使用 Eddystone 或 RuuviWeather 来检索特定信息

最简单的方法是查看__main__.py文件。

您可以使用

python3 -m aioblescan

添加-h以获得帮助。

要查看 RuuviTag 天气信息,请尝试:

python3 -m aioblescan -r

你会得到

Weather info {'rssi': -64, 'pressure': 100300, 'temperature': 24, 'mac address': 'fb:86:84:dd:aa:bb', 'tx_power': -7, 'humidity': 36.0}
Weather info {'rssi': -62, 'pressure': 100300, 'temperature': 24, 'mac address': 'fb:86:84:dd:aa:bb', 'tx_power': -7, 'humidity': 36.0}

检查 Eddystone 信标

python3 -m aioblescan -e

你得到

Google Beacon {'tx_power': -7, 'url': 'https://ruu.vi/#BEgYAMR8n', 'mac address': 'fb:86:84:dd:aa:bb', 'rssi': -52}
Google Beacon {'tx_power': -7, 'url': 'https://ruu.vi/#BEgYAMR8n', 'mac address': 'fb:86:84:dd:aa:bb', 'rssi': -53}

使用 [自定义固件]( https://github.com/atc1441/ATC_MiThermometer ) 信标检查 ATC_MiThermometer

python3 -m aioblescan -A

你得到

Temperature info {'mac address': 'a4:c1:38:40:52:38', 'temperature': 2.8, 'humidity': 62, 'battery': 72, 'battery_volts': 2.863, 'counter': 103, 'rssi': -76}
Temperature info {'mac address': 'a4:c1:38:40:52:38', 'temperature': 2.8, 'humidity': 62, 'battery': 72, 'battery_volts': 2.863, 'counter': 103, 'rssi': -77}

检查 ThermoBeacon 传感器

python3 -m aioblescan -T

你得到

::

温度信息 {'mac 地址': '19:c4:00:00:0f:5d', 'max_temperature': 27.0625, 'min_temperature': 21.75, 'max_temp_ts': 0, 'min_temp_ts': 2309} 温度信息 {' mac地址':'19:c4:00:00:0f:5d','温度':21.75,'湿度':49.5,'电池电压':3234,'计数器':2401,'rssi':-67}

对于通用广告数据包扫描

python3 -m aioblescan

你得到

HCI Event:
    code:
        3e
    length:
        19
    LE Meta:
        code:
            02
        Adv Report:
            num reports:
                1
            ev type:
                generic adv
            addr type:
                public
            peer:
                54:6c:0e:aa:bb:cc
            length:
                7
            flags:
                Simul LE - BR/EDR (Host): False
                Simul LE - BR/EDR (Control.): False
                BR/EDR Not Supported: False
                LE General Disc.: True
                LE Limited Disc.: False
            Incomplete uuids:
                    ff:30
            rssi:
                -67
HCI Event:
    code:
        3e
    length:
        43
    LE Meta:
        code:
            02
        Adv Report:
            num reports:
                1
            ev type:
                no connection adv
            addr type:
                random
            peer:
                fb:86:84:dd:aa:bb
            length:
                31
            flags:
                Simul LE - BR/EDR (Host): False
                Simul LE - BR/EDR (Control.): False
                BR/EDR Not Supported: False
                LE General Disc.: True
                LE Limited Disc.: True
            Complete uuids:
                    fe:aa
            Advertised Data:
                Service Data uuid:
                    fe:aa
                Adv Payload:
                    10:f9:03:72:75:75:2e:76:69:2f:23:42:45:77:59:41:4d:52:38:6e
            rssi:
                -59

这里第一个数据包来自 Wynd 设备,第二个来自 Ruuvi 标签

aioblescan 还可以发送 EddyStone 广告。运行模块时尝试 -a 标志。

常问问题

为什么不使用scapy?

Scapy很棒,你可以做到

import scapy.all as sa
test=sa.BluetoothHCISocket(0)
command=sa.HCI_Cmd_LE_Set_Scan_Enable(enable=1,filter_dups=0)
chdr=sa.HCI_Command_Hdr(len=len(command))
hdr=sa.HCI_Hdr(type=1)
test.send(hdr / chdr / command)

让事情顺利进行。但是...... Scapy 的伟大之处在于有很多版本可供选择......。并且并非所有功能都相同……安装可能很随意,有些版本根本无法安装。scapy 还包含许多其他协议,可能有点矫枉过正......最后学习永远不会太晚......

你能追踪什么?

aioblescan 将尝试解析所有传入的广告信息。当它不知道该怎么做时,您可以看到原始数据。使用 Eddystone 信标,您可以查看 URL、遥测和 UID

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

aioblescan-0.2.13.tar.gz (22.6 kB 查看哈希

已上传 source

内置分布

aioblescan-0.2.13-py3-none-any.whl (26.1 kB 查看哈希

已上传 py3