一个python库,用于处理各种类型的蓝牙le信标。

beacontools的Python项目详细描述


PyPI PackageBuild StatusCoverage StatusRequirements Status

一个python库,用于处理各种类型的蓝牙le信标。

当前支持的类型是:

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
    • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
有没有一种方法可以将不同的java web应用程序组合到一个web应用程序(war)中而不相互影响?   java一次屏蔽两位   java如何在多个类上初始化元素?   java在后台服务中处理通知或使用GCM(或其他推送通知服务)   java从const方法调用JNI函数   javascript如何使用函数/方法返回?   Java优化:声明类变量与使用临时变量   java字符算术基数8 vs基数10   Java流收集要存储的对象列表   swing我正在用Java中的keyListener制作一个精灵移动器   在Gradle构建脚本中使用Scala(或java)方法   java Android Mediaplayer下一步按钮不起作用   Java Sound API在播放音频文件后将其锁定   java将变量从外部类传递到内部类的最佳方法   使用play framework的博客web应用程序出现java逻辑错误   java我们可以在Spring批处理中处理大型zip文件吗?   java如何检查JTable的选定行的特定列中的值是否已经在JList中?