[TUTO] Mise en place du plugin MyModbus : exemple avec des PowerTag

Bonjour,

Message pour @pignic et @tranber2613 en particulier suite à

Mais le principe reste applicable pour tous les appareils.

On va voir pour vous donner un coup de main, je vais pas vous laisser galérer tous seuls.

J’ai téléchargé le fichier zip du site de Schneider qui contient le zip du fichier Excel avec la table Modbus.
Dans la feuille Acti9 Active (si j’ai bien suivi c’est ce que vous avez tous les deux) se trouve ceci :


Là-dedans, si une description vous intéresse, par exemple RMS current on phase A (RMS = Root Mean Square c-à-d la valeur efficace autrement dit la valeur qu’on utilise en général) qui est le courant mesuré sur la phase A.
Signification des colonnes importantes :

  • Address : c’est l’adresse du registre Modbus en hexadécimal (dans le cas de cet appareil, c’est toujours Registre - 1)
  • N° : nombre de registres occupés par cette variable
  • RW : R = read = lecture seule, RW = lecture écriture
  • Unit = unité, pratique pour vous
  • Type : format de données
  • Function code : vérifier que 3 est bien présent
  • Description = ce que vous recherchez

Il faut commencer par installer le plugin MyModbus version bêta ce qui peut prendre du temps selon la config de la machine Jeedom (jusqu’à 45 minutes sur un petit RPI, peut-être plus).

Ensuite il faut créer un équipement avec les bons paramètres.
Pour ça il faut connaître l’adresse IP (du Panel Server, je pense) et le port. Le port standard est 502. Le type de connexion sur tcp ou rtuovertcp, je ne sais pas… à tester.

  • Mode de rafraichissement sur polling à 5 sec
  • Timeout à 5 sec
  • Nb de tentatives en cas d’erreur : 3
  • Temps entre 2 requêtes : 0
  • Temps d’attente après connexion : 0
  • Temps après une erreur : 1 sec

Sauvegarder.

Dans les commandes créer une commande info numérique. L’adresse esclave correspond à l’ID de l’appareil. Fonction [0x03] Read holding registers (la fameuse fonction 3 de la colonne Function Code), format de données float32 (comme dans la colonne Type). Adresse 3000.

Sauvegarder.

Démarrer le démon avec les log en mode debug (ne pas oublier de sauvegarder la config du log avant de démarrer le démon) et analyser.

Si pas de remontées, voir les logs.
Si remontées incohérentes, « jouer » avec l’inversion des octets et des mots puis sauvegarder l’équipement, la modification est prise en compte à la volée.

Pour l’analyse, je suis dispo. Il me faut les logs debug contenus dans mymodbus_daemon, les 50 premières lignes à partir du démarrage du démon me suffiront, surtout avec une seule commande.

Si ça ne fonctionne pas, le démon peut être stoppé sinon le log ne fera que se remplir avec des erreurs inutiles. Les logs mymodbus et mymodbus_daemon peuvent être vidés afin de repartir de zéro lors du prochain essai.

Si ça communique sans problème, rajouter les commandes qui vous intéressent.

Ensuite je recommande vivement d’optimiser les requêtes avec des plages de registres (cf doc en lien plus haut) afin de gagner du temps de cycle et donc des ressources pour la machine Jeedom.

A+
Michel

bonjour,

j’ai du power tag et ca fonctionne nickel. je peux aider si besoin
exemple avec Capteur de courant powertag

et ici des sondes de température powertag.

il est important de connaitre les adresses esclave des equipements sur la passerelle schneider.

1 « J'aime »

Et bien chez toi @anthopocket, tu as décalé les adresse de 1 et tu inverses les mots. Peux-tu essayer une nouvelle commande qui lit à l’adresse du registre et sans inversion STP ? Juste par curiosité. Si ça ne donne rien de probant, c’est que j’ai mal compris la doc.

Non ca ne fonctionne pas et ca met cycle à 0

En lisant un float32 à l’adresse 3000 sans inverser ça fait un défaut ?!

Incroyable…
Même si la valeur devait être farfelue, une telle requête devrait être possible. Tu peux me dire ce que donnent les logs (en debug) mymodbus_daemon STP

Je te le fais ce week end.ma semaine est compliqué :slight_smile:

1 « J'aime »

voici les logs

[2024-10-13 11:52:04] ERROR  : Comptage générale/intensité test: error during read request on slave id 2, address 3000 -> Exception Response(131, 3, GatewayPathUnavailable)
[2024-10-13 11:52:04] DEBUG  : Comptage générale: 'add_change' launched with payload = {'values::cycle_ok': {'value': 0, 'eqId': '1095'}}
[2024-10-13 11:52:04] DEBUG  : Comptage générale: 'add_change' No modification to send
[2024-10-13 11:52:05] DEBUG  : Comptage générale: 'one_cycle_read' exit with error_or_exception = True
[2024-10-13 11:52:06] DEBUG  : Comptage générale: 'one_cycle_read' launched
[2024-10-13 11:52:06] DEBUG  : Comptage générale: 'one_cycle_read' treatment cmd_id = 14235
[2024-10-13 11:52:06] DEBUG  : Comptage générale: 'one_cycle_read'/Tension: requesting read
[2024-10-13 11:52:06] DEBUG  : Adding transaction 81
[2024-10-13 11:52:06] DEBUG  : Resetting frame - Current Frame in buffer -
[2024-10-13 11:52:06] DEBUG  : send: 0x0 0x51 0x0 0x0 0x0 0x6 0x2 0x3 0xb 0xd3 0x0 0x2
[2024-10-13 11:52:06] DEBUG  : recv: 0x0 0x51 0x0 0x0 0x0 0x7 0x2 0x3 0x4 0x43 0x69 0xcc 0xcd old_data:  addr=None
[2024-10-13 11:52:06] DEBUG  : Processing: 0x0 0x51 0x0 0x0 0x0 0x7 0x2 0x3 0x4 0x43 0x69 0xcc 0xcd
[2024-10-13 11:52:06] DEBUG  : Factory Response[ReadHoldingRegistersResponse': 3]
[2024-10-13 11:52:06] DEBUG  : Getting transaction 81
[2024-10-13 11:52:06] DEBUG  : Comptage générale: 'process_read_response' launched for command id = 14235
[2024-10-13 11:52:06] DEBUG  : Comptage générale: 'cmd_decode' launched for command id = 14235
[2024-10-13 11:52:06] DEBUG  : Comptage générale: 'add_change' launched with payload = {'values::14235': 233.8000030517578}
[2024-10-13 11:52:06] DEBUG  : MyModbusd: Message received from MyModbusClient Comptage générale: {'add_change': {'values::14235': 233.8000030517578}}
[2024-10-13 11:52:06] DEBUG  : Send to jeedom: {'values': {'14235': 233.8000030517578}}

pour completer le tuto
il est important de bien paramétrer les adresses modbus des équipements avec le logiciel EXOStruxure.

par exemple on voit bien que la sonde est en adresse 10.
donc dans mymodbus

on retrouve l’adresse 10.

aprés dans le logiciel vous avez les plages modbus de chaques equipement
dans reports

Pour un compteur d’nergie (j’ai juste mis la 1ere page)

Pour une sonde

[2024-10-13 11:52:04] ERROR  : Comptage générale/intensité test: error during read request on slave id 2, address 3000 -> Exception Response(131, 3, GatewayPathUnavailable)

OK, c’est donc réellement l’appareil qui ne supporte pas la requête.

aprés ma plage de registre me donne 2999 pour l’intensité. Donc normal qu’il ne trouve pas le 3000

C’est un float32, donc sur 2 registres : 2999 et 3000. Les registres 2999 à 3004 existent d’après le tableau :

  • 2999/3000: 1ere ligne du tableau
  • 3001/3002: 2ème ligne du tableau
  • 3003/3004: 3ème ligne du tableau

Est-ce que une plage de registres 2999 [6] fonctionne ?

oui ca fonctionne.

C’était pas sur l’esclave 10 ?

Non 2
L’esclave 10 c’est une sonde de température