Bluetooth Scanner Dashboard

Echtzeit-Erfassung über lokales Python-Backend (Bleak)

Getrennt

Wichtiger Hinweis zum Python-Backend

Da Browser keinen direkten Hardware-Zugriff auf alle Umgebungs-Bluetooth-Geräte erlauben, verbindet sich dieses Dashboard mit einem lokalen Python-Skript (WebSocket auf ws://localhost:8765).

Python-Code anzeigen (zum Kopieren)
# pip install bleak websockets
import asyncio
import json
from bleak import BleakScanner
import websockets

connected_clients = set()

async def scan_callback(device, advertisement_data):
    device_data = {
        "address": device.address,
        "name": device.name or advertisement_data.local_name or "Unbekannt",
        "rssi": device.rssi,
        "manufacturer_data": {str(k): v.hex() for k, v in advertisement_data.manufacturer_data.items()},
        "service_uuids": advertisement_data.service_uuids,
        "tx_power": advertisement_data.tx_power
    }
    if connected_clients:
        message = json.dumps({"type": "device", "data": device_data})
        await asyncio.gather(*[client.send(message) for client in connected_clients], return_exceptions=True)

async def handler(websocket):
    connected_clients.add(websocket)
    print(f"Client verbunden: {websocket.remote_address}")
    try:
        async for message in websocket:
            data = json.loads(message)
            if data.get("action") == "start":
                print("Starte kontinuierlichen BLE-Scan...")
            elif data.get("action") == "stop":
                print("Stoppe BLE-Scan...")
    except websockets.exceptions.ConnectionClosed:
        pass
    finally:
        connected_clients.remove(websocket)
        print("Client getrennt")

async def main():
    scanner = BleakScanner(detection_callback=scan_callback)
    await scanner.start()
    async with websockets.serve(handler, "localhost", 8765):
        print("WebSocket Server gestartet auf ws://localhost:8765")
        await asyncio.Future()  # läuft endlos

if __name__ == "__main__":
    asyncio.run(main())
0
Gefundene Geräte
Inaktiv
Scanner Status
Nie
Letztes Paket
Gerätename ID / Adresse Signal (RSSI) Hersteller-Daten Zuletzt gesehen
Keine Bluetooth-Geräte gefunden oder Scanner gestoppt.