Plugin MyModbus

Ta dernière réflexion est la bonne, c’est ce que j’ai demander à rigolman de faire samedi soir, j’attend son retour.

1 « J'aime »

C’est pour ça que je lui avais demandé de tester avec l’adresse 3 mais pour avoir le bit 3 il faut sans doute demander l’adresse 2…

Oui mais normalement ça devrait fonctionner saut que j’ai l’impression que la carte veut qu’on lui demande les 8 imputs d’un coup, et envoie l’état des 8. c’est ça où la réponse n’est pas codé sur un format qui plaît au plugin, mais normalement le modbus c’est standart je vois pas pourquoi ça serait pas le cas ici.

Alors voilà le résultat :
mymodbus.log (8,7 Ko)

Pour ça que dans son cas mettre le i à 8 pourrait le faire mais après ça marcherait pas pour ceux qui ont un modbus standard…

Mettre à 8 ne fonctionnera pas car le plugin s’attend à recevoir un binaire et non un octet.

Je vais voir avec rigolman pour refaire des tests on va trouver.
Par contre les logs son pas normal il ne devrait pas avoir deux formats de sortie.

Tu pourrais refaire un log avec 1 seule ligne de discret input? Une fois avec adresse 0 et une fois avec 1 voir ce que ça change

avec adress 0 : mymodbus log 0.log (3,6 Ko)

avec adresse 1 : mymodbus log 1.log (4,8 Ko)

Le dernier log me plaît bien, sauf qu’il n’y a aucune valeur en retour.

Il y a bien une erreur non?

  File "/var/www/html/plugins/mymodbus/ressources/mymodbus_demond.py", line 175, in polling_thread
    subprocess.Popen(['/usr/bin/php',mymodbus,'add='+host,'unit='+str(unit_id),'eqid='+str(eq_id),'type=discrete_inputs','sortie=1','inputs='+str(int(di_start)),'values='+str(rr.bits[:i])])
AttributeError: 'ReadInputRegistersResponse' object has no attribute 'bits'

L’erreur semble être dans le rr.bits mais là j’atteins mes limites…

Le retour devrait être un binaire 0ou 1 et la j’ai l’impression que la carte envoie un octet dans un registre.
Faut que je regarde ça sur l’install à Rigolman

le fait de demander rr.bits[:i] cela se traduit comment? Je ne connais pas les manip sur les bits en python mais si cela veut dire « dans le tableau en bits de rr je veux celui à la position :i » alors il y a un souci non? i étant à 1 alors que rr.bits ne doit contenir qu’un seul bit donc à la position 0 non? C’est sans doute une question con mais c’est pour essayer de comprendre :wink:

Et pourquoi l’erreur est sur un retour de " ReadInputRegistersResponse " alors qu’on l’interroge sur un discret input, la réponse devrait donc être via un " ReadDiscreteInputsResponse " non?

Je regarde ça aussi :wink:

juste pour faire avancer le schmilblick comme aurait dit un grand humoriste, lorsque tu compares la gestion des discret inputs de mymodbus_demond.py:

        if 'dis' in globals() :
            di_start=dis[0]
            i=1
            for di in dis:
                if int(di) == int(di_start):
                    di_previous=di_start
                    if int(di) == int(dis[-1]):
                        rr = client.read_discrete_inputs(int(di_start),i,unit=unit_id)
                        subprocess.Popen(['/usr/bin/php',mymodbus,'add='+host,'unit='+str(unit_id),'eqid='+str(eq_id),'type=discrete_inputs','sortie=1','inputs='+str(int(di_start)),'values='+str(rr.bits[:i])])

Avec celle de demon.py:

        if 'dis' in globals() :
            di_start=dis[0]
            i=1
            for di in dis:
                if int(di) == int(di_start):
                    di_previous=di_start
                    if int(di) == int(dis[-1]):
                        read_dis_list = c.read_discrete_inputs(int(di_start),i)
                        subprocess.Popen(['/usr/bin/php',mymodbus,'type=discrete_inputs','sortie=1','inputs='+str(int(di_start)),'values='+str(read_dis_list),'add='+host,'unit='+str(unit_id),'eqid='+str(eq_id)])

on voit bien que les arguments de read_discrete_inputs sont moins nombreux pour le 2ème (il n’y a pas de unit) et la réponse ne passe pas par rr.bits mais est simplement la valeur récupérée juste avant.

Sur ce je vais aller me pieuter, bonne nuit à tous :wink:

++

C’est lié au evolution de la bibliothèque , je te propose pour la suite de passer en MP car le sujet est déjà vraiment très chargé. Bon piotage

Salut @Rigolman69, en montant un client chez moi cela fonctionne parfaitement. Voici ma page de configuration, as tu la même chose?

j’obtiens le même genre d’erreur que toi lorsque je mets un bit en adresse qui n’est pas dans la plage du client

1 « J'aime »

Tu as dormis entre deux :blush:
Oui si tu veux lire une imput qui n’est pas une imput, tu plante le demon, il est susceptible et pas très tolérant

Bounjour,

Ha oui la nuit à due etre courte !

J’ai une bonne nouvelle : t’as manip, @Noyax37, FONCTIONNE ! :heart_eyes:
CONGRATULATION :smiling_face_with_three_hearts:

1 « J'aime »