Voie 1 : Modbus TCP
- Dans le M-Center, saisir le code OBIS des registres souhaités. L’index de soutirage tarif 1 (1-0:1.8.1) se trouve alors au registre 1030.
- Dans Node-RED, ajouter un nœud « Modbus Read ». Serveur : IP du M-Center, port 502, type TCP.
- Unit-ID : l’adresse d’appareil Modbus du compteur dans le M-Center.
- FC 3 (Read Holding Registers), adresse 1029 pour le registre 1030, quantité 2, intervalle de lecture par exemple 15 minutes.
- Ajouter un nœud de fonction qui combine les deux registres en un nombre à virgule flottante.
// Deux registres de 16 bits (big endian, mot de poids fort en premier) -> float32
const buf = Buffer.alloc(4);
buf.writeUInt16BE(msg.payload[0], 0);
buf.writeUInt16BE(msg.payload[1], 2);
msg.payload = buf.readFloatBE(0);
msg.topic = "logement1/soutirage_t1";
return msg;
Le manuel compte les registres à partir de 1, node-red-contrib-modbus attend l’adresse à partir de 0. D’où 1029 pour le registre 1030. Comparez la première valeur à l’index dans le M-Center.
Pour plusieurs compteurs, créez un nœud de lecture par compteur avec son propre Unit-ID. Les adresses restent les mêmes tant que les codes OBIS sont saisis.
Voie 2 : MQTT
Avec la licence MQTT, le M-Center publie chaque valeur sous son propre topic. Un nœud « mqtt in » avec un abonnement générique reçoit toutes les valeurs d’un M-Center :
<préfixe>/emu/mcenter/<MAC>/meterreading/#
Ajoutez d’abord un nœud debug et regardez les topics et le contenu des messages. Séparez ensuite les valeurs par topic avec un nœud switch, par exemple selon le code OBIS en fin de chemin.
Quelle voie ?
| Modbus TCP | MQTT | |
|---|---|---|
| Adresses | fixes, documentées dans le manuel | topic par compteur et registre |
| Interrogation | Node-RED interroge activement | le M-Center envoie de lui-même |
| Autres systèmes | une requête propre par système | autant d’abonnés que souhaité sur le broker |
| Licence | 210.300.04 | 210.300.03 |