From a351f0da7287733c8e1d15660724714abe1e873e Mon Sep 17 00:00:00 2001 From: Markus Kaindl Date: Thu, 13 Aug 2026 03:05:37 +0200 Subject: [PATCH] modbusserver: init strings completely without full init, leftover data from previous, longer strings is kept in the registers --- packages/helpermodules/modbusserver.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/helpermodules/modbusserver.py b/packages/helpermodules/modbusserver.py index 51e19aeca7..1379492ae2 100644 --- a/packages/helpermodules/modbusserver.py +++ b/packages/helpermodules/modbusserver.py @@ -55,13 +55,15 @@ def _form_int16(value: Union[int, float, bool], register: int): def _form_str(value: Optional[str], register: int): - if value is None or len(value) == 0: - data_store[register] = 0 - else: + string_max_length = 20 + # initialize all registers to 0 to avoid leftover data from previous, longer values + for i in range(0, string_max_length): + data_store[register + i] = 0 + if not (value is None or len(value) == 0): bytes = value.encode("utf-8") length = len(bytes) - if length > 20: - raise ValueError("String darf max 20 Zeichen enthalten.") + if length > string_max_length: + raise ValueError(f"String darf max {string_max_length} Zeichen enthalten.") register_offset = 0 for i in range(0, length, 2): try: