Midea M-Thermal (wired controller) Modbus register map
Midea / Systemair M-Thermal split heat pumps, through the wired controller Modbus port
- Unofficial
- 76 registers
- Modbus RTU
- Revision 1 · 2026-10-14
Unofficial: Copied from an unofficial source and not tested. Read it as a draft and check a value on the real device before you rely on the rest. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus RTU
- Unit ID
- 16
- Serial
- 9600 8N1 · 9600 baud, 8 data bits, none parity, 1 stop bit
- Byte / word order
- ABCD · bytes big-endian, words high first
- Addresses
- 0-based
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 22 holding registers, 54 input registers
- Revision
- 1 · 2026-10-14
- Added
- ()
- File
- maps/midea/m-thermal.mbmap.json · 12 KB · history
- SHA-256
- a915ccb3ed69a7a476a9b0f71f9f570d14e42c12bec480b9b8aa81b17a83d350
- Manufacturer
- midea.com
Sources and notes
- Heat Pump Modbus Database (Warm Energy Labs) src/midea/modbus_registers.json, MIT licence, Copyright (c) 2025 Warm Energy Labs Ltd
Source: Warm Energy Labs Heat Pump Modbus Database (MIT licence), based on the Systemair M-Thermal operation manual; not tested
- The Modbus address is set with DIP switch S3 on the hydraulic module: 0 gives address 16, 1-15 give addresses 1-15.
- The source lists 100-140 as input registers; check the function code on your controller.
- DC bus voltage is sent in units of 10 V, water flow in 0.01 m³/h and capacity in 0.01 kW (the source writes these as divisors).
- Writing to a heat pump can damage it: check before you write.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| IR | 100 | uint16 | R | Hz | Compressor operating frequency | ||
| IR | 101 | uint16 | R | Actual operating mode | |||
| IR | 102 | uint16 | R | rpm | Fan speed | ||
| IR | 103 | uint16 | R | P | Electronic expansion valve openness | ||
| IR | 104 | int16 | R | °C | Water inlet temperature TW_in | ||
| IR | 105 | int16 | R | °C | Water outlet temperature TW_out | ||
| IR | 106 | int16 | R | °C | Condenser temperature T3 | ||
| IR | 107 | int16 | R | °C | Outdoor ambient temperature T4 | ||
| IR | 108 | int16 | R | °C | Compressor discharge temperature Tp | ||
| IR | 109 | int16 | R | °C | Compressor return air temperature | ||
| IR | 110 | int16 | R | °C | Total water outlet temperature T1 | ||
| IR | 111 | int16 | R | °C | Water outlet temperature after auxiliary heater T1B | ||
| IR | 112 | int16 | R | °C | Refrigerant liquid side temperature T2 | ||
| IR | 113 | int16 | R | °C | Refrigerant gas side temperature T2B | ||
| IR | 114 | int16 | R | °C | Room temperature Ta | ||
| IR | 115 | int16 | R | °C | Water tank temperature T5 | ||
| IR | 116 | uint16 | R | kPa | High pressure value | ||
| IR | 117 | uint16 | R | kPa | Low pressure value | ||
| IR | 118 | uint16 | R | A | Outdoor unit operating current | ||
| IR | 119 | uint16 | R | V | Outdoor unit voltage | ||
| IR | 122 | uint16 | R | h | Compressor operating time | ||
| IR | 124 | uint16 | R | Current fault code | |||
| IR | 128 | uint16 | R | Status bits | |||
| IR | 128 | bool bit 0 | R | ||||
| IR | 128 | bool bit 1 | R | Defrost mode active | |||
| IR | 128 | bool bit 2 | R | Anti-freeze protection active | |||
| IR | 128 | bool bit 3 | R | ||||
| IR | 128 | bool bit 4 | R | ||||
| IR | 128 | bool bit 5 | R | ||||
| IR | 128 | bool bit 6 | R | ||||
| IR | 128 | bool bit 7 | R | ||||
| IR | 128 | bool bit 8 | R | ||||
| IR | 128 | bool bit 10 | R | ||||
| IR | 128 | bool bit 11 | R | ||||
| IR | 129 | uint16 | R | Load output status | |||
| IR | 129 | bool bit 0 | R | ||||
| IR | 129 | bool bit 1 | R | ||||
| IR | 129 | bool bit 2 | R | ||||
| IR | 129 | bool bit 3 | R | ||||
| IR | 129 | bool bit 4 | R | ||||
| IR | 129 | bool bit 6 | R | ||||
| IR | 129 | bool bit 7 | R | ||||
| IR | 129 | bool bit 8 | R | ||||
| IR | 129 | bool bit 9 | R | ||||
| IR | 129 | bool bit 10 | R | ||||
| IR | 129 | bool bit 11 | R | ||||
| IR | 129 | bool bit 12 | R | ||||
| IR | 129 | bool bit 13 | R | ||||
| IR | 129 | bool bit 14 | R | ||||
| IR | 129 | bool bit 15 | R | ||||
| IR | 133 | uint16 | R | A | DC bus current | ||
| IR | 134 | uint16 | R | V | ×10 | DC bus voltage | |
| IR | 138 | uint16 | R | m³/h | ×0.01 | Water flow rate | |
| IR | 140 | uint16 | R | kW | ×0.01 | Heat pump capacity | |
| HR | 0 | uint16 | RW | Power on/off control | |||
| HR | 0 | bool bit 0 | RW | Floor heating on/off | |||
| HR | 0 | bool bit 1 | RW | Zone 1 heating/cooling on/off | |||
| HR | 0 | bool bit 2 | RW | Domestic hot water on/off | |||
| HR | 0 | bool bit 3 | RW | Zone 2 heating/cooling on/off | |||
| HR | 1 | uint16 | RW | Operating mode setting | |||
| HR | 2 | int16 | RW | °C | Water temperature setpoint T1s | ||
| HR | 3 | int16 | RW | °C | Room temperature setpoint Ts | ||
| HR | 4 | int16 | RW | °C | DHW tank temperature setpoint T5s | ||
| HR | 5 | uint16 | RW | Function settings | |||
| HR | 5 | bool bit 4 | RW | Disinfection mode on/off | |||
| HR | 5 | bool bit 5 | RW | Holiday away mode | |||
| HR | 5 | bool bit 6 | RW | Silent mode on/off | |||
| HR | 5 | bool bit 7 | RW | ||||
| HR | 5 | bool bit 8 | RW | ||||
| HR | 5 | bool bit 10 | RW | ECO mode on/off | |||
| HR | 5 | bool bit 11 | RW | ||||
| HR | 5 | bool bit 12 | RW | ||||
| HR | 6 | uint16 | RW | Weather compensation curve selection | |||
| HR | 105 | int16 | R | °C | |||
| HR | 114 | int16 | R | °C | |||
| HR | 115 | int16 | R | °C |
No registers match
Try part of the name, an address (decimal or 0x hex) or clear the filters.
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).