Bonjour a tous
J’ai actuellement un souci avec myModbus et mon onduleur SUN2000, 5 a 10 fois par jour j’ai des valeurs aberrantes qui se retrouve dans les histo, et ça sur tous les cmds, de manière aléatoire.
j’ai reussi a ‹ choper › un log pour une valeur de température aberrante (à 0) venant d’un blob à titre d’exemple :
Avec ce log :
0028|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transaction/transaction.py", line 192, in callback_data
0029|self.response_future.set_result(pdu)
0030|asyncio.exceptions.InvalidStateError: invalid state
0031|[2025-07-04 16:07:47] ERROR : No response received after 3.0 retries, continue with next request
0032|[2025-07-04 16:07:47] ERROR : SUN_2000/Blob PARAM: exception during read request on device id 1, address 47082 -> Modbus Error: [Input/Output] No response received after 3.0 retries, continue with next request
0033|[2025-07-04 16:07:50] ERROR : SUN_2000: 'process_read_response' 'cmd_decode' for command id = 73801 (in register range with command id = 73802) raised an exception: unpack requires a buffer of 2 bytes
0034|[2025-07-04 16:07:58] ERROR : Exception response 131 / 0
0035|[2025-07-04 16:07:58] ERROR : Fatal error: protocol.data_received() call failed.
0036|protocol: <pymodbus.transaction.transaction.TransactionManager object at 0x7f17ea543e50>
0037|transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
0038|Traceback (most recent call last):
0039|File "/opt/pyenv/versions/3.11.9/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0040|self._protocol.data_received(data)
0041|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 304, in data_received
0042|self.datagram_received(data, None)
0043|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 338, in datagram_received
0044|cut = self.callback_data(self.recv_buffer, addr=addr)
0045|
Ce qui me déconcerte c’est que cela tourne sans problème dans 99.99 % des cas !!! donc le param des cmds semble hors cause, reste les params généraux :
Peu de chose dans les logs mais au moment de l’erreur ci-dessus j’ai eu une salve de qq message ET JE ME RENDS COMPTE QUE PRESQUE TOUTES LES CMDS PRESENTE UNE VALEUR ABERRANTE A LA MEME minute :
0000|[2025-07-04 16:06:49] ERROR : Fatal error: protocol.data_received() call failed.
0001|protocol: <pymodbus.transaction.transaction.TransactionManager object at 0x7f17ea543e50>
0002|transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
0003|Traceback (most recent call last):
0004|File "/opt/pyenv/versions/3.11.9/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0005|self._protocol.data_received(data)
0006|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 304, in data_received
0007|self.datagram_received(data, None)
0008|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 338, in datagram_received
0009|cut = self.callback_data(self.recv_buffer, addr=addr)
0010|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0011|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transaction/transaction.py", line 192, in callback_data
0012|self.response_future.set_result(pdu)
0013|asyncio.exceptions.InvalidStateError: invalid state
0014|[2025-07-04 16:07:16] ERROR : No response received after 3.0 retries, continue with next request
0015|[2025-07-04 16:07:16] ERROR : SUN_2000/Blob GRID: exception during read request on device id 1, address 37101 -> Modbus Error: [Input/Output] No response received after 3.0 retries, continue with next request
0016|[2025-07-04 16:07:25] ERROR : Exception response 131 / 0
0017|[2025-07-04 16:07:25] ERROR : Fatal error: protocol.data_received() call failed.
0018|protocol: <pymodbus.transaction.transaction.TransactionManager object at 0x7f17ea543e50>
0019|transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
0020|Traceback (most recent call last):
0021|File "/opt/pyenv/versions/3.11.9/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0022|self._protocol.data_received(data)
0023|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 304, in data_received
0024|self.datagram_received(data, None)
0025|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 338, in datagram_received
0026|cut = self.callback_data(self.recv_buffer, addr=addr)
0027|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0028|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transaction/transaction.py", line 192, in callback_data
0029|self.response_future.set_result(pdu)
0030|asyncio.exceptions.InvalidStateError: invalid state
0031|[2025-07-04 16:07:47] ERROR : No response received after 3.0 retries, continue with next request
0032|[2025-07-04 16:07:47] ERROR : SUN_2000/Blob PARAM: exception during read request on device id 1, address 47082 -> Modbus Error: [Input/Output] No response received after 3.0 retries, continue with next request
0033|[2025-07-04 16:07:50] ERROR : SUN_2000: 'process_read_response' 'cmd_decode' for command id = 73801 (in register range with command id = 73802) raised an exception: unpack requires a buffer of 2 bytes
0034|[2025-07-04 16:07:58] ERROR : Exception response 131 / 0
0035|[2025-07-04 16:07:58] ERROR : Fatal error: protocol.data_received() call failed.
0036|protocol: <pymodbus.transaction.transaction.TransactionManager object at 0x7f17ea543e50>
0037|transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
0038|Traceback (most recent call last):
0039|File "/opt/pyenv/versions/3.11.9/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0040|self._protocol.data_received(data)
0041|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 304, in data_received
0042|self.datagram_received(data, None)
0043|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 338, in datagram_received
0044|cut = self.callback_data(self.recv_buffer, addr=addr)
0045|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0046|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transaction/transaction.py", line 192, in callback_data
0047|self.response_future.set_result(pdu)
0048|asyncio.exceptions.InvalidStateError: invalid state
0049|[2025-07-04 16:08:02] ERROR : SUN_2000/Blob GRID: exception during read request on device id 1, address 37101 -> Modbus Error: [Connection] Not connected[AsyncModbusTcpClient 192.168.2.139:502]
0050|[2025-07-04 16:08:27] ERROR : Fatal error: protocol.data_received() call failed.
0051|protocol: <pymodbus.transaction.transaction.TransactionManager object at 0x7f17ea543e50>
0052|transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
0053|Traceback (most recent call last):
0054|File "/opt/pyenv/versions/3.11.9/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0055|self._protocol.data_received(data)
0056|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 304, in data_received
0057|self.datagram_received(data, None)
0058|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 338, in datagram_received
0059|cut = self.callback_data(self.recv_buffer, addr=addr)
0060|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0061|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transaction/transaction.py", line 192, in callback_data
0062|self.response_future.set_result(pdu)
0063|asyncio.exceptions.InvalidStateError: invalid state
0064|[2025-07-04 16:09:10] ERROR : Fatal error: protocol.data_received() call failed.
0065|protocol: <pymodbus.transaction.transaction.TransactionManager object at 0x7f17ea543e50>
0066|transport: <_SelectorSocketTransport fd=8 read=polling write=<idle, bufsize=0>>
0067|Traceback (most recent call last):
0068|File "/opt/pyenv/versions/3.11.9/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0069|self._protocol.data_received(data)
0070|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 304, in data_received
0071|self.datagram_received(data, None)
0072|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 338, in datagram_received
0073|cut = self.callback_data(self.recv_buffer, addr=addr)
0074|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0075|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transaction/transaction.py", line 192, in callback_data
0076|self.response_future.set_result(pdu)
0077|asyncio.exceptions.InvalidStateError: invalid state
J’ajoute que le filtrage min/max ne résout rien car les valeurs des cmds en erreur sont totalement aléatoires.
Si quelqu’un à une idée ou suggestion je suis preneur !!!