[ESPHome Component] Cloud-Free Midea / Inventor / Comfee Dehumidifier (based on Hypfer’s project)

I think I understand now what you mean.
In the thermostat card for the dehumidifier there is a tab for temperature and humidity and you need to hide the tab not the current temperature from dehumidifier.
In that case I agree with you, the climate component is not perfect for a dehumidifier device, but at the moment there is no other option to implement it in ESPHome.
There is functional no way to say to the climate component “hey this is a dehumidifier, ignore any Temperature”. Even if the Current Temperature is hidden, the thermostat card that you are using will still show the temperature tab, it isn’t because the current temperature is shown, it’s just a limitation.

I hope that helps…

1 Like

Thanks for your answer, i understand. Wil try to find a way to hide the temperature tab or jump straight to de humidity tab.
If anyone knows a sollution please share it.

There is a pr for a humidifier component in esphome, lets hope it gets merged.

I know about that but still find climate component better that that.
Humidifier component can’t directly control fan and needs a separate entity making the control of the dehumidifier more complicated.
So, yes you would have your humidifier card with only humidity but you would need a separate fan card to control the speed.

:star2: New Update:
ESPHome-Dehumidifier (20 October 2025)
Big news for those using Midea, Comfee, or Inventor dehumidifiers with the custom ESPHome component!
The latest update just landed, and it brings fresh functionality and reliability improvements to your setup.
:star2: What’s New
:clock3: Internal Device Timer Support
A brand-new number entity now exposes your dehumidifier’s built-in timer directly in Home Assistant.
Works in 0.5-hour increments up to 24 hours, automatically switching behavior depending on whether the device is on or off.This means you can now schedule power transitions straight from ESPHome — no cloud timer needed!

number:
  - platform: midea_dehum
    midea_dehum_id: midea_dehum_comp
    timer:
      name: "Internal Device Timer"

:arrows_counterclockwise: Improved Handshake & Communication
UART handshake logic has been completely reworked to handle timing mismatches more gracefully.
Now operates more reliably across both ESP8266 and ESP32 boards.Greatly reduces failed command sends and improves startup consistency after power cycling.

  • Hidden features for beta testing, will be announced when they are confirmed working
1 Like

You have been busy!
Will try it and report findings.

Wow works great for me on a Midea Cube 20. I added a device_class to make it more human readable.

number:
  - platform: midea_dehum
    midea_dehum_id: midea_dehum_comp
    timer:
      name: "Timer"
      device_class: "duration"

I did not notice a difference in the communication and handshake, worked also fine for me in your previous itteration.

Thanks! Its getting better and better.

It’s not something you can notice, it’s a protocol thing.

You are welcome :grin:

Edit:

Great thinking I will add this to the firmware, no need to make a yaml entry.
Thanks!

Can someone implement the capabilities sensor and tell me what it returns and if the values shown are supported?

text_sensor:
  - platform: midea_dehum
    midea_dehum_id: midea_dehum_comp
    capabilities:
      name: 'Device Capabilities'

I get this in the diagnose sensor:

 Fan speed control (val=7), Ionizer (val=1), Auto humidity control → Manual + Auto, Temperature unit changeable (val=1)

Do you actually have an Ionizer?

yes i have. The switch works because i hear a distinct “click” and the lionizer-led on the panel pops up.

1 Like

New update with switches support (beep, sleep, pump) and a bug fix + capabilities info. Please check the project in github for all the updates

1 Like

I get a unknow capability in my log, could this be the beeper? Because this is supported by my device but not listed.

[19:27:53.094][I][midea_dehum:732]: RX <- DeviceCapabilities (B5): AA 21 A1 00 00 00 00 00 03 03 B5 05 10 02 01 07 1E 02 01 01 1F 02 01 01 20 02 01 01 2D 02 01 04 D0 
[19:27:53.094][D][midea_dehum:407]: Capability ID=0x10 TYPE=0x02 VAL=7 → Fan speed control (val=7)
[19:27:53.094][D][midea_dehum:407]: Capability ID=0x1E TYPE=0x02 VAL=1 → Ionizer (val=1)
[19:27:53.094][D][midea_dehum:407]: Capability ID=0x1F TYPE=0x02 VAL=1 → Auto humidity control → Manual + Auto
[19:27:53.095][D][midea_dehum:407]: Capability ID=0x20 TYPE=0x02 VAL=1 → Temperature unit changeable (val=1)
[19:27:53.095][D][midea_dehum:409]: Unknown capability ID=0x2D TYPE=0x02 VAL=4
[19:27:53.095][D][text_sensor:085]: 'Capabilities': Sending state 'Fan speed control (val=7), Ionizer (val=1), Auto humidity control → Manual + Auto, Temperature unit changeable (val=1)'

Otherwise great work!

Thank you!
Unfortunately there is nothing to do about it, if it shows unknown capability it means it was nowhere documented and we can’t know what this report is…

Edit: I found something… please update and let me know if your device support the features reported in capabilities text sensor

It now completly indexed the capabilities, the water level sensor was missing.

[22:52:24.859][I][midea_dehum:731]: RX <- DeviceCapabilities (B5): AA 21 A1 00 00 00 00 00 03 03 B5 05 10 02 01 07 1E 02 01 01 1F 02 01 01 20 02 01 01 2D 02 01 04 D0 
[22:52:24.859][D][midea_dehum:406]: Capability ID=0x10 TYPE=0x02 VAL=7 → Fan speed control (val=7)
[22:52:24.859][D][midea_dehum:406]: Capability ID=0x1E TYPE=0x02 VAL=1 → Ionizer (val=1)
[22:52:24.859][D][midea_dehum:406]: Capability ID=0x1F TYPE=0x02 VAL=1 → Auto humidity control → Manual + Auto
[22:52:24.860][D][midea_dehum:406]: Capability ID=0x20 TYPE=0x02 VAL=1 → Clothes Drying (val=1)
[22:52:24.860][D][midea_dehum:406]: Capability ID=0x2D TYPE=0x02 VAL=4 → Water level sensor (val=4)
[22:52:24.860][D][text_sensor:085]: 'Capabilities': Sending state 'Fan speed control (val=7), Ionizer (val=1), Auto humidity control → Manual + Auto, Clothes Drying (val=1), Water level sensor (val=4)'
[22:52:24.860][I][midea_dehum:465]: Updated capabilities text (merged, 5 items): Fan speed control (val=7), Ionizer (val=1), Auto humidity control → Manual + Auto, Clothes Drying (val=1), Water level sensor (val=4)
[22:52:24.860][I][midea_dehum:418]: Detected 5 capability entries

Well done!
I think there should be a binary sensor made for this in the firmware doesnt it? On the device you can set the waterlevel in four levels. Or is this the ‘Bucket Full’ sensor?

Can you explain me the water level sensor in the original application?
What do you mean by you can set the water level in four levels? Isn’t it a sensor how full is your dehumidifier bucket?

According to the manual you can control the bucket capacity, which is 12 liters, in four levels.
The bucket-full sensor is triggerd when this level is reached. This is to prevent the weight of the bucket from becoming too heavy to handle, and give you choice which weight is manageable.

I haven’t found anything related to this documented in the reverse engineered UART protocol.
I don’t also own the same dehumidifier as you, so it’s hard for me to implement this.

I guess for now you will get the bucket full sensor marked as true, when it reaches the level you choose in the settings.

Can you show me the error code values when you pull out the bucket and when it’s full?

Do you get bucket full for these both cases?

I’ve tested it and if i lift de device of the bucket the display shows EB i get error code 37.0, the Bucket Fulll sensor does not change, it’s state stays OK .
When the waterlevel in the is to heigh the display shows P2 and the error code is 38.0 the bucket full sensor is now Problem. When emptied and assembled again de error code is 0.0, and the bucket full sensor is OK.

I am oké with how things are now, i get all values i need to automate so already verry happy!