Bladeren bron

add scan and list services command

subDesTagesMitExtraKaese 1 maand geleden
bovenliggende
commit
1f14ed8d0d
1 gewijzigde bestanden met toevoegingen van 23 en 2 verwijderingen
  1. 23 2
      main.py

+ 23 - 2
main.py

@@ -6,9 +6,10 @@ import signal
 import json
 
 import aiomqtt
+from bleak import BleakScanner
 from bleak.exc import BleakError, BleakDeviceNotFoundError
 
-from bleclient import BleClient
+from src.bleclient import BleClient
 
 send_config = True
 reconnect_interval = 5  # In seconds
@@ -116,6 +117,19 @@ async def main(address, host, port, username, password):
     except asyncio.CancelledError:
         pass  # Task was cancelled, no need for an error message
 
+async def list_services(address):
+    async with BleClient(address) as mppt:
+        mppt.list_services()
+
+async def scan_for_devices():
+    devices = await BleakScanner.discover()
+    if not devices:
+        print("No BLE devices found.")
+    else:
+        print("Available BLE devices:")
+        for device in devices:
+            print(f"{device.address} - {device.name}")
+    return devices
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Solarlife MPPT BLE Client')
@@ -124,7 +138,14 @@ if __name__ == '__main__':
     parser.add_argument('--port', help='MQTT broker port', default=1883, type=int)
     parser.add_argument('--username', help='MQTT username')
     parser.add_argument('--password', help='MQTT password')
+    parser.add_argument('--list-services', help='List GATT services', action='store_true')
+    parser.add_argument('--scan', help='Scan for bluetooth devices', action='store_true')
 
     args = parser.parse_args()
 
-    asyncio.run(main(args.address, args.host, args.port, args.username, args.password))
+    if args.scan:
+        asyncio.run(scan_for_devices())
+    elif args.list_services:
+        asyncio.run(list_services(args.address))
+    else:
+        asyncio.run(main(args.address, args.host, args.port, args.username, args.password))