MQTT (sur boitier ModBus) : Besoin d'aide à la configuration

Hello,

Pour contrôler ma chaudière De Dietrich, j’utilise depuis quelques années un boitier convertisseur ModBus RS485 vers ModBus TCP (j’avais créé un sujet dédié sur les plugins existants à l’époque).

Je n’ai jamais été pleinement satisfait des différents plugins (certains n’ont jamais rien donnés, un autre qui nécessite des modifications, etc…).

Bref, en voyant la naissance du plugin plugin-modbus2mqtt, je suis parti à la recherche d’un boitier Modbus permettant de communiquer en MQTT.
Mon choix s’est porté sur l’USR RIOT N510 H7-4 après avoir essayé la marque Wareshare qui ne m’a pas du tout convaincu (soft Windows obligatoire pour toute configuration autre que l’IP :face_exhaling:).

Mon problème n’est pas directement lié au plugin plugin-modbus2mqtt (d’où l’absence de tag) mais à la configuration de la partie MQTT de mon boitier Modbus…
C’est clairement un manque de connaissance sur le sujet (MQTT). A part le plugin Z-Wave JS (où il n’y a rien à faire) et la lecture de mon compteur itron qui envoie les données en MQTT à Jeedom, je n’ai jamais touché à MQTT.
Je comprends le concept.

Je suis bloqué à l’étape avant utilisation du plugin, à savoir la lecture des données via un explorateur MQTT.

Je vous mets les screens de mon interface (j’ai effectué pleins de tests sans avoir quelque de concret).
Cela permettra également à ceux qui ne connaissent pas de voir à quoi cela ressemble.

A noter qu’actuellement, en mode Modbus TCP via le plugin MyModbus, cela fonctionne bien et que mon but est de passer par MQTT.

Tout d’abord la partie MQTT :


Pour les essais, j’ai mis les credentials du plugin MQTT Manager

Ensuite, il y a une partie Edge Computing. Je ne sais pas trop si cela a un intérêt de l’activer ou pas… Mais vu que rien ne fonctionne…

L’édition du device :

L’édition des valeurs de la chaudière (valeurs que j’utilise d’ailleurs dans le plugin pour les données souhaitées de la chaudière) :

Sur ce dernier screen, on voit que l’on peut également utiliser un template json :

Que ce soit dans un sens (Publish) ou dans l’autre (Subscribe), je n’obtiens rien de probant.

Si quelqu’un peut allumer la lumière de mon cerveau :slight_smile:.

Salut,

Et es-tu sur que les données sont lues correctement par l’appareil déjà? avant qu’elles ne soient envoyées sur mqtt
Tu as un moyen de les visualiser?
et coté mqtt tu utilises quoi pour voir l’info? mqtt explorer?

1 « J'aime »

Hello,

Le boîtier en place fonctionne en Modbus et MQTT.
Actuellement, j’utilise sur mon Jeedom de prod toujours l’un des plugins Modbus pour continuer à lire les données le temps que la partie MQTT soit opérationnel.
Donc oui, les données lues de la chaudière sont ok (vu que je les récupère via le plugin Modbus).

Le MQTT est une fonction supplémentaire du boîtier.

J’ai utilisé MQTT explorer oui.

dans la config mqtt, pourquoi avoir mis 502 en port local?
je pense pas que ca soit correcte, 502 c’est le port pour modbus donc il ne peut pas réutiliser celui là, il doit y avoir un conflit, choisi un autre.
je ne comprend pas pourquoi il faut configurer le port local d’ailleurs, il devrait prendre n’importe lequel dispo.

et tu ne devrais pas configurer le même topic pour le publish et subscribe
à la limite désactive le subscribe pour l’instant, fait fonctionner d’abord le publish

concernant le publish, tu es sur du Port 1, ? je suppose que ca correspond à un config coté rs485?

image
la config ci-dessus, c’est les registres pour la mise à dispo via modbus?
c’est normal que tu aies config deux fois le registre 40019 pour deux infos différentes? du coup il écrase l’une des valeurs non?

Pour le port 502, c’était une erreur de ma part.
J’ai corrigé et ai remis ce qu’il y avait par défaut, à savoir 0.

J’ai bien un topic qui se créé :
Capture d’écran 2023-01-28 à 14.19.05
Par contre, il est vide et il y a des caractères qu’il a l’air du mal à lire.

Pour le Publish, je suis bien sur le port 1.
De toute manière, je n’ai que celui-ci de possible car je n’ai qu’une seule entrée RS485.

Si j’active la partie Edge Computing (j’ai corrigé le doublon d’adresse, c’était une coquille) et configure de cette manière :

J’obtiens plus de choses et les remontées sont régulière :
Capture d’écran 2023-01-28 à 14.46.09
Je n’obtiens évidemment pas les valeurs voulues pour le moment, mais c’est toujours mieux que rien.

Je ne comprends pas pourquoi il n’y a rien dans le Pubchaudiere.

Y a du progrès mais désolé je ne pense pas pouvoir donner plus d’idée, c’est compliqué sans avoir le matos.
En tout cas je ne remarque rien d’autres d’étrange à première vue dans les configs

les caractères bizarres ? c’est un problème d’encodage utf8<>ascii probablement, c’est typiquement ca qu’il se passe dans ces cas.

Je comprends. C’est vraiment du spécifique.
C’est pour cela que c’est difficile de trouver le pourquoi du comment ou de l’aide sur ce sujet bien précis.

Mais merci pour les différentes réponses.

Bon, en tout cas, si je lis les logs du plugin MQTT Manager, j’ai ceci :

Message reçu sans prise en charge par un plugin : {"Pubchaudiere":"
\u0003\u0002\ufffd\ufffd\u001c5\u0000\u0000\u0000"}

là comme ca je dirais que c’est encodé en utf16 en fait;
regardes si t’as pas une option qlq part pour l’encodage

Non, pas grand chose de ce côté là.

Par contre, ce n’est pas la bonne méthode je pense, je m’explique :

  • Comme tu le sais, j’ai mal compris l’intérêt de ton plugin. En lisant « Permet de lire et écrire sur des devices modbus TCP depuis et vers MQTT », je pensais qu’il fallait un boitier qui gérait le MQTT (et que lui allait lire les bonnes infos en MQTT suivant les adresses que l’on paramètre), mais non, pas du tout.
  • Dans la partie MQTT Publish de mon boitier, vu que je ne précise pas l’info que je veux, il envoie tout. Ce n’est ce qui est voulu non plus. On peut récupérer tout un tas d’infos de la chaudière, toutes les infos ne sont pas intéressantes (j’ai un tableau avec les adresses correspondantes aux infos que je souhaite). Donc finalement, si cette partie ne fonctionne pas comme il faut, ce n’est pas forcément le drame.
  • Il faut que je puisse envoyer des infos au bon endroit. Et là, le json rentre en jeu. Exemple de la documentation :

Mais avant de construire mon json propre comme il faut… Je dois avoir les bonnes valeurs.

Il y a des variables systèmes (comme « sys_dev_name » qui renvoie le nom du boitier). Elles fonctionnent mais du côté des valeurs, je n’ai que des zéros :

{"Temp_Salon":0,"Temp_Ext":0,"test1":0,"test2":0,"test3":0,"name":"USR-N510"}

Pourtant j’utilise les mêmes adresses que sur le plugin Modbus (valeurs OK). Et c’est là que je dois orienter ma recherche.

Pour ceux qui voudraient se lancer dans la même aventure, voici la documentation du boitier.

Bon, cela fonctionne pour ma part.
La cause venait d’un truc tout bête : l’adresse esclave du device dans la partie Edge Computing.

Les bonnes valeurs remontent dans mon broker! :champagne:

Bon, pour ceux que ça intéresse, ci-dessous une copie de la configuration de mon boitier ModBus, connecté en RS485 sur ma chaudière De Dietrich et communiquant en MQTT.

Tout d’abord, la partie communication Modbus :


Pour la partie configuration MQTT, pas grand chose à faire (pas besoin d’activer quoi que ce soit dans la partie Publish ou Subscribe). Bien utiliser l’adresse IP et les identifiants du broker.

Ensuite, il faut activer la partie Edge Computing Gateway

Paramétrer le port du boitier et son adresse esclave (c’est ce dernier point qui m’avait posé problème, j’avais laissé à 0 et il ne me remontait pas les valeurs).

Le point le plus important. Les adresses sur lesquelles chercher les valeurs que l’on veut remonter dans son broker.


Autre point important. Le nom do topic est à saisir et surtout le template json

Exemple de json :

{
  "Temp_Salon": "Temp_Salon",
  "Temp_Ext": "Temp_Ext",
  "Consigne_jour": "Consigne_jour",
  "Consigne_nuit": "Consigne_nuit",
  "Temp_Antigel": "Temp_Antigel",
  "Derogation": "Derogation",
  "Infl_S_Amb": "Infl_S_Amb",
  "Pente_A": "Pente_A",
  "Tempo_P_ECS": "Tempo_P_ECS",
  "T_Calc_Chaud": "T_Calc_Chaud",
  "Mesure_Chaudiere": "Mesure_Chaudiere",
  "Depart_A": "Depart_A",
  "Cons_ECS": "Cons_ECS",
  "Mesure_ballon": "Mesure_ballon",
  "Pression": "Pression",
  "Programme": "Programme"
}

J’ai mis les mêmes noms. L’idée est plutôt :

{
  "Nom_de_la_valeur_dans_le_topic_du_broker": "Nom_de_l_adresse_choisie_Node_Name",
}

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.