Via 1: Modbus TCP
- Nell’M-Center inserire il codice OBIS dei registri desiderati. La lettura del prelievo tariffa 1 (1-0:1.8.1) si trova allora al registro 1030.
- In Node-RED aggiungere un nodo «Modbus Read». Server: IP dell’M-Center, porta 502, tipo TCP.
- Unit-ID: l’indirizzo di dispositivo Modbus del contatore nell’M-Center.
- FC 3 (Read Holding Registers), indirizzo 1029 per il registro 1030, quantità 2, intervallo di lettura ad esempio 15 minuti.
- Aggiungere un nodo funzione che unisce i due registri in un numero in virgola mobile.
// Due registri a 16 bit (big endian, parola alta per prima) -> 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 = "appartamento1/prelievo_t1";
return msg;
Il manuale conta i registri da 1, node-red-contrib-modbus si aspetta l’indirizzo da 0. Per questo 1029 per il registro 1030. Confrontate il primo valore con la lettura nell’M-Center.
Per più contatori create un nodo di lettura per contatore con il proprio Unit-ID. Gli indirizzi restano uguali finché i codici OBIS sono inseriti.
Via 2: MQTT
Con la licenza MQTT l’M-Center pubblica ogni valore con il proprio topic. Un nodo «mqtt in» con un abbonamento con carattere jolly riceve tutti i valori di un M-Center:
<prefisso>/emu/mcenter/<MAC>/meterreading/#
Collegate prima un nodo debug e osservate topic e contenuto dei messaggi. Poi separate i valori per topic con un nodo switch, ad esempio secondo il codice OBIS alla fine del percorso.
Quale via?
| Modbus TCP | MQTT | |
|---|---|---|
| Indirizzi | fissi, documentati nel manuale | topic per contatore e registro |
| Interrogazione | Node-RED interroga attivamente | l’M-Center invia da sé |
| Altri sistemi | un’interrogazione propria per ogni sistema | abbonati illimitati sul broker |
| Licenza | 210.300.04 | 210.300.03 |