Weg 1: Modbus TCP
- Im M-Center bei den gewünschten Registern den OBIS-Code hinterlegen. Der Zählerstand Bezug Tarif 1 (1-0:1.8.1) liegt dann bei Register 1030.
- In Node-RED einen Knoten «Modbus Read» einfügen. Server: IP des M-Centers, Port 502, Typ TCP.
- Unit-ID: die Modbus-Geräteadresse des Zählers im M-Center.
- FC 3 (Read Holding Registers), Adresse 1029 für Register 1030, Anzahl 2, Abfrageintervall zum Beispiel 15 Minuten.
- Einen Funktionsknoten anhängen, der die zwei Register zu einer Fliesskommazahl zusammensetzt.
// Zwei 16-Bit-Register (Big Endian, höheres Wort zuerst) -> 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 = "wohnung1/bezug_t1";
return msg;
Das Handbuch zählt die Register ab 1, node-red-contrib-modbus erwartet die Adresse ab 0. Deshalb 1029 für Register 1030. Vergleichen Sie den ersten Wert mit dem Zählerstand im M-Center.
Für mehrere Zähler legen Sie pro Zähler einen Lese-Knoten mit eigener Unit-ID an. Die Adressen bleiben gleich, solange die OBIS-Codes hinterlegt sind.
Weg 2: MQTT
Mit MQTT-Lizenz publiziert das M-Center jeden Wert unter einem eigenen Topic. Ein Knoten «mqtt in» mit einem Platzhalter-Abo empfängt alle Werte eines M-Centers:
<Präfix>/emu/mcenter/<MAC>/meterreading/#
Hängen Sie zuerst einen Debug-Knoten an und sehen Sie sich Topics und Inhalt der Nachrichten an. Danach trennen Sie die Werte mit einem Switch-Knoten nach Topic, zum Beispiel nach dem OBIS-Code am Ende des Pfads.
Welcher Weg?
| Modbus TCP | MQTT | |
|---|---|---|
| Adressen | fest, im Handbuch dokumentiert | Topic je Zähler und Register |
| Abfrage | Node-RED fragt aktiv ab | M-Center sendet von selbst |
| Weitere Systeme | je System eine eigene Abfrage | beliebig viele Abonnenten am Broker |
| Lizenz | 210.300.04 | 210.300.03 |