python - bluepy.btle.BTLEManagementError:无法执行管理命令“le on”(代码:20,错误:权限被拒绝)
问题描述
我利用并修改了下面显示的代码,来自https://www.instructables.com/Monitor-and-Record-Temperature-With-Bluetooth-LE-a/
我遇到的问题是该设备似乎阻止我访问它的值,尽管我不确定这一点。
这是我的代码:
from bluepy.btle import Scanner, DefaultDelegate
import time
import struct
SENSOR_ADDRESS = [""ec:fe:4e:12:b8:72""]
class DecodeErrorException(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
class ScanDelegate(DefaultDelegate):
def __init__(self):
DefaultDelegate.__init__(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
if isNewDev:
print("Discovered device", dev.addr)
elif isNewData:
print("Received new data from", dev.addr)
scanner = Scanner().withDelegate(ScanDelegate())
ManuDataHex = []
ReadLoop = True
try:
while (ReadLoop):
devices = scanner.scan(2.0)
ManuData = ""
for dev in devices:
entry = 0
TempData = 0
for saddr in SENSOR_ADDRESS:
entry += 1
if (dev.addr == saddr):
CurrentDevAddr = saddr
for (adtype, desc, value) in dev.getScanData():
if (desc == "Manufacturer"):
ManuData = value
if (ManuData == ""):
print("No data received, end decoding")
continue
print(ManuData)
for i, j in zip(ManuData[::2], ManuData[1::2]):
ManuDataHex.append(int(i+j, 16))
if ((ManuDataHex[0] == 0x85) and (ManuDataHex[1] == 0x00)):
print("Header byte 0x0085 found")
else:
print("Header byte 0x0085 not found, decoding stop")
continue
idx = 7
print("TotalLen: " + str(len(ManuDataHex)))
while idx < len(ManuDataHex):
if (ManuDataHex[idx] == 0x43):
idx += 1
TempData = ManuDataHex[idx]
TempData += ManuDataHex[idx+1] * 0x100
TempData = TempData * 0.0625
idx += 2
else:
idx += 1
print("Device Address: " + CurrentDevAddr)
print("Temp Data: " + str(TempData))
ReadLoop = False
except DecodeErrorException:
pass
例外情况如下:
回溯(最后一次调用):文件“/home/pi/Desktop/lameteo/print.py”,第 31 行,设备 =scanner.scan(2.0) 文件“/usr/local/lib/python3.7/dist -packages/bluepy/btle.py”,第 852 行,扫描 self.start(passive=passive) 文件“/usr/local/lib/python3.7/dist-packages/bluepy/btle.py”,第 790 行,在 start self._mgmtCmd("le on") 文件 "/usr/local/lib/python3.7/dist-packages/bluepy/btle.py",第 312 行,在 _mgmtCmd 中引发 BTLEManagementError("未能执行管理命令' %s'" % (cmd), rsp) bluepy.btle.BTLEManagementError: 无法执行管理命令 'le on' (代码: 20, 错误: > Permission Denied)
如果您在这方面有任何专业知识,我将非常感谢您的帮助。
解决方案
推荐阅读
- java - 使用 JGit 获取一系列修订的日志
- python - 在 Jupyter Notebook 中让 Ipywidgets 与 Pandas 数据框交互
- typescript - 检查值是否为 2 或 4
- flutter - 将数据传递给 StatefulWidget 并在 Flutter 中以它的状态访问它
- javascript - Kendo 数据源包含过滤器不起作用
- f# - websharper F# 端点 - 捕获所有页面处理程序和页面重定向
- mongodb - mongodb中每个坐标的返回距离
- scala - Future[Source] pipeTo an Actor
- c# - 获取运行Ubuntu子系统的Windows公共路径
- python - 如何避免函数名称中的参数类型?