блупи.бтл.BTLEManagementError: Не удалось выполнить команду управления «файл включен» (код: 20, ошибка: Отказано в разрешении)

#python #bluetooth #raspberry-pi

Вопрос:

Я использовал и изменил код, который показан ниже, из 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, в устройствах = сканера.файл сканирования(2.0) «/usr/local/lib/python3.7/dist-packages/bluepy/btle.py», линия 852, в скан самостоятельно.старт(пассивный=пассивного) файл «/usr/local/lib/python3.7/dist-packages/bluepy/btle.py» линия 790, в себя начните._mgmtCmd(«Ле») файл «/usr/local/lib/python3.7/dist-packages/bluepy/btle.py», строка 312, в _mgmtCmd поднять BTLEManagementError(«не удалось выполнить руководства команды» %s «» % (УМК), РСП) bluepy.бтл.BTLEManagementError: Не удалось выполнить команду управления «Файл включен» (код: 20, ошибка: > Отказано в разрешении)

Если у вас есть какие-либо знания в этой области, я был бы очень признателен вам за помощь.