I am trying to decode a reverse cycle split system air-conditioner comms signal so that I can control an outdoor a/c compressor unit without using the manufactures indoor unit. The unit is made by Midea and they seems reluctant to share their protocol details.

I used my oscilloscope to look at the data and used the default serial decoding settings to get some HEX data strings.

Data is sent (or received?) every 50ms. With 4.8kbaud, no parity,1 stop bit and LSB bit order. I get HEX data like this when there is no heating or cooling request from the indoor unit.No request from indoor unit

I took some more data when the indoor unit was requesting cooling but I don't know if my acquisition settings right. Here is some data recorded of packets taken every 40seconds or so before the indoor unit requests cooling, during cooling request and after.Some random packets taken before during and after a cooling request

I know that the indoor unit is receiving temperature measurements so that the system can decide at what speed to run the compressor. Not sure if it is temperature measurements that are communicated to the outdoor unit or if it is VSD speed commands. If it is temperature measurements then there should be data that is reducing during the cooling call data block.

I am looking for any advise as to how I should go about decoding this data. Should I buy a serial decoder instead of using my oscilloscope? I am probably out of my depth, but I love a challenge. Any advise greatly appreciated.

  • I too have a Midea unit. I'm assuming you are decoding the XYE terminal connections? Did you make any progress on this. – XtremeGod Feb 24 '17 at 5:33

I would hardly call this an answer, but I can't comment yet..

You need additional data.

  1. Have you tried opening the outdoor unit and examining the board that you're communicating with? you might find it has some debug interfaces (serial or something else). It might provide additional information - debug prints when a command is received for example.
  2. Recording additional reference data - I would record every possible temperature setting. Then try identifying the constant values vs. the varying values. This might help with determining the command format.
  3. As a continued effort from the second option - record every possible command and start diffing them. Try to find a pattern - message types, sub fields to the message.
  4. Record your A/C remote (fairly simple - google it) and see if there is any correlation (this is a long shot, but worth a try)

As for the serial decoder - At the very least it will make sampling the signals simpler. The easier to sample the more you will probably sample.

Hope this helped :)

| improve this answer | |
  • Thank you Eli, that is a help. You are correct, the outdoor unit has a check switch and display that gives a bunch of information. One of the things it shows is the indoor coil temperatures and therefore I know that it is the outdoor board that controls the VSD based on the indoor coil temps. I should be able to record what the outdoor unit sees as indoor temperatures and then see how that data is represented in the command format. I am thinking I will buy a Saleae Logic 4 to make data acquisition and analysis easier. Thanks again. – Kirkland Aug 28 '16 at 2:14

I managed to decode the protocol on XYE connection. My findings are here https://codeberg.org/xye/xye

The XYE connection is the bus between a central controller and the indoor units. The bus from the indoor units to the outdoor units is labeled PQE. My units don't have the connection for that, so I can't test it.

The data in the initial post look like you are missing bytes. I used a cheap RS-485 to USB converter to monitor the data. Worked great.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.