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