---
title: "Midea M-Thermal Heat Pump"
description: "Midea M-Thermal A Series Split R32 heat pump with Modbus RTU over RS-485. Temperature monitoring, heating/DHW control and compressor diagnostics."
url: "https://taphome.com/en/compatibility/midea-heat-pump/"
language: en
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["modbus-rtu","heat-pump","rs485","dhw","hydronic","inverter-compressor"]
  questions: ["How to integrate Midea M-Thermal heat pump with TapHome?","What does the Midea Heat Pump TapHome template control?","How to connect Midea heat pump via RS-485 to TapHome?","How to configure the Modbus slave address on a Midea heat pump?","What temperatures does the Midea heat pump template monitor?","Does the TapHome Midea template work with Hyundai or Concept heat pumps?"]
---

# Midea M-Thermal Heat Pump

Communication: Modbus RTU

- [Midea Official Website](https://www.midea.com)

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 and zone 1 thermostats, temperature sensors, defrost and backup-heater status contacts, cumulative energy counters, 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.

> [!NOTE]
> 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:

| Signal | Direction | Port |
|--------|-----------|------|
| BUS1 (A+) | <-> | H2 |
| BUS2 (B-) | <-> | H1 |

> [!WARNING]
> **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](https://taphome.com/images/compatibility/midea-heat-pump/pcb-layout-p035_hu_6543956e109fc623.jpg)

**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 lines to the wired controller: BUS1 (A+) to H2 and BUS2 (B-) to H1
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

> [!TIP]
> 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 (Heat Pump)** (H:0 bit 1) — enables or disables heat-pump space heating
- **DHW** (H:0 bit 2) — enables or disables the domestic hot water function

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

Disinfection of the DHW tank is exposed twice: **Disinfection Status** reads H:5 bit 4 as a read-only contact, and a **Disinfection** switch is listed alongside it.

> [!WARNING]
> The Disinfection switch carries no read or write formula in the current template — it is displayed in the app but does not start or stop the disinfection cycle. Use Disinfection Status to see whether the cycle is running.

### Status contacts

Three read-only contacts expose bits of the heat pump status words:

- **Defrosting** (H:128 bit 1) — the outdoor unit is running a defrost cycle
- **IBH1 Immersion Heater (3 kW)** (H:129 bit 0) — the internal 3 kW backup immersion heater is energised
- **SV1 3-Way Valve** (H:129 bit 4) — the SV1 valve diverts heating water to the DHW tank coil

### 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.

### Zone 1 thermostat

**Zone 1 Water Temperature** reads and writes the low byte of H:2, the target water temperature of the zone 1 heating circuit. The register packs two values into one word, so the template writes the low byte with SETBYTE and leaves the high byte untouched. There is no separate current-temperature register — the setpoint byte is read back as the current value.

### Temperature monitoring

The template provides six 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
- **DHW Temperature Sensor** (H:115) — domestic hot water tank temperature (T5 probe) as a plain read-only sensor, the same probe the DHW thermostat reads

### 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)

### Energy counters

- **Total Electricity Consumption** (H:144) — cumulative electricity consumed by the heat pump in kWh
- **Heat Production** (H:146) — cumulative heat energy delivered by the heat pump in kWh

> [!NOTE]
> Both counters are documented in the community register map as Int32 values spanning two registers (H:143–H:144 and H:145–H:146). The template reads the low word only, so the readings wrap at 32767 kWh.

### 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 one service attribute:

- **Software Version** (H:130) — heat pump firmware version number

### 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), target compressor frequency and the remaining bits of the status words (H:128, H:129) are also available. IBH1, IBH2 and TBH power settings can be configured. These can be added in a future template update.

> [!TIP]
> 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, H2, H3, Ed, HA, EA 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

|                  |                                                         |
|------------------|---------------------------------------------------------|
| Software Version | reads H:130 (UInt16); heat pump firmware version number |
| Software version |                                                         |

Calculated Water Temperature Temperature Sensor Read-only

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

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

Capacity Variable Read-only

Current heat pump capacity output as a percentage

Register: H:140 Int16 numeric

Total Electricity Consumption Electricity Meter Read-only

Cumulative electricity consumed by the heat pump in kWh (H:144)

Register: H:144 Int16 Unit: kWh numeric

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

Compressor Operating Time Variable Read-only

Cumulative compressor run time in hours

Register: H:122 Int16 Unit: h numeric

DC Bus Current Variable Read-only

Inverter DC bus current

Register: H:133 Int16 Unit: A numeric

DC Bus Voltage Variable Read-only

Inverter DC bus voltage — raw value multiplied by 10

Register: H:134 Int16 Unit: V numeric

Defrosting Reed Contact Read-only

Shows whether the outdoor unit is running a defrost cycle (H:128 bit 1)

Register: H:128 Bool (bit 1) bitfield

Disinfection Status Reed Contact Read-only

Shows whether the anti-legionella disinfection cycle is running (H:5 bit 4)

Register: H:5 Bool (bit 4) bitfield

Disinfection Switch

Anti-legionella disinfection cycle for the DHW tank

Bool bitfield

Values / States: ON · OFF

Compressor Frequency Variable Read-only

Register: H:100 Int16 Unit: Hz numeric

IBH1 Immersion Heater (3 kW) Reed Contact Read-only

Shows whether the 3 kW internal backup immersion heater is energised (H:129 bit 0)

Register: H:129 Bool (bit 0) bitfield

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

Heating (Heat Pump) Switch

Enables or disables heat-pump space heating

Register: H:0 → H:0 Bool (bit 1) bitfield

Values / States: ${general\_yes} · ${general\_no}

Fan Speed Variable Read-only

Outdoor unit fan speed in RPM

Register: H:102 Int16 Unit: RPM numeric

Outdoor Unit Current Variable Read-only

Register: H:118 Int16 Unit: A numeric

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 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 Voltage Variable Read-only

Register: H:119 Int16 Unit: V numeric

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

Heat Production Electricity Meter Read-only

Cumulative heat energy delivered by the heat pump in kWh (H:146)

Register: H:146 Int16 Unit: kWh numeric

Heat Pump Mode Multi-value Switch

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

Register: H:1 → H:1 Int16 numeric

Values / States: Auto · Auto · Chladenie · Kurenie

SV1 3-Way Valve Reed Contact Read-only

Shows whether the SV1 valve diverts heating water to the DHW tank (H:129 bit 4)

Register: H:129 Bool (bit 4) bitfield

DHW Temperature Sensor Temperature Sensor Read-only

Domestic hot water tank temperature as a read-only sensor — T5 probe (H:115)

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

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 Switch

Enables or disables the domestic hot water function

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

Values / States: ON · OFF

Outdoor Temperature Temperature Sensor Read-only

Outdoor ambient temperature — T4 sensor (H:107)

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

Water Flow Variable Read-only

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

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

Zone 1 Water Temperature Thermostat

Target water temperature for the zone 1 heating circuit — low byte of H:2

Register: H:2 (low byte) → H:2 (low byte) Int16 (low byte) Unit: °C packed-byte

**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: &gt;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 — remaining bits — System status bit field. Bit 1 is implemented as the Defrosting contact; the other status bits are not exposed
- H:129 Load Output — remaining bits — Load output bit field. Bit 0 is implemented as the IBH1 immersion heater contact and bit 4 as the SV1 3-way valve contact; the other load bits are not exposed
- H:132 Target Frequency — Requested compressor speed — useful to compare against actual frequency (H:100)
- H:143 (high word) Electricity Consumption — high word — The counter is Int32 across H:143–H:144. The template implements the low word only (Total Electricity Consumption); the high word is not read, so readings wrap at 32767 kWh
- H:145 (high word) Power Output — high word — The counter is Int32 across H:145–H:146. The template implements the low word only (Heat Production); the high word is not read, so readings wrap at 32767 kWh
- 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

- Midea M-Thermal R32/R290 Quick Start Guide (Modbus RTU)
  
  [planetdevices.com](https://planetdevices.com/wp-content/uploads/2024/06/Midea_M_Thermal_Quick_Start_Guide_V02.pdf) 2026-03-18
  
  [PDF](https://taphome.com/compatibility/devices/midea-heat-pump/manufacturer/m-thermal-quick-start-guide.pdf)
- Midea M-Thermal A Series Split R32 Service Manual
  
  [www.midea.com.ua](https://www.midea.com.ua/sites/default/files/downloadables-documents/pdf/sm-midea-series-split-m-thermal-heat-pump-20200424-v31.pdf) 2026-03-18
  
  [PDF](https://taphome.com/compatibility/devices/midea-heat-pump/manufacturer/m-thermal-service-manual.pdf)

## Related Documentation

- [Modbus Integration](https://taphome.com/en/compatibility/modbus-guide/)
- [Modbus](https://taphome.com/en/docs/integration/modbus/)
- [Simple configuration using templates](https://taphome.com/en/docs/integration/modbus/templates/)
- [Modbus scripts and prefetch](https://taphome.com/en/docs/script/modbus-scripts/)
- [Modbus functions](https://taphome.com/en/docs/script/modbus/)
- [Modbus data types](https://taphome.com/en/docs/script/modbus-data-types/)

