TapHome

solvimus MBUS-GEM – ciepłomierz M-Bus

Modbus TCP
Dodane przez
Ostatnia aktualizacja: 11. 2026
solvimus MBUS-GEM – ciepłomierz M-Bus

TapHome nie ma własnego interfejsu M-Bus. Ciepłomierze z przewodowym M-Bus (EN 13757) podłącza się przez bramkę, która zamienia M-Bus na Modbus, a TapHome odczytuje je wtedy jako urządzenia Modbus TCP. Ten szablon społeczności korzysta z bramki solvimus MBUS-GEM (MBUS-GE20M, MBUS-GE80M, MBUS-GE125M, MBUS-GE250M, MBUS-GE500M): bramka odczytuje liczniki na swoim M-Bus i udostępnia ich wartości jako serwer Modbus TCP na porcie 502.

Szablon odczytuje jeden ciepłomierz (lub jeden łączony licznik ciepła i chłodu): energię cieplną w kWh, objętość wody grzewczej, moc cieplną, przepływ oraz temperaturę zasilania i powrotu. Jeden zaimportowany moduł to jeden licznik; dla każdego kolejnego licznika szablon importuje się ponownie. Energia cieplna jest zwykłą zmienną, a nie licznikiem energii elektrycznej, więc TapHome nigdy nie wlicza jej do zużycia prądu.

Szablon społeczności — jeszcze nie przetestowany z TapHome na bramce. Szablon powstał na podstawie instrukcji obsługi MBUS-GEM i nie działał z bramką, ciepłomierzem ani symulatorem. Jego numery rejestrów są zastępcze i trzeba je zastąpić numerami, które bramka pokazuje dla Twojego licznika (zob. Konfiguracja). Opinie z praktyki są mile widziane. Pobierz XML z tej strony lub z portalu TapHome: solvimus MBUS-GEM – M-Bus heat meter — szablon społeczności, i zaimportuj go jako nowy moduł.

Czego potrzebujesz

  • Bramka solvimus MBUS-GEM — MBUS-GE20M (20 obciążeń jednostkowych), MBUS-GE80M (80), MBUS-GE125M (125), MBUS-GE250M (250) lub MBUS-GE500M (500). Jedno obciążenie jednostkowe to zwykle jeden licznik.
  • Ciepłomierz z przewodowym M-Bus (EN 13757) na M-Bus bramki, lub łączony licznik ciepła i chłodu.
  • Bramka i TapHome Core w tej samej sieci lokalnej.

Podłączenie sprzętu

MBUS-GEM montuje się na szynie DIN 35 mm. Linie M-Bus liczników idą do zacisków śrubowych M-Bus bramki, a sieć do jej portu Ethernet RJ45 (10/100 Mbit/s). Bramka potrzebuje zewnętrznego zasilania prądem stałym: 21,6–24,5 V DC dla MBUS-GE20M i MBUS-GE80M, 12–36 V DC dla MBUS-GE125M, MBUS-GE250M i MBUS-GE500M. Uruchamia się sama po podłączeniu zasilania.

Konfiguracja

Adres sieciowy bramki

MBUS-GEM jest dostarczana ze statycznym adresem IP 192.168.1.101 (maska podsieci 255.255.255.0, brama domyślna 192.168.1.254). Jej strona konfiguracyjna otwiera się pod http://192.168.1.101/; przy pierwszym logowaniu administrator musi zmienić hasło. Narzędzie solvimus Netdiscover znajduje bramkę w sieci i zmienia jej adres IP, maskę podsieci i bramę domyślną albo przełącza ją na DHCP. Przy DHCP adres przydzielony bramce znajduje się w serwerze DHCP po jej adresie MAC, który pokazuje też Netdiscover. Bez serwera DHCP bramka wybiera adres z zakresu 169.254.x.x.

Szablon łączy się z bramką po jej adresie IP, więc nadaj jej adres statyczny lub zarezerwuj jej adres w serwerze DHCP.

Ustawienia bramki

Na stronie konfiguracyjnej, karta Server:

  1. Ustaw Modbus mode na Modbus TCP i pozostaw Modbus port na 502.
  2. Pozostaw Modbus float only wyłączone. Ten tryb usuwa pola typu i jednostki, które szablon sprawdza.
  3. Pozostaw Modbus swap wyłączone. Szablon oczekuje domyślnej kolejności słów (najbardziej znaczące słowo pierwsze).
  4. Włącz Modbus multi slave (zalecane). Każdy licznik staje się wtedy osobnym wirtualnym slave Modbus z własnym adresem (1–247), a numeracja rejestrów zaczyna się od nowa dla każdego licznika, więc liczniki tego samego typu dostają te same numery rejestrów.

Po włączeniu lub wyłączeniu multi slave adresy na karcie Meter trzeba przydzielić ponownie (menu kontekstowe Allocate).

Lista liczników i cykl odczytu

Ciepłomierz musi być na liście liczników bramki (karta Meter), wyszukany na M-Bus lub utworzony ręcznie. Bramka odczytuje liczniki niezależnie od zapytań Modbus, w cyklu Readout cycle na karcie Configuration lub w cyklu Cycle (w sekundach) pojedynczego licznika na karcie Meter. Te ustawienia decydują, jak świeże są wartości w TapHome. Niektóre bateryjne liczniki M-Bus pozwalają tylko na ograniczoną liczbę odczytów dziennie — przed wyborem krótkiego cyklu sprawdź kartę katalogową licznika.

Ustawienia szablonu po imporcie

Bramka nie ma stałej tabeli rejestrów. Wpisowi licznika i każdej wartości licznika przydziela własny blok 10 rejestrów holding i pokazuje początek każdego bloku w kolumnie Register na karcie Meter. Kolejność wartości odpowiada kolejności, w jakiej licznik wysyła swoje rekordy M-Bus, więc zależy od modelu licznika.

UstawienieCo wpisać
Adres IPAdres bramki
SlaveIdZ multi slave: liczba z kolumny Register w wierszu licznika. Bez multi slave: 255
RegMeterZ multi slave: 10 (wpis licznika zaczyna się w każdym wirtualnym slave od 10). Bez multi slave: liczba z kolumny Register w wierszu licznika
RegEnergy, RegVolume, RegPower, RegFlow, RegFlowTemp, RegReturnTempLiczba z kolumny Register w wierszu odpowiedniej wartości. Który wiersz jest który, pokazują kolumny Description i Unit na karcie Meter

O adres IP i SlaveId szablon pyta podczas importu; siedem wartości Reg… to zmienne modułu. Ich wartości domyślne (10, 20, 30 … 70) są zastępcze: 10 i 20 odpowiadają trybowi testowemu bramki, pozostałe po prostu idą dalej co 10. Zawsze je nadpisz.

Każde urządzenie przed pokazaniem wartości sprawdza typ wpisu i jednostkę swojego bloku. Błędny numer wywołuje na urządzeniu błąd, który wymienia zmienną modułu, na przykład RegPower does not point to a power value … – copy the Register number of this value from the gateway Meter tab.

Sprawdzenie połączenia

Gdy na karcie Server włączony jest Modbus test, bramka udostępnia statyczne dane testowe: wpis licznika w rejestrze 10 i wartość energii 1234,5678 Wh w rejestrze 20. Z domyślnymi zmiennymi modułu Energia cieplna pokazuje wtedy 1,2 kWh z ostrzeżeniem, że medium licznika testowego nie jest ciepło (licznik testowy jest licznikiem energii elektrycznej). To dowodzi, że adres IP, port, adres slave, numery rejestrów i kolejność słów są poprawne. Pozostałe urządzenia zgłaszają błędy, ponieważ dane testowe nie mają kolejnych wartości. Następnie wyłącz tryb testowy.

Możliwości urządzenia

UrządzenieJednostkaCo pokazuje
Energia cieplnakWhSkumulowana energia cieplna, przeliczona z Wh lub J i zaokrąglona do 0,1 kWh
Objętość wody grzewczejm³Skumulowana objętość wody grzewczej
Moc cieplnakWBieżąca moc cieplna, przeliczona z W lub J/h
Przepływm³/hBieżący przepływ, przeliczony z m³/min lub m³/s, gdy licznik wysyła te jednostki
Temperatura zasilania°CTemperatura zasilania obiegu grzewczego
Temperatura powrotu°CTemperatura powrotu obiegu grzewczego

Stan licznika

Energia cieplna pilnuje też samego licznika. Pokazuje błąd, gdy RegMeter nie wskazuje wpisu licznika lub gdy bramka przy ostatnim odczycie nie odczytała licznika, a ostrzeżenie, gdy nie wszystkie wartości zostały zaktualizowane lub gdy medium licznika nie jest ani ciepłem, ani chłodem. Ma dwa atrybuty serwisowe:

Atrybut serwisowyOpis
Numer seryjny licznikaNumer seryjny licznika, aby sprawdzić, że moduł odczytuje właściwy licznik
Ostatni odczyt licznikaMinuty od ostatniego odczytu licznika przez bramkę

Wszystkie wartości zmieniają się tylko przy każdym odczycie bramki; urządzenia odpytują bramkę co 15 s.

Rozwiązywanie problemów

Brak komunikacji

Sprawdź, czy Modbus jest włączony na karcie Server, czy port po obu stronach to 502 i czy nie blokuje go zapora. TapHome i bramka muszą być w tej samej podsieci lub mieć działającą trasę; pomaga ping do bramki. Następnie użyj opisanego wyżej sprawdzenia połączenia.

Błąd wymieniający zmienną modułu

Liczba w tej zmiennej wskazuje blok innego typu lub innej jednostki. Skopiuj ponownie numer Register z karty Meter; przy multi slave sprawdź też SlaveId.

Wartości się nie zmieniają

Sprawdź cykl odczytu bramki i limit odczytów licznika. Czas systemowy bramki musi być poprawny (ustawiony ręcznie lub przez SNTP), w przeciwnym razie wiek ostatniego odczytu jest błędny.

Mała różnica względem wartości na stronie bramki

Szablon odczytuje wartość zmiennoprzecinkową, która ma około 7 cyfr znaczących. Przed porównaniem odśwież kartę Meter bramki.

Inni klienci Modbus na tej samej bramce

Bramka obsługuje jednocześnie do pięciu połączeń Modbus TCP; po przekroczeniu limitu zamyka najstarsze. Pamiętaj o tym, gdy tę samą bramkę odczytuje też system zarządzania budynkiem lub wyświetlacz.

Dostępne urządzenia

solvimus MBUS-GEM – heat meter Moduł
Zmienne niestandardowe
RegMeter (numeric) = 10Początek wpisu licznika (numer seryjny, czas odczytu, stan odczytu) — 10 przy Modbus multi slave, w przeciwnym razie liczba z kolumny Register w wierszu licznika na karcie Meter bramki
RegEnergy (numeric) = 20Początek wartości energii (Wh lub J) — liczba z kolumny Register w jej wierszu na karcie Meter bramki
RegVolume (numeric) = 30Początek wartości objętości (m³) — liczba z kolumny Register w jej wierszu na karcie Meter bramki
RegPower (numeric) = 40Początek wartości mocy (W lub J/h) — liczba z kolumny Register w jej wierszu na karcie Meter bramki
RegFlow (numeric) = 50Początek wartości przepływu (m³/h, m³/min lub m³/s) — liczba z kolumny Register w jej wierszu na karcie Meter bramki
RegFlowTemp (numeric) = 60Początek wartości temperatury zasilania (°C) — liczba z kolumny Register w jej wierszu na karcie Meter bramki
RegReturnTemp (numeric) = 70Początek wartości temperatury powrotu (°C) — liczba z kolumny Register w jej wierszu na karcie Meter bramki
Energia cieplna Zmienna Tylko do odczytu

Skumulowana energia cieplna licznika w kWh; zgłasza też, gdy bramka nie odczytała licznika lub wartości nie są aktualne

Rejestr: H:RegEnergy+4 Float Jednostka: kWh
Atrybuty serwisowe
Numer seryjny licznikaNumer seryjny licznika, aby sprawdzić, że moduł odczytuje właściwy licznik
Ostatni odczyt licznikaMinuty od ostatniego odczytu licznika przez bramkę

Energia cieplna

Odczyt
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);
Odczyt (moduł)
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
Atrybuty serwisowe
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")
Objętość wody grzewczej Zmienna Tylko do odczytu

Skumulowana objętość wody grzewczej, która przepłynęła przez licznik, w m³

Rejestr: H:RegVolume+4 Float Jednostka: m³

Objętość wody grzewczej

Odczyt
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);
Moc cieplna Zmienna Tylko do odczytu
Rejestr: H:RegPower+4 Float Jednostka: kW

Moc cieplna

Odczyt
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);
Przepływ Zmienna Tylko do odczytu
Rejestr: H:RegFlow+4 Float Jednostka: m³/h

Przepływ

Odczyt
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 zasilania Czujnik temperatury Tylko do odczytu

Temperatura zasilania obiegu grzewczego mierzona przez licznik

Rejestr: H:RegFlowTemp+4 Float Jednostka: °C

Temperatura zasilania

Odczyt temperatury
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 powrotu Czujnik temperatury Tylko do odczytu

Temperatura powrotu obiegu grzewczego mierzona przez licznik

Rejestr: H:RegReturnTemp+4 Float Jednostka: °C

Temperatura powrotu

Odczyt temperatury
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);
Połączenie: Modbus TCP • Slave ID: $[SlaveId]
Możliwe ulepszenia (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.

Źródła

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

Znalazłeś problem z tym szablonem urządzenia?

Napisz nam, co nie działa, czego brakuje lub jak powinien zachowywać się szablon. Twoja opinia pomaga nam utrzymać katalog dokładnym.

Społeczność — niezweryfikowane

Chcesz tego użyć w swoim TapHome Core?

Otwórz ten szablon w portalu klienta, aby zastosować go w swoim domu, lub zaproponuj modyfikację i wyślij ją z powrotem do katalogu.

Otwórz w portalu