remove _forward_buffer

This commit is contained in:
Stefan Allius
2024-09-22 15:00:53 +02:00
parent 0b437cf3bc
commit eea725b8da
5 changed files with 154 additions and 181 deletions

View File

@@ -6,7 +6,7 @@ from tzlocal import get_localzone
if __name__ == "app.src.gen3.talent":
from app.src.async_ifc import AsyncIfc
from app.src.messages import hex_dump_memory, Message, State
from app.src.messages import Message, State
from app.src.modbus import Modbus
from app.src.my_timer import Timer
from app.src.config import Config
@@ -14,7 +14,7 @@ if __name__ == "app.src.gen3.talent":
from app.src.infos import Register
else: # pragma: no cover
from async_ifc import AsyncIfc
from messages import hex_dump_memory, Message, State
from messages import Message, State
from modbus import Modbus
from my_timer import Timer
from config import Config
@@ -171,9 +171,8 @@ class Talent(Message):
if tsun['enabled']:
buflen = self.header_len+self.data_len
buffer = self.ifc.read.peek(buflen)
self._forward_buffer += buffer
hex_dump_memory(logging.DEBUG, 'Store for forwarding:',
buffer, buflen)
self.ifc.forward += buffer
self.ifc.forward.logging(logging.DEBUG, 'Store for forwarding:')
fnc = self.switch.get(self.msg_id, self.msg_unknown)
logger.info(self.__flow_str(self.server_side, 'forwrd') +
@@ -187,10 +186,8 @@ class Talent(Message):
if tsun['enabled']:
_len = len(buffer)
struct.pack_into('!l', buffer, 0, _len-4)
buflen = _len
self._forward_buffer += buffer
hex_dump_memory(logging.INFO, 'Store for forwarding:',
buffer, buflen)
self.ifc.forward += buffer
self.ifc.forward.logging(logging.INFO, 'Store for forwarding:')
fnc = self.switch.get(self.msg_id, self.msg_unknown)
logger.info(self.__flow_str(self.server_side, 'forwrd') +

View File

@@ -264,9 +264,8 @@ class SolarmanV5(Message):
return
tsun = Config.get('solarman')
if tsun['enabled']:
self._forward_buffer += buffer[:buflen]
hex_dump_memory(logging.DEBUG, 'Store for forwarding:',
buffer, buflen)
self.ifc.forward += buffer[:buflen]
self.ifc.forward.logging(logging.DEBUG, 'Store for forwarding:')
fnc = self.switch.get(self.control, self.msg_unknown)
logger.info(self.__flow_str(self.server_side, 'forwrd') +
@@ -467,8 +466,9 @@ class SolarmanV5(Message):
0x0002, 0, 0, 0,
at_cmd.encode('utf-8'), b'\r')
self.__finish_send_msg()
self.ifc.write.logging(logging.INFO, 'Send AT Command:')
try:
await self.async_write('Send AT Command:')
self.ifc.write()
except Exception:
self.ifc.write.clear()

View File

@@ -107,7 +107,6 @@ class Message(metaclass=IterRegistry):
self.unique_id = 0
self.node_id = '' # will be overwritten in the child class's __init__
self.sug_area = ''
self._forward_buffer = bytearray(0)
self.new_data = {}
self.state = State.init
self.shutdown_started = False

View File

@@ -61,6 +61,8 @@ class MemoryStream(SolarmanV5):
self.msg_recvd = []
def write_cb(self):
if self.test_exception_async_write:
raise RuntimeError("Peer closed.")
self.sent_pdu = self.ifc.write.get()
def _timestamp(self):
@@ -96,10 +98,6 @@ class MemoryStream(SolarmanV5):
pass # ignore exceptions here
return copied_bytes
async def async_write(self, headline=''):
if self.test_exception_async_write:
raise RuntimeError("Peer closed.")
def createClientStream(self, msg, chunks = (0,)):
c = MemoryStream(msg, chunks, False)
self.remote_stream = c
@@ -691,7 +689,7 @@ def test_read_message(device_ind_msg):
assert m.data_len == 0xd4
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -712,7 +710,7 @@ def test_invalid_start_byte(invalid_start_byte, device_ind_msg):
assert m.data_len == 0xd4
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1
m.close()
@@ -732,7 +730,7 @@ def test_invalid_stop_byte(invalid_stop_byte):
assert m.data_len == 0xd4
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1
m.close()
@@ -757,7 +755,7 @@ def test_invalid_stop_byte2(invalid_stop_byte, device_ind_msg):
assert m.unique_id == None
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1
m.close()
@@ -779,7 +777,7 @@ def test_invalid_stop_start_byte(invalid_stop_byte, invalid_start_byte):
assert m.data_len == 0xd4
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1
m.close()
@@ -803,7 +801,7 @@ def test_invalid_checksum(invalid_checksum, device_ind_msg):
assert m.msg_recvd[1]['data_len']==0xd4
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 1
m.close()
@@ -824,7 +822,7 @@ def test_read_message_twice(config_no_tsun_inv1, device_ind_msg, device_rsp_msg)
assert m.msg_recvd[1]['seq']=='01:01'
assert m.msg_recvd[1]['data_len']==0xd4
assert m.ifc.write.get()==device_rsp_msg+device_rsp_msg
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -895,7 +893,7 @@ def test_read_two_messages(config_tsun_allow_all, device_ind_msg, device_rsp_msg
assert m.msg_recvd[1]['data_len']==0x199
assert '02b0' == m.db.get_db_value(Register.SENSOR_LIST, None)
assert 0x02b0 == m.sensor_list
assert m._forward_buffer==device_ind_msg+inverter_ind_msg
assert m.ifc.forward.get()==device_ind_msg+inverter_ind_msg
assert m.ifc.write.get()==device_rsp_msg+inverter_rsp_msg
m._init_new_client_conn()
@@ -920,7 +918,7 @@ def test_read_two_messages2(config_tsun_allow_all, inverter_ind_msg, inverter_in
assert m.msg_recvd[1]['seq']=='03:03'
assert m.msg_recvd[1]['data_len']==0x199
assert m.time_ofs == 0x33e447a0
assert m._forward_buffer==inverter_ind_msg+inverter_ind_msg_81
assert m.ifc.forward.get()==inverter_ind_msg+inverter_ind_msg_81
assert m.ifc.write.get()==inverter_rsp_msg+inverter_rsp_msg_81
m._init_new_client_conn()
@@ -949,7 +947,7 @@ def test_read_two_messages3(config_tsun_allow_all, device_ind_msg2, device_rsp_m
assert m.msg_recvd[1]['data_len']==0xd4
assert '02b0' == m.db.get_db_value(Register.SENSOR_LIST, None)
assert 0x02b0 == m.sensor_list
assert m._forward_buffer==inverter_ind_msg+device_ind_msg2
assert m.ifc.forward.get()==inverter_ind_msg+device_ind_msg2
assert m.ifc.write.get()==inverter_rsp_msg+device_rsp_msg2
m._init_new_client_conn()
@@ -970,7 +968,7 @@ def test_unkown_frame_code(config_tsun_inv1, inverter_ind_msg_81, inverter_rsp_m
assert m.data_len == 0x199
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==inverter_rsp_msg_81
assert m._forward_buffer==inverter_ind_msg_81
assert m.ifc.forward.get()==inverter_ind_msg_81
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -988,7 +986,7 @@ def test_unkown_message(config_tsun_inv1, unknown_msg):
assert m.data_len == 0x0a
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==unknown_msg
assert m.ifc.forward.get()==unknown_msg
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1006,7 +1004,7 @@ def test_device_rsp(config_tsun_inv1, device_rsp_msg):
assert m.data_len == 0x0a
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1024,7 +1022,7 @@ def test_inverter_rsp(config_tsun_inv1, inverter_rsp_msg):
assert m.data_len == 0x0a
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1041,7 +1039,7 @@ def test_heartbeat_ind(config_tsun_inv1, heartbeat_ind_msg, heartbeat_rsp_msg):
assert m.data_len == 0x01
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==heartbeat_rsp_msg
assert m._forward_buffer==heartbeat_ind_msg
assert m.ifc.forward.get()==heartbeat_ind_msg
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1059,7 +1057,7 @@ def test_heartbeat_ind2(config_tsun_inv1, heartbeat_ind_msg, heartbeat_rsp_msg):
assert m.data_len == 0x01
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==heartbeat_rsp_msg
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1077,7 +1075,7 @@ def test_heartbeat_rsp(config_tsun_inv1, heartbeat_rsp_msg):
assert m.data_len == 0x0a
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1094,13 +1092,13 @@ def test_sync_start_ind(config_tsun_inv1, sync_start_ind_msg, sync_start_rsp_msg
assert m.data_len == 47
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==sync_start_rsp_msg
assert m._forward_buffer==sync_start_ind_msg
assert m.ifc.forward.peek()==sync_start_ind_msg
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.seq.server_side = False # simulate forawding to TSUN cloud
m._update_header(m._forward_buffer)
m._update_header(m.ifc.forward.peek())
assert str(m.seq) == '0d:0e' # value after forwarding indication
assert m._forward_buffer==sync_start_fwd_msg
assert m.ifc.forward.get()==sync_start_fwd_msg
m.close()
@@ -1118,7 +1116,7 @@ def test_sync_start_rsp(config_tsun_inv1, sync_start_rsp_msg):
assert m.data_len == 0x0a
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1135,7 +1133,7 @@ def test_sync_end_ind(config_tsun_inv1, sync_end_ind_msg, sync_end_rsp_msg):
assert m.data_len == 60
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==sync_end_rsp_msg
assert m._forward_buffer==sync_end_ind_msg
assert m.ifc.forward.get()==sync_end_ind_msg
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1153,7 +1151,7 @@ def test_sync_end_rsp(config_tsun_inv1, sync_end_rsp_msg):
assert m.data_len == 0x0a
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
m.close()
@@ -1282,13 +1280,11 @@ async def test_msg_build_modbus_req(config_tsun_inv1, device_ind_msg, device_rsp
assert m.control == 0x4110
assert str(m.seq) == '01:01'
assert m.ifc.write.get()==device_rsp_msg
assert m._forward_buffer==device_ind_msg
assert m.ifc.forward.get()==device_ind_msg
m.ifc.write.clear() # clear send buffer for next test
m._forward_buffer = bytearray(0) # clear send buffer for next test
await m.send_modbus_cmd(Modbus.WRITE_SINGLE_REG, 0x2008, 0, logging.DEBUG)
assert 0 == m.send_msg_ofs
assert m._forward_buffer == b''
assert m.ifc.forward.get() == b''
assert m.sent_pdu == b'' # modbus command must be ignore, cause connection is still not up
assert m.ifc.write.get() == b'' # modbus command must be ignore, cause connection is still not up
@@ -1302,20 +1298,13 @@ async def test_msg_build_modbus_req(config_tsun_inv1, device_ind_msg, device_rsp
assert m.msg_recvd[1]['seq']=='02:02'
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==inverter_rsp_msg
assert m._forward_buffer==inverter_ind_msg
assert m.ifc.forward.get()==inverter_ind_msg
m._forward_buffer = bytearray(0) # clear send buffer for next test
await m.send_modbus_cmd(Modbus.WRITE_SINGLE_REG, 0x2008, 0, logging.DEBUG)
assert 0 == m.send_msg_ofs
assert m._forward_buffer == b''
assert m.ifc.forward.get() == b''
assert m.sent_pdu == msg_modbus_cmd
assert m.ifc.write.get()== b''
m.test_exception_async_write = True
await m.send_modbus_cmd(Modbus.WRITE_SINGLE_REG, 0x2008, 0, logging.DEBUG)
assert 0 == m.send_msg_ofs
assert m._forward_buffer == b''
assert m.ifc.write.get() == b''
m.close()
@pytest.mark.asyncio
@@ -1326,12 +1315,12 @@ async def test_at_cmd(config_tsun_allow_all, device_ind_msg, device_rsp_msg, inv
assert m.control == 0x4110
assert str(m.seq) == '01:01'
assert m.ifc.write.get()==device_rsp_msg
assert m._forward_buffer==device_ind_msg
assert m.ifc.forward.get()==device_ind_msg
m._forward_buffer = bytearray(0) # clear send buffer for next test
await m.send_at_cmd('AT+TIME=214028,1,60,120')
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.sent_pdu == b''
assert str(m.seq) == '01:01'
assert m.mqtt.key == ''
assert m.mqtt.data == ""
@@ -1341,12 +1330,14 @@ async def test_at_cmd(config_tsun_allow_all, device_ind_msg, device_rsp_msg, inv
assert m.control == 0x4210
assert str(m.seq) == '02:02'
assert m.ifc.write.get()==inverter_rsp_msg
assert m._forward_buffer==inverter_ind_msg
assert m.ifc.forward.get()==inverter_ind_msg
m._forward_buffer = bytearray(0) # clear send buffer for next test
await m.send_at_cmd('AT+TIME=214028,1,60,120')
assert m.ifc.write.get()==at_command_ind_msg
assert m._forward_buffer==b''
assert m.ifc.forward.get() == b''
assert m.ifc.write.get()== b''
assert m.sent_pdu == at_command_ind_msg
m.sent_pdu = bytearray()
assert str(m.seq) == '02:03'
assert m.mqtt.key == ''
assert m.mqtt.data == ""
@@ -1357,15 +1348,18 @@ async def test_at_cmd(config_tsun_allow_all, device_ind_msg, device_rsp_msg, inv
assert str(m.seq) == '03:03'
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.key == 'at_resp'
assert m.data == "+ok"
m.sent_pdu = bytearray()
m.test_exception_async_write = True
await m.send_at_cmd('AT+TIME=214028,1,60,120')
assert m.sent_pdu == b''
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.sent_pdu == b''
assert str(m.seq) == '03:04'
assert m.forward_at_cmd_resp == False
assert m.mqtt.key == ''
@@ -1380,12 +1374,11 @@ async def test_at_cmd_blocked(config_tsun_allow_all, device_ind_msg, device_rsp_
assert m.control == 0x4110
assert str(m.seq) == '01:01'
assert m.ifc.write.get()==device_rsp_msg
assert m._forward_buffer==device_ind_msg
assert m.ifc.forward.get()==device_ind_msg
m._forward_buffer = bytearray(0) # clear send buffer for next test
await m.send_at_cmd('AT+WEBU')
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert str(m.seq) == '01:01'
assert m.mqtt.key == ''
assert m.mqtt.data == ""
@@ -1396,13 +1389,12 @@ async def test_at_cmd_blocked(config_tsun_allow_all, device_ind_msg, device_rsp_
assert str(m.seq) == '02:02'
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==inverter_rsp_msg
assert m._forward_buffer==inverter_ind_msg
assert m.ifc.forward.get()==inverter_ind_msg
m._forward_buffer = bytearray(0) # clear send buffer for next test
await m.send_at_cmd('AT+WEBU')
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert str(m.seq) == '02:02'
assert m.forward_at_cmd_resp == False
assert m.mqtt.key == 'at_resp'
@@ -1426,7 +1418,7 @@ def test_at_cmd_ind(config_tsun_inv1, at_command_ind_msg):
assert m.data_len == 39
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==at_command_ind_msg
assert m.ifc.forward.get()==at_command_ind_msg
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
assert m.db.stat['proxy']['AT_Command'] == 1
assert m.db.stat['proxy']['AT_Command_Blocked'] == 0
@@ -1450,7 +1442,7 @@ def test_at_cmd_ind_block(config_tsun_inv1, at_command_ind_msg_block):
assert m.data_len == 23
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
assert m.db.stat['proxy']['AT_Command'] == 0
assert m.db.stat['proxy']['AT_Command_Blocked'] == 1
@@ -1470,7 +1462,7 @@ def test_msg_at_command_rsp1(config_tsun_inv1, at_command_rsp_msg):
assert str(m.seq) == '03:03'
assert m.header_len==11
assert m.data_len==17
assert m._forward_buffer==at_command_rsp_msg
assert m.ifc.forward.get()==at_command_rsp_msg
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['Modbus_Command'] == 0
@@ -1489,7 +1481,7 @@ def test_msg_at_command_rsp2(config_tsun_inv1, at_command_rsp_msg):
assert str(m.seq) == '03:03'
assert m.header_len==11
assert m.data_len==17
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['Modbus_Command'] == 0
@@ -1514,7 +1506,7 @@ def test_msg_modbus_req(config_tsun_inv1, msg_modbus_cmd, msg_modbus_cmd_fwd):
assert str(c.seq) == '03:02'
assert c.header_len==11
assert c.data_len==23
assert c._forward_buffer==b''
assert c.ifc.forward.get()==b''
assert c.ifc.write.get()==b''
assert m.sent_pdu == msg_modbus_cmd_fwd
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
@@ -1541,7 +1533,7 @@ def test_msg_modbus_req2(config_tsun_inv1, msg_modbus_cmd_crc_err):
assert str(c.seq) == '03:02'
assert c.header_len==11
assert c.data_len==23
assert c._forward_buffer==b''
assert c.ifc.forward.get()==b''
assert c.ifc.write.get()==b''
assert m.sent_pdu==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
@@ -1564,7 +1556,7 @@ def test_msg_unknown_cmd_req(config_tsun_inv1, msg_unknown_cmd):
assert str(m.seq) == '03:02'
assert m.header_len==11
assert m.data_len==23
assert m._forward_buffer==msg_unknown_cmd
assert m.ifc.forward.get()==msg_unknown_cmd
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['AT_Command'] == 0
@@ -1585,7 +1577,7 @@ def test_msg_modbus_rsp1(config_tsun_inv1, msg_modbus_rsp):
assert str(m.seq) == '03:03'
assert m.header_len==11
assert m.data_len==59
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['Modbus_Command'] == 0
@@ -1609,20 +1601,19 @@ def test_msg_modbus_rsp2(config_tsun_inv1, msg_modbus_rsp):
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.mb.err == 0
assert m.msg_count == 1
assert m._forward_buffer==msg_modbus_rsp
assert m.ifc.forward.get()==msg_modbus_rsp
assert m.ifc.write.get()==b''
assert m.db.get_db_value(Register.VERSION) == 'V4.0.10'
assert m.new_data['inverter'] == True
m.new_data['inverter'] = False
m.mb.req_pend = True
m._forward_buffer = bytearray()
m.append_msg(msg_modbus_rsp)
m.read() # read complete msg, and dispatch msg
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.mb.err == 0
assert m.msg_count == 2
assert m._forward_buffer==msg_modbus_rsp
assert m.ifc.forward.get()==msg_modbus_rsp
assert m.ifc.write.get()==b''
assert m.db.get_db_value(Register.VERSION) == 'V4.0.10'
assert m.new_data['inverter'] == False
@@ -1647,19 +1638,18 @@ def test_msg_modbus_rsp3(config_tsun_inv1, msg_modbus_rsp):
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.mb.err == 0
assert m.msg_count == 1
assert m._forward_buffer==msg_modbus_rsp
assert m.ifc.forward.get()==msg_modbus_rsp
assert m.ifc.write.get()==b''
assert m.db.get_db_value(Register.VERSION) == 'V4.0.10'
assert m.new_data['inverter'] == True
m.new_data['inverter'] = False
m._forward_buffer = bytearray()
m.append_msg(msg_modbus_rsp)
m.read() # read complete msg, and dispatch msg
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.mb.err == 5
assert m.msg_count == 2
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.get_db_value(Register.VERSION) == 'V4.0.10'
assert m.new_data['inverter'] == False
@@ -1678,7 +1668,7 @@ def test_msg_unknown_rsp(config_tsun_inv1, msg_unknown_cmd_rsp):
assert str(m.seq) == '03:03'
assert m.header_len==11
assert m.data_len==59
assert m._forward_buffer==msg_unknown_cmd_rsp
assert m.ifc.forward.get()==msg_unknown_cmd_rsp
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['Modbus_Command'] == 0
@@ -1692,7 +1682,7 @@ def test_msg_modbus_invalid(config_tsun_inv1, msg_modbus_invalid):
m.read() # read complete msg, and dispatch msg
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.msg_count == 1
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['Modbus_Command'] == 0
@@ -1715,7 +1705,7 @@ def test_msg_modbus_fragment(config_tsun_inv1, msg_modbus_rsp):
m.read() # read complete msg, and dispatch msg
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.msg_count == 1
assert m._forward_buffer==msg_modbus_rsp
assert m.ifc.forward.get()==msg_modbus_rsp
assert m.ifc.write.get()== b''
assert m.mb.err == 0
assert m.modbus_elms == 20-1 # register 0x300d is unknown, so one value can't be mapped
@@ -1741,7 +1731,7 @@ async def test_modbus_polling(config_tsun_inv1, heartbeat_ind_msg, heartbeat_rsp
assert m.data_len == 0x01
assert m.ifc.read.get()==b''
assert m.ifc.write.get()==heartbeat_rsp_msg
assert m._forward_buffer==heartbeat_ind_msg
assert m.ifc.forward.get()==heartbeat_ind_msg
assert m.db.stat['proxy']['Invalid_Msg_Format'] == 0
assert m.state == State.up

View File

@@ -34,7 +34,6 @@ class MemoryStream(Talent):
self.msg_count = 0
self.addr = 'Test: SrvSide'
self.send_msg_ofs = 0
self.test_exception_async_write = False
self.msg_recvd = []
self.remote_stream = None
@@ -90,10 +89,6 @@ class MemoryStream(Talent):
self.msg_count += 1
async def async_write(self, headline=''):
if self.test_exception_async_write:
raise RuntimeError("Peer closed.")
@pytest.fixture
@@ -746,7 +741,7 @@ def test_read_message(msg_contact_info):
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==25
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
m.close()
def test_read_message_twice(config_no_tsun_inv1, msg_inverter_ind):
@@ -766,7 +761,7 @@ def test_read_message_twice(config_no_tsun_inv1, msg_inverter_ind):
assert m.msg_recvd[1]['data_len']==120
assert m.id_str == b"R170000000000001"
assert m.unique_id == 'R170000000000001'
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
m.close()
def test_read_message_long_id(msg_contact_info_long_id):
@@ -851,7 +846,7 @@ def test_read_two_messages(config_tsun_allow_all, msg2_contact_info,msg_contact_
assert m.msg_recvd[1]['msg_id']==0
assert m.msg_recvd[1]['header_len']==23
assert m.msg_recvd[1]['data_len']==25
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==msg_contact_rsp + msg_contact_rsp2
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
@@ -876,7 +871,7 @@ def test_conttact_req(config_tsun_allow_all, msg_contact_info, msg_contact_rsp):
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==25
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==msg_contact_rsp
m.close()
@@ -894,7 +889,7 @@ def test_contact_broken_req(config_tsun_allow_all, msg_contact_info_broken, msg_
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==23
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==msg_contact_rsp
m.close()
@@ -912,7 +907,7 @@ def test_conttact_req(config_tsun_allow_all, msg_contact_info, msg_contact_rsp):
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==25
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==msg_contact_rsp
m.close()
@@ -930,7 +925,7 @@ def test_contact_broken_req(config_tsun_allow_all, msg_contact_info_broken, msg_
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==23
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==msg_contact_rsp
m.close()
@@ -949,7 +944,7 @@ def test_msg_contact_resp(config_tsun_inv1, msg_contact_rsp):
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==1
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -969,7 +964,7 @@ def test_msg_contact_resp_2(config_tsun_inv1, msg_contact_rsp):
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==1
assert m._forward_buffer==msg_contact_rsp
assert m.ifc.forward.get()==msg_contact_rsp
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -989,7 +984,7 @@ def test_msg_contact_resp_3(config_tsun_inv1, msg_contact_rsp):
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==1
assert m._forward_buffer==msg_contact_rsp
assert m.ifc.forward.get()==msg_contact_rsp
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1007,7 +1002,7 @@ def test_msg_contact_invalid(config_tsun_inv1, msg_contact_invalid):
assert m.msg_id==0
assert m.header_len==23
assert m.data_len==1
assert m._forward_buffer==msg_contact_invalid
assert m.ifc.forward.get()==msg_contact_invalid
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 1
m.close()
@@ -1028,7 +1023,7 @@ def test_msg_get_time(config_tsun_inv1, msg_get_time):
assert m.ts_offset==0
assert m.data_len==0
assert m.state==State.pend
assert m._forward_buffer==msg_get_time
assert m.ifc.forward.get()==msg_get_time
assert m.ifc.write.get()==b'\x00\x00\x00\x1b\x10R170000000000001\x91"\x00\x00\x01\x89\xc6,_\x00'
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1049,7 +1044,7 @@ def test_msg_get_time_autark(config_no_tsun_inv1, msg_get_time):
assert m.ts_offset==0
assert m.data_len==0
assert m.state==State.received
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==bytearray(b'\x00\x00\x00\x1b\x10R170000000000001\x91"\x00\x00\x01\x89\xc6,_\x00')
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1073,7 +1068,7 @@ def test_msg_time_resp(config_tsun_inv1, msg_time_rsp):
assert m.ts_offset==3600000
assert s.ts_offset==3600000
assert m.data_len==8
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.remote_stream = None
@@ -1094,7 +1089,7 @@ def test_msg_time_resp_autark(config_no_tsun_inv1, msg_time_rsp):
assert m.header_len==23
assert m.ts_offset==3600000
assert m.data_len==8
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1113,7 +1108,7 @@ def test_msg_time_inv_resp(config_tsun_inv1, msg_time_rsp_inv):
assert m.header_len==23
assert m.ts_offset==0
assert m.data_len==4
assert m._forward_buffer==msg_time_rsp_inv
assert m.ifc.forward.get()==msg_time_rsp_inv
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1132,7 +1127,7 @@ def test_msg_time_invalid(config_tsun_inv1, msg_time_invalid):
assert m.header_len==23
assert m.ts_offset==0
assert m.data_len==0
assert m._forward_buffer==msg_time_invalid
assert m.ifc.forward.get()==msg_time_invalid
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 1
m.close()
@@ -1151,7 +1146,7 @@ def test_msg_time_invalid_autark(config_no_tsun_inv1, msg_time_invalid):
assert m.ts_offset==0
assert m.header_len==23
assert m.data_len==0
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 1
m.close()
@@ -1175,7 +1170,7 @@ def test_msg_act_time(config_no_modbus_poll, msg_act_time, msg_act_time_ack):
assert m.header_len==23
assert m.data_len==9
assert m.state == State.up
assert m._forward_buffer==msg_act_time
assert m.ifc.forward.get()==msg_act_time
assert m.ifc.write.get()==msg_act_time_ack
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert 125 == m.db.get_db_value(Register.POLLING_INTERVAL, 0)
@@ -1199,7 +1194,7 @@ def test_msg_act_time2(config_tsun_inv1, msg_act_time, msg_act_time_ack):
assert m.ts_offset==0
assert m.header_len==23
assert m.data_len==9
assert m._forward_buffer==msg_act_time
assert m.ifc.forward.get()==msg_act_time
assert m.ifc.write.get()==msg_act_time_ack
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert 123 == m.db.get_db_value(Register.POLLING_INTERVAL, 0)
@@ -1220,7 +1215,7 @@ def test_msg_act_time_ofs(config_tsun_inv1, msg_act_time, msg_act_time_ofs, msg_
assert m.ts_offset==3600
assert m.header_len==23
assert m.data_len==9
assert m._forward_buffer==msg_act_time_ofs
assert m.ifc.forward.get()==msg_act_time_ofs
assert m.ifc.write.get()==msg_act_time_ack
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1240,7 +1235,7 @@ def test_msg_act_time_ofs2(config_tsun_inv1, msg_act_time, msg_act_time_ofs, msg
assert m.ts_offset==-3600
assert m.header_len==23
assert m.data_len==9
assert m._forward_buffer==msg_act_time
assert m.ifc.forward.get()==msg_act_time
assert m.ifc.write.get()==msg_act_time_ack
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1260,7 +1255,7 @@ def test_msg_act_time_autark(config_no_tsun_inv1, msg_act_time, msg_act_time_ack
assert m.ts_offset==0
assert m.header_len==23
assert m.data_len==9
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==msg_act_time_ack
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1278,7 +1273,7 @@ def test_msg_act_time_ack(config_tsun_inv1, msg_act_time_ack):
assert m.msg_id==153
assert m.header_len==23
assert m.data_len==1
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1296,7 +1291,7 @@ def test_msg_act_time_cmd(config_tsun_inv1, msg_act_time_cmd):
assert m.msg_id==153
assert m.header_len==23
assert m.data_len==1
assert m._forward_buffer==msg_act_time_cmd
assert m.ifc.forward.get()==msg_act_time_cmd
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 1
m.close()
@@ -1314,7 +1309,7 @@ def test_msg_act_time_inv(config_tsun_inv1, msg_act_time_inv):
assert m.msg_id==153
assert m.header_len==23
assert m.data_len==8
assert m._forward_buffer==msg_act_time_inv
assert m.ifc.forward.get()==msg_act_time_inv
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1333,11 +1328,11 @@ def test_msg_cntrl_ind(config_tsun_inv1, msg_controller_ind, msg_controller_ind_
assert m.header_len==23
assert m.data_len==284
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_controller_ind
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.peek()==msg_controller_ind
m.ts_offset = -4096
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_controller_ind_ts_offs
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_controller_ind_ts_offs
assert m.ifc.write.get()==msg_controller_ack
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1355,7 +1350,7 @@ def test_msg_cntrl_ack(config_tsun_inv1, msg_controller_ack):
assert m.msg_id==113
assert m.header_len==23
assert m.data_len==1
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1374,11 +1369,11 @@ def test_msg_cntrl_invalid(config_tsun_inv1, msg_controller_invalid):
assert m.header_len==23
assert m.data_len==1
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_controller_invalid
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.peek()==msg_controller_invalid
m.ts_offset = -4096
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_controller_invalid
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_controller_invalid
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 1
m.close()
@@ -1398,11 +1393,11 @@ def test_msg_inv_ind(config_tsun_inv1, msg_inverter_ind, msg_inverter_ind_ts_off
assert m.header_len==23
assert m.data_len==120
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_inverter_ind
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.peek()==msg_inverter_ind
m.ts_offset = +256
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_inverter_ind_ts_offs
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_inverter_ind_ts_offs
assert m.ifc.write.get()==msg_inverter_ack
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1425,8 +1420,8 @@ def test_msg_inv_ind1(config_tsun_inv1, msg_inverter_ind2, msg_inverter_ind_ts_o
assert m.header_len==23
assert m.data_len==1263
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_inverter_ind2
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_inverter_ind2
assert m.ifc.write.get()==msg_inverter_ack
assert m.db.get_db_value(Register.TS_GRID) == 1691243349
m.close()
@@ -1449,8 +1444,8 @@ def test_msg_inv_ind2(config_tsun_inv1, msg_inverter_ind_new, msg_inverter_ind_t
assert m.header_len==23
assert m.data_len==1165
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_inverter_ind_new
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_inverter_ind_new
assert m.ifc.write.get()==msg_inverter_ack
assert m.db.get_db_value(Register.INVERTER_STATUS) == None
assert m.db.get_db_value(Register.TS_GRID) == None
@@ -1477,8 +1472,8 @@ def test_msg_inv_ind3(config_tsun_inv1, msg_inverter_ind_0w, msg_inverter_ack):
assert m.header_len==23
assert m.data_len==1263
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_inverter_ind_0w
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_inverter_ind_0w
assert m.ifc.write.get()==msg_inverter_ack
assert m.db.get_db_value(Register.INVERTER_STATUS) == 1
assert isclose(m.db.db['grid']['Output_Power'], 0.5)
@@ -1501,7 +1496,7 @@ def test_msg_inv_ack(config_tsun_inv1, msg_inverter_ack):
assert m.msg_id==4
assert m.header_len==23
assert m.data_len==1
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -1520,11 +1515,11 @@ def test_msg_inv_invalid(config_tsun_inv1, msg_inverter_invalid):
assert m.header_len==23
assert m.data_len==1
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_inverter_invalid
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.peek()==msg_inverter_invalid
m.ts_offset = 256
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_inverter_invalid
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_inverter_invalid
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 1
m.close()
@@ -1544,11 +1539,11 @@ def test_msg_ota_req(config_tsun_inv1, msg_ota_req):
assert m.header_len==23
assert m.data_len==259
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_ota_req
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.peek()==msg_ota_req
m.ts_offset = 4096
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_ota_req
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_ota_req
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['OTA_Start_Msg'] == 1
@@ -1571,11 +1566,11 @@ def test_msg_ota_ack(config_tsun_inv1, msg_ota_ack):
assert m.header_len==23
assert m.data_len==1
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_ota_ack
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.peek()==msg_ota_ack
m.ts_offset = 256
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_ota_ack
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.get()==msg_ota_ack
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['OTA_Start_Msg'] == 0
@@ -1596,11 +1591,11 @@ def test_msg_ota_invalid(config_tsun_inv1, msg_ota_invalid):
assert m.header_len==23
assert m.data_len==1
m.ts_offset = 0
m._update_header(m._forward_buffer)
assert m._forward_buffer==msg_ota_invalid
m._update_header(m.ifc.forward.peek())
assert m.ifc.forward.peek()==msg_ota_invalid
m.ts_offset = 4096
assert m._forward_buffer==msg_ota_invalid
m._update_header(m._forward_buffer)
assert m.ifc.forward.get()==msg_ota_invalid
m._update_header(m.ifc.forward.peek())
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 1
assert m.db.stat['proxy']['OTA_Start_Msg'] == 0
@@ -1619,7 +1614,7 @@ def test_msg_unknown(config_tsun_inv1, msg_unknown):
assert m.msg_id==23
assert m.header_len==23
assert m.data_len==4
assert m._forward_buffer==msg_unknown
assert m.ifc.forward.get()==msg_unknown
assert m.ifc.write.get()==b''
assert 1 == m.db.stat['proxy']['Unknown_Msg']
m.close()
@@ -1744,10 +1739,10 @@ def test_msg_modbus_req(config_tsun_inv1, msg_modbus_cmd):
assert c.msg_id==119
assert c.header_len==23
assert c.data_len==13
assert c._forward_buffer==b''
assert c.ifc.forward.get()==b''
assert c.ifc.write.get()==b''
assert m.id_str == b"R170000000000001"
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.sent_pdu == msg_modbus_cmd
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
@@ -1774,10 +1769,10 @@ def test_msg_modbus_req2(config_tsun_inv1, msg_modbus_cmd):
assert c.msg_id==119
assert c.header_len==23
assert c.data_len==13
assert c._forward_buffer==b''
assert c.ifc.forward.get()==b''
assert c.ifc.write.get()==b''
assert m.id_str == b"R170000000000001"
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.sent_pdu == b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
@@ -1803,9 +1798,9 @@ def test_msg_modbus_req3(config_tsun_inv1, msg_modbus_cmd_crc_err):
assert c.msg_id==119
assert c.header_len==23
assert c.data_len==13
assert c._forward_buffer==b''
assert c.ifc.forward.get()==b''
assert c.ifc.write.get()==b''
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.sent_pdu ==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
@@ -1828,7 +1823,7 @@ def test_msg_modbus_rsp1(config_tsun_inv1, msg_modbus_rsp):
assert m.msg_id==119
assert m.header_len==23
assert m.data_len==13
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['Modbus_Command'] == 0
@@ -1850,7 +1845,7 @@ def test_msg_modbus_cloud_rsp(config_tsun_inv1, msg_modbus_rsp):
assert m.msg_id==119
assert m.header_len==23
assert m.data_len==13
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Msg'] == 1
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
@@ -1878,7 +1873,7 @@ def test_msg_modbus_rsp2(config_tsun_inv1, msg_modbus_rsp20):
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.mb.err == 5
assert m.msg_count == 2
assert m._forward_buffer==msg_modbus_rsp20
assert m.ifc.forward.get()==msg_modbus_rsp20
assert m.ifc.write.get()==b''
assert m.db.db == {'collector': {'Serial_Number': 'R170000000000001'}, 'inverter': {'Version': 'V5.1.09', 'Rated_Power': 300}, 'grid': {'Timestamp': m._utc(), 'Voltage': 225.9, 'Current': 0.41, 'Frequency': 49.99, 'Output_Power': 94.8}, 'env': {'Inverter_Temp': 22}, 'input': {'Timestamp': m._utc(), 'pv1': {'Voltage': 0.8, 'Current': 0.0, 'Power': 0.0}, 'pv2': {'Voltage': 34.5, 'Current': 2.89, 'Power': 99.8}, 'pv3': {'Voltage': 0.0, 'Current': 0.0, 'Power': 0.0}, 'pv4': {'Voltage': 0.0, 'Current': 0.0, 'Power': 0.0}}}
assert m.db.get_db_value(Register.VERSION) == 'V5.1.09'
@@ -1908,7 +1903,7 @@ def test_msg_modbus_rsp3(config_tsun_inv1, msg_modbus_rsp21):
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.mb.err == 5
assert m.msg_count == 2
assert m._forward_buffer==msg_modbus_rsp21
assert m.ifc.forward.get()==msg_modbus_rsp21
assert m.ifc.write.get()==b''
assert m.db.db == {'collector': {'Serial_Number': 'R170000000000001'}, 'inverter': {'Version': 'V5.1.0E', 'Rated_Power': 300}, 'grid': {'Timestamp': m._utc(), 'Voltage': 225.9, 'Current': 0.41, 'Frequency': 49.99, 'Output_Power': 94.8}, 'env': {'Inverter_Temp': 22}, 'input': {'Timestamp': m._utc(), 'pv1': {'Voltage': 0.8, 'Current': 0.0, 'Power': 0.0}, 'pv2': {'Voltage': 34.5, 'Current': 2.89, 'Power': 99.8}, 'pv3': {'Voltage': 0.0, 'Current': 0.0, 'Power': 0.0}, 'pv4': {'Voltage': 0.0, 'Current': 0.0, 'Power': 0.0}}}
assert m.db.get_db_value(Register.VERSION) == 'V5.1.0E'
@@ -1937,7 +1932,7 @@ def test_msg_modbus_rsp4(config_tsun_inv1, msg_modbus_rsp21):
assert not m.header_valid # must be invalid, since msg was handled and buffer flushed
assert m.mb.err == 0
assert m.msg_count == 1
assert m._forward_buffer==msg_modbus_rsp21
assert m.ifc.forward.get()==msg_modbus_rsp21
assert m.modbus_elms == 19
assert m.ifc.write.get()==b''
assert m.db.db == db_values
@@ -1962,7 +1957,7 @@ def test_msg_modbus_rsp_new(config_tsun_inv1, msg_modbus_rsp20_new):
assert m.msg_id==135
assert m.header_len==23
assert m.data_len==107
assert m._forward_buffer==b''
assert m.ifc.forward.get()==b''
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
assert m.db.stat['proxy']['Modbus_Command'] == 0
@@ -1982,7 +1977,7 @@ def test_msg_modbus_invalid(config_tsun_inv1, msg_modbus_inv):
assert m.msg_id==119
assert m.header_len==23
assert m.data_len==13
assert m._forward_buffer==msg_modbus_inv
assert m.ifc.forward.get()==msg_modbus_inv
assert m.ifc.write.get()==b''
assert m.db.stat['proxy']['Unknown_Ctrl'] == 1
assert m.db.stat['proxy']['Modbus_Command'] == 0
@@ -2011,7 +2006,7 @@ def test_msg_modbus_fragment(config_tsun_inv1, msg_modbus_rsp20):
assert m.msg_id == 119
assert m.header_len == 23
assert m.data_len == 50
assert m._forward_buffer==msg_modbus_rsp20
assert m.ifc.forward.get()==msg_modbus_rsp20
assert m.ifc.write.get() == b''
assert m.mb.err == 0
assert m.modbus_elms == 20-1 # register 0x300d is unknown, so one value can't be mapped
@@ -2026,24 +2021,16 @@ async def test_msg_build_modbus_req(config_tsun_inv1, msg_modbus_cmd):
m.id_str = b"R170000000000001"
await m.send_modbus_cmd(Modbus.WRITE_SINGLE_REG, 0x2008, 0, logging.DEBUG)
assert 0 == m.send_msg_ofs
assert m._forward_buffer == b''
assert m.ifc.forward.get() == b''
assert m.ifc.write.get() == b''
assert m.sent_pdu == b''
m.state = State.up
await m.send_modbus_cmd(Modbus.WRITE_SINGLE_REG, 0x2008, 0, logging.DEBUG)
assert 0 == m.send_msg_ofs
assert m._forward_buffer == b''
assert m.ifc.forward.get() == b''
assert m.ifc.write.get() == b''
assert m.sent_pdu == msg_modbus_cmd
m.sent_pdu = bytearray(0) # clear send buffer for next test
m.test_exception_async_write = True
await m.send_modbus_cmd(Modbus.WRITE_SINGLE_REG, 0x2008, 0, logging.DEBUG)
assert 0 == m.send_msg_ofs
assert m._forward_buffer == b''
assert m.ifc.write.get() == b''
assert m.sent_pdu == b''
m.close()
def test_modbus_no_polling(config_no_modbus_poll, msg_get_time):
@@ -2061,7 +2048,7 @@ def test_modbus_no_polling(config_no_modbus_poll, msg_get_time):
assert m.header_len==23
assert m.ts_offset==0
assert m.data_len==0
assert m._forward_buffer==msg_get_time
assert m.ifc.forward.get()==msg_get_time
assert m.ifc.write.get()==b'\x00\x00\x00\x1b\x10R170000000000001\x91"\x00\x00\x01\x89\xc6,_\x00'
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0
m.close()
@@ -2085,7 +2072,7 @@ async def test_modbus_polling(config_tsun_inv1, msg_inverter_ind):
assert m.header_len==23
assert m.ts_offset==0
assert m.data_len==120
assert m._forward_buffer==msg_inverter_ind
assert m.ifc.forward.get()==msg_inverter_ind
assert m.ifc.write.get()==b'\x00\x00\x00\x14\x10R170000000000001\x99\x04\x01'
assert m.db.stat['proxy']['Unknown_Ctrl'] == 0