From 27f87075d2701be7fe0e84225f122823b9d783ec Mon Sep 17 00:00:00 2001 From: Florent de Lamotte Date: Mon, 5 May 2025 15:03:45 +0200 Subject: [PATCH] custom vars --- src/meshcore/commands.py | 10 ++++++++++ src/meshcore/events.py | 3 ++- src/meshcore/reader.py | 14 +++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/meshcore/commands.py b/src/meshcore/commands.py index c0d5c7e..c2306bc 100644 --- a/src/meshcore/commands.py +++ b/src/meshcore/commands.py @@ -313,6 +313,16 @@ class CommandHandler: data = b"\x27\x00\x00\x00" + dst_bytes return await self.send(data, [EventType.MSG_SENT, EventType.ERROR]) + async def get_custom_vars(self) -> Event: + logger.debug(f"Asking for custom vars") + data = b"\x28" + return await self.send(data, [EventType.CUSTOM_VARS, EventType.ERROR]) + + async def set_custom_var(self, key, value) -> Event: + logger.debug(f"Setting custom var {key} to {value}") + data = b"\x29" + key.encode("utf-8") + ":" + value.encode("utf-8") + return await self.send(data, [EventType.OK, EventType.ERROR]) + async def send_cli(self, cmd) -> Event: logger.debug(f"Sending CLI command: {cmd}") data = b"\x32" + cmd.encode('utf-8') diff --git a/src/meshcore/events.py b/src/meshcore/events.py index 611e99a..94da1e3 100644 --- a/src/meshcore/events.py +++ b/src/meshcore/events.py @@ -34,6 +34,7 @@ class EventType(Enum): TRACE_DATA = "trace_data" RX_LOG_DATA = "rx_log_data" TELEMETRY_RESPONSE = "telemetry_response" + CUSTOM_VARS = "custom_vars" # Command response types OK = "command_ok" @@ -183,4 +184,4 @@ class EventDispatcher: except asyncio.TimeoutError: return None finally: - subscription.unsubscribe() \ No newline at end of file + subscription.unsubscribe() diff --git a/src/meshcore/reader.py b/src/meshcore/reader.py index 4bd4355..edb2ef9 100644 --- a/src/meshcore/reader.py +++ b/src/meshcore/reader.py @@ -201,6 +201,17 @@ class MessageReader: res["response"] = data[1:].decode() await self.dispatcher.dispatch(Event(EventType.CLI_RESPONSE, res)) + elif packet_type_value == PacketType.CUSTOM_VARS.value: + logger.debug(f"received custom vars response: {data.hex()}") + res = {} + rawdata = data[1:].decode() + pairs = rawdata.split(",") + for p in pairs : + psplit = p.split(":") + res[psplit[0]] = psplit[1] + logger.debug(f"got custom vars : {res}") + await self.dispatcher.dispatch(Event(EventType.CUSTOM_VARS, res)) + # Push notifications elif packet_type_value == PacketType.ADVERTISEMENT.value: logger.debug("Advertisement received") @@ -374,4 +385,5 @@ class MessageReader: else: logger.debug(f"Unhandled data received {data}") - logger.debug(f"Unhandled packet type: {packet_type_value}") \ No newline at end of file + logger.debug(f"Unhandled packet type: {packet_type_value}") +