From f804b755a4752732e5a5753002d000707356bfe0 Mon Sep 17 00:00:00 2001 From: Stefan Allius Date: Mon, 6 May 2024 23:18:47 +0200 Subject: [PATCH] improve modbus trace --- app/src/gen3/talent.py | 2 +- app/src/gen3plus/solarman_v5.py | 5 +++-- app/src/modbus.py | 9 +++++---- app/tests/test_modbus.py | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/src/gen3/talent.py b/app/src/gen3/talent.py index 6225aa0..2c70062 100644 --- a/app/src/gen3/talent.py +++ b/app/src/gen3/talent.py @@ -392,7 +392,7 @@ class Talent(Message): elif self.ctrl.is_ind(): logger.debug(f'Modbus Ind MsgLen: {modbus_len}') for key, update in self.mb.recv_resp(self.db, self._recv_buffer[ - self.header_len + hdr_len:]): + self.header_len + hdr_len:], self.new_data): if update: self.new_data[key] = True diff --git a/app/src/gen3plus/solarman_v5.py b/app/src/gen3plus/solarman_v5.py index a459e89..5805361 100644 --- a/app/src/gen3plus/solarman_v5.py +++ b/app/src/gen3plus/solarman_v5.py @@ -434,11 +434,12 @@ class SolarmanV5(Message): elif ftype == self.MB_RTU_CMD: valid = data[1] modbus_msg_len = self.data_len - 14 - logger.info(f'modbus_len:{modbus_msg_len} accepted:{valid}') + logger.debug(f'modbus_len:{modbus_msg_len} accepted:{valid}') if valid == 1 and modbus_msg_len > 4: logger.info(f'first byte modbus:{data[14]}') inv_update = False - for key, update in self.mb.recv_resp(self.db, data[14:-2]): + for key, update in self.mb.recv_resp(self.db, data[14:-2], + self.node_id): if update: if key == 'inverter': inv_update = True diff --git a/app/src/modbus.py b/app/src/modbus.py index 0f16705..37eadff 100644 --- a/app/src/modbus.py +++ b/app/src/modbus.py @@ -93,8 +93,8 @@ class Modbus(): self.last_len = res[2] return True - def recv_resp(self, info_db, buf: bytearray) -> Generator[tuple[str, bool], - None, None]: + def recv_resp(self, info_db, buf: bytearray, node_id: str) -> \ + Generator[tuple[str, bool], None, None]: logging.info(f'recv_resp: first byte modbus:{buf[0]} len:{len(buf)}') if not self.check_crc(buf): logging.error('Modbus: CRC error') @@ -136,8 +136,9 @@ class Modbus(): name = str(f'info-id.0x{addr:x}') update = False - info_db.tracer.log(level, f'GEN3PLUS: {name} : {result}{unit}' - f' update: {update}') + info_db.tracer.log(level, + f'MODBUS({node_id}): {name} : {result}' + f'{unit} update: {update}') def check_crc(self, msg) -> bool: return 0 == self.__calc_crc(msg) diff --git a/app/tests/test_modbus.py b/app/tests/test_modbus.py index fcec232..b1764e9 100644 --- a/app/tests/test_modbus.py +++ b/app/tests/test_modbus.py @@ -30,7 +30,7 @@ def test_build_recv(): assert pdu == b'\x01\x03\x30\x0e\x00\x02\xaa\xc8' assert mb.check_crc(pdu) call = 0 - for key, update in mb.recv_resp(mb.db, b'\x01\x03\x04\x01\x2c\x00\x46\xbb\xf4'): + for key, update in mb.recv_resp(mb.db, b'\x01\x03\x04\x01\x2c\x00\x46\xbb\xf4', 'test'): if key == 'grid': assert update == True elif key == 'inverter':