TapHome

solvimus MBUS-GEM – contatore di calore M-Bus

Modbus TCP
Inviato da
Ultimo aggiornamento: 11. 2026
solvimus MBUS-GEM – contatore di calore M-Bus

TapHome non ha un’interfaccia M-Bus propria. I contatori di calore con M-Bus cablato (EN 13757) si collegano tramite un gateway che converte M-Bus in Modbus, e TapHome li legge poi come dispositivi Modbus TCP. Questo modello della community usa il gateway solvimus MBUS-GEM (MBUS-GE20M, MBUS-GE80M, MBUS-GE125M, MBUS-GE250M, MBUS-GE500M): il gateway legge i contatori sul proprio M-Bus e ne fornisce i valori come server Modbus TCP sulla porta 502.

Il modello legge un contatore di calore (o un contatore combinato di calore e freddo): energia termica in kWh, volume dell’acqua di riscaldamento, potenza termica, portata e temperature di mandata e di ritorno. Un modulo importato rappresenta un contatore; per ogni contatore aggiuntivo il modello si importa di nuovo. L’energia termica è una semplice variabile, non un contatore elettrico, quindi TapHome non la conta mai nel consumo di elettricità.

Modello della community — non ancora testato con TapHome su un gateway. Il modello è stato scritto in base al manuale utente dell’MBUS-GEM e non è stato eseguito su un gateway, un contatore di calore o un simulatore. I suoi numeri di registro sono segnaposto da sostituire con i numeri che il gateway mostra per il vostro contatore (vedi Configurazione). Il feedback dal campo è benvenuto. Scaricate l’XML da questa pagina oppure ottenetelo dal portale TapHome: solvimus MBUS-GEM – M-Bus heat meter — modello della community, e importatelo come nuovo modulo.

Cosa serve

  • Gateway solvimus MBUS-GEM — MBUS-GE20M (20 carichi unitari), MBUS-GE80M (80), MBUS-GE125M (125), MBUS-GE250M (250) o MBUS-GE500M (500). Un carico unitario corrisponde per lo più a un contatore.
  • Un contatore di calore con M-Bus cablato (EN 13757) sull’M-Bus del gateway, oppure un contatore combinato di calore e freddo.
  • Il gateway e il TapHome Core nella stessa rete locale.

Collegamento hardware

L’MBUS-GEM si monta su guida DIN da 35 mm. Le linee M-Bus dei contatori vanno ai morsetti a vite M-Bus del gateway, la rete alla sua porta Ethernet RJ45 (10/100 Mbit/s). Il gateway richiede un’alimentazione esterna in corrente continua: 21,6–24,5 V DC per MBUS-GE20M e MBUS-GE80M, 12–36 V DC per MBUS-GE125M, MBUS-GE250M e MBUS-GE500M. Si avvia da solo quando l’alimentazione è collegata.

Configurazione

Indirizzo di rete del gateway

L’MBUS-GEM viene fornito con l’indirizzo IP statico 192.168.1.101 (subnet mask 255.255.255.0, gateway predefinito 192.168.1.254). La sua pagina web di configurazione si apre su http://192.168.1.101/; al primo accesso l’amministratore deve cambiare la password. Lo strumento solvimus Netdiscover trova il gateway nella rete e ne cambia indirizzo IP, subnet mask e gateway predefinito, oppure lo passa a DHCP. Con DHCP l’indirizzo assegnato al gateway si trova nel server DHCP in base al suo indirizzo MAC, che mostra anche Netdiscover. Senza server DHCP il gateway sceglie un indirizzo dall’intervallo 169.254.x.x.

Il modello raggiunge il gateway tramite il suo indirizzo IP, quindi assegnategli un indirizzo statico o riservatene l’indirizzo nel server DHCP.

Impostazioni del gateway

Nella pagina web di configurazione, scheda Server:

  1. Impostate Modbus mode su Modbus TCP e lasciate Modbus port a 502.
  2. Lasciate Modbus float only disattivato. Questa modalità elimina i campi di tipo e unità che il modello controlla.
  3. Lasciate Modbus swap disattivato. Il modello si aspetta l’ordine delle parole predefinito (prima la parola più significativa).
  4. Attivate Modbus multi slave (consigliato). Ogni contatore diventa allora uno slave Modbus virtuale con un proprio indirizzo (1–247) e la numerazione dei registri riparte per ogni contatore, così i contatori dello stesso tipo ricevono gli stessi numeri di registro.

Dopo aver attivato o disattivato multi slave, gli indirizzi nella scheda Meter vanno riassegnati (menu contestuale Allocate).

Elenco contatori e ciclo di lettura

Il contatore di calore deve essere nell’elenco contatori del gateway (scheda Meter), rilevato sull’M-Bus o creato a mano. Il gateway legge i contatori indipendentemente dalle richieste Modbus, con il Readout cycle della scheda Configuration o con il Cycle (in secondi) del singolo contatore nella scheda Meter. Queste impostazioni decidono quanto sono aggiornati i valori in TapHome. Alcuni contatori M-Bus a batteria consentono solo un numero limitato di letture al giorno — controllate la scheda tecnica del contatore prima di scegliere un ciclo breve.

Impostazioni del modello dopo l’importazione

Il gateway non ha una tabella di registri fissa. Assegna alla voce del contatore e a ogni valore del contatore un proprio blocco di 10 holding register e mostra l’inizio di ogni blocco nella colonna Register della scheda Meter. L’ordine dei valori segue l’ordine in cui il contatore invia i suoi record M-Bus, quindi dipende dal modello di contatore.

ImpostazioneCosa inserire
Indirizzo IPIndirizzo del gateway
SlaveIdCon multi slave: il numero nella colonna Register della riga del contatore. Senza multi slave: 255
RegMeterCon multi slave: 10 (la voce del contatore inizia a 10 in ogni slave virtuale). Senza multi slave: il numero nella colonna Register della riga del contatore
RegEnergy, RegVolume, RegPower, RegFlow, RegFlowTemp, RegReturnTempIl numero nella colonna Register della riga del valore corrispondente. Le colonne Description e Unit della scheda Meter mostrano quale riga è quale

L’indirizzo IP e SlaveId vengono chiesti durante l’importazione; i sette valori Reg… sono variabili del modulo. I loro valori predefiniti (10, 20, 30 … 70) sono segnaposto: 10 e 20 corrispondono alla modalità di test del gateway, gli altri proseguono semplicemente a passi di 10. Sovrascriveteli sempre.

Ogni dispositivo, prima di mostrare un valore, controlla il tipo di voce e l’unità del proprio blocco. Un numero errato provoca sul dispositivo un errore che nomina la variabile del modulo, per esempio RegPower does not point to a power value … – copy the Register number of this value from the gateway Meter tab.

Verifica della connessione

Con Modbus test attivato nella scheda Server, il gateway fornisce dati di test statici: la voce del contatore al registro 10 e un valore di energia di 1234,5678 Wh al registro 20. Con le variabili del modulo predefinite, Energia termica mostra allora 1,2 kWh con un avviso che il mezzo del contatore di test non è calore (il contatore di test è un contatore elettrico). Questo dimostra che indirizzo IP, porta, indirizzo slave, numeri di registro e ordine delle parole sono corretti. Gli altri dispositivi segnalano errori perché i dati di test non hanno altri valori. Disattivate poi la modalità di test.

Funzionalità del dispositivo

DispositivoUnitàCosa mostra
Energia termicakWhEnergia termica cumulata, convertita da Wh o J e arrotondata a 0,1 kWh
Volume acqua di riscaldamentom³Volume cumulato dell’acqua di riscaldamento
Potenza termicakWPotenza termica attuale, convertita da W o J/h
Portatam³/hPortata attuale, convertita da m³/min o m³/s quando il contatore invia queste unità
Temperatura di mandata°CTemperatura di mandata del circuito di riscaldamento
Temperatura di ritorno°CTemperatura di ritorno del circuito di riscaldamento

Stato del contatore

Energia termica sorveglia anche il contatore stesso. Mostra un errore quando RegMeter non punta a una voce di contatore o quando il gateway non è riuscito a leggere il contatore nell’ultima lettura, e un avviso quando non tutti i valori sono stati aggiornati o quando il mezzo del contatore non è né calore né freddo. Ha due attributi di servizio:

Attributo di servizioDescrizione
Numero di serie del contatoreNumero di serie del contatore, per verificare che il modulo legga il contatore giusto
Ultima lettura del contatoreMinuti dall’ultima lettura del contatore da parte del gateway

Tutti i valori cambiano solo a ogni lettura del gateway; i dispositivi interrogano il gateway ogni 15 s.

Risoluzione dei problemi

Nessuna comunicazione

Verificate che Modbus sia attivato nella scheda Server, che la porta sia 502 da entrambe le parti e che nessun firewall la blocchi. TapHome e il gateway devono trovarsi nella stessa sottorete o avere un instradamento funzionante; aiuta un ping verso il gateway. Usate poi la verifica della connessione descritta sopra.

Errore che nomina una variabile del modulo

Il numero in quella variabile punta a un blocco di altro tipo o di altra unità. Copiate di nuovo il numero Register dalla scheda Meter; con multi slave controllate anche SlaveId.

I valori non cambiano

Controllate il ciclo di lettura del gateway e il limite di letture del contatore. L’ora di sistema del gateway deve essere corretta (impostata a mano o tramite SNTP), altrimenti l’età dell’ultima lettura è errata.

Piccola differenza rispetto al valore sulla pagina web del gateway

Il modello legge il valore in virgola mobile, che ha circa 7 cifre significative. Ricaricate la scheda Meter del gateway prima del confronto.

Altri client Modbus sullo stesso gateway

Il gateway serve fino a cinque connessioni Modbus TCP contemporaneamente; quando il limite viene superato chiude la più vecchia. Tenetelo presente quando un sistema di gestione dell’edificio o un display legge lo stesso gateway.

Dispositivi disponibili

solvimus MBUS-GEM – heat meter Modulo
Variabili personalizzate
RegMeter (numeric) = 10Inizio della voce del contatore (numero di serie, ora della lettura, stato della lettura) — 10 con Modbus multi slave, altrimenti il numero della colonna Register nella riga del contatore nella scheda Meter del gateway
RegEnergy (numeric) = 20Inizio del valore di energia (Wh o J) — il numero della colonna Register nella sua riga nella scheda Meter del gateway
RegVolume (numeric) = 30Inizio del valore di volume (m³) — il numero della colonna Register nella sua riga nella scheda Meter del gateway
RegPower (numeric) = 40Inizio del valore di potenza (W o J/h) — il numero della colonna Register nella sua riga nella scheda Meter del gateway
RegFlow (numeric) = 50Inizio del valore di portata (m³/h, m³/min o m³/s) — il numero della colonna Register nella sua riga nella scheda Meter del gateway
RegFlowTemp (numeric) = 60Inizio del valore di temperatura di mandata (°C) — il numero della colonna Register nella sua riga nella scheda Meter del gateway
RegReturnTemp (numeric) = 70Inizio del valore di temperatura di ritorno (°C) — il numero della colonna Register nella sua riga nella scheda Meter del gateway
Energia termica Variabile Solo lettura

Energia termica cumulata del contatore in kWh; segnala anche quando il gateway non è riuscito a leggere il contatore o i valori non sono aggiornati

Registro: H:RegEnergy+4 Float Unità: kWh
Attributi di servizio
Numero di serie del contatoreNumero di serie del contatore, per verificare che il modulo legga il contatore giusto
Ultima lettura del contatoreMinuti dall'ultima lettura del contatore da parte del gateway

Energia termica

Lettura
VAR info := MODBUSR(H, RegEnergy+7, UInt16);
VAR unit := GETBITS(info, 0, 8);
VAR factor := SWITCH(unit, 5, 1000, 6, 3600000, 0);
IF GETBITS(info, 8, 8) != 0 OR factor = 0
    ADDERROR(1, "RegEnergy does not point to an energy value (entry type " + TOSTRING(GETBITS(info, 8, 8)) + ", unit code " + TOSTRING(unit) + ") – copy the Register number of this value from the gateway Meter tab");
    RETURN(NaN);
END
RETURN(ROUND(MODBUSR(H, RegEnergy+4, Float) / factor * 10) / 10);
Lettura (modulo)
VAR meterInfo := MODBUSR(H, RegMeter+7, UInt16);
VAR medium := 0;
VAR flags := 0;
IF GETBITS(meterInfo, 8, 8) != 2
    ADDERROR(1, "RegMeter does not point to a meter entry (entry type " + TOSTRING(GETBITS(meterInfo, 8, 8)) + ") – set RegMeter to the start of the meter entry (10 with Modbus multi slave, otherwise the Register number of the meter row in the gateway Meter tab)");
ELSE
    medium := GETBITS(MODBUSR(H, RegMeter+3, UInt16), 0, 8);
    IF medium != 4 AND medium != 10 AND medium != 11 AND medium != 12 AND medium != 13
        ADDWARNING(2, "RegMeter points to a meter with medium code " + TOSTRING(medium) + ", which is not a heat meter – check that RegMeter and SlaveId belong to the heat meter");
    END
    flags := MODBUSR(H, RegMeter+8, UInt16);
    IF GETBIT(flags, 0)
        ADDERROR(3, "The gateway could not read the meter in its last readout – check the M-Bus wiring, the meter address and the meter list of the gateway");
    ELSEIF GETBIT(flags, 1)
        ADDWARNING(4, "Not all meter values were updated in the last gateway readout");
    END
END
Attributi di servizio
Meter serial number
TOSTRING(MODBUSR(H, RegMeter+0, UInt32))
Last meter readout
DATETIME t := NOW();
VAR ts := MODBUSR(H, RegMeter+4, UInt32);
IF(ts = 0, "No readout yet", TOSTRING(ROUND((t.UNIXTIME - ts) / 60)) + " min ago")
Volume acqua di riscaldamento Variabile Solo lettura

Volume cumulato di acqua di riscaldamento passata attraverso il contatore, in m³

Registro: H:RegVolume+4 Float Unità: m³

Volume acqua di riscaldamento

Lettura
VAR info := MODBUSR(H, RegVolume+7, UInt16);
VAR unit := GETBITS(info, 0, 8);
VAR factor := SWITCH(unit, 7, 1, 0);
IF GETBITS(info, 8, 8) != 0 OR factor = 0
    ADDERROR(1, "RegVolume does not point to a volume value in m³ (entry type " + TOSTRING(GETBITS(info, 8, 8)) + ", unit code " + TOSTRING(unit) + ") – copy the Register number of this value from the gateway Meter tab");
    RETURN(NaN);
END
RETURN(ROUND(MODBUSR(H, RegVolume+4, Float) * factor * 1000) / 1000);
Potenza termica Variabile Solo lettura
Registro: H:RegPower+4 Float Unità: kW

Potenza termica

Lettura
VAR info := MODBUSR(H, RegPower+7, UInt16);
VAR unit := GETBITS(info, 0, 8);
VAR factor := SWITCH(unit, 13, 1000, 14, 3600000, 0);
IF GETBITS(info, 8, 8) != 0 OR factor = 0
    ADDERROR(1, "RegPower does not point to a power value (entry type " + TOSTRING(GETBITS(info, 8, 8)) + ", unit code " + TOSTRING(unit) + ") – copy the Register number of this value from the gateway Meter tab");
    RETURN(NaN);
END
RETURN(MODBUSR(H, RegPower+4, Float) / factor);
Portata Variabile Solo lettura
Registro: H:RegFlow+4 Float Unità: m³/h

Portata

Lettura
VAR info := MODBUSR(H, RegFlow+7, UInt16);
VAR unit := GETBITS(info, 0, 8);
VAR factor := SWITCH(unit, 15, 1, 16, 60, 17, 3600, 0);
IF GETBITS(info, 8, 8) != 0 OR factor = 0
    ADDERROR(1, "RegFlow does not point to a volume flow value (entry type " + TOSTRING(GETBITS(info, 8, 8)) + ", unit code " + TOSTRING(unit) + ") – copy the Register number of this value from the gateway Meter tab");
    RETURN(NaN);
END
RETURN(MODBUSR(H, RegFlow+4, Float) * factor);
Temperatura di mandata Sensore di temperatura Solo lettura

Temperatura di mandata del circuito di riscaldamento misurata dal contatore

Registro: H:RegFlowTemp+4 Float Unità: °C

Temperatura di mandata

Lettura temperatura
VAR info := MODBUSR(H, RegFlowTemp+7, UInt16);
VAR unit := GETBITS(info, 0, 8);
VAR factor := SWITCH(unit, 19, 1, 0);
IF GETBITS(info, 8, 8) != 0 OR factor = 0
    ADDERROR(1, "RegFlowTemp does not point to a temperature value in °C (entry type " + TOSTRING(GETBITS(info, 8, 8)) + ", unit code " + TOSTRING(unit) + ") – copy the Register number of this value from the gateway Meter tab");
    RETURN(NaN);
END
RETURN(MODBUSR(H, RegFlowTemp+4, Float) * factor);
Temperatura di ritorno Sensore di temperatura Solo lettura

Temperatura di ritorno del circuito di riscaldamento misurata dal contatore

Registro: H:RegReturnTemp+4 Float Unità: °C

Temperatura di ritorno

Lettura temperatura
VAR info := MODBUSR(H, RegReturnTemp+7, UInt16);
VAR unit := GETBITS(info, 0, 8);
VAR factor := SWITCH(unit, 19, 1, 0);
IF GETBITS(info, 8, 8) != 0 OR factor = 0
    ADDERROR(1, "RegReturnTemp does not point to a temperature value in °C (entry type " + TOSTRING(GETBITS(info, 8, 8)) + ", unit code " + TOSTRING(unit) + ") – copy the Register number of this value from the gateway Meter tab");
    RETURN(NaN);
END
RETURN(MODBUSR(H, RegReturnTemp+4, Float) * factor);
Connessione: Modbus TCP • Slave ID: $[SlaveId]
Possibili miglioramenti (6)
  • H:RegX+0 … H:RegX+3, H:RegX+6 Unscaled 64-bit meter value with scaling factor — The manual prefers the INT64 value with its power-of-ten scaling factor for exact billing; the template reads the FLOAT32 value (about 7 significant digits).
  • value block with unit K (code 20) Temperature difference — Many heat meters also send the temperature difference between flow and return; it would be one more value block.
  • second energy value block (combined heat/cooling meter, medium 13) Cooling energy — A combined heat/cooling meter sends a separate cooling energy value; the template reads one energy value.
  • value blocks with a storage number Historic meter values — Stored values such as the reading on the billing date appear as further value rows in the Meter tab.
  • H:RegX+8 Meter value timestamp — UNIX time the meter provides for each value (0 if none); the template uses the readout time of the meter entry instead.
  • H:0 … H:9 (slave 255) Gateway device entry — Serial number, software version and system time of the gateway itself.

Fonti

  • solvimus MBUS-GEM User manual v1.31 (Modbus TCP server, network configuration)
  • solvimus MBUS-GEM datasheets (MBUS-GE20M/80M and MBUS-GE125M/250M/500M)

Hai trovato un problema con questo template?

Dicci cosa non funziona, cosa manca o come dovrebbe comportarsi il template. Il tuo feedback ci aiuta a mantenere il catalogo accurato.

Community — non revisionato

Vuoi usarlo nel tuo TapHome Core?

Apri questo template nel Customer Portal per applicarlo a una delle tue case, o crea una proposta di modifica e inviala al catalogo.

Apri nel portale