|
@@ -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))
|