Midea branded AC’s with ESPhome (no cloud)

Please let me know if you make any progress. I’m currently in a similar situation as you and I don’t know what to do next. Thank You, Radek

Hi, i have following warnings when updating firmware on dongle.

Compiling /data/kaisai/.pioenvs/kaisai/src/main.cpp.o
In file included from src/esphome/core/controller.h:29,
                 from src/esphome/components/api/api_server.h:4,
                 from src/esphome/components/api/api_connection.h:6,
                 from src/esphome.h:3,
                 from src/main.cpp:3:
src/esphome/components/climate/climate.h: In constructor 'esphome::climate::Climate::Climate()':
src/esphome/components/climate/climate.h:167:7: warning: 'esphome::climate::Climate::away' is deprecated: away is deprecated, use preset instead [-Wdeprecated-declarations]
  167 | class Climate : public EntityBase {
      |       ^~~~~~~
src/esphome/components/climate/climate.h:193:8: note: declared here
  193 |   bool away{false};
      |        ^~~~
src/esphome/components/climate/climate.h:167:7: warning: 'esphome::climate::Climate::away' is deprecated: away is deprecated, use preset instead [-Wdeprecated-declarations]
  167 | class Climate : public EntityBase {
      |       ^~~~~~~
src/esphome/components/climate/climate.h:193:8: note: declared here
  193 |   bool away{false};
      |        ^~~~
In file included from src/esphome/components/midea/ac_adapter.h:9,
                 from src/esphome.h:33,
                 from src/main.cpp:3:
src/esphome/components/midea/air_conditioner.h: In constructor 'esphome::midea::ac::AirConditioner::AirConditioner()':
src/esphome/components/midea/air_conditioner.h:23:7: note: synthesized method 'esphome::climate::Climate::Climate()' first required here
   23 | class AirConditioner : public ApplianceBase<dudanov::midea::ac::AirConditioner>, public climate::Climate {
      |       ^~~~~~~~~~~~~~
src/main.cpp: In function 'void setup()':
src/main.cpp:286:59: note: synthesized method 'esphome::midea::ac::AirConditioner::AirConditioner()' first required here
  286 |   midea_ac_airconditioner = new midea::ac::AirConditioner();
      |                                                           ^
Linking /data/kaisai/.pioenvs/kaisai/firmware.elf
RAM:   [====      ]  41.9% (used 34284 bytes from 81920 bytes)
Flash: [====      ]  44.3% (used 462973 bytes from 1044464 bytes)

Is there anything i can do with it?

For now it is a warning, but the midea component of esphome should be updated :thinking:
So Sergey should change sone things in de repository

Hi, i have basic readings. but i don’t use ESPHome, i read it directly from HA. so i have different configs.

@Mosibi, i meant your cards config. :slight_smile:

Thanks.
Jan

@Bunicutz - thanks for your project - it seems to work great! I have a Lennox mini-split system with the XYE socket on the display unit.

One question - when sending any command to my A/C mini-split unit the display gets set to Fahrenheit, and when I set via my remote it’s in Celcius (I prefer Celcius). Is there a way to adjust the RS485 commands to leave the unit in Celcius? Maybe it’s one of the undocumented bytes?

I can’t see any difference in the return values, but maybe there’s a clue here: Midea: Support native temp units of Celsius & SwingV. (#823) · crankyoldgit/IRremoteESP8266@e278f24 · GitHub

@Shovelhead - maybe you can share a link to a Google doc with the codes you figured out?

Is this applicable if I am using the MrCool USB (not connecting direct to pins).

@aceindy Hey man, I am sorry for this in advance cause this is all really new to me. However…

I’m trying to get my MrCool MiniSplits working. I attempted with the ESP-01 but failed (I couldn’t even flash the things - I couldn’t get my computer to recognize them until I bought a special USB, but then, even when I did, it wouldn’t flash… LOL). So, I bought some ESP32s and they were golden (presumably because of the USB C to USB Serial stuff). I’m on an ESP32 Dev board (I think).

Anyway, I got it to flash, it’s now in my Home Assistant and I’m working on the configuration yaml. I basically copy/pasted from here: Midea Air Conditioner — ESPHome

I validate the yaml, install over the air. It takes (I get some yellow warnings about classes and states (away) that are deprecated, but it says it’s successful. It then starts to get to the logs and makes a few attempts at GET_STATUS(0x41) and never gets any receiving data back. I’m at a loss… I’ve changed the pins (from TX: 1 to TX: 3) and even specified the UART hardware to be UART1 (with 10 and 9 as pins). Anyway… I don’t know what I’m doing, so I apologize. But do you know if anyone has gotten this working with an ESP32?

If so, can you tag them and ask them to help me through this? I’m sorry I’m dumb.

@SJensen721 Could you share a photo of the connection to the usb on the mr cool?

Are you using something between the esp32 and the mini split that changes logic voltage from 3.3v to 5v?

@best

Not to my knowledge (unless the USB cable does that, which I’m assuming it doesn’t). I was under the impression I didn’t need to have a logic level shifter for the USB because the “factory” USB that comes with the MrCool DIY setup is an ESP8266 (or so I was reading). Additionally, most of the other people that say they got it to work with the ESP8266 say they just used a normal USB adapter (breakout board). Is the ESP8266 5v? Is the ESP32 3.3v?

Attached.

Oh, and I forgot to mention, I did use a little drill to drill out the corners of the plastic so the USB would fit. It didn’t damage any of the USB pins.

To my knowledge, the connector on the AC looks like a USB, but it is not…
You need to use the pins on the side of the esp32 :wink:
(the micro usb you can only use for programming :wink:)

@SJensen721 you will need a logic level shifter as well since the minisplit uses 5v logic and esp32 is 3.3v.
The esp32 dev board can run on 5v so no need for a regulator, you can connect 5v power to Vin.

That is a shame. I was hoping to avoid pins/soldering.

Okay, so… in theory I should be able to buy a USB breakout board and connect the breakout board TX and RX pins to the TX and RX pins (inverse?) on the ESP32 (1 and 3), then connect the 5V to the VBUS, Ground to Ground, and I should be good to go? Or is that oversimplification?

1 Like

That’s right except you need a logic level shifter in between tx/rx and tx/rx. There might be a breakout board that has a level shifter built in. The esp01 board in the first post of this thread had a level shifter on it so there might be something like that for a usb breakout.

Edit: Not finding a board like that. You may need to solder your own. Here is what I did using an esp8266 wemos, protoboard shield, level shifter, cut usb cable:


1 Like

You could do that, or buy those ESP8266 that has a integrated level shifter in the PCB.
I brought these.
So, technically it would save you the soldering and stuff.
The only thing that would you need is a TTL USB to flash it.

Hello, I have an AC with 17222000A00764 display board
with no wifi no usb headers. Can I replace with the display board to another midea module so I can use the custom USB dongle?


Probably your unit is not equipped with a wifi. option, so my first impression is ‘no’

1 Like

Hey guys,

Do you know if this works with Midea Fancoils, as I guess they will use same protocol and so?

Kind regards

I have a TCWBRCU1 dongle, otherwise known as a OSK103. I’m using an ESP32 with a 5V to 3.3V level shifter. My Mini Split is model number WYT012ALFI22RL and came included with the dongle for use with Tuya cloud/Smart Life app.

I Man In the Middle’d the communication between the dongle and the HVAC unit.
[20:26:47][D][uart_debug:114]: <<< BB:00:01:04:02:01:00:BD
[20:26:47][D][uart_debug:114]: <<< 01:04:37:04:31:B5:80:6B:0B:6E:26:26:80:40:1A:1C
[20:26:50][D][uart_debug:114]: <<< BB:00:01:04:02:01:00:BD
[20:26:51][D][uart_debug:114]: <<< 01:04:37:04:31:B5:80:6B:0B:6E:26:26:80:40:1A:4A
[20:26:53][D][uart_debug:114]: <<< BB:00:01:04:02:01:00:BD
[20:26:54][D][uart_debug:114]: <<< 01:04:37:04:31:B5:80:6B:0B:6E:26:26:8A:40:1A:32
[20:26:56][D][uart_debug:114]: <<< BB:00:01:04:02:01:00:BD
[20:26:57][D][uart_debug:114]: <<< 01:04:37:04:31:B5:80:6B:0B:6E:26:26:34:8A:40:1A
[20:26:59][D][uart_debug:114]: <<< BB:00:01:04:02:01:00:BD
[20:27:00][D][uart_debug:114]: <<< 01:04:37:04:31:B5:80:6B:0B:6E:26:25:3D:8A:79:40:1A:2C

The 5th byte seems to be the mode setting, and its value is different for each mode, here are some examples:

  • 31: Cool mode
  • 92: Dehumidify mode
  • 32: Fan mode

BB:00:01:04:02:01:00:BD seems to be a repeating message from OSK103 for the unit to respond with a status message. Without this message, the unit is quiet; other than pressing DISPLAY 6 times to request entering AP/CF (pairing mode) which it sends a message via UART to the missing dongle.

Attempting to use Tuya MCU results in init 0 and failures, using the Midea module results in:

[20:40:27][D][ApplianceBase:139]: Response timeout...
[20:40:27][D][ApplianceBase:146]: Sending request again. Attempts left: 2...
[20:40:27][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 00 37 A4 
[20:40:29][D][ApplianceBase:139]: Response timeout...
[20:40:29][D][ApplianceBase:146]: Sending request again. Attempts left: 1...
[20:40:29][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 00 37 A4 
[20:40:31][D][ApplianceBase:139]: Response timeout...
[20:40:31][D][ApplianceBase:154]: Destroying the request...
[20:40:31][D][AirConditioner:178]: Enqueuing a GET_STATUS(0x41) request...
[20:40:31][D][ApplianceBase:173]: Enqueuing the request...
[20:40:31][D][ApplianceBase:075]: Getting and sending a request from the queue...

It seems that my model of mini split uses some other communications protocol, correct?

Help me sanity check before investing more time…

Where can I find the hex values the esphome component sends and receives?