don't send AT or Modbus cmds on closed connections
This commit is contained in:
@@ -45,6 +45,7 @@ class Talent(Message):
|
||||
self.db = InfosG3()
|
||||
self.mb = Modbus()
|
||||
self.forward_modbus_resp = False
|
||||
self.closed = False
|
||||
self.switch = {
|
||||
0x00: self.msg_contact_info,
|
||||
0x13: self.msg_ota_update,
|
||||
@@ -66,6 +67,7 @@ class Talent(Message):
|
||||
# so we have to erase self.switch, otherwise this instance can't be
|
||||
# deallocated by the garbage collector ==> we get a memory leak
|
||||
self.switch.clear()
|
||||
self.closed = True
|
||||
|
||||
def __set_serial_no(self, serial_no: str):
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ class SolarmanV5(Message):
|
||||
self.time_ofs = 0
|
||||
self.mb = Modbus()
|
||||
self.forward_modbus_resp = False
|
||||
self.closed = False
|
||||
self.switch = {
|
||||
|
||||
0x4210: self.msg_data_ind, # real time data
|
||||
@@ -102,6 +103,7 @@ class SolarmanV5(Message):
|
||||
# so we have to erase self.switch, otherwise this instance can't be
|
||||
# deallocated by the garbage collector ==> we get a memory leak
|
||||
self.switch.clear()
|
||||
self.closed = True
|
||||
|
||||
def __set_serial_no(self, snr: int):
|
||||
serial_no = str(snr)
|
||||
@@ -434,9 +436,9 @@ class SolarmanV5(Message):
|
||||
elif ftype == self.MB_RTU_CMD:
|
||||
valid = data[1]
|
||||
modbus_msg_len = self.data_len - 14
|
||||
logger.debug(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]}')
|
||||
# logger.info(f'first byte modbus:{data[14]}')
|
||||
inv_update = False
|
||||
for key, update in self.mb.recv_resp(self.db, data[14:-2],
|
||||
self.node_id):
|
||||
|
||||
@@ -130,7 +130,7 @@ class Mqtt(metaclass=Singleton):
|
||||
topic = str(message.topic)
|
||||
node_id = topic.split('/')[1] + '/'
|
||||
for m in Message:
|
||||
if m.server_side and m.node_id == node_id:
|
||||
if m.server_side and not m.closed and (m.node_id == node_id):
|
||||
logger_mqtt.debug(f'Found: {node_id}')
|
||||
fnc = getattr(m, func_name, None)
|
||||
if callable(fnc):
|
||||
@@ -148,7 +148,7 @@ class Mqtt(metaclass=Singleton):
|
||||
payload = message.payload.decode("UTF-8")
|
||||
logger_mqtt.info(f'InvCnf: {node_id}:{payload}')
|
||||
for m in Message:
|
||||
if m.server_side and m.node_id == node_id:
|
||||
if m.server_side and not m.closed and (m.node_id == node_id):
|
||||
logger_mqtt.info(f'Found: {node_id}')
|
||||
fnc = getattr(m, "send_modbus_cmd", None)
|
||||
res = payload.split(',')
|
||||
|
||||
Reference in New Issue
Block a user