一个python库,用于处理各种类型的蓝牙le信标。
beacontools的Python项目详细描述
一个python库,用于处理各种类型的蓝牙le信标。
当前支持的类型是:
- Eddystone Beacons
- iBeacons(苹果和柏树cylakit-e02)
- Estimote Beacons (Telemetry only)
beacontools库有两个主要组件:
- 从原始二进制信标广告中提取信息的解析器
- 一种扫描器,它使用bluez扫描bluetoth le广告,并可配置为只查找特定的信标或数据包类型
安装
如果您只想使用解析器使用pip安装库,那么就可以:
pip install beacontools
如果要执行beacon扫描,还有一些要求。首先,您需要一个带有bluez的操作系统(大多数linux操作系统;windows和macos也可能是未经测试的,请参阅pybluez的“Build Requirements”部分以获取更多信息)。
# install libbluetooth headers and libpcap2 sudo apt-get install python-dev libbluetooth-dev libcap2-bin # grant the python executable permission to access raw socket data sudo setcap 'cap_net_raw,cap_net_admin+eip'$(readlink -f $(which python))# install beacontools with scanning support pip install beacontools[scan]
用法
有关更多用法示例,请参见examples目录。
分析器
frombeacontoolsimportparse_packettlm_packet=b"\x02\x01\x06\x03\x03\xaa\xfe\x11\x16\xaa\xfe\x20\x00\x0b\x18\x13\x00\x00\x00" \ b"\x14\x67\x00\x00\x2a\xc4\xe4"tlm_frame=parse_packet(tlm_packet)print("Voltage: %d mV"%tlm_frame.voltage)print("Temperature: %d °C"%tlm_frame.temperature)print("Advertising count: %d"%tlm_frame.advertising_count)print("Seconds since boot: %d"%tlm_frame.seconds_since_boot)
扫描仪
importtimefrombeacontoolsimportBeaconScanner,EddystoneTLMFrame,EddystoneFilterdefcallback(bt_addr,rssi,packet,additional_info):print("<%s, %d> %s%s"%(bt_addr,rssi,packet,additional_info))# scan for all TLM frames of beacons in the namespace "12345678901234678901"scanner=BeaconScanner(callback,device_filter=EddystoneFilter(namespace="12345678901234678901"),packet_filter=EddystoneTLMFrame)scanner.start()time.sleep(10)scanner.stop()
importtimefrombeacontoolsimportBeaconScanner,IBeaconFilterdefcallback(bt_addr,rssi,packet,additional_info):print("<%s, %d> %s%s"%(bt_addr,rssi,packet,additional_info))# scan for all iBeacon advertisements from beacons with the specified uuidscanner=BeaconScanner(callback,device_filter=IBeaconFilter(uuid="e5b9e3a6-27e2-4c36-a257-7698da5fc140"))scanner.start()time.sleep(5)scanner.stop()
更改日志
beacontools遵循semantic versioning方案。
- 1.3.1
- 多个修复和内部重构,包括对覆盆子pi 3b+的支持(非常感谢cereal)
- 更新的依赖项
- 1.3.0
- 增加了对estimote遥测数据包的支持(参见examples/parser_example.py)
- rfu和flags字段的轻松解析约束
- 为Eddystone TLM添加8.8定点十进制格式的温度输出
- 1.2.4
- 增加了对eddystone包的支持,标志数据设置为0x1a(感谢AndreasTornes)
- 更新的依赖项
- 1.2.3
- 与construct的固定兼容性>;=2.9.41
- 1.2.2
- 移动了bluez的导入,以便该库可以在仅解析模式下使用,而不必安装bluez。
- 1.2.1
- 更新的依赖项
- 1.2.0
- 增加了对Cypress iBeacons的支持,它可以传输嵌入次要值中的温度和湿度(感谢darkskiez)
- 更新的依赖项
- 1.1.0
- 增加了对eddystone eid帧的支持(感谢miek)
- 更新的依赖项
- 1.0.1
- 实现了一个小的调整,减少了CPU的使用。
- 1.0.0
- 实现了ibeacon支持
- 向回调函数添加了rssi。
- 0.1.2
- 初始版本