Skip to content

Minco Heat MK80W

Device Type:relay
Electrical Standard:global
Board:esp32
Difficulty:Disassembly required (3/5)

Minco Heat MK80W (Platform ME80)

The Minco Heat MK80W is a Tuya MCU-based touchscreen thermostat used for floor heating and boilers. It communicates with the Wi-Fi/ESP module via a hardware UART interface at 9600 baud.

Hardware Modifications (Hardware Modding)

To flash this thermostat with ESPHome, the stock Tuya Wi-Fi module (such as the WBR3) must be desoldered and replaced with a custom ESP32-S3 board (or equivalent).

Critical Wiring Note: One of the signal traces controlling the network status icon (Wi-Fi leaf/symbol) on the front LCD panel must be hardware-soldered directly to the pad that originally mapped to pin A_2 on the stock Tuya WBR3 module. In this ESPHome configuration, this pin is mapped to GPIO7. The control logic is inverted: pulling the pin LOW (0V) keeps the icon solidly lit, while pulling it HIGH turns it off.

Data Points (DPID) Mapping

DPIDTypeDescription
1BooleanMain Power Switch (ON / OFF)
2EnumOperation Mode: 0 - Auto (Schedule), 1 - Manual, 2 - ECO
16IntegerTarget Temperature (e.g., 220 = 22.0°C)
19IntegerMaximum Temperature Limit (e.g., 330 = 33.0°C)
26IntegerMinimum Temperature Limit (e.g., 180 = 18.0°C)
27IntegerTemperature Calibration Offset (Signed 32-bit, base offset = 4)
36EnumRelay Heating Status: 0 - Idle, 1 - Heating (Automatic)
40BooleanChild Lock (Disables physical wall buttons)
43EnumActive Sensor Source: 0 - Internal Air, 1 - External Floor, 2 - Dual Combined
52EnumScreen Backlight Mode: 0 - Turn Off after 15s, 1 - Dim after 15s
101IntegerCurrent Room Temperature (e.g., 255 = 25.5°C)
103BooleanAnti-Frost Protection Mode (Active when the screen is powered OFF)
106IntegerTemperature Hysteresis deadband (e.g., 5 = 0.5°C)
108Raw BytesWeekly programmable schedule matrix

Configuration

Below is the verified standalone configuration split into hardware components and advanced helper entities.

# Hardware configuration for Minco Heat MK80W
packages:
base: !include base.yaml
uart:
id: tuya_uart
tx_pin: GPIO1
rx_pin: GPIO2
baud_rate: 9600
rx_buffer_size: 1024
time:
- platform: sntp
id: ntp_time
timezone: "Europe/Minsk"
tuya:
id: tuya_bus
uart_id: tuya_uart
time_id: ntp_time
switch:
- platform: gpio
pin: GPIO7
id: thermo_status_pin
restore_mode: ALWAYS_OFF
- platform: tuya
name: "Thermostat Child Lock"
switch_datapoint: 40
- platform: tuya
name: "Thermostat Anti-Frost Mode"
switch_datapoint: 103
interval:
- interval: 250ms
then:
- lambda: |-
if (!id(ntp_time).now().is_valid()) {
if (id(thermo_status_pin).state) {
id(thermo_status_pin).turn_off();
} else {
id(thermo_status_pin).turn_on();
}
}
- interval: 5s
then:
- lambda: |-
auto *uart_bus = id(tuya_uart);
uint8_t query_packet[] = {
0x55, 0xAA, 0x00, 0x08, 0x00, 0x00, 0x07
};
uart_bus->write_array(query_packet, sizeof(query_packet));
if (id(ntp_time).now().is_valid()) {
id(thermo_status_pin).turn_off();
uint8_t wifi_packet[] = {
0x55, 0xAA, 0x00, 0x03, 0x00, 0x01, 0x04, 0x08
};
uart_bus->write_array(wifi_packet, sizeof(wifi_packet));
}
climate:
- platform: tuya
id: thermostat_climate
name: "Thermostat"
switch_datapoint: 1
target_temperature_datapoint: 16
current_temperature_datapoint: 101
temperature_multiplier: 0.1
select:
- platform: tuya
name: "Thermostat Backlight Mode"
enum_datapoint: 52
options:
0: "Turn Off after 15s"
1: "Dim after 15s"
- platform: tuya
name: "Thermostat Sensor Source"
enum_datapoint: 43
options:
0: "Internal Air Sensor (IN)"
1: "External Floor Sensor (OUT)"
2: "Dual Combined Sensor (ALL)"