parse modbus corect if we have received more than one message

This commit is contained in:
Stefan Allius
2024-05-07 17:56:54 +02:00
parent 54d2bf4439
commit d5010fe053

View File

@@ -55,6 +55,7 @@ class Talent(Message):
# 0x78: # 0x78:
0x04: self.msg_inverter_data, 0x04: self.msg_inverter_data,
} }
self.modbus_elms = 0 # for unit tests
''' '''
Our puplic methods Our puplic methods
@@ -377,10 +378,8 @@ class Talent(Message):
result = struct.unpack_from('!lBB', self._recv_buffer, result = struct.unpack_from('!lBB', self._recv_buffer,
self.header_len) self.header_len)
modbus_len = result[1] modbus_len = result[1]
logger.debug(f'Ref: {result[0]}') # logger.debug(f'Ref: {result[0]}')
logger.debug(f'Modbus MsgLen: {modbus_len} Func:{result[2]}') # logger.debug(f'Modbus MsgLen: {modbus_len} Func:{result[2]}')
# logger.info(f'time: {datetime.utcfromtimestamp(result[2]).strftime(
# "%Y-%m-%d %H:%M:%S")}')
return msg_hdr_len, modbus_len return msg_hdr_len, modbus_len
def msg_modbus(self): def msg_modbus(self):
@@ -390,11 +389,14 @@ class Talent(Message):
self.forward_modbus_resp = True self.forward_modbus_resp = True
self.inc_counter('Modbus_Command') self.inc_counter('Modbus_Command')
elif self.ctrl.is_ind(): elif self.ctrl.is_ind():
logger.debug(f'Modbus Ind MsgLen: {modbus_len}') # logger.debug(f'Modbus Ind MsgLen: {modbus_len}')
self.modbus_elms = 0
for key, update in self.mb.recv_resp(self.db, self._recv_buffer[ for key, update in self.mb.recv_resp(self.db, self._recv_buffer[
self.header_len + hdr_len:], self.new_data): self.header_len + hdr_len:self.header_len+self.data_len],
self.new_data):
if update: if update:
self.new_data[key] = True self.new_data[key] = True
self.modbus_elms += 1
if not self.forward_modbus_resp: if not self.forward_modbus_resp:
return return