commit adac607f1717b6a5cc1ecc582fc3b03467bbbc4b
parent 2448b243ac187b180588af824679bfdaa21e25e9
Author: Daniel Barlow <dan@telent.net>
Date: Fri, 20 Feb 2026 22:26:06 +0000
ble client: don't hardcode ble address
Diffstat:
1 file changed, 21 insertions(+), 20 deletions(-)
diff --git a/client/ble.py b/client/ble.py
@@ -9,10 +9,6 @@ from nacl.public import PrivateKey, Box, PublicKey
from nacl.encoding import RawEncoder
import sys
-
-address = "FF:E4:05:1A:8F:FF"
-
-
class Network():
def __init__(self, bytestr):
self.rssi = bytestr[0]
@@ -41,19 +37,12 @@ class Encrypter():
r.insert(0, len(mybytes))
return r
-with open("keys/client.key", "rb") as f:
- secret = PrivateKey(f.read(), encoder=RawEncoder)
-
-with open("keys/device.pub", "rb") as f:
- rcpt = PublicKey(f.read(), encoder=RawEncoder)
-
-ENCRYPTER = Encrypter(secret, rcpt)
-
class Device():
- def __init__(self, ble_client):
+ def __init__(self, ble_client, encrypter):
self.client = ble_client
self._networks = None
self.max_index = 0
+ self.encrypter = encrypter
async def networks(self):
if self._networks != None:
@@ -70,7 +59,7 @@ class Device():
async def choose_network(self, name, password):
client = self.client
- secret = ENCRYPTER.encrypt(password)
+ secret = self.encrypter.encrypt(password)
buf = bytearray(name)
buf.insert(0, len(name))
print(f"writing {len(buf)}, {len(secret)}")
@@ -78,15 +67,24 @@ class Device():
await client.write_gatt_char(UUIDS['connecting'], bytes([1]))
-async def main(address):
- preferred = sys.argv[1] if len(sys.argv) > 1 else None
- print(f"choose {preferred}")
+async def main(address, preferred):
+ with open("keys/client.key", "rb") as f:
+ secret = PrivateKey(f.read(), encoder=RawEncoder)
+
+ with open("keys/device.pub", "rb") as f:
+ rcpt = PublicKey(f.read(), encoder=RawEncoder)
+
+ encrypter = Encrypter(secret, rcpt)
+
devices = await BleakScanner.discover()
for d in devices:
- print(d)
+ if d.name == address or d.address == address:
+ address = d.address
+ print(d.name, d.address)
+ print(f"connecting to {address}")
async with BleakClient(address, timeout=60) as client:
- device = Device(client)
+ device = Device(client, encrypter)
networks = await device.networks()
for n in networks:
print(f"network {n}")
@@ -95,4 +93,7 @@ async def main(address):
await device.choose_network(name_bytes, os.getenv('PASSWORD'))
-asyncio.run(main(address))
+if __name__ == '__main__':
+ rcpt = sys.argv[1] if len(sys.argv) > 1 else "Eculocate"
+ preferred = sys.argv[2] if len(sys.argv) > 2 else None
+ asyncio.run(main(rcpt, preferred))