Plugin MyModbus

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.

Modbus docteur interroge les esclaves pour connaître les valeurs de leur registre.
Ping ton arduino déjà en cmd sur Windows afin de s’assurer qu’il est sur le réseau.
Ok pour les bibliothèques. Idem pour le Mac j’ai la même logique.

Bonjour,

J’ai un petit soucis pour l’écriture d’un mot dans mon automate wago.
J’arrive à lire le MOT %MW200 à l’adresse modbus 12488 (REGISTER INT)
Par contre je n’arrive pas à écrire le MOT %MW502 à l’adresse modbus 12790 (HOLDING REGISTER ou INPUT REGISTER)

Une idée, ai-je fait une erreur quelques part ?

Merci :slight_smile:

1 « J'aime »

@Fabio133 : Si Doctor Modbus interroge les esclaves, mon problème s’explique.
En effet, mon arduino n’est pas disponible sur mon réseau interne (il faut que je retravaille le programme sur mon MEGA).
Je pensais à tort que Dotor Modbus se substituait à l’esclave.

Salut il s’agit probablement de la broche de communication entre mega et enc28j60.
Voir ci dessous.
image

Donc dans la bibliothèque ModbusIP_ENC28J60.h , il faut renseigner la bonne valeur de CS soit 53 pour Mega. Extrait de la biblio tel qu’il la faudrait, je pense.

/*
    ModbusIP_ENC28J60.h - Header for Modbus IP ENC28J60 Library
    Copyright (C) 2015 André Sarmento Barbosa
*/
#include <Arduino.h>
#include <Modbus.h>
#include <EtherCard.h>

#ifndef MODBUSIP_ENC28J60_H
#define MODBUSIP_ENC28J60_H

#define MODBUSIP_PORT 	  502
#define MODBUSIP_MAXFRAME 200

define ENC28J60_CS 	53  //Default chip select pin
#define TCP_KEEP_ALIVE

Fab.

Bonjour,

J’aimerais savoir quelle est le rafraîchissement maximum des entrées qu’on peut raisonnablement mettre sur une carte 8 inputs sachant, qu’actuellement, j’en ai seulement une ?

Merci pour vos conseils éclairés.

Bonsoir,

Je fais mes premiers pas sur jeedom :yum:

Actuellement j’utilise un automate Twido de chez Schneider pour gérer toute ma maison, lumières, volets, vmc…ect, le tout est pilotable avec une tablette et l’application HMI MASTER MODBUS.

J’aimerai allé plus loin en utilisant les fonctionnalités de jeedom, mais il faut que j’arrive a communiqué avec mon automate !

Actuellement, j’arrive a me connecter a mon automate avec modbus doctor, liaison ok

J’ai installé jeedom sur un rasberry, le plugin mymodbus, j’ai crée un équipement en connexion tcpip.

Malheureusement le demon de mymodbus est en statut NOK.

Quelqu’un aurait-il une piste, une idée ?

Merci d’avance.

Ma config automate:
Automate Schneider TWDLMDA40DTK
Module Ethernet: 499TWD01100
Module 32 entrées TM2DDI32DK
Module 32 sortie TM2DDO32TK
Module 8 entrée ANA: TM2ARI8HT

bonjour @Stephk, pourrais tu nous envoyer des copie d’écran de la config de ton équipement dans mymodbus? Et celle de modbus doctor stp