devices.esphome.io
Maltec DH-20000A Dehumidifier
Maltec DH-20000A Dehumidifier
Device Type: miscElectrical Standard: globalDifficulty: Disassembly required, 3/5
This dehumidifier is very likely sold by lot of different brand names. "G21" brand ones looks 100% identical.
This guide is based on dehumidifer without wifi module, but if you encounter one with tuya based module, you can replace it or do tuya-cloudcutter.
This writeup is mostly to help others see how the device looks inside and so they do not need to figure out datapoints from scratch.
Hardware
In my opinion easiest way to add connectivity to this device is use wifi connector present on board (in my case even for device sold with wifi capability). When using esp32-c3 or esp32-s3 on most boards we can take advantage of D+ and D- USB wires being connected to GPIO19 and GPIO20.
We can create cable using JST XH 2.54mm connector connected to the RX TX 5V GND on the connector to the basic 4 wire usb-C cable where we connect RX and TX pins to D+ and D- of the usb cable (green and white). GND will be black and 5V red of the usb cable.
Board Configuration
Configuraiton is based on Ningbo Fuda 5250B Dehumidifier
substitutions: hostname: eh-maltec-dehumidifier device_id: maltec-dehumidifier device_name: Maltec Dehumidifier comment: Maltec Dehumidifier, M5Stamp ESP32S3, usb for rx tx
esphome: friendly_name: Maltec Dehumidifier EH area: Living room name: ${hostname} comment: ${comment} platformio_options: board_build.flash_mode: dio board_build.f_cpu: 80000000L build_flags: -"-D CONFIG_FREERTOS_UNICORE" esp32: board: esp32-s3-devkitc-1 variant: esp32s3 framework: type: esp-idf sdkconfig_options: CONFIG_FREERTOS_UNICORE: y CONFIG_ESP32_DEFAULT_CPU_FREQ_80: y CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ: "80"
preferences: flash_write_interval: 2min
logger: level: VERBOSE logs: bluetooth_proxy: DEBUG esp32_ble: DEBUG tuya: DEBUG tuya.switch: DEBUG tuya.number: DEBUG tuya.sensor: DEBUG tuya.select: DEBUG mdns: DEBUG json: DEBUG sensor: DEBUG uart: WARN debug: NONE wifi: WARN internal_temperature: WARN api.connection: INFO text_sensor: DEBUG logger: DEBUG esp-idf: WARN number: DEBUG select: DEBUG main: DEBUG
api:ota:web_server:debug:
wifi: ssid: !secret wifi_ssid password: !secret wifi_password ap: ssid: "Maltec Dehumidifier FALLBACK"
##################################################################
uart: rx_pin: 20 # usb-c tx_pin: 19 # usb-c baud_rate: 9600
tuya: on_datapoint_update: - sensor_datapoint: 19 datapoint_type: bitmask then: - lambda: |- ESP_LOGD("main", "on_datapoint_update %s", format_hex_pretty(x).c_str()); id(water_tank_full).publish_state((x >> 0) & 1);
binary_sensor: - platform: template id: water_tank_full name: "Water tank full" #19 device_class: problem icon: "mdi:water-alert"
switch: - platform: tuya name: "Power" switch_datapoint: 1 icon: "mdi:power" - platform: tuya name: "Child lock" icon: "mdi:lock" switch_datapoint: 16 - platform: tuya name: "Sleep" icon: "mdi:sleep" switch_datapoint: 14
number: - platform: tuya name: "Target humidity" number_datapoint: 2 unit_of_measurement: "%" device_class: "humidity" min_value: 30 max_value: 80 step: 5 icon: "mdi:water" - platform: tuya name: "Timer" number_datapoint: 17 min_value: 0 max_value: 20 step: 5 icon: "mdi:timer-cog"
sensor: - platform: tuya name: "Current Temperature" sensor_datapoint: 7 unit_of_measurement: "°C" device_class: "temperature" accuracy_decimals: 0 - platform: tuya name: "Humidity" sensor_datapoint: 6 unit_of_measurement: "%" device_class: "humidity" accuracy_decimals: 0 icon: "mdi:water-percent"
- platform: uptime name: Uptime - platform: internal_temperature name: CPU Temperature
select: - platform: tuya name: "Mode" icon: "mdi:cog" enum_datapoint: 5 options: 1: Regular 0: Clothes drying - platform: tuya name: "Fan speed" icon: "mdi:fan" enum_datapoint: 4 options: 0: Low 1: High
##################################################################text_sensor: - platform: debug device: name: "Device Info" internal: False disabled_by_default: True reset_reason: name: "Reset Reason" button: - platform: restart name: "Restart" icon: "mdi:restart" internal: False