Plugin MyModbus

Super , hier on était partie du l’imput 1 c’est ça le problème.
Pourtant dans la doc c’était écris premiere imput adresse 1 :thinking:
En tout cas c’est une bonne nouvelle aucune modif à faire :sweat_smile:

Image 1

Donc @Bebel27 t’as fonction « 02 Discret input » est conforme : :+1:

UN GRAND MERCI A VOUS DEUX. Et encore félictation à BeBel pour son plugin.

1 « J'aime »

Comme la plus part du temps ce n’ai pas le plugin le soucis mais savoir quel registre lire quel format etc…
L’idée pour la suite du plugin c’est d’intégrer les équipements compatibles en proposant les configurations préétablies.
Parce que ce n’ai pas la première fois que je rencontre ce genre de problèmes. Des fois les adresses sont décalé de 1 par rapport à la doc, des fois faut les multiplier par 10 etc…

1 « J'aime »

Je comprends mieux maintenant pourquoi la doc n’explique pas réellement comment remplir les différents champs. Pour un neophyte comme moi c’est pas évident. Mais difficile de faire exhaustif !

1 « J'aime »

Par contre tu peux créer un seul équipement et tout mèttre dedans.
Tes 8imputs et tes coils

Top, tant mieux pour toi :wink::+1:

Bonjour,

Je fonctionnais avec JEEDOM en version V3 et Mymodbus communicant avec un atuoamte wago PFC200

Cela fonctionnait correctement

J’ai effectuer un mise à jour vers la version 4.1.19 de JEEDOM

Depuis la mise à jour, le plugin MyMODBUS me met un message erreur sur le statut du démon (NOK)

Quand je créer un nouveau équipements et que je désactive mon ancien, le démon es en statut OK

Ci-joint log du plugin mymodbus.txt (25,8 Ko)

Est ce que quelqu’un aurais une idée?

Merci

Bonjour @arnaud.trillot, tu aurais des captures d’écran de tes deux pages de configuration de tes équipements (celui qui fonctionne et celui qui ne fonctionne pas) stp?

Bonjour Noyax37,

Merci pour ta réponse

J’ai refais des essais hier soir.

Sur le nouveau équipement créer, si j’ajoute une action cela fonctionne correctement mais dès que j’ajouter une info, le démon est en statut NOK

Voir capture (les deux équipements au la même configuration)


Merci

C’est normal l’adresse 0 pour un coil? Pourrais tu passer les logs du plugin en mode debug et renvoyer un log stp?

Tu es certain que tu récupéres tes infos avec un coil? Tout ce que j’ai vu jusqu’à présent mais je n’ai pas de wago, le faisait avec une fuction code = 3 soit un holding register.

Par exemple:

Bonjour à tous,

j’ai comme projet de faire communiquer Jeedom (qui tourne sur un raspberry) avec un arduino MEGA.
je m’inspire du post de Fabio133 ( https://community.jeedom.com/t/arduinodbus-coffret-i-o-sous-modbus/25329 ).

mais avant de me lancer ds la programmation de l’arduino, je voudrai confirmer le bon fonctionnement de ma liaison MODBUS.

le plugin MyModbus est pour moi bien installé au vu des infos présentes ds l’onglet configuration du plugin.
celui-ci semble également envoyer ses trames (voir dernière ligne), pour autant il semble y avoir une erreur « host value erreur » à l’initialisation de la com.
par exemple, pour la MAJ d’un bit, j’ai les infos suivantes ds le fichier LOG :

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/var/www/html/plugins/mymodbus/ressources/demon.py", line 85, in polling_thread
    c = ModbusClient(host=host, port=port, unit_id=unit_id, auto_open=True, auto_close=False)
  File "/usr/local/lib/python2.7/dist-packages/pyModbusTCP/client.py", line 62, in __init__
    raise ValueError('host value error')
ValueError: host value error

[2021-02-15 17:06:55][INFO] : Debut de l action /usr/bin/python /var/www/html/plugins/mymodbus/ressources/mymodbus_write.py -h 192.168.0.060 -p 502 --unit_id=1 --wsc=100 --value=1 2>&1

pour autant lorsque j’essaie de ctrl la communication avec ModbusDoctor ou pyModSlave, je n’arrive pas à me connecter.

avez-vous une idée ?

merci d’avance

Bonjour @cyval, dans la ligne de commande de ton log il y a " --wsc=100" qui laisse à penser que tu demandes une info de type coil à l’adresse 100 alors que dans ModbusDoctor c’est un Holding register à l’adresse 0 que tu demandes, c’est sans doute normal de ne pas avoir la même réponse. Sinon pourrais tu envoyer les logs en mode debug et une copie de ta config?

oups, lu trop vite, tu n’arrives même pas à te connecter avec ModbusDoctor. Là à part un pb de câblage ou d’interface je ne vois pas.

Salut,
As tu le code de ton mega? Stp? J’avais fait un code pour @gagdush pour un mega aussi.
Histoire de comparer.
Qu’utilise tu comme matériel ethernet sur le mega?
Fab

bonjour,
@Noyax37 :
j’utilise une connexion par TCP/IP, du coup je n’ai pas d’adaptateur/interface. la liaison se fait via le réseau Ethernet par les RJ45. La RJ45 de Jeedom fonctionne correctement par ce que je le vois sur le réseau. Idem pour mon PC sur lequel est installé ModbusDoctor.
Je sèche pour le défaut de cablage
@Fabio133 :
j’utilise le code que tu avais mis à dispo modulo qq adaptations et surtout mise en commentaire d’une partie du code

/*
   Carte I/O modbus TCP/IP + fonction température DS18B20.
   Hardware: MEGA + ethernet shield ENC28J60
             Carte 8 relais 5vdc / 230v 10A
   Fonction: Pilotage des entrées sorties d'un arduino par modbus. Relève de température DS18B20.
   Commentaires : Alimentation 5Vdc auxiliaire requise, pour eviter une surconsomation sur l'arduino, sinon ça ne répond plus.
   IP / Mac fixe.
   Source : André Sarmento Barbosa http://github.com/andresarmento/modbus-arduino
*/

/*--------------------------BIBLIOTHEQUES-----------------------------*/
#include <ModbusIP_ENC28J60.h>    //Mode TCP/IP
//#include <DallasTemperature.h>
//#include <OneWire.h>

/*-----------RENSEIGNER ADRESSE IP ET MAC (MODE TCP/IP)---------------*/
//Adresse MAC de votre shield.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xE8 };
//Adresse IP de votre shield.
byte ip[] = {192, 168, 0, 60};

/**------------------CONFIGURATION DES I/O et PIN --------------------*/
//Pins 50, 51, 52, 53 non dispo pour ENC28J60.
//Digitales
#define NBRE_DO 8
byte DigitalOut [NBRE_DO];                           //Tableau Digital Output
const byte First_pinDO = 0;                          //Numéro 1er DO
#define NBRE_DI 0
byte DigitalIn [NBRE_DI];                            //Tableau Digital Input
const byte First_pinDI = (First_pinDO + NBRE_DO);    //Numéro 1er DI sauf si NBRE_DO=8

//Analogiques
//#define NBRE_ANO 0
//const byte First_pinANO = 15;                        //Numéro 1er ANO "15" alias "A1"
//byte AnalogOut [NBRE_ANO];                           //Tableau Analog Output
//#define NBRE_ANI 0
//const byte First_pinANI = (First_pinANO + NBRE_ANO); //Numéro 1er ANI
//byte AnalogIn [NBRE_ANI];                            //Tableau Analog Input

//Configuration des registres modbus (adr. possible 0-9999) par catégories.
const byte First_RegDO  = 100;                       //Numéro 1er DO
byte REG_DOut [NBRE_DO];                             //Tableau registre Digital Output
const byte First_RegDI  = 200;                       //Numéro 1er DI
byte REG_DIn [NBRE_DI];                              //Tableau registre Digital Input
//const byte First_RegANO = 300;                       //Numéro 1er ANO
//byte REG_ANO [NBRE_ANO];                             //Tableau registre Analog Output
//const byte First_RegANI = 400;                       //Numéro 1er ANI
//byte REG_ANI [NBRE_ANI];                             //Tableau registre Analog Input

/*-----------------Configuration onewire-dallas----------------------*/
//OneWire oneWire(14); // pin 14 (A0)
//DallasTemperature sensors(&oneWire);

/*Configuration sonde multiple*/
//#define NBRE_SONDE 1
/*Configuration valeur de départ*/
//int REG_SONDE [NBRE_SONDE];              //Tableau registre sonde
//const int First_REGSONDE = 500;          //Numéro 1er registre
//int SONDE [NBRE_SONDE];                  //Tableau des sondes
//const int First_SONDE = 0;               //Numéro 1ere sonde

/*VARAIBLES*/
//float TEMPFLOAT;                         //Variables temp flotant negatif possible
//int TEMPCALC;                            //Variables temp entier

/*-----------------Configuration des fonctions----------------------*/
//ModbusIP object
ModbusIP mb;

/*TEMPO EN MILLISECONDES*/
long ts;

/*-------------------------------------------------------------------*/
void setup() {
  //Config Modbus IP
  mb.config(mac, ip);
  Serial.begin(9600);
//    sensors.begin();

  if (NBRE_DO > 0) {
    for (int i, j = 0; i, j < NBRE_DO; i++, j++) {
      byte pin = First_pinDO + i;
      DigitalOut[i] = pin;
      pinMode (DigitalOut[i], OUTPUT); //Toutes les pins sont en OUT
      byte reg = First_RegDO + j;
      REG_DOut [j] = reg;
      mb.addCoil(REG_DOut [j], HIGH); //addCoil() pour digital outputs initialise a Off les relais
    }
  }
//  if (NBRE_SONDE > 0){
//    for (int i = 0; i < NBRE_SONDE; i++){
//    int Sx = First_REGSONDE + i;
//    REG_SONDE[i] = Sx;
//    sensors.begin();
//    mb.addHreg(REG_SONDE[i], true);
//    }
//  }
//  ts = millis();
}
void loop() {
  //Call once inside loop() - all magic here
  mb.task();

/*Gestion des sorties*/
  if (NBRE_DO > 0) {
    for (int i = 0; i < NBRE_DO; i++) {
      byte pin = First_pinDO + i;
      DigitalOut[i] = pin;
      int reg = First_RegDO + i;
      REG_DOut [i] = reg;
      digitalWrite (DigitalOut [i], mb.Coil(REG_DOut[i])); //Association registres/pins
   } //EndFor
  } //Endif

/*Relève des températures*/
//if (millis() > ts + 3000) {
//    ts = millis();
//if (NBRE_SONDE > 0){
//  for (int i = 0; i < NBRE_SONDE; i++){
//    int Sx = First_SONDE + i;
//    SONDE[i] = Sx;
//    int Reg = First_REGSONDE + i;
//    REG_SONDE[i] = Reg;
//    sensors.requestTemperatures();
//    TEMPFLOAT = sensors.getTempCByIndex(SONDE[i]);
//    TEMPCALC = (int((TEMPFLOAT+100)*100));
//    Serial.print("Relève sonde ");
//    Serial.print(SONDE[i]);
//    Serial.print(" : ");
//    Serial.println(TEMPFLOAT);
//    Serial.print("Valeur converti :");
//    Serial.print(TEMPCALC);
//    Serial.print(" envoyé sur le registre :");
//    Serial.println(REG_SONDE[i]);
//    mb.Hreg(REG_SONDE[i],(TEMPCALC));// Registre
//   } //EndFor
//  } //Endif NBRE
// } //Endif millis
}

j’utilise un ENC28J60 comme shield Ethernet.

juste pour être sûr de ne pas faire erreur,

  • Le plugin Mymodbus communique via la liaison RJ45 sur mon réseau Ethernet interne.
    L’adresse IP configurée ds le plugin est celle de l’esclave (en l’occurrence mon arduino MEGA et pour être complet 192.168.0.60 port 502)
  • Modbusdoctor permet lire les trames envoyées par Mymodbus indépendamment de la présence ou non d’un esclave sur le réseau Ethernet.
    L’adresse IP configurée ds Modbusdotor est celle de l’esclave (pour moi 192.168.0.60 port 502)
  • L’esclave est implémenté d’un programme permettant de déchiffrer la com Modbus et son adresse IP est 192.168.0.60

Salut,
Encore quelques précisions mais on sort du sujet mymodbus, as tu toutes les bibliothèques modbus arduino?
L’ip de l’esclave arduino est elle sur la même plage que ton réseau domicile ? Ex ton iP du pc ou de jeedom c’est quoi? Car je vois 192.168.0.60 pourquoi pas, mais faut que ton réseau soit aussi sur la plage 192.168.0.xxx. Vois tu ce que je veux dire ? Tu peux faire un Ping sur l’esclave pour voir s’il répond et sinon j’ai une commande ssh pour trouver les adresses mac sur un réseau.
Après le code est pour un arduino nano donc les numéro des pins ne sont pas les mêmes sur Mega donc faudra le corriger. Mais j’ai de quoi te donner au besoins.

bonjour @cyval, il n’est pas possible que tu aies la même adresse MAC pour ton shield que celle de @Fabio133, je ne sais pas si cela peut être important mais il faut que tu mettes déjà la bonne adresse dans ton code. Ensuite, comme l’a dit Fabio, sur quelle plage d’adresse fonctionne ton réseau?

bonjour,
@Noyax37 : l’adresse MAC d’un shield Ethernet ENC28J60 est celle que l’on défini ds le programme. celle-ci peut donc être la même que celle présente ds le programme de Fabio133 tout pendant que cette adresse MAC n’est pas présente sur mon réseau.
@Fabio133: oui l’adresse IP de mon MEGA est cohérente avec la plage des adresses de mon réseau. la librairie « modbus-arduino-master » est installée sur mon Pc. La compilation du programme se fait sans erreur.

Indépendamment du fonctionnement de l’arduino MEGA, je pensais que ModbusDoctor pouvait se substituer à l’esclave et ainsi permettre la mise au point de la COM Modbus et donc valider mon utilisation du plugin Mymodbus.