首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError:“coroutine”对象不可订阅?

TypeError:“coroutine”对象不可订阅?
EN

Stack Overflow用户
提问于 2022-11-02 07:39:29
回答 1查看 51关注 0票数 0
代码语言:javascript
运行
复制
I'm working on a project where I get device data from ibeacon bluetooth devices. Normally I can have all Mac addresses and device local_names. But when I want to change the code a little bit I can't get the Mac addresses

执行代码

代码语言:javascript
运行
复制

导入异步

从凄凉进口BleakScanner

异步def main():print(“扫描5秒,请等待.”)

代码语言:javascript
运行
复制
devices = await BleakScanner.discover(return_adv=True)

for d, a in devices.values():
    print()
    print(d)                    # beacon names are POI
    print("-" * len(str(d)))
    print(a)

如果名称为 == "main":asyncio.run(main())

代码语言:javascript
运行
复制
FF:CC:DD:KK:8A:01: POI
----------------------
AdvertisementData(local_name='POI', manufacturer_data={76: b'\x02\x15\x85x\xd2\x85\xfd\x1fO{6\xf2\x1b2\x97\xd6\xf0\xe3\x00\x01\x00$\xbd'}, service_data={'0000180a-0000-1000-8000-00805f9b555': b'\x05\x01\xc2c'}, rssi=-88)

在这里我们可以得到mac地址

但没有

代码语言:javascript
运行
复制

从uuid导入异步

从构造导入数组,Byte,Const,Int8sl,Int16ub,Struct从construct.core导入ConstError

BleakScanner从bleak.backends.device进口BLEDevice从bleak.backends.scanner进口AdvertisementData

ibeacon_format = Struct( "type_length“/ Const(b"\x02\x15")、"uuid”/ Array(16,Byte)、"minor“/ Int16ub、”minor“/ Int16ub、"power”/ Int8sl,)

def device_found(设备: BLEDevice,advertisement_data: AdvertisementData ):“”解码iBeacon。“”试试看: macadress = BleakScanner.discover(return_adv=True) // =>问题线名称= advertisement_data.local_name apple_data = advertisement_data.manufacturer_data0x004C ibeacon = ibeacon_format.parse(apple_data) uuid = UUID(bytes=bytes(ibeacon.uuid))

代码语言:javascript
运行
复制
    print(f"Mac Adress : {macadress[0]}")// => problem line 
    print(f"Local Name : {name}")
    print(f"UUID     : {uuid}")
    print(f"Major    : {ibeacon.major}")
    print(f"Minor    : {ibeacon.minor}")
    print(f"TX power : {ibeacon.power} dBm")
    print(f"RSSI     : {device.rssi} dBm")
    print(47 * "-")
except KeyError:
    # Apple company ID (0x004c) not found
    pass
except ConstError:
    # No iBeacon (type 0x02 and length 0x15)
    pass

异步def ():“”扫描设备。“scanner.register_detection_callback(device_found) = BleakScanner()

代码语言:javascript
运行
复制
while True:
    await scanner.start()
    await asyncio.sleep(1.0)
    await scanner.stop()

asyncio.run(main())

代码语言:javascript
运行
复制
result = TypeError: 'coroutine' object is not subscriptable

协线物体是什么?如何使用这些方法获取MAC地址信息?

代码语言:javascript
运行
复制
Executing Code
代码语言:javascript
运行
复制
import asyncio

from bleak import BleakScanner


async def main():
    print("scanning for 5 seconds, please wait...")

    devices = await BleakScanner.discover(return_adv=True)
    
    for d, a in devices.values():
        print()
        print(d)                    # beacon names are POI
        print("-" * len(str(d)))
        print(a)
    
    

if __name__ == "__main__":
    asyncio.run(main())

FF:CC:DD:KK:8A:01: POI

b'\x02\x15\x85x\xd2\x85\xfd\x1fO{6\xf2\x1b2\x97\xd6\xf0\xe3\x00\x01\x00$\xbd'},service_data={'0000180a-0000-1000-8000-00805f9b555':(AdvertisementData_name=‘POI’,manufacturer_data={76: manufacturer_data= b'\x05\x01\xc2c'},rssi=-88)

代码语言:javascript
运行
复制
Here we can get mac addresses 

but there isnt 
代码语言:javascript
运行
复制
import asyncio
from uuid import UUID

from construct import Array, Byte, Const, Int8sl, Int16ub, Struct
from construct.core import ConstError

from bleak import BleakScanner
from bleak.backends.device import BLEDevice
from bleak.backends.scanner import AdvertisementData

ibeacon_format = Struct(
    "type_length" / Const(b"\x02\x15"),
    "uuid" / Array(16, Byte),
    "major" / Int16ub,
    "minor" / Int16ub,
    "power" / Int8sl,
)

def device_found(
    device: BLEDevice, advertisement_data: AdvertisementData
):
    """Decode iBeacon."""
    try:
        macadress = BleakScanner.discover(return_adv=True) // => problem line 
        name = advertisement_data.local_name
        apple_data = advertisement_data.manufacturer_data[0x004C]
        ibeacon = ibeacon_format.parse(apple_data)
        uuid = UUID(bytes=bytes(ibeacon.uuid))

        print(f"Mac Adress : {macadress[0]}")// => problem line 
        print(f"Local Name : {name}")
        print(f"UUID     : {uuid}")
        print(f"Major    : {ibeacon.major}")
        print(f"Minor    : {ibeacon.minor}")
        print(f"TX power : {ibeacon.power} dBm")
        print(f"RSSI     : {device.rssi} dBm")
        print(47 * "-")
    except KeyError:
        # Apple company ID (0x004c) not found
        pass
    except ConstError:
        # No iBeacon (type 0x02 and length 0x15)
        pass



async def main():
    """Scan for devices."""
    scanner = BleakScanner()
    scanner.register_detection_callback(device_found)


    while True:
        await scanner.start()
        await asyncio.sleep(1.0)
        await scanner.stop()
        
asyncio.run(main())

TypeError:“coroutine”对象不可订阅

代码语言:javascript
运行
复制
EN

回答 1

Stack Overflow用户

发布于 2022-11-02 07:58:17

device.adress解决了我的问题。每个人都可以用这个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74285783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档