eculocate

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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:
Mclient/ble.py | 41+++++++++++++++++++++--------------------
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))