TapHome

solvimus MBUS-GEM – M-Bus-Wärmezähler

Modbus TCP
Eingereicht von
Zuletzt aktualisiert: 11. 2026
solvimus MBUS-GEM – M-Bus-Wärmezähler

TapHome hat keine eigene M-Bus-Schnittstelle. Wärmezähler mit drahtgebundenem M-Bus (EN 13757) werden über ein Gateway angeschlossen, das M-Bus in Modbus umsetzt, und TapHome liest sie dann als Modbus-TCP-Geräte. Diese Community-Vorlage nutzt das Gateway solvimus MBUS-GEM (MBUS-GE20M, MBUS-GE80M, MBUS-GE125M, MBUS-GE250M, MBUS-GE500M): Das Gateway liest die Zähler an seinem M-Bus und stellt ihre Werte als Modbus-TCP-Server auf Port 502 bereit.

Die Vorlage liest einen Wärmezähler (oder einen kombinierten Wärme- und Kältezähler): Wärmeenergie in kWh, Heizwasservolumen, Wärmeleistung, Volumenstrom sowie Vorlauf- und Rücklauftemperatur. Ein importiertes Modul steht für einen Zähler; für jeden weiteren Zähler wird die Vorlage erneut importiert. Die Wärmeenergie ist eine einfache Variable, kein Stromzähler, daher rechnet TapHome sie nie zum Stromverbrauch.

Community-Vorlage — mit TapHome an einem Gateway noch nicht getestet. Die Vorlage wurde nach dem Benutzerhandbuch des MBUS-GEM erstellt und lief weder gegen ein Gateway noch gegen einen Wärmezähler oder einen Simulator. Ihre Registernummern sind Platzhalter, die durch die Nummern ersetzt werden müssen, die das Gateway für Ihren Zähler anzeigt (siehe Konfiguration). Rückmeldungen aus der Praxis sind willkommen. Laden Sie das XML auf dieser Seite herunter oder holen Sie es aus dem TapHome-Portal: solvimus MBUS-GEM – M-Bus heat meter — Community-Vorlage, und importieren Sie es als neues Modul.

Was Sie brauchen

  • Gateway solvimus MBUS-GEM — MBUS-GE20M (20 Lasteinheiten), MBUS-GE80M (80), MBUS-GE125M (125), MBUS-GE250M (250) oder MBUS-GE500M (500). Eine Lasteinheit entspricht meist einem Zähler.
  • Einen Wärmezähler mit drahtgebundenem M-Bus (EN 13757) am M-Bus des Gateways, oder einen kombinierten Wärme- und Kältezähler.
  • Das Gateway und den TapHome Core im selben lokalen Netzwerk.

Hardware-Anschluss

Das MBUS-GEM wird auf eine 35-mm-Hutschiene montiert. Die M-Bus-Leitungen der Zähler gehen an die M-Bus-Schraubklemmen des Gateways, das Netzwerk an seinen RJ45-Ethernet-Port (10/100 Mbit/s). Das Gateway braucht eine externe Gleichspannungsversorgung: 21,6–24,5 V DC für MBUS-GE20M und MBUS-GE80M, 12–36 V DC für MBUS-GE125M, MBUS-GE250M und MBUS-GE500M. Es startet von selbst, sobald die Versorgung angeschlossen ist.

Konfiguration

Netzwerkadresse des Gateways

Das MBUS-GEM wird mit der statischen IP-Adresse 192.168.1.101 ausgeliefert (Subnetzmaske 255.255.255.0, Standardgateway 192.168.1.254). Seine Konfigurationswebseite öffnet sich unter http://192.168.1.101/; bei der ersten Anmeldung muss der Administrator das Passwort ändern. Das solvimus-Tool Netdiscover findet das Gateway im Netzwerk und ändert seine IP-Adresse, Subnetzmaske und sein Standardgateway oder schaltet es auf DHCP um. Mit DHCP findet man die dem Gateway zugewiesene Adresse im DHCP-Server anhand seiner MAC-Adresse, die auch Netdiscover anzeigt. Ohne DHCP-Server wählt das Gateway eine Adresse aus 169.254.x.x.

Die Vorlage spricht das Gateway über seine IP-Adresse an; geben Sie ihm daher eine statische Adresse oder reservieren Sie seine Adresse im DHCP-Server.

Einstellungen des Gateways

Auf der Konfigurationswebseite, Tab Server:

  1. Modbus mode auf Modbus TCP stellen und Modbus port auf 502 lassen.
  2. Modbus float only ausgeschaltet lassen. Dieser Modus entfernt die Typ- und Einheitenfelder, die die Vorlage prüft.
  3. Modbus swap ausgeschaltet lassen. Die Vorlage erwartet die Standard-Wortreihenfolge (höchstwertiges Wort zuerst).
  4. Modbus multi slave einschalten (empfohlen). Jeder Zähler wird dann ein eigener virtueller Modbus-Slave mit eigener Adresse (1–247), und die Registernummerierung beginnt für jeden Zähler neu, sodass Zähler desselben Typs dieselben Registernummern bekommen.

Nach dem Ein- oder Ausschalten von multi slave müssen die Adressen im Tab Meter neu vergeben werden (Kontextmenü Allocate).

Zählerliste und Auslesezyklus

Der Wärmezähler muss in der Zählerliste des Gateways stehen (Tab Meter), am M-Bus gesucht oder von Hand angelegt. Das Gateway liest die Zähler unabhängig von Modbus-Anfragen, im Readout cycle im Tab Configuration oder im Cycle (in Sekunden) des einzelnen Zählers im Tab Meter. Diese Einstellungen bestimmen, wie aktuell die Werte in TapHome sind. Manche batteriebetriebenen M-Bus-Zähler erlauben nur eine begrenzte Zahl von Auslesungen pro Tag — prüfen Sie das Datenblatt des Zählers, bevor Sie einen kurzen Zyklus wählen.

Einstellungen der Vorlage nach dem Import

Das Gateway hat keine feste Registertabelle. Es gibt dem Zählereintrag und jedem Zählerwert einen eigenen Block von 10 Holding-Registern und zeigt den Beginn jedes Blocks in der Spalte Register im Tab Meter. Die Reihenfolge der Werte folgt der Reihenfolge, in der der Zähler seine M-Bus-Datensätze sendet, und hängt damit vom Zählermodell ab.

EinstellungWas eintragen
IP-AdresseAdresse des Gateways
SlaveIdMit multi slave: die Zahl in der Spalte Register der Zählerzeile. Ohne multi slave: 255
RegMeterMit multi slave: 10 (der Zählereintrag beginnt in jedem virtuellen Slave bei 10). Ohne multi slave: die Zahl in der Spalte Register der Zählerzeile
RegEnergy, RegVolume, RegPower, RegFlow, RegFlowTemp, RegReturnTempDie Zahl in der Spalte Register der passenden Wertzeile. Welche Zeile welche ist, zeigen die Spalten Description und Unit im Tab Meter

IP-Adresse und SlaveId werden beim Import abgefragt; die sieben Reg…-Werte sind Modulvariablen. Ihre Standardwerte (10, 20, 30 … 70) sind Platzhalter: 10 und 20 passen zum Testmodus des Gateways, die übrigen gehen einfach in Schritten von 10 weiter. Überschreiben Sie sie immer.

Jedes Gerät prüft vor der Anzeige eines Werts den Eintragstyp und die Einheit seines Blocks. Eine falsche Nummer erzeugt am Gerät einen Fehler, der die Modulvariable nennt, zum Beispiel RegPower does not point to a power value … – copy the Register number of this value from the gateway Meter tab.

Verbindungstest

Ist im Tab Server Modbus test eingeschaltet, liefert das Gateway statische Testdaten: den Zählereintrag bei Register 10 und einen Energiewert von 1234,5678 Wh bei Register 20. Mit den Standard-Modulvariablen zeigt Wärmeenergie dann 1,2 kWh mit einer Warnung, dass das Medium des Testzählers keine Wärme ist (der Testzähler ist ein Stromzähler). Das beweist, dass IP-Adresse, Port, Slave-Adresse, Registernummern und Wortreihenfolge stimmen. Die übrigen Geräte melden Fehler, weil die Testdaten keine weiteren Werte haben. Schalten Sie den Testmodus danach aus.

Gerätefunktionen

GerätEinheitWas es zeigt
WärmeenergiekWhKumulierte Wärmeenergie, umgerechnet aus Wh oder J und auf 0,1 kWh gerundet
Heizwasservolumenm³Kumuliertes Volumen des Heizwassers
WärmeleistungkWAktuelle Wärmeleistung, umgerechnet aus W oder J/h
Volumenstromm³/hAktueller Durchfluss, umgerechnet aus m³/min oder m³/s, wenn der Zähler diese Einheiten sendet
Vorlauftemperatur°CVorlauftemperatur des Heizkreises
Rücklauftemperatur°CRücklauftemperatur des Heizkreises

Zählerstatus

Wärmeenergie überwacht auch den Zähler selbst. Sie zeigt einen Fehler, wenn RegMeter nicht auf einen Zählereintrag zeigt oder wenn das Gateway den Zähler bei der letzten Auslesung nicht lesen konnte, und eine Warnung, wenn nicht alle Werte aktualisiert wurden oder wenn das Medium des Zählers weder Wärme noch Kälte ist. Sie hat zwei Serviceattribute:

ServiceattributBeschreibung
Seriennummer des ZählersSeriennummer des Zählers, um zu prüfen, dass das Modul den richtigen Zähler liest
Letzte ZählerauslesungMinuten seit der letzten Auslesung des Zählers durch das Gateway

Alle Werte ändern sich nur bei jeder Auslesung des Gateways; die Geräte fragen das Gateway alle 15 s ab.

Fehlerbehebung

Keine Kommunikation

Prüfen Sie, dass Modbus im Tab Server aktiviert ist, dass der Port auf beiden Seiten 502 ist und dass keine Firewall ihn blockiert. TapHome und das Gateway müssen im selben Subnetz liegen oder eine funktionierende Route haben; ein Ping auf das Gateway hilft. Nutzen Sie dann den oben beschriebenen Verbindungstest.

Fehler, der eine Modulvariable nennt

Die Zahl in dieser Variable zeigt auf einen Block anderen Typs oder anderer Einheit. Kopieren Sie die Register-Nummer erneut aus dem Tab Meter; prüfen Sie bei multi slave auch SlaveId.

Werte ändern sich nicht

Prüfen Sie den Auslesezyklus des Gateways und die Auslesegrenze des Zählers. Die Systemzeit des Gateways muss stimmen (von Hand oder per SNTP gesetzt), sonst ist das Alter der letzten Auslesung falsch.

Kleine Abweichung vom Wert auf der Webseite des Gateways

Die Vorlage liest den Gleitkommawert, der etwa 7 signifikante Stellen hat. Laden Sie den Tab Meter des Gateways vor dem Vergleich neu.

Weitere Modbus-Clients am selben Gateway

Das Gateway bedient bis zu fünf Modbus-TCP-Verbindungen gleichzeitig; wird die Grenze überschritten, schließt es die älteste. Denken Sie daran, wenn ein Gebäudeleitsystem oder ein Display dasselbe Gateway liest.

Verfügbare Geräte

solvimus MBUS-GEM – heat meter Modul
Benutzerdefinierte Variablen
RegMeter (numeric) = 10Beginn des Zählereintrags (Seriennummer, Auslesezeit, Lesestatus) — 10 bei Modbus multi slave, sonst die Zahl aus der Spalte Register in der Zählerzeile im Tab Meter des Gateways
RegEnergy (numeric) = 20Beginn des Energiewerts (Wh oder J) — die Zahl aus der Spalte Register in seiner Zeile im Tab Meter des Gateways
RegVolume (numeric) = 30Beginn des Volumenwerts (m³) — die Zahl aus der Spalte Register in seiner Zeile im Tab Meter des Gateways
RegPower (numeric) = 40Beginn des Leistungswerts (W oder J/h) — die Zahl aus der Spalte Register in seiner Zeile im Tab Meter des Gateways
RegFlow (numeric) = 50Beginn des Volumenstromwerts (m³/h, m³/min oder m³/s) — die Zahl aus der Spalte Register in seiner Zeile im Tab Meter des Gateways
RegFlowTemp (numeric) = 60Beginn des Vorlauftemperaturwerts (°C) — die Zahl aus der Spalte Register in seiner Zeile im Tab Meter des Gateways
RegReturnTemp (numeric) = 70Beginn des Rücklauftemperaturwerts (°C) — die Zahl aus der Spalte Register in seiner Zeile im Tab Meter des Gateways
Wärmeenergie Variable Nur lesen

Kumulierte Wärmeenergie des Zählers in kWh; meldet auch, wenn das Gateway den Zähler nicht lesen konnte oder die Werte nicht aktuell sind

Register: H:RegEnergy+4 Float Einheit: kWh
Serviceattribute
Seriennummer des ZählersSeriennummer des Zählers, um zu prüfen, dass das Modul den richtigen Zähler liest
Letzte ZählerauslesungMinuten seit der letzten Auslesung des Zählers durch das Gateway

Wärmeenergie

Lesen
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);
Lesen (Modul)
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
Serviceattribute
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")
Heizwasservolumen Variable Nur lesen

Kumuliertes Volumen des Heizwassers, das durch den Zähler geflossen ist, in m³

Register: H:RegVolume+4 Float Einheit: m³

Heizwasservolumen

Lesen
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);
Wärmeleistung Variable Nur lesen
Register: H:RegPower+4 Float Einheit: kW

Wärmeleistung

Lesen
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);
Volumenstrom Variable Nur lesen
Register: H:RegFlow+4 Float Einheit: m³/h

Volumenstrom

Lesen
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);
Vorlauftemperatur Temperatursensor Nur lesen

Vorlauftemperatur des Heizkreises, gemessen vom Zähler

Register: H:RegFlowTemp+4 Float Einheit: °C

Vorlauftemperatur

Temperatur lesen
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);
Rücklauftemperatur Temperatursensor Nur lesen

Rücklauftemperatur des Heizkreises, gemessen vom Zähler

Register: H:RegReturnTemp+4 Float Einheit: °C

Rücklauftemperatur

Temperatur lesen
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);
Verbindung: Modbus TCP • Slave ID: $[SlaveId]
Mögliche Verbesserungen (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.

Quellen

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

Haben Sie ein Problem mit dieser Gerätevorlage gefunden?

Sagen Sie uns, was nicht funktioniert, was fehlt oder wie sich die Vorlage verhalten sollte. Ihr Feedback hilft uns, den Katalog genau zu halten.

Community — ungeprüft

Möchtest du das in deinem TapHome Core verwenden?

Öffne diese Vorlage im Kundenportal, um sie auf eine deiner Wohnungen anzuwenden, oder entwirf eine Anpassung und reiche sie an den Katalog ein.

Im Portal öffnen