Valeurs aberrante dans l'histo

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 :frowning: :

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 !!!

Bonjour,

j’utilise la même version de MyModbus que toi mais suis encore sous Jeedom 4.4.19 e prod (je suis bientôt en congés et vais migrer) donc, on peut dire qu’on a un setup semblable.

Ca peut venir du codage int16 au lieu de uint16 ou inversement.

Ce que je vois c’est une exception à cause d’une réponse incorrecte de l’onduleur. Il m’arrivait ça très souvent mais qu’avec le SUN2000, les autres appareils ne produisaient pas d’erreurs. Depuis que j’ai fait une mise à jour de l’onduleur (pénible à faire d’ailleur), je n’ai plus le soucis.
L’onduleur est en V200R001C00SPC146, si ça peut t’aider. Perso, je ne suis pas un mordu des mises à jour des SUN2000 et ne sais pas ce que cette mise à jour apporte (pas retenu le changelog, mais si j’ai fait la mise à jour c’est que ça m’interessait) ni si c’est une bonne chose de l’avoir.

Oui, l’onduleur répond donc correctement dans 99.99% des cas :slight_smile:

Ca confirme que ça vient de la mauvaise réponse de l’onduleur. La plage de registre est sans doute vide (mauvaise réponse) et MyModbus/pymodbus n’arrive pas à décoder les registres inexistants.

La seule piste serait la mise à jour de l’onduleur.

A+
Michel

Tu peux nous faire un screen de l’historique histoire d’essayer de voir à quoi ressemblent ces valeurs aberrantes ?

et c’est pas le pire !! :frowning:

1 « J'aime »

Ben heu c’est pas toujours la même valeur du coup la « fausse » ?

non, mais elles sont souvent visibilisées et écrêtées par les min/max

Quand tu mets un max sur une commande info sur jeedom si jamais ta valeur la dépasse elle n’est pas prise en compte, elle n’est pas écretee a la valeur max.

Du coup, en tout cas visuellement, on dirait que la valeur fausse est vraiment toujours la même…

Ca fait partie des problèmes que je ne pige pas, car la les valeurs sont écrêtées au min/max que je mets, si je change la valeur (5000 => 5196 par exemple), et bien je me retrouve avec des pics a 5196 …

Chez moi les valeurs écartées par les min/max sont loggés dans le log cmd.

Exemple :

1439|[2025-07-05 15:05:12] INFO  : La commande n'est pas dans la plage de valeur autorisée : [Balcon][Lampe Balcon][Puissance] => 656.7
1440|[2025-07-05 15:05:12] INFO  : La commande n'est pas dans la plage de valeur autorisée : [Balcon][Lampe Balcon][Puissance] => 656.7

Tu peux montrer ce que ça donnes chez toi ce log ?

En tout cas quand je consulte l’histo à l’heure où le log indique une valeur en dehors des plages autorisées, je ne vois pas d’écrêtement de la valeur.

Vous avez peut-être des versions du core différentes ? Ou une option différente…

C’est pour cela que je suis interessé par le log pour voir :wink:

Pour ce qui est du core je suis sur la dernière stable : 4.4.19

Bonjour
J’ai déjà eu un cas similaire sur un site, mon automate étais le master qui interrogeait une passerelle. Je me suis aperçu que le programme de mon automate ne gèrait pas du tout les codes exception (code erreurs) 0x80+code fonction en retour, les valeurs des registres étaient aléatoires. Il est fort possible que l’onduleur a un bug dans la gestion des erreurs. On peut visualiser les trames avec Wireshark mais cela va être laborieux. La mise à jour de l’onduleur proposée par Michel_F est préférable.

Aucun message dans le log cmd :), par contre le log mymodbus me donne périodiquement ça maintenant, et cela semble nouveau

 ERROR  : SUN_2000: 'process_read_response' 'cmd_decode' for command id = 73811 (in register range with command id = 60190) raised an exception: unpack requires a buffer of 4 bytes
0001|[2025-07-06 01:07:08] ERROR  : SUN_2000: 'process_read_response' 'cmd_decode' for command id = 73811 (in register range with command id = 60433) raised an exception: unpack requires a buffer of 4 bytes
0002|[2025-07-06 01:07:08] ERROR  : SUN_2000: 'process_read_response' 'cmd_decode' for command id = 73811 (in register range with command id = 73806) raised an exception: unpack requires a buffer of 4 bytes
0003|[2025-07-06 01:07:10] ERROR  : Exception response 131 / 0
0004|[2025-07-06 01:07:10] ERROR  : Fatal error: protocol.data_received() call failed.
0005|protocol: <pymodbus.transaction.transaction.TransactionManager object at 0x7f98e33754d0>
0006|transport: <_SelectorSocketTransport fd=17 read=polling write=<idle, bufsize=0>>
0007|Traceback (most recent call last):
0008|File "/opt/pyenv/versions/3.11.9/lib/python3.11/asyncio/selector_events.py", line 1013, in _read_ready__data_received
0009|self._protocol.data_received(data)
0010|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 304, in data_received
0011|self.datagram_received(data, None)
0012|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transport/transport.py", line 338, in datagram_received
0013|cut = self.callback_data(self.recv_buffer, addr=addr)
0014|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0015|File "/var/www/html/plugins/mymodbus/resources/venv/lib/python3.11/site-packages/pymodbus/transaction/transaction.py", line 192, in callback_data
0016|self.response_future.set_result(pdu)
0017|asyncio.exceptions.InvalidStateError: invalid state
0018|[2025-07-06 01:07:32] ERROR  : No response received after 2.0 retries, continue with next request
0019|[2025-07-06 01:07:32] ERROR  : SUN_2000/blob BATTERIE: exception during read request on device id 1, address 37758 -> Modbus Error: [Input/Output] No response received after 2.0 retries, continue with next request
0020|[2025-07-06 01:07:58] ERROR  : No response received after 2.0 retries, continue with next request
0021|[2025-07-06 01:07:58] ERROR  : SUN_2000/Blob PARAM: exception during read request on device id 1, address 47082 -> Modbus Error: [Input/Output] No response received after 2.0 retries, continue with next request

Seule différence, j’ai fait une mise à jour générale, core passé en 4.5 béta

Je ne peux que revenir sur cette idée. Solution envisageable : une mise à jour de l’onduleur.

1 « J'aime »