簡體   English   中英

缺少 2 個必需的位置 arguments flask python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM