[英]missing 2 required positional arguments flask python
我正在開發一個 web 應用程序,我在其中通過瀏覽器通過 Bleak 庫提取和使用藍牙數據。我不打算連接到數據庫。 我的唯一目的是將此人的藍牙數據也保存在瀏覽器(cookie 或會話)上。 我還沒有到這個階段。 目前,我只需要在瀏覽器上查看詳細的藍牙數據即可。 但是我收到了這個錯誤。 “TypeError:devices() 缺少 2 個必需的位置 arguments:‘device’ 和 ‘advertisement_data’”
看看我的代碼
from flask import Flask
import asyncio
from bleak import BleakScanner
import asyncio
from uuid import UUID
import json
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
app = Flask(__name__)
ibeacon_format = Struct(
"type_length" / Const(b"\x02\x15"),
"uuid" / Array(16, Byte),
"major" / Int16ub,
"minor" / Int16ub,
"power" / Int8sl,
)
class UUIDEncoder(json.JSONEncoder):
def default(self, uuid):
if isinstance(uuid, UUID):
# if the obj is uuid, we simply return the value of uuid
return uuid.hex
return json.JSONEncoder.default(self, uuid)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
@app.route("/beacons")
async def devices(device: BLEDevice, advertisement_data: AdvertisementData):
try:
macadress = device.address
name = advertisement_data.local_name
apple_data = advertisement_data.manufacturer_data[0x004C]
ibeacon = ibeacon_format.parse(apple_data)
uuid = UUID(bytes=bytes(ibeacon.uuid))
minor = ibeacon.minor
major = ibeacon.major
power = ibeacon.power
rssi = device.rssi
rssi = int(rssi)
beacons = {
"Mac Adress": macadress,
"Local Name": name,
"UUID": uuid,
"Major": major,
"Minor": minor,
"TX Power": power,
"RSSI": rssi
}
if (beacons["Local Name"] == "POI" and beacons["RSSI"] <= -40 and beacons["RSSI"] >= -80):
return print(beacons)
# with open("data.json","a") as file:
# json.dump(beacons,file,sort_keys=True,indent=4,skipkeys=True,cls=UUIDEncoder,separators=(",",":"))
else:
pass
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(devices)
while (True):
await scanner.start()
await asyncio.sleep(0.5)
await scanner.stop()
if __name__ == '__main__':
app.run(host="127.0.0.0", port=5000, debug=True)
不要在線路中調用 function 設備:
scanner.register_detection_callback(設備)
如果是這樣,你必須給它兩個 arguments 設備和廣告數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.