Gestion d'un problème lors de la récupération des données

Salut,

Depuis que j’ai mis en place le plugin pour interroger une clef Solis S2-WL-ST pour récupérer les données d’un onduleur S6 Hybride, je constate, au bout de quelques heures, que les données ne remontent plus.

A chaque fois ça se comporte comme ça quand ça marche bien :

[2026-05-02 21:49:04] INFO  : Début interrogation de l'onduleur Solis_S6 associé au data logger 10.0.1.16:502
[2026-05-02 21:49:04] INFO  : Interrogation de [0x8105 - 0x8147]...
[2026-05-02 21:49:05] INFO  : Interrogation de [0x815c - 0x819b]...
[2026-05-02 21:49:05] INFO  : Interrogation de [0x81b6 - 0x8202]...
[2026-05-02 21:49:06] INFO  : Interrogation de [0xa884 - 0xa88e]...
[2026-05-02 21:49:07] INFO  : Deconnexion du logger 'sock' 10.0.1.16:502
[2026-05-02 21:49:07] INFO  : Fin interrogation de l'onduleur Solis_S6...
[2026-05-02 21:49:07] INFO  : InterrogationsOKpour 4 / 4 intervalles, mise a jour des donnees.

Mais au bout d’un moment l’interrogation a l’air d’échouer. Ici le check de 21h50 ne va pas au bout.

[2026-05-02 21:50:07] INFO  : Début interrogation de l'onduleur Solis_S6 associé au data logger 10.0.1.16:502
[2026-05-02 21:50:07] INFO  : Interrogation de [0x8105 - 0x8147]...
[2026-05-02 21:51:03] INFO  : Init request module v2.32.3

Le suivant rattaque à 21h51 et au bout d’un moment j’ai une première erreur :

[2026-05-02 21:54:14]WARNING : Interrogation de l'onduleur 0 a 10.0.1.16:502 non aboutie avec l'exception [TimeoutError: [Errno 110] Connection timed out]

Quand j’essaie de me connecter via modbus doctor, je n’y arrive plus. Je me demande si le problème ne serait pas du au fait qu’en cas d’échec pendant la récupération (pour ue raison X ou Y), la communication n’est pas fermée (Deconnexion du logger 'sock' 10.0.1.16:502) et du coup on ne peut plus se connecter dessus.

Qu’est-ce que vous en pensez ?

Version beta : v 1.2.6 (2026-04-23 01:12:20)

Il y a certains onduleurs qui coupent toutes les communications si les panneaux ne fournissent pas de puissance

Salut,

Je pense pas que ce soit ça là car ça a coupé dans la journée hier.

Je viens de regarder, maintenant la coupure à eu lieue lors du cron de 02h00.
Si ça avait du couper avec l’absence de production, je pense que ça aurait été le cas avant 2h du matin.

Hier soir j’avais regardé très rapidement le code python et j’ai ajouté le nombre d’essai restant.
On voit qu’il reste à 4 et que pendant le 3eme paquet, il n’a pas réussi à récupérer les infos.

Mais ce n’est pas considéré comme un échec, le code ne passe pas dans l’Exception et du coup, pas de nouvelles tentatives, donc pas de fermeture du socket. Je ne sais pas trop si cela permettrait de faire en sorte que les tentatives du cron suivant en soient pas en échec n’arrive pas mais ce n’est pas normal de ne pas avoir de code erreur en fin de compte.

2026-05-03 02:00:27] DEBUG  : Interrogation pour [4] intervalles...
[2026-05-03 02:00:27] INFO  : Début interrogation de l'onduleur Solis_S6 associé au data logger 10.0.1.16:502
[2026-05-03 02:00:27] INFO  : Interrogation de [0x8105 - 0x8147]...
[2026-05-03 02:00:27] INFO  : attemp left 4
[2026-05-03 02:00:28] DEBUG  : Interrogation des registres [0x8105 - 0x8147] succes
[2026-05-03 02:00:28] INFO  : Interrogation de [0x815c - 0x819b]...
[2026-05-03 02:00:28] INFO  : attemp left 4
[2026-05-03 02:00:29] DEBUG  : Interrogation des registres [0x815c - 0x819b] succes
[2026-05-03 02:00:29] INFO  : Interrogation de [0x81b6 - 0x8202]...
[2026-05-03 02:00:29] INFO  : attemp left 4
[2026-05-03 02:01:04] INFO  : Init request module v2.32.3
[2026-05-03 02:01:04] INFO  : Solarman ------ debut recup donnees de l onduleur : 842

Salut,

Nouvelle perte de communication, j’avais mis 2 logs supplémentaire pour voir le retour de message et response

Quand ça plante, on a pas le retour de response :

[2026-05-04 10:27:04] DEBUG  : Interrogation pour [4] intervalles...
[2026-05-04 10:27:04] INFO  : Début interrogation de l'onduleur Solis_S6 associé au data logger 10.0.1.16:502
[2026-05-04 10:27:04] INFO  : Interrogation de [0x8105 - 0x8147]...
[2026-05-04 10:27:04] INFO  : attemp left 4
[2026-05-04 10:27:04] DEBUG  : message : b'\xa5V\x00\x00\x00\x06\x01\x04\x81\x05\x00C'
[2026-05-04 10:28:04] INFO  : Init request module v2.32.3

Quand ça fonctionne bien :

[2026-05-04 10:26:05] DEBUG  : Interrogation pour [4] intervalles...
[2026-05-04 10:26:05] INFO  : Début interrogation de l'onduleur Solis_S6 associé au data logger 10.0.1.16:502
[2026-05-04 10:26:05] INFO  : Interrogation de [0x8105 - 0x8147]...
[2026-05-04 10:26:05] INFO  : attemp left 4
[2026-05-04 10:26:05] DEBUG  : message : b'\xa4L\x00\x00\x00\x06\x01\x04\x81\x05\x00C'
[2026-05-04 10:26:06] DEBUG  : response : [0, 25, 0, 17, 0, 8, 3, 35, 0, 25, 0, 0, 1350, 0, 0, 2259, 0, 0, 0, 1, 1495, 8, 8, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 600, 161, 6, 0, 4441, 0, 2273, 0, 0, 2, 0, 0, 0, 40, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 110, 350, 5001, 3]
[2026-05-04 10:26:06] DEBUG  : Interrogation des registres [0x8105 - 0x8147] succes
[2026-05-04 10:26:06] INFO  : Interrogation de [0x815c - 0x819b]...
[2026-05-04 10:26:06] INFO  : attemp left 4
[2026-05-04 10:26:06] DEBUG  : message : b'\xe5`\x00\x00\x00\x06\x01\x04\x81\\\x00@'
[2026-05-04 10:26:06] DEBUG  : response : [0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 0, -1, -146, 1, 489, 0, 0, 0, 2266, 0, 16, 100, 4885, 4, 1000, 1000, 0, 0, 186, 0, 0, 0, 0, 40, 0, 0, 0, 0, 4, 1, 0, 1, 0, 14, 3, 12, 0, 13, 0, 20, 0, 32, 107, 80, 0, 6, 0, 0, 0, 52, 106]
[2026-05-04 10:26:06] DEBUG  : Interrogation des registres [0x815c - 0x819b] succes
[2026-05-04 10:26:06] INFO  : Interrogation de [0x81b6 - 0x8202]...
[2026-05-04 10:26:06] INFO  : attemp left 4
[2026-05-04 10:26:06] DEBUG  : message : b'\xb9\xd3\x00\x00\x00\x06\x01\x04\x81\xb6\x00M'
[2026-05-04 10:26:07] DEBUG  : response : [200, 1000, 420, 513, 528, 600, 0, 20, 15, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 17, 0, 18, 2274, 240, 0, 0, 0, 0, -1, -146, 0, 0, 0, 0, -1, -146, 0, 390, 0, 0, 0, 0, 0, 390, 0, 416, 0, 0, 0, 0, 0, 416, -35, 5001]
[2026-05-04 10:26:07] DEBUG  : Interrogation des registres [0x81b6 - 0x8202] succes
[2026-05-04 10:26:07] INFO  : Interrogation de [0xa884 - 0xa88e]...
[2026-05-04 10:26:07] INFO  : attemp left 4
[2026-05-04 10:26:08] DEBUG  : Interrogation des registres [0xa884 - 0xa88e] succes
[2026-05-04 10:26:08] INFO  : Deconnexion du logger 'sock' 10.0.1.16:502
[2026-05-04 10:26:08] INFO  : Fin interrogation de l'onduleur Solis_S6...
[2026-05-04 10:26:08] INFO  : InterrogationsOKpour 4 / 4 intervalles, mise a jour des donnees.

C’est cette ligne qui pose problème et qui ne donne parfois jamais de retour :

response = tcp.send_message(message, sock)

Est-ce qu’il y aurait une notion de timeout qui ne serait pas défini ou pas bien ?

salut @Bison , je viens de relire la doc de umodbus et je ne vois pas de timeout qq part.

EDIT: bah que je suis bête, c’est sur les socket qu’il faut un timeout. Tu peux tester en rajoutant en ligne 64:

sock.settimeout(10)

10 ou une autre valeur, il y a 15 pour PySolarmanV5

Hello,

OK merci j’ai mis 2 pour essayer de forcer un peu le destin.

			sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
			sock.settimeout(2)
			sock.connect((globals.inverter_host, globals.inverter_port))

2 c’est pas grand chose mais tu verras bien :wink:

je pense que tu le sais mais tu dois relancer le démon après cette modif

Heu … mais il n’y a pas de Démon sur Solarman !?
Et là toutes les modifs d’ajouts de lignes de logs que j’ai fais jusque-là ont bien été prise en compte sans restart de quoi que ce soit.

J’imagine que tu fais juste tourner un cron qui éxécute des scripts python ?

Oui, le but c’est justement d’essayer de forcer un peu les choses et de voir un timeout … mais j’y crois pas trop car quand je regarde les logs, les 4 requêtes groupées sont exécutées très vite à chaque fois. Donc je pense que quand ça ne répond pas, que le timeout soit à 10s ou à 1 seconde, c’est pareil

Pfff je finis par tout mélanger. En effet c’est un cron…

OK mais si le serveur répond rapidement qu’il ne peut ou ne sait pas répondre ce n’est pas pareil que d’attendre une réponse qui ne vient pas et de déconnecter par un timeout

Je n’ai pas trop compris ta réponse et donc le soucis que tu vois avec un timeout à 2s ? :sweat_smile: :thinking:

Ce que je constate c’est que la commande tcp.send_message(message, sock) ne renvoie parfois rien du tout puisque le log que j’ai ajouté ne renvoi parfois rien

response = tcp.send_message(message, sock)
logging.debug(f"response : {response}")

Du coup, aucunes actions ne suit :

  • pas de retry
  • pas de sock.close()

De ma compréhension, le fait d’ajouter le sock.settimeout(2) va faire en sorte que s’il n’y a pas de réponse au tcp.send_message dans les 2 secondes (pour X raisons), il va « laisser tomber » et poursuivre l’exécution donc surement faire un retry. C’est bien ça ?

Si c’est ça je n’arrive pas bien à voir en quoi ma valeur 2 serait problématique car à chaque qu’il y a interrogation, le délais entre le retour de message et le retour de réponse est bien plus rapide que les 2 secondes.

@Noyax37,

Et bien ça fonctionne :slight_smile:

Plusieurs tentatives à 17h41 en échec mais avec plusieurs retry :

[2026-05-04 17:41:05] DEBUG  : Interrogation pour [4] intervalles...
[2026-05-04 17:41:05] INFO  : Début interrogation de l'onduleur Solis_S6 associé au data logger 10.0.1.16:502
[2026-05-04 17:41:05] INFO  : Interrogation de [0x8105 - 0x8147]...
[2026-05-04 17:41:05] INFO  : attempts left 4
[2026-05-04 17:41:05] DEBUG  : message : b'\xa4"\x00\x00\x00\x06\x01\x04\x81\x05\x00C'
[2026-05-04 17:41:07]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:07]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK, il reste [3 essai]
[2026-05-04 17:41:07] INFO  : attempts left 3
[2026-05-04 17:41:07] DEBUG  : message : b'\xb5\x8f\x00\x00\x00\x06\x01\x04\x81\x05\x00C'
[2026-05-04 17:41:09]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:09]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK, il reste [2 essai]
[2026-05-04 17:41:09] INFO  : attempts left 2
[2026-05-04 17:41:09] DEBUG  : message : b'9M\x00\x00\x00\x06\x01\x04\x81\x05\x00C'
[2026-05-04 17:41:11]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:11]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK, il reste [1 essai]
[2026-05-04 17:41:11] INFO  : attempts left 1
[2026-05-04 17:41:11] DEBUG  : message : b'\x1b\xcf\x00\x00\x00\x06\x01\x04\x81\x05\x00C'
[2026-05-04 17:41:13]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:13]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK, il reste [0 essai]
[2026-05-04 17:41:13]WARNING : Interrogation des registres [0x8105 - 0x8147] NOK, abandon.
[2026-05-04 17:41:13] INFO  : Interrogation de [0x815c - 0x819b]...
[2026-05-04 17:41:13] INFO  : attempts left 4
[2026-05-04 17:41:13] DEBUG  : message : b'\x1b$\x00\x00\x00\x06\x01\x04\x81\\\x00@'
[2026-05-04 17:41:15]WARNING : Interrogation des registres [0x815c - 0x819b] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:15]WARNING : Interrogation des registres [0x815c - 0x819b] NOK, il reste [3 essai]
[2026-05-04 17:41:15] INFO  : attempts left 3
[2026-05-04 17:41:15] DEBUG  : message : b'\xfb`\x00\x00\x00\x06\x01\x04\x81\\\x00@'
[2026-05-04 17:41:17]WARNING : Interrogation des registres [0x815c - 0x819b] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:17]WARNING : Interrogation des registres [0x815c - 0x819b] NOK, il reste [2 essai]
[2026-05-04 17:41:17] INFO  : attempts left 2
[2026-05-04 17:41:17] DEBUG  : message : b'\xaf\x15\x00\x00\x00\x06\x01\x04\x81\\\x00@'
[2026-05-04 17:41:19]WARNING : Interrogation des registres [0x815c - 0x819b] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:19]WARNING : Interrogation des registres [0x815c - 0x819b] NOK, il reste [1 essai]
[2026-05-04 17:41:19] INFO  : attempts left 1
[2026-05-04 17:41:19] DEBUG  : message : b'\xd4L\x00\x00\x00\x06\x01\x04\x81\\\x00@'
[2026-05-04 17:41:21]WARNING : Interrogation des registres [0x815c - 0x819b] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:21]WARNING : Interrogation des registres [0x815c - 0x819b] NOK, il reste [0 essai]
[2026-05-04 17:41:21]WARNING : Interrogation des registres [0x815c - 0x819b] NOK, abandon.
[2026-05-04 17:41:21] INFO  : Interrogation de [0x81b6 - 0x8202]...
[2026-05-04 17:41:21] INFO  : attempts left 4
[2026-05-04 17:41:21] DEBUG  : message : b'"3\x00\x00\x00\x06\x01\x04\x81\xb6\x00M'
[2026-05-04 17:41:23]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:23]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK, il reste [3 essai]
[2026-05-04 17:41:23] INFO  : attempts left 3
[2026-05-04 17:41:23] DEBUG  : message : b'\x974\x00\x00\x00\x06\x01\x04\x81\xb6\x00M'
[2026-05-04 17:41:25]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:25]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK, il reste [2 essai]
[2026-05-04 17:41:25] INFO  : attempts left 2
[2026-05-04 17:41:25] DEBUG  : message : b'q\x98\x00\x00\x00\x06\x01\x04\x81\xb6\x00M'
[2026-05-04 17:41:27]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:27]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK, il reste [1 essai]
[2026-05-04 17:41:27] INFO  : attempts left 1
[2026-05-04 17:41:27] DEBUG  : message : b'\xab\x93\x00\x00\x00\x06\x01\x04\x81\xb6\x00M'
[2026-05-04 17:41:29]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:29]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK, il reste [0 essai]
[2026-05-04 17:41:29]WARNING : Interrogation des registres [0x81b6 - 0x8202] NOK, abandon.
[2026-05-04 17:41:29] INFO  : Interrogation de [0xa884 - 0xa88e]...
[2026-05-04 17:41:29] INFO  : attempts left 4
[2026-05-04 17:41:31]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:31]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK, il reste [3 essai]
[2026-05-04 17:41:31] INFO  : attempts left 3
[2026-05-04 17:41:33]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:33]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK, il reste [2 essai]
[2026-05-04 17:41:33] INFO  : attempts left 2
[2026-05-04 17:41:35]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:35]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK, il reste [1 essai]
[2026-05-04 17:41:35] INFO  : attempts left 1
[2026-05-04 17:41:37]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK avec l'exception [TimeoutError: timed out]
[2026-05-04 17:41:37]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK, il reste [0 essai]
[2026-05-04 17:41:37]WARNING : Interrogation des registres [0xa884 - 0xa88e] NOK, abandon.
[2026-05-04 17:41:37] INFO  : Deconnexion du logger 'sock' 10.0.1.16:502
[2026-05-04 17:41:37] INFO  : Fin interrogation de l'onduleur Solis_S6...
[2026-05-04 17:41:37] DEBUG  : SOLARMAN------ sys.exit() sortie normale

Puis la minute d’après la récupération a bien fonctionné :

[2026-05-04 17:42:07] INFO  : InterrogationsOKpour 4 / 4 intervalles, mise a jour des donnees.

Du coup je continue de penser que 2 secondes c’est plutôt un bon timing car ça permet normalement de fermer le socket dans la même minute et donc d’être ready pour la prochaine interrogation.

En fait tu as 3 sortes de réponse. La bonne qui correspond à ce que tu attends => c’est géré dans le plugin, la mauvaise réponse que le plugin ne comprend pas => c’est géré et enfin la non réponse => je n’avais géré un time out que pour la partie solarman mais pas celle qui te concerne avec umodbus.

Je ne suis pas contre les 2 secondes je dis juste que si l’onduleur met plus de 2 secondes à répondre pour quelle que raison que ce soit alors tu déclenches le time out.

J’ai noté que ça a fonctionné pour toi, je porterai la modifié sur la prochaine version.

Merci à toi pour tes recherches et surtout pour la piste que tu as trouvée :+1:

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.