Plugin MyModbus

Hello @Gratin,

J’utilise le mode Crouzet_M3 (compatible avec Millenium 3, em4 et Millenium Evo).
Il faut bien renseigner l’adresse IP de ton automate (accessible depuis le menu Communication/Adresses/Adresse IPv4 de ton automate ou en utilisant un logiciel de scan réseau). Il faut en suite renseigner le port : 502 sur les automates Crouzet.
Voici ma configuration en exemple :

Pour la configuration des commandes je met en effet « Holding Register » « 16bits ».
Dans un premier temps, pour voir si tu arrive à récupérer une valeur, tu peux cliquer sur l’icone « Tester » image à coté de la commande que tu veux essayer.

Je te laisse tester tout ça, dis moi si tu arrive à quelque-chose :wink:

2 « J'aime »

as tu essayé en register int16 voir ce que tu récupères ?

1 « J'aime »

Bonjour @Bebel27,
Il me semble que j’avais essayé sans résultat, je vérifie dans la semaine et je vous tiens au courant.
Pour ma part c’est le seul point qu’il me reste à solutionner et tout devrait rouler pour paramétrer et éventuellement faire une petite doc si ça intéresse quelqu’un.

@g0m

2 « J'aime »

Hello,

J’utilise un convertisseur Ethernet/RS845 et je rencontre un souci (je rencontrais le même avec l’autre plugin).
Si quelqu’un voit une coquille dans la conf de mon convertisseur je suis preneur.

Dans les logs, je n’ai que des « None », sauf si je commente dans le fichier /usr/local/lib/python2.7/dist-packages/pyModbusTCP/client.py, cette partie :

        # check rx_byte_count: buffer size must be consistent and have at least the requested number of registers
        ### A commenter pour les None
        if not ((rx_byte_count >= 2 * reg_nb) and
                (rx_byte_count == len(f_regs))):
            self.__last_error = const.MB_RECV_ERR
            self.__debug_msg('read_holding_registers(): rx byte count mismatch')
            self.close()
            return None
        # allocate a reg_nb size list
        registers = [None] * reg_nb
        # fill registers list with register items
        for i, item in enumerate(registers):
            registers[i] = struct.unpack('>H', f_regs[i * 2:i * 2 + 2])[0]
        # return registers list
        return registers

Si quelqu’un a une idée…

@Rigolman69, tu avais le même souci. Est-ce toujours le cas?

Merci d’avance.

Tu arrives à te connecter (je suppose) et à récupérer une information (je suppose que non) via modbus doctor ?

Je n’ai pas testé depuis un lustre…
Mais en commentant du code, je récupère bien toutes les infos (voir mon post).

Le but de ta question est de savoir si je peux récupérer une info (oui en bidouillant le code) ou voir autre chose?

C’était pour voir si tu arrivais bien à récupérer une information d’un registre parce que quand j’étais dans la découverte du modbus et donc dans la découverte de l’utilisation de modbus doctor, je n’avais pas eu de soucis en passant sur Mymodbus dès lors que j’avais enfin réussi à récupérer l’information sur Modbus docteur.
Après c’était un soucis de non prise en charge des mots inversés.

1 « J'aime »

Je me permet de remettre ma demande car je n’ai toujours pas trouvé comment faire, merci par avance.

Hello @Bebel27, tout d’abord merci pour on travail.

J’ai beau faire mais je n’arrive pas à sélectionner le format float pour lire deux registres d’un coup.
Peux tu me dire comment faire stp?

NB : jeedom en version 4.0.61 et dernière version du plugin stable de MyModbus

Essais avec la version bêta, ce mode y est ajouté.

1 « J'aime »

@Bebel27
Merci c’est noté, je suis donc passé en Beta avec registrefloat.
Par contre, je n’arrive toujours pas à lire les valeurs float.
Je pense que c’est lié au fait que l’équipement est codé en IEEE 754 qui implique d’inverser les octets des registres afin d’avoir un float correct

Par exemple pour un float :

  • le registre 42 m’envoie 3C9A
  • le registre 43 m’envoie DE41

La valeur 32 bits à transformer en float est 41DE9A3C (27.82530975°C la température de Equipement) et non DE413C9A.

Sous ModbusDoctor c’est la case inversion d’octet.
Est ce que le plugin gère cette subtilité ?

Merci

Essaye Eastron Imput en 32 bits, @Bebel27 m’avait fait ce mode pour mon compteur qui nécessitait d’inverser les mots (fonctionnalité en bêta).

1 « J'aime »

Merci mais le problème c’est que je dois inverser les octets et non les mots…

Salut,

Deja un grand merci a Bebel, Freeddoo, et Johan pour tous vos conseils. Cependant ca ne marche toujours pas ! je veux bien etre debutant … enfin je commence a avoir touché pas mal de parametres !!!

je vais essayer de vous remettre le plus de details possible pour arriver a trouver ce grain de sable!

donc j’ai un em4 qui communique parfaitement avec Crouzet Soft (lecture, ecriture de programme, lecture de datalog, fonctionnement de la temperature en mode debug).
Dans Communication → Ethernet → Dynamic IP est coché
Communication → Modbus TCP/IP → Client Serveur est coché




Cet em4 est connecté a un switch qui est lui meme connecté a ma Freebox Delta.
Celle ci contient une VM que je viens de refaire. Une Jeedom Freebox toute fraiche a laquelle j’ai ajouté seulement le plugin MyModBus en version Beta (afin d’avoir le parametre 16bits).

Voici les parametres


et lorsque j’essaye de lire cette temperature j’ai… resultat de la commande None

Si je fais un Ping avec l’ip de l’em4 depuis la console Debian ca fonctionne.

Si vous avez la moindre idée, je suis preneur.
Merci,
P.

1 « J'aime »

Hello les Modbus fans ;o)

Je cherche une station météo compatible modbus et j ai trouvé celle ci

Qqun aurait t il déjà fais une integration dans jeedom via modbus d’une station météo ?

http://www.sonbus.com/

2 « J'aime »

Encore un énorme merci a @Bebel27 qui a résolu mon souci de communication … je dois avouer que je suis un peu honteux de dire qu’au final il a suffit d’un arret / redemarrage du module em4 !
et tout fonctionne (modbus Doctor, Jeedom) avec les parametres ci-dessus.

bonne soirée,
P.

2 « J'aime »

@Bebel27 ou aux autres utilisateurs de ce plugin
Toujours dans ma recherche de comment inverser les octets d’un float, j’ai essayé le mode eastron qui inverse les mots.
Voici ce que j’obtient en debug :

[2020-09-15 14:42:05][DEBUG] : Evenement : add=>192.168.0.170 unit=>1 eqid=>5 type=>holding_registers sortie=>1 inputs=>36 values=>[13089] 
Exception in thread Thread-1:
Traceback (most recent call last):
 File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
   self.run()
 File "/usr/lib/python3.7/threading.py", line 865, in run
   self._target(*self._args, **self._kwargs)
 File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 244, in polling_thread
   decoder = BinaryPayloadDecoder.fromRegisters(rr.registers,byteorder=Endian.Big,wordorder=Endian.Big)
AttributeError: 'ExceptionResponse' object has no attribute 'registers'

Version de python ok
Traceback (most recent call last):
 File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 269, in <module>
   raise ParameterException('Thread en défaut')
NameError: name 'ParameterException' is not defined

La valeur sur le registre 36 en int est OK.
Par contre cela bug sur le registre 38 qui est un float avec inversion des octets. (Sous Modbus Doctor, float 32 bits + inversion des octets).

Aurais tu une idée ?
Merci par avance

Il faut que je regarde, peux tu me donner un accès à ton Jeedom en MP stp.

Hélas non car je suis sur un réseau d’entreprise.
Par contre je peux t’envoyer les logs si tu veux.

Tu utilises Jeedom dans ton entreprise ? Tu n’as pas de dns Jeedom, car c’est sécurisé…
Non merci pour les logs ça ne m’apportera pas d’aide pour ton problème.

Je fais un essais qui n’a rien a voir avec la domotique mais Jeedom dans ce cas me sert juste pour le log de datas de différents appareils.
Le réseau est protégé par un firewall, les accès sont très restreints.
Je peux te faire un printscreen sous Modbus Doctor si ca aide :slight_smile:

En tout cas merci pour ta disponibilité

1 « J'aime »