TapHome

Midea M-Thermal Heat Pump

Modbus RTU
Submitted by
Last updated: 03. 2026
Midea M-Thermal Heat Pump

The Midea M-Thermal A Series Split (R32) is an inverter heat pump system consisting of an outdoor unit and a hydronic box. The system communicates with TapHome via Modbus RTU over RS-485 at 9600 baud, exposing holding registers for control and monitoring. The template provides heating and DHW on/off control, operating mode selection, DHW thermostat, temperature sensors, compressor diagnostics and refrigerant pressure monitoring.

The same Modbus register map is used by OEM clones including Hyundai, Concept, Hajdu, Immergas and Clivet Swan heat pumps. The template is compatible with these units when using the same wired controller and hydronic box hardware.

The Modbus register map for this device is community-sourced (Home Assistant community). Register addresses have been verified by multiple users but are not officially documented by Midea.

Hardware connection

RS-485 wiring

The RS-485 Modbus connection is provided through ports H1 and H2 on the wired controller PCB. The wired controller must be connected to the hydraulic module for full Modbus data access.

Connect the RS-485 signal lines:

SignalDirectionPort
BUS1 (A+)<->H2
BUS2 (B-)<->H1

Important — Wired controller required

The wired controller must be connected to the hydronic box for Modbus communication to work. Without the wired controller, registers will not be accessible over RS-485.

Technical specifications
  • Protocol: Modbus RTU Slave, RS-485
  • Baud rate: 9600, no parity, 1 stop bit, 8 data bits
  • Default Slave ID: 1 (rotary switch S3 position 0)
  • Models: MHA-V4W to MHA-V16W (4-16 kW), D2N8-B and D2RN8-B variants
  • Hydronic box: HB-A60/A100/A160/CGN8-B

Configuration

Slave address (S3 rotary switch)

The Modbus slave address is set by rotary switch S3 on the hydronic box main PCB. Position 0 corresponds to slave address 1.

Midea M-Thermal hydronic box main PCB layout with S3 rotary switch

Key components on the hydronic box PCB:

  • S3 (label 2) — Rotary dip switch for Modbus slave address
  • CN14 (label 21) — Communication with the wired controller
  • CN19 (label 20) — Communication between indoor and outdoor unit
  • CN30 (label 22) — Communication with wired controller and internal machine parallel
  • DIS1 (label 3) — Digital display for error codes
Enabling Modbus communication
  1. Remove all power from the heat pump system
  2. Remove the wired controller backplate
  3. Connect the RS-485 A and B signal lines to ports H1 and H2 on the wired controller
  4. Access the hydronic box PCB
  5. Ensure the rotary switch S3 is set to the desired position (position 0 = slave address 1)
  6. Turn on the heat pump system

When configuring the TapHome module, use Modbus RTU with 9600 baud, no parity, 1 stop bit, 8 data bits. The default slave ID is 1 (S3 position 0). If using a Modbus TCP-to-RTU gateway (such as WaveShare), configure the gateway port to 502 and set the slave ID to match the S3 switch position.

Static IP recommendation

If connecting through a Modbus TCP-to-RTU gateway, assign a static IP address or DHCP reservation to the gateway to prevent connectivity issues when the IP address changes.

Device capabilities

Heating and DHW control

The template uses register H:0 as a bit field to control individual functions:

  • Heating (H:0 bit 1) — enables or disables the space heating function
  • DHW (H:0 bit 2) — enables or disables the domestic hot water function
  • Disinfection (H:5 bit 4) — enables the anti-legionella disinfection cycle for the DHW tank

Each function is controlled independently using GETBIT/SETBIT operations, allowing heating and DHW to be toggled without affecting each other.

Operating mode

Heat Pump Mode (H:1) selects the operating mode: Auto (0), Auto (1), Cooling (2), Heating (3), and additional modes (4-9). The template presents this as a multi-value switch.

DHW thermostat

DHW Temperature reads the current DHW tank temperature from H:115 (T5 sensor) and writes the target temperature to H:4. This functions as a thermostat — the current temperature is displayed alongside the setpoint.

Temperature monitoring

The template provides five temperature sensors:

  • Calculated Water Temperature (H:110) — final water outlet temperature (T1 sensor)
  • Weather-Compensated Target Temperature (H:136) — equithermic curve target temperature calculated by the heat pump controller
  • Inlet Water Temperature (H:104) — water entering the heat exchanger (Tw_in sensor)
  • Outlet Water Temperature (H:105) — water leaving the heat exchanger (Tw_out sensor)
  • Outdoor Temperature (H:107) — outdoor ambient temperature (T4 sensor), polled every 1 second
Compressor and performance diagnostics
  • Compressor Frequency (H:100) — current inverter compressor speed in Hz
  • Compressor Operating Time (H:122) — cumulative compressor run time in hours
  • Fan Speed (H:102) — outdoor unit fan speed in RPM (12 speed steps, 200-730 RPM depending on model)
  • Capacity (H:140) — current heat pump capacity output (raw value / 100)
  • Water Flow (H:138) — water flow rate through the hydronic circuit in m³/h (raw value / 100)
Electrical monitoring
  • Outdoor Unit Voltage (H:119) — supply voltage (protection: single phase >=265 V or <=172 V, error code H7)
  • Outdoor Unit Current (H:118) — compressor current draw (protection limits vary by model: 18 A for 4-6 kW, 30 A for 12-16 kW)
  • DC Bus Voltage (H:134) — inverter DC bus voltage (raw value x 10)
  • DC Bus Current (H:133) — inverter DC bus current
Refrigerant pressure
  • Outdoor Unit High Pressure (H:116) — refrigerant high-side pressure in kPa (protection triggers at >4.3 MPa, error code P1)
  • Outdoor Unit Low Pressure (H:117) — refrigerant low-side pressure in kPa (protection triggers at <0.14 MPa, error code P0)
Service diagnostics

The module exposes two service attributes:

  • Software Version (H:130) — heat pump firmware version number
  • Attribute — placeholder service attribute (empty read formula)
Additional capabilities

The Midea M-Thermal system also exposes registers for heating curve selection, forced water heating, forced tank booster heater (TBH) and internal backup heater (IBH1) control, Smart Grid maximum setpoint, and additional temperature sensors including T1S (final water outlet), T3 (air side HX outlet), Tp (discharge pipe), Th (suction pipe), T1, T2 (liquid pipe) and T2B (gas pipe). Fault code readback (H:124), load output percentage, target compressor frequency, system status bits, and cumulative energy counters (electricity consumption and heat output as Int32 across two registers) are also available. IBH1, IBH2 and TBH power settings can be configured. These can be added in a future template update.

The current fault code register (H:124) is not included in the template. To monitor heat pump errors, it can be added as a custom Modbus device in TapHome reading register H0124 as Int16.

Troubleshooting

No Modbus communication
  1. Verify the wired controller is connected to the hydronic box — without it, Modbus registers are not accessible
  2. Check RS-485 signal connections: BUS1 to H2, BUS2 to H1
  3. Confirm TapHome is set to: 9600 baud, no parity, 1 stop bit, 8 data bits
  4. Verify the slave address: check the S3 rotary switch position on the hydronic box PCB (position 0 = address 1)
  5. If using a TCP-to-RTU gateway, verify the gateway is reachable and the serial port settings match
Communication error (H0 error code)

Error code H0 indicates a communication error between the outdoor unit and the hydronic box. Possible causes:

  1. Power supply abnormal — check transformer input (220 V AC) and output (13.5 V AC)
  2. Electromagnetic interference from nearby high-frequency devices — relocate or shield
  3. Communication wires P, Q, E between outdoor unit and hydraulic module are loose or damaged — reconnect
Temperature sensor errors (E3-E9 codes)

Error codes E3, E4, H2, H3, Ed, HA, E5, E6, E9, EA indicate temperature sensor failures:

  1. Check the sensor connection on the corresponding PCB port (see PCB layout diagram)
  2. Measure sensor resistance — if too low, the sensor is short-circuited; if inconsistent with the resistance table, the sensor has failed
  3. If connections are correct and sensor is functional, the PCB may need replacement
Pressure protection errors
  • P0 (low pressure) — suction pressure below 0.14 MPa. Check refrigerant charge, expansion valve operation
  • P1 (high pressure) — discharge pressure above 4.3 MPa. Check condenser airflow, fan operation, refrigerant overcharge
  • P4 (high discharge temperature) — discharge pipe temperature above 115 °C. Check compressor operation, refrigerant levels

Available devices

Midea Heat Pump Module
Service Attributes
Attributeempty read formula — placeholder service attribute with no function
Software Versionreads H:130 (UInt16); heat pump firmware version number

Midea Heat Pump

Service Attributes
Attribute
Software version
MODBUSR(H, 130, UInt16)
Calculated Water Temperature Temperature Sensor Read-only

Final water outlet temperature — T1 sensor (H:110)

Register: H:110 Int16 (Temperature) Unit: °C numeric

Calculated Water Temperature

Read temperature
MODBUSR(H, 110, Int16)
Capacity Variable Read-only

Current heat pump capacity output as a percentage

Register: H:140 Int16 numeric

Capacity

Read
MODBUSR(H, 140, Int16) / 100
Weather-Compensated Target Temperature Temperature Sensor Read-only

Equithermic curve target temperature calculated by the heat pump controller (H:136)

Register: H:136 Int16 (Temperature) Unit: °C numeric

Weather-Compensated Target Temperature

Read temperature
MODBUSR(H, 136, Int16)
Compressor Operating Time Variable Read-only

Cumulative compressor run time in hours

Register: H:122 Int16 Unit: h numeric

Compressor Operating Time

Read
MODBUSR(H, 122, Int16)
DC Bus Current Variable Read-only

Inverter DC bus current

Register: H:133 Int16 Unit: A numeric

DC Bus Current

Read
MODBUSR(H, 133, Int16)
DC Bus Voltage Variable Read-only

Inverter DC bus voltage — raw value multiplied by 10

Register: H:134 Int16 Unit: V numeric

DC Bus Voltage

Read
MODBUSR(H, 134, Int16) *10
Disinfection Switch

Anti-legionella disinfection cycle for the DHW tank

Register: H:5H:5 Bool (bit 4) bitfield

Disinfection

Read switch state
GETBIT(MODBUSR(H, 5, Int16),4)
Write switch state
var reg := MODBUSR(H, 5 , UInt16);
MODBUSW(H, 5 , UInt16, SETBIT(reg,4,St));
Compressor Frequency Variable Read-only
Register: H:100 Int16 Unit: Hz numeric

Compressor Frequency

Read
MODBUSR(H, 100, Int16)
Inlet Water Temperature Temperature Sensor Read-only

Water entering the heat exchanger — Tw_in sensor (H:104)

Register: H:104 Int16 (Temperature) Unit: °C numeric

Inlet Water Temperature

Read temperature
MODBUSR(H, 104, Int16)
Heating Switch

Enables or disables the space heating function

Register: H:0H:0 Bool (bit 1) bitfield
Values / States: ${general_yes} · ${general_no}

Heating

Read switch state
GETBIT(MODBUSR(H, 0, Int16),1)
Write switch state
var reg := MODBUSR(H, 0 , UInt16);
MODBUSW(H, 0 , UInt16, SETBIT(reg,1,St));
Fan Speed Variable Read-only

Outdoor unit fan speed in RPM

Register: H:102 Int16 Unit: RPM numeric

Fan Speed

Read
MODBUSR(H, 102, Int16)
Outdoor Unit Current Variable Read-only
Register: H:118 Int16 Unit: A numeric

Outdoor Unit Current

Read
MODBUSR(H, 118, Int16)
Outdoor Unit High Pressure Variable Read-only

Refrigerant high-side pressure — protection triggers above 4.3 MPa (error code P1)

Register: H:116 Int16 Unit: kPa numeric

Outdoor Unit High Pressure

Read
MODBUSR(H, 116, Int16)
Outdoor Unit Low Pressure Variable Read-only

Refrigerant low-side pressure — protection triggers below 0.14 MPa (error code P0)

Register: H:117 Int16 Unit: kPa numeric

Outdoor Unit Low Pressure

Read
MODBUSR(H, 117, Int16)
Outdoor Unit Voltage Variable Read-only
Register: H:119 Int16 Unit: V numeric

Outdoor Unit Voltage

Read
MODBUSR(H, 119, Int16)
Outlet Water Temperature Temperature Sensor Read-only

Water leaving the heat exchanger — Tw_out sensor (H:105)

Register: H:105 Int16 (Temperature) Unit: °C numeric

Outlet Water Temperature

Read temperature
MODBUSR(H, 105, Int16)
Heat Pump Mode Multi-value Switch

Operating mode selection — Auto, Cooling, Heating and additional modes

Register: H:1H:1 Int16 numeric
Values / States: Auto · Auto · Chladenie · Kurenie

Heat Pump Mode

Read switch state
MODBUSR(H, 1, Int16)
Write switch state
MODBUSW(H, 1, Int16, Mu)
DHW Temperature Thermostat

Domestic hot water tank thermostat — reads current tank temperature, writes target setpoint

Register: H:115 (current), H:4 (setpoint)H:4 Int16 Unit: °C numeric

DHW Temperature

Read temperature
MODBUSR(H, 115, Int16)
Read desired temperature
MODBUSR(H, 4, Int16)
Write desired temperature
MODBUSW(H, 4, Int16, Se)
DHW Switch

Enables or disables the domestic hot water function

Register: H:0H:0 Bool (bit 2) bitfield

DHW

Read switch state
GETBIT(MODBUSR(H, 0, Int16),2)
Write switch state
var reg := MODBUSR(H, 0 , UInt16);
MODBUSW(H, 0, UInt16, SETBIT(reg,2,St));
Outdoor Temperature Temperature Sensor Read-only

Outdoor ambient temperature — T4 sensor (H:107)

Register: H:107 Int16 (Temperature) Unit: °C numeric

Outdoor Temperature

Read temperature
MODBUSR(H, 107, Int16)
Water Flow Variable Read-only

Water flow rate through the hydronic circuit in m³/h

Register: H:138 Int16 Unit: m³/h numeric

Water Flow

Read
MODBUSR(H, 138, Int16) / 100
Connection: Modbus RTU • 9600 baud• 8N1 • Slave ID: $[SlaveId]
Possible improvements (21)
  • H:6 Curve Selection — Heating curve selection — weather-compensated heating curve parameter
  • H:7 Forced Water Heating — Manual water heating trigger — forces heating cycle
  • H:8 Forced TBH — Tank Booster Heater — forces DHW tank electric backup heater on
  • H:9 Forced IBH1 — Internal Backup Heater 1 — forces electric backup heater on
  • H:10 Smart Grid Max Setpoint (t_SG_MAX) — Maximum setpoint for smart grid operation
  • H:11 T1S Temperature — Final water outlet temperature (T1S sensor). H:110 (T1) is now implemented as 'Calculated Water Temperature'
  • H:101 Operating Mode (read) — Current operating mode status readback — different from the control register H:1
  • H:106 T3 Temperature — Air side heat exchanger refrigerant outlet temperature
  • H:108 Tp Temperature (Discharge) — Discharge pipe temperature. Protection: >115°C triggers P4 error
  • H:109 Th Temperature (Suction) — Suction pipe temperature
  • H:112 T2 Temperature (Liquid pipe) — Water side heat exchanger liquid pipe temperature
  • H:113 T2B Temperature (Gas pipe) — Water side heat exchanger gas pipe temperature
  • H:124 Current Fault Code — Active error code — could enable fault monitoring in TapHome
  • H:128 Bit Status 1 — System status bit field
  • H:129 Load Output — Current load percentage output
  • H:132 Target Frequency — Requested compressor speed — useful to compare against actual frequency (H:100)
  • H:143–144 Electricity Consumption — Int32 across 2 registers — cumulative electricity consumption in kWh. Requires 32-bit read support
  • H:145–146 Power Output — Int32 across 2 registers — cumulative heat energy output in kWh. Requires 32-bit read support
  • H:250 IBH1 Power — Internal Backup Heater 1 power setting
  • H:251 IBH2 Power — Internal Backup Heater 2 power setting
  • H:252 TBH Power — Tank Booster Heater power setting

Sources