PAS600 avec Mymodbus

Bonjour à tous !

Je souhaiterais recupérer les valeurs de mon PAS600 de chez Schneider avec le plugin Mymodbus en TCP/IP

J’ai bien la table du PAS600 j’ai bien lu la documentation mais je n’arrive à rien
J’ai aussi essayé avec Modbus Doctor mais hormis me connecter je n’arrive pas a avoir de valeur

J’ai essayé avec la valeur « health state » mais je n’arrive à rien

J’ai essayé avec + et -1 sur l’adresse car en RTU je doit faire -1 à l’adresse sur mon onduleur Sofar

sur Modbus Doctor je mets comme ca

Un expert en Modbus serait dispo ?

Merci

Bonjour,

Il faut déjà être sûr de pouvoir communiquer en Modbus avec votre équipement. Le Modbus est bien activé ? Certains appareils savent communiquer en Modbus, mais cette fonction n’est pas activée par défaut.

Une capture de la configuration de l’équipement ?
Que racontent les logs en mode debug ?

Bonjour @Michel_F et merci pour ta réponse

oui j’ai bien activé le modbus dessus

Les logs donne ca. Un probleme de connection ?

J’ai masqué mon ip sur les screenshot car c’est mon IP publique

Les flèches montrent les requêtes envoyées aux adresse 0x9E, 0x9F et 0xA0 'est à dire 158, 159 et 160.
La réponse est toujours la même et génère une erreur pour pymodbus.

Je vais voir pour essayer de détailler l’erreur dans le démon et l’envoyer au log.

Donc c’est le PAS600 qui répond pas correctement ?

Il semblerait, oui.
Est-ce que tu as un accès ssh à la machine Jeedom pour tester la réponse de pymodbus ?

oui biensur

J’ai fait un post un jour pour tester le module pymodbus :

Je te suggère de tester ça en adaptant l’adresse IP et l’adresse de lecture.
Avec la dernière version bêta, python --version doit retourner 3.11.6 et pas 3.9.16.

Merci.

jeedom@jeedom:~ $ python3 --version
Python 3.7.3
jeedom@jeedom:~ $ cd ~www-data/html/plugins/mymodbus/ressources/mymodbusd/
jeedom@jeedom:/var/www/html/plugins/mymodbus/ressources/mymodbusd $ python3 --version
Python 3.9.16
jeedom@jeedom:/var/www/html/plugins/mymodbus/ressources/mymodbusd $ python3
Python 3.9.16 (main, Apr 15 2023, 12:44:21)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pymodbus.client import ModbusTcpClient
>>> from pymodbus.framer.socket_framer import ModbusSocketFramer
>>> from pymodbus.payload import (BinaryPayloadDecoder, BinaryPayloadBuilder)
>>>
>>> client = ModbusTcpClient(host='XXX.XXX.XXX.XXX', port=502, framer=ModbusSocketFramer)
>>> client.connect()
True
>>> reponse = client.read_holding_registers(address=158, count=1, slave=0)
>>> decoder = BinaryPayloadDecoder.fromRegisters(reponse.registers, '>', '>')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'ExceptionResponse' object has no attribute 'registers'
>>> decoder.decode_16bit_int()

Mon Python n’est pas à jour apparement

Merci pour ton support

La version de python n’a pas d’importance, ne t’en fais pas. pymodbus a besoin de python >= 3.8, donc on est bon.

Après cette ligne, tape simplement reponse pour savoir ce que cette variable contient.

Salut
Tu peux regarder j’ai fait un post lors de l’intégration de mes PAS 600 et 800
je suis arrivé à reprendre les valeurs

Merci @ced2001 et @Michel_F grâce à vous j’ai compris plusieurs de mes erreurs et la plus grosses était un numéro d’esclave erroné.

Ça fonctionne maintenant. Un grand merci à vous

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