I’ve now got mdrobnak’s fork of your esphome component working. For now I have it connected in place of the wall controller (CN40 connector) so I can’t tell how the wall controller is responding to things.
For now my automations are still using IR to actually control the system. I notice that when the temperature setpoint is set via IR, the values that are returned to XYE C0 query have an extra bit set such that they are offset by 64C. I have no idea what this bit is meant to indicate.
Initially set 30C cooling mode via XYE, then set the 30C cooling mode via IR, then 29C via IR, finally 29 via XYE. The C0 response changes like:
>>> AA:C0:00:00:00:00:00:00:00:00:00:00:00:3F:01:55
<<< AA:C0:00:00:00:00:30:10:88:04:1E:54:55:55:54:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:04:55
<<< AA:C0:00:00:00:00:30:10:88:04:5E:54:55:55:54:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:C4:55
<<< AA:C0:00:00:00:00:30:10:88:04:5D:54:55:55:54:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:C5:55
<<< AA:C0:00:00:00:00:30:10:88:04:1D:54:55:55:54:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:05:55
0x1E = 30
0x5E = 30 + 64
0x5D = 29 + 64
0x1D = 29
In the middle of that process the XYE ESPHome component showed 94/93C setpoint in Home Assistant

This would complicate detection of the temperature units based on min/max limits, the fahrenheit values corresponding to the standard 17 to 30C range overlap with this 64C offset case.
C |
F |
C + 64 |
17 |
62.6 |
81 |
18 |
64.4 |
82 |
19 |
66.2 |
83 |
20 |
68 |
84 |
21 |
69.8 |
85 |
22 |
71.6 |
86 |
23 |
73.4 |
87 |
24 |
75.2 |
88 |
25 |
77 |
89 |
26 |
78.8 |
90 |
27 |
80.6 |
91 |
28 |
82.4 |
92 |
29 |
84.2 |
93 |
30 |
86 |
94 |
I’m puzzled as to why this sets some different state in the unit depending on whether it came from IR or XYE… is there a different deadband or other control policy depending on whether the system is set via “modern” XYE/CN40 vs. “legacy” IR/5-pin controller? Or just a flag to indicate that “somone else” changed the temperature via another controller / bus?
I have a pretty delicate automation to modulate the compressor speed by spoofing follow me messages, so once I start doing everything via XYE rather than IR I’ll see if the system behaves any differently. I was already anticipating a difference in behaviour as someone mentioned that:
Even in “follow me” mode the unit will include the T1 sensor in the calculation with a 30% weight. Found that in a random video, and can confirm based on behavior of my unit. When the T1 was in the wrong spot and reading 90F when heating it skewed my follow-me temperature way up even though the wall unit was seeing 67F. Once my installer moved the T1 sensor it’s much happier.
From https://github.com/wtahler/esphome-mideaXYE-rs485/tree/main#things-ive-discovered
Worst case I’ll continue using IR to set the operating mode and send follow me while augmenting it with XYE to query operating mode, extra thermistor readings, and set static pressure.
Edit:
I’ve monitored a quick run in both cooling & heating mode. On my system field 20 (byte 0x13) indicates the state of the outdoor unit.
0x00 - Off
0x02 - Fan running
0x03 - Fan and compressor running
In both cooling & heating the fan starts about 5 seconds before the compressor and keeps running for about 30 seconds after it stops.
The behaviour of this field may be interesting during a defrost cycle in heat mode. Something for those of you in the northern hemisphere to monitor?
It rarely gets cold enough here for the defrost to engage. At least after suppressing the completely pointless defrost every 2nd heating cycle (regardless of the ambient temperature!), which my automation suppresses by turning the system ‘off’ in between each heating cycle…