Midea branded AC’s with ESPhome (no cloud)

What does the log says (on the web interface)
you see both tx and rx ??
It should look something like this:

And another question, what does the 4th gen dongle on the old ac (since you did try the 3rd gen on the new :thinking: )?

ok my friend you are a genius. I think you are onto something and maybe we are very close to figuring this thing out. I looked at the logs and it was only getting TX.

so this is a picture of the board that the USB dongle plugs in to:

This board looks identical on both 3rd and 4th gen.

I guess I never tried this combination before. I just took the 3rd gen’s board (from the pic) with my esp dongle in there, and plugged it into the little connector, and it was reporting and controlling my 4th gen beautifully.

Then I plugged the new 4th gen one back in with my 3rd gen esp dongle, and it was also only getting tx.

So I think you’re right, there’s either a contact issue, and maybe I need to either solder directly onto this board from the photo instead of going over usb, or I could just try reflashing the OEM mr cool dongle that has the ESP chip on it, but then I’d have to figure out all of it’s GPIO pins, right?

I’m comparing the two and they look identical to me. Here’s a photo front and back, the one with the USB plugged in is the 3rd gen.

edit: photos have seemed to be cropped, in the front photo, the top one is the 3rd gen


But this is the problematic component for sure.

I love you man! Bypassing it worked! Thank you so much :slight_smile: :slight_smile: :slight_smile: :slight_smile: I was going nuts.

1 Like

Great to hear (love it when i am right😁)

you just need to figure out tx/rx pins :wink:

2 Likes

These are Cielo Breez-i v3 and v4. They are compatible with all Midea units but lack a lot of features (even horizontal swing is not implemented).

Hey, sorry it took me a while but here as requested the photos from the disassembly of the Midea Real Cool 35.
Don’t hesitate to ask questions














2 Likes

Someone managed to control the led Midea AC without using the IR ccomponent?

@tmsaavedra
No

I figured out the Celcius/Fahrenheit thing in the XYE protocol - code is at the link below. Currently hard coded to airways switch to Celcius, but could easily be configurable.

I apologise if this derails the current focus of this thread, but I purchased the earlier-mentioned SMARTLIGHT SLWF-01pro dongle, shaved off the corners of the USB port, and connected it up. I was able to get Home Assistant to connect to the network and create a dashboard widget for the mini split. However when I go to actually control the unit (change its on/heat/cool state, temperature set point, etc.) then it always goes back to its previous value after one second. I’m out of ideas here and hoping I can get some hints for troubleshooting. Thanks!

Try swapping changing RX and TX. :slight_smile:

Do you know if this esphome component works with midea water to air heat pump (ie. MHC-V30W/D2RN8 )

Also Hyundai HHPM-M30TH looks a lot like ODM Midea to me and it is lot cheaper - how can I be sure it is midea and using XYE protocol?

MD19U-004CW–A系列线控器说明书小册子.pdf Modbus XYE protocol on page 50 of pdf / page 47 of the document

How did you figure out the additional XYE command byte (0xC4) for setting celsius? I’ve never found any documentation on the web with XYE specifics, only Modbus registers.

Just guessing from the gaps in the 0xC? commands known, I suspect there are additional things that can be queried/set through XYE. The big one I’ve been looking for is setting the internal temp (like the follow me) without IR and if the 3F delta for temp can be changed.

I finally got my dongle, but I realized my AC unit’s USB port has a “keyed” edge which prevents the ESP unit from going in. I would have to cut the plastic on either end to make it fit. Did you have to do anything special to yours? Mine is a Senville AC

Yes I had this issue as well, I just used a very small chisel to mimic the notch and kind of forced it in… not an elegant solution but it works.

1 Like

The XYE connections are for communication between the (internal) heatpump unit and the remote controller. The H1 and H2 ports are used to connect your ESPhome board. See also my page with info about the connection and a config for the modbus registers: GitHub - Mosibi/Midea-heat-pump-ESPHome

I just guessed commands starting with 0xC0. There is a bunch of undocumented commands (and responses) it seems. Would be great to map it out properly.

You my friend are a genius! You solved my 3 year old problem with 1 picture.

edit: on a whim, I unplugged it and plugged it back in and it’s working now. I did try killing power before and that didn’t work. I think it was not plugged in all of the way…

Brand: MRCOOL
Model ID: DIY-24-HP-WMAH-230C25
Year: 2022
Market: US

It is not working currently. My esp is getting power from the mini-split and is connecting to my home assistant server. But, it’s not able to communicate with the mini-split. The ESPHome log for the device looks like the following in an infinite loop:

21:25:49	[D]	[ApplianceBase:139]	

Response timeout...

21:25:49	[D]	[ApplianceBase:154]	

Destroying the request...

21:25:49	[D]	[AirConditioner:178]	

Enqueuing a GET_STATUS(0x41) request...

21:25:49	[D]	[ApplianceBase:173]	

Enqueuing the request...

21:25:49	[D]	[ApplianceBase:075]	

Getting and sending a request from the queue...

21:25:50	[D]	[ApplianceBase:162]	

TX: AA 21 AC 8D 00 00 00 00 00 03 41 81 00 FF 03 FF 00 02 00 00 00 00 00 00 00 00 00 00 00 00 03 E9 42 B0 

21:25:51	[D]	[ApplianceBase:139]	

Response timeout...

21:25:51	[D]	[ApplianceBase:146]	

Sending request again. Attempts left: 2...

21:25:51	[D]	[ApplianceBase:162]	

TX: AA 21 AC 8D 00 00 00 00 00 03 41 81 00 FF 03 FF 00 02 00 00 00 00 00 00 00 00 00 00 00 00 03 E9 42 B0 

21:25:53	[D]	[ApplianceBase:139]	

Response timeout...

21:25:53	[D]	[ApplianceBase:146]	

Sending request again. Attempts left: 1...

21:25:53	[D]	[ApplianceBase:162]	

TX: AA 21 AC 8D 00 00 00 00 00 03 41 81 00 FF 03 FF 00 02 00 00 00 00 00 00 00 00 00 00 00 00 03 E9 42 B0 

21:25:55	[D]	[ApplianceBase:139]	

Response timeout...

21:25:55	[D]	[ApplianceBase:154]	

Destroying the request...

21:25:55	[D]	[AirConditioner:178]	

Enqueuing a GET_STATUS(0x41) request...

21:25:55	[D]	[ApplianceBase:173]	

Enqueuing the request...

21:25:55	[D]	[ApplianceBase:075]	

Getting and sending a request from the queue...

21:25:56	[D]	[ApplianceBase:162]	

TX: AA 21 AC 8D 00 00 00 00 00 03 41 81 00 FF 03 FF 00 02 00 00 00 00 00 00 00 00 00 00 00 00 03 EA A0 51 

21:25:57	[D]	[ApplianceBase:139]	

Response timeout...

21:25:57	[D]	[ApplianceBase:146]	

Sending request again. Attempts left: 2...

21:25:57	[D]	[ApplianceBase:162]	

TX: AA 21 AC 8D 00 00 00 00 00 03 41 81 00 FF 03 FF 00 02 00 00 00 00 00 00 00 00 00 00 00 00 03 EA A0 51 

21:25:58	[D]	[AirConditioner:132]	

Enqueuing a GET_POWERUSAGE(0x41) request...

21:25:58	[D]	[ApplianceBase:173]	

Enqueuing the request...

The yaml configuration looks like this:

esphome:
  name: garage-mini-split
  platform: ESP8266
  board: esp12e

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Garage-Mini-Split"
    password: "REDACTED"

captive_portal:

# Enable logging
logger:
  baud_rate: 0

# Enable Home Assistant API
api:
  encryption:
    key: "REDACTED"

ota:
  password: "REDACTED"

uart:
  tx_pin: 1
  rx_pin: 3
  baud_rate: 9600
  
  
climate:
  - platform: midea
    name: Garage Mini Split     # Use a unique name.
    period: 1s                  # Optional
    timeout: 2s                 # Optional
    num_attempts: 3             # Optional
    autoconf: true              # Autoconfigure most options.
    beeper: true                # Beep on commands.
    visual:                     # Optional. Example of visual settings override.
      min_temperature: 17 °C    # min: 17
      max_temperature: 30 °C    # max: 30
      temperature_step: 0.5 °C  # min: 0.5
    supported_modes:            # All capabilities in this section detected by autoconf.
      - FAN_ONLY                # This capability is always used.
      - HEAT_COOL
      - COOL
      - HEAT
      - DRY
    custom_fan_modes:
      - SILENT
      - TURBO
    supported_presets:          # All capabilities in this section detected by autoconf.
      - ECO
      - BOOST
      - SLEEP                   # This capability is always used.
    custom_presets:             # All capabilities in this section detected by autoconf.
      - FREEZE_PROTECTION
    supported_swing_modes:
      - VERTICAL                # This capability is always used.
      - HORIZONTAL
      - BOTH
    outdoor_temperature:        # Optional. Outdoor temperature sensor (may display incorrect values after long inactivity).
      name: Temp
    power_usage:                # Optional. Power usage sensor (only for devices that support this feature).
      name: Power
    humidity_setpoint:          # Optional. Indoor humidity sensor (only for devices that support this feature).
      name: Humidity


web_server:
  port: 80

I have a feeling that since it’s a new model then the confirmed to work ones on this list; they might have blocked this or something… Another thing that may be of note, is that I used the dongle that came with it at first. So, maybe it received a firmware update if it would have even worked in the first place.