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
执行代码
导入异步
从凄凉进口BleakScanner
异步def main():print(“扫描5秒,请等待.”)
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())
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地址
但没有
从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))
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()
while True:
await scanner.start()
await asyncio.sleep(1.0)
await scanner.stop()
asyncio.run(main())
result = TypeError: 'coroutine' object is not subscriptable
协线物体是什么?如何使用这些方法获取MAC地址信息?
Executing Code
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)
Here we can get mac addresses
but there isnt
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”对象不可订阅
发布于 2022-11-02 07:58:17
device.adress解决了我的问题。每个人都可以用这个。
https://stackoverflow.com/questions/74285783
复制相似问题