From 188f9d593c0c73e5be582711032d943d59fa0539 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 1 Jul 2024 06:16:49 -0500 Subject: [PATCH 1/6] Add handler for new log-record BLE characteristic --- meshtastic/ble_interface.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/meshtastic/ble_interface.py b/meshtastic/ble_interface.py index b5f9f7d..bb30470 100644 --- a/meshtastic/ble_interface.py +++ b/meshtastic/ble_interface.py @@ -8,6 +8,10 @@ import time from threading import Thread from typing import List, Optional +from .protobuf import ( + mesh_pb2, +) + import print_color # type: ignore[import-untyped] from bleak import BleakClient, BleakScanner, BLEDevice from bleak.exc import BleakDBusError, BleakError @@ -18,7 +22,8 @@ SERVICE_UUID = "6ba1b218-15a8-461f-9fa8-5dcae273eafd" TORADIO_UUID = "f75c76d2-129e-4dad-a1dd-7866124401e7" FROMRADIO_UUID = "2c55e69e-4993-11ed-b878-0242ac120002" FROMNUM_UUID = "ed9da18c-a800-4f66-a670-aa7547e34453" -LOGRADIO_UUID = "6c6fd238-78fa-436b-aacf-15c5be1ef2e2" +LEGACY_LOGRADIO_UUID = "6c6fd238-78fa-436b-aacf-15c5be1ef2e2" +LOGRADIO_UUID = "5a3d6e49-06e6-4423-9944-e9de8cdf9547" class BLEInterface(MeshInterface): @@ -56,6 +61,7 @@ class BLEInterface(MeshInterface): self.close() raise e + #self.client.start_notify(LEGACY_LOGRADIO_UUID, self.legacy_log_radio_handler) self.client.start_notify(LOGRADIO_UUID, self.log_radio_handler) logging.debug("Mesh configure starting") @@ -81,6 +87,22 @@ class BLEInterface(MeshInterface): self.should_read = True async def log_radio_handler(self, _, b): # pylint: disable=C0116 + if b is not mesh_pb2.LogRecord: + return + + log_record = b + if log_record.DEBUG: + print_color.print(log_record.message, color="cyan", end=None) + elif log_record.INFO: + print_color.print(log_record.message, color="white", end=None) + elif log_record.WARNING: + print_color.print(log_record.message, color="yellow", end=None) + elif log_record.ERROR: + print_color.print(log_record.message, color="red", end=None) + else: + print_color.print(log_record.message, end=None) + + async def legacy_log_radio_handler(self, _, b): # pylint: disable=C0116 log_radio = b.decode("utf-8").replace("\n", "") if log_radio.startswith("DEBUG"): print_color.print(log_radio, color="cyan", end=None) From bef9b480f01ebceda375aa37da21006fd0af04f2 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 1 Jul 2024 18:05:15 -0500 Subject: [PATCH 2/6] Log Recod logging with new characterstic --- meshtastic/ble_interface.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/meshtastic/ble_interface.py b/meshtastic/ble_interface.py index e0566aa..34c7e75 100644 --- a/meshtastic/ble_interface.py +++ b/meshtastic/ble_interface.py @@ -90,20 +90,22 @@ class BLEInterface(MeshInterface): self.should_read = True async def log_radio_handler(self, _, b): # pylint: disable=C0116 - if b is not mesh_pb2.LogRecord: - return + log_record = mesh_pb2.LogRecord() + log_record.ParseFromString(bytes(b)) + log_record.message.replace("\n", "") + + message = f'[{log_record.source}] {log_record.message}' if log_record.source else log_record.message - log_record = b if log_record.DEBUG: - print_color.print(log_record.message, color="cyan", end=None) + print_color.print(message, color="cyan", end=None) elif log_record.INFO: - print_color.print(log_record.message, color="white", end=None) + print_color.print(message, color="white", end=None) elif log_record.WARNING: - print_color.print(log_record.message, color="yellow", end=None) + print_color.print(message, color="yellow", end=None) elif log_record.ERROR: - print_color.print(log_record.message, color="red", end=None) + print_color.print(message, color="red", end=None) else: - print_color.print(log_record.message, end=None) + print_color.print(message, end=None) async def legacy_log_radio_handler(self, _, b): # pylint: disable=C0116 log_radio = b.decode("utf-8").replace("\n", "") From ce6c096c3e584947b4b1f3814fc9776284e5b795 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 1 Jul 2024 21:05:27 -0500 Subject: [PATCH 3/6] Fix --- meshtastic/ble_interface.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/meshtastic/ble_interface.py b/meshtastic/ble_interface.py index 34c7e75..b63635d 100644 --- a/meshtastic/ble_interface.py +++ b/meshtastic/ble_interface.py @@ -7,12 +7,13 @@ import struct import time from threading import Thread from typing import List, Optional +import print_color # type: ignore[import-untyped] from .protobuf import ( mesh_pb2, ) +import google.protobuf -import print_color # type: ignore[import-untyped] from bleak import BleakClient, BleakScanner, BLEDevice from bleak.exc import BleakDBusError, BleakError @@ -91,8 +92,11 @@ class BLEInterface(MeshInterface): async def log_radio_handler(self, _, b): # pylint: disable=C0116 log_record = mesh_pb2.LogRecord() - log_record.ParseFromString(bytes(b)) - log_record.message.replace("\n", "") + try: + log_record.ParseFromString(bytes(b)) + log_record.message = log_record.message.replace("\n", "") + except google.protobuf.message.DecodeError: + return message = f'[{log_record.source}] {log_record.message}' if log_record.source else log_record.message From 19363967f358d8d3cbe95e458f4026de6d4dba29 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 1 Jul 2024 21:11:35 -0500 Subject: [PATCH 4/6] Shut up linter --- meshtastic/ble_interface.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/meshtastic/ble_interface.py b/meshtastic/ble_interface.py index b63635d..4823473 100644 --- a/meshtastic/ble_interface.py +++ b/meshtastic/ble_interface.py @@ -2,6 +2,7 @@ """ import asyncio import atexit +import google.protobuf import logging import struct import time @@ -9,16 +10,14 @@ from threading import Thread from typing import List, Optional import print_color # type: ignore[import-untyped] -from .protobuf import ( - mesh_pb2, -) -import google.protobuf - from bleak import BleakClient, BleakScanner, BLEDevice from bleak.exc import BleakDBusError, BleakError from meshtastic.mesh_interface import MeshInterface +from .protobuf import ( + mesh_pb2, +) SERVICE_UUID = "6ba1b218-15a8-461f-9fa8-5dcae273eafd" TORADIO_UUID = "f75c76d2-129e-4dad-a1dd-7866124401e7" FROMRADIO_UUID = "2c55e69e-4993-11ed-b878-0242ac120002" From 5eafc2c8669807f01360cf91077e9c34544204fb Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Tue, 2 Jul 2024 07:30:27 -0500 Subject: [PATCH 5/6] Remove newline handling --- meshtastic/ble_interface.py | 1 - 1 file changed, 1 deletion(-) diff --git a/meshtastic/ble_interface.py b/meshtastic/ble_interface.py index 4823473..eca2204 100644 --- a/meshtastic/ble_interface.py +++ b/meshtastic/ble_interface.py @@ -93,7 +93,6 @@ class BLEInterface(MeshInterface): log_record = mesh_pb2.LogRecord() try: log_record.ParseFromString(bytes(b)) - log_record.message = log_record.message.replace("\n", "") except google.protobuf.message.DecodeError: return From 32b4575262bb90f03978fe9bd959e21fe44c0ab2 Mon Sep 17 00:00:00 2001 From: Ian McEwen Date: Tue, 2 Jul 2024 09:43:49 -0700 Subject: [PATCH 6/6] Reorganize imports for pylint --- meshtastic/ble_interface.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meshtastic/ble_interface.py b/meshtastic/ble_interface.py index eca2204..bc57157 100644 --- a/meshtastic/ble_interface.py +++ b/meshtastic/ble_interface.py @@ -2,7 +2,6 @@ """ import asyncio import atexit -import google.protobuf import logging import struct import time @@ -13,6 +12,8 @@ import print_color # type: ignore[import-untyped] from bleak import BleakClient, BleakScanner, BLEDevice from bleak.exc import BleakDBusError, BleakError +import google.protobuf + from meshtastic.mesh_interface import MeshInterface from .protobuf import (