ESP32-Faikout icon indicating copy to clipboard operation
ESP32-Faikout copied to clipboard

[Documentation] S21 protocol: new findings

Open misterobotique opened this issue 1 year ago • 281 comments

Long story short, I've also been reverse engineering S21 protocol and here are some of my findings.

Hardware

  1. air conditioner: S22ZTES-W (interior unit), F22ZTES-W (exterior unit)
  2. interface adaptor for wired remote controller: KRP067A41
  3. wired remote control: KRC081A1

Communication method

UART, 2400bps, 8 bit data, 2 bit stop, even parity, DC 5V voltage level.

Request commands

1) Message format

STX Byte(0) Byte(1) Checksum ETX Checksum is the Modulo256 of the sum of Byte(0) and Byte(1).

2) Command list

Here is a list of what might be new commands.

Byte(0) Byte(1) Description
F 3 Timer
F 9 Coarse indoor, outdoor temperature (℃)
F M Total energy consumption (kWh)
R g Compressor status (ON/OFF)
R A Power status (ON/OFF)
R B Operation mode
R D ON Timer setting
R E OFF Timer setting
R F Swing setting
R K Cross flow fan speed setpoint (rpm)
R L Cross flow fan speed (rpm)
R M Louver vertical angle setpoint (degree)
R N Louver vertical angle (degree)

3) Unknown command list

Here is a list of commands my air conditioner responds to but I have not yet identified. (Result of testing the commands F0 to F9, FA to FZ, R0 to R9, Ra to Rz and RA to RZ.)

Byte(0) Byte(1) Response
F 2 0x34 0x3A 0x80 x080
F 4 0x30 0x00 0x80 0x00
F 8 0x30 0x32 0x00 0x00
F A FFFF
F B 0000
F C 1A01
F G 0801 (see below)
F K 1001
F L 0000
F N 0000
F P 8300
F Q F200
F R ?000
F S 0000
F T 1000
R b 300
R e 050
R z 0x53 0x7A
R C 720+
R G A
R W 00

Details: [ . ][X][ . ][ . ] increments by one (from 0 to F and repeat) each time the air conditioner receives a command from the remote control.

2) Request sequence

The wired remote control sends the following sequence of commands indefinitely. D20 -> F8 -> F2 -> F4 -> F3 -> F1 -> F5 -> D80000 -> RH -> F8 -> F2 -> F4 -> F3 -> F1 -> F5 -> D80000 -> Ra I haven't figured out D20 neither D80000 yet. Response to D20 is always ACK while D80000 is always NAK. Upon receipt of a response, the remote control sends an ACK after about 45ms. The time between the remote control sending an ACK and then sending a new command is about 36ms.

Response

1) Message format

ACK STX Byte(0) Byte(1) ... Byte(n) Checksum ETX Checksum is the Modulo256 of the sum of Byte(0) to Byte(n)

2) Timer

Bytes Values Description
Byte(0) G -
Byte(1) 3 -
Byte(2) 0, 1, 2, 3 Timers disabled, ON Timer, OFF Timer, Both timers
Byte(3) 0x36~0x78 ON Timer (1~12 hours)
Byte(4) 0x36~0x78 OFF Timer (1~12 hours)
Byte(5) 0 -

Timer setting (hours) = (Value – 0x30) / 6.

3) Coarse indoor, outdoor temperature (℃)

Bytes Values Description
Byte(0) G -
Byte(1) 9 -
Byte(2) see below Coarse indoor temperature
Byte(3) see below Coarse outdoor temperature
Byte(4) 0xFF -
Byte(5) 0x30 -

Temperature = (Value – 0x80) / 2.

4) Total energy consumption (kWh)

Bytes Values Description
Byte(0) G -
Byte(1) M -
Byte(2) 0~F Data[3]
Byte(3) 0~F Data[2]
Byte(4) 0~F Data[1]
Byte(5) 0~F Data[0]

Total energy consumption = Data[0~3] → Decimal / 10.

5) Compressor status (ON/OFF)

Bytes Values Description
Byte(0) S -
Byte(1) g -
Byte(2) 0, 1 Compressor OFF, Compressor ON

6) Power status (ON/OFF)

Bytes Values Description
Byte(0) S -
Byte(1) A -
Byte(2) 0, 1 Power OFF, Power ON

7) Operation mode

Bytes Values Description
Byte(0) S -
Byte(1) B -
Byte(2) 0, 2, 3, 4, 6 Auto, Dry, Cooling, Heating, Fan only

8) ON Timer setting

Bytes Values Description
Byte(0) S -
Byte(1) D -
Byte(2) 0~9 Minutes tens
Byte(3) 0~9 Minutes hundreds
Byte(4) 0~1 Minutes thousands

9) OFF Timer setting

Bytes Values Description
Byte(0) S -
Byte(1) E -
Byte(2) 0~9 Minutes tens
Byte(3) 0~9 Minutes hundreds
Byte(4) 0~1 Minutes thousands

10) Swing setting

Bytes Values Description
Byte(0) S -
Byte(1) F -
Byte(2) 0, 1, 2, 7 Disabled, Up & down, Left & right, Both
Byte(3) 0, F -

Byte(3) is 0 when Byte(2) = Disabled, F otherwise.

11) Cross flow fan speed setpoint (rpm)

Bytes Values Description
Byte(0) S -
Byte(1) K -
Byte(2) 0~9 Speed tens
Byte(3) 0~9 Speed hundreds
Byte(4) 0~1 Speed thousands

12) Cross flow fan speed (rpm)

Bytes Values Description
Byte(0) S -
Byte(1) L -
Byte(2) 0~9 Speed tens
Byte(3) 0~9 Speed hundreds
Byte(4) 0~1 Speed thousands

13) Louver vertical angle setpoint (degree)

Bytes Values Description
Byte(0) S -
Byte(1) M -
Byte(2) 0~9 Angle units
Byte(3) 0~9 Angle tens
Byte(4) 0~1 Angle hundreds
Byte(4) +, - Angle sign

When the louver is in the closed position, the vertical angle is 120°.

14) Louver vertical angle (degree)

Bytes Values Description
Byte(0) S -
Byte(1) N -
Byte(2) 0~9 Angle units
Byte(3) 0~9 Angle tens
Byte(4) 0~1 Angle hundreds
Byte(4) +, - Angle sign

Hope this help.

misterobotique avatar Jul 30 '24 13:07 misterobotique

Wow!!!

Ok we have most of that, but there are a couple of ones we can add.

revk avatar Jul 30 '24 13:07 revk

this is a wonderful work, but i wonder why i use mostyle different commands 🤣 being serious, i assume there are different S21 protocol versions. For example, i have F1 that gives me all basic info (mode, fan, power), you have not. F5 for me is swing state, you have not.

however, some of these commands get an answer also on my unit. Thanks! just wondering why there is the info of target and real angle of VERTICAL louver, but not HORIZONTAL

have you tried also SETTING values? (i assume via D commands)? would be nice to set target position of louver :) will it be DK?

MassiPi avatar Aug 03 '24 09:08 MassiPi

I've only posted the commands that I believe are not fully documented or commands that are still unknown. The commands you mentioned including the following work with my air conditioner:

Byte(0) Byte(1) Description
F 1 Power (ON/OFF), operation mode, temperature setpoint (℃), wind speed
F 5 Swing setting
R a Outdoor temperature (℃)
R H Indoor temperature (℃)
R I Refrigerant temperature (at the evaporator coil inlet) (℃)
R X Temperature setpoint (℃)

For the temperature setpoint of F1, when operation mode = dry the temperature is how much the indoor temperature at start of dry operation is allowed to be warmed up/cooled down while removing moisture (see table below).

Value Description Remark
0x82 +2℃ Low dehumidification effect
0x81 +0.5~1.5℃
0x80 0℃
0x8F -0.5 ~ -1.5℃
0x8E -2℃ High dehumidification effect

My air conditioner model can only move the louver up and down, so I wasn't able to find which command can fetch the louver horizontal angle setpoint and actual one (if existing).

I've just started to play with commands for setting values and so far I've confirmed D1 and D5 work.

misterobotique avatar Aug 03 '24 12:08 misterobotique

ok this makes sense :) thanks a lot, i'm having some fun.. the only issue i see is that the more commands we send, the longer it takes for update, so we need to lower the refresh frequency

don't you have Rd working?

MassiPi avatar Aug 03 '24 12:08 MassiPi

Yes, Rd is also working (forget to add it in the previous table of known and working commands).

misterobotique avatar Aug 03 '24 13:08 misterobotique

any idea on the meaning of Rd response? mine is commonly 20 or 40, i see around talking about frequency but to me it seems more a percentage of load..

MassiPi avatar Aug 04 '24 07:08 MassiPi

Regarding Rd response, I would agree with the idea that it is the inverter compressor frequency (Hz). According to ChatGPT, the normal operating frequency range for the compressor in consumer-oriented air conditioners is around 20-30 Hz for minimal cooling, 40-80 Hz for moderate cooling and 90-120 Hz for maximum cooling. In my case, with a temperature setpoint of 27℃ I've seen values like 26Hz in the morning when it's around 30℃ outside and around 65Hz in the afternoon when it's above 37℃ outside.

For so, I've defined Rd response as follow:

Byte Description Value
Byte(0) - S
Byte(1) - d
Byte(2) Frequency units
Byte(3) Frequency tens
Byte(4) Frequency hundreds

But I wasn't able to confirm it's indeed the compressor frequency as the wired remote control I use for reverse engineering doesn't display neither poll this information from the air conditioner.

misterobotique avatar Aug 04 '24 08:08 misterobotique

i can't find official values in the tech document of my external unit, but it makes sense to be frequency, i'll use it in that way :)

MassiPi avatar Aug 04 '24 13:08 MassiPi

Ok on my system (old Perfera) i do not have additional responses than yours (so i assume i can't set horizzontal lid angle), but i have a lot of NAK where you get info. On R commands i only miss RW, but on F i have much more holes (F9 | FA | FB | FC | FG | FK | FL | FM | FN | FP | FQ | FR | FS | FT). I assume it's a matter of unit maturity and features..

MassiPi avatar Aug 04 '24 16:08 MassiPi

sadly i get NAK for both DK and DM commands, so probably target fan speed and target angle can't be set :(

MassiPi avatar Aug 05 '24 17:08 MassiPi

Hello guys!

I have recently ordered an old stock BRP069B41 online controller specifically for dissection, and after some fighting with geo-blocking i even managed to set it up to work with an A/C simulator, However, it currently sits in "ret=SERIAL IF FAILURE,err=252" state. I am assuming that this means "incompatible A/C model", because communication actually works fine. And if i stop the simulator, error code changes to 251 (and it stops responding to /aircon/* completely, only to /common/basic_info), so the A/C is indeed online.

It currently sends 4 queries in a loop:

Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')

I am thinking that F4 and F2 are responsible for A/C model identification. I hardcoded replies, which my FTXF20D sends. I was planning to play with these values and see how the controller reacts to changes. But first i need to get it fully running.

So hence my first request for help. Can any of you from EU share me replies of your A/C to F2 and F4 commands ? Especially wanted are replies from any model on this list: FTXM-M CTXM-M ATXM-M FTXTM-M BRP069A45 FTXG-LS FTXG-LW FTXJ-MW * FTXJ-MS *

These are listed on https://www.daikin.eu/en_us/product-group/control-systems/onecta/connectable-units.html as compatible with my parrticular box.

Please reply with data and your A/C model. Just in case if someone cares: these data can't be used to identify you personally.

Another interesting finding is 'FU' command. The controller sends it only once upon startup. My A/C doesn't know it, i checked. So, simulator currently replies with NAK, just like a real unit. I tried to modify the sim to reply with 4 zeroes. Controller status didn't change, but interestingly it responds with a byte of 0x15 instead of ACK before proceeding.

If anyone is interested, you can find my modified simulator here https://github.com/Sonic-Amiga/ESP8266-Faikin/tree/main/Tools/Simulators . I will upstream changes, of course, once i have some more interesting findings.

Sonic-Amiga avatar Aug 08 '24 18:08 Sonic-Amiga

UPD: The controller appeared fully working with my another unit, ATX20K2V1B. The unit is older and runs BRP069A41; it was available here back then... Dam, that's an ealier revision of the same unit!

Need to Faikin-ize it to shake some info out of it.

Sonic-Amiga avatar Aug 08 '24 19:08 Sonic-Amiga

Model F2 response F4 response
CTXM60RVMA, CTXM35RVMA 0247323D3B00807103 024734300080305B03
CTXM25RVMA 0247323D3B00807103 0247343000A0307B03

@Sonic-Amiga what responses do your units send?

hedgepigdaniel avatar Aug 09 '24 16:08 hedgepigdaniel

Snip from the simulator, containing the answer:

		 case '2':
		    // BRP069B41 sends this as first command. If NAK is received, it keeps retrying
			// and doesn't send anything else. Suggestion - query AC features
		    if (debug)
		       printf(" -> unknown ('F2')\n");
			response[3] = 0x34; // No idea what this is, taken from my FTXF20D
			response[4] = 0x3A;
			response[5] = 0x00;
			response[6] = 0x80;

		    s21_reply(p, response, buf, S21_PAYLOAD_LEN);
			break;
		 case '3':
		    if (debug)
		       printf(" -> powerful ('F3') %d\n", powerful);
			response[3] = 0x30; // No idea what this is, taken from my FTXF20D
			response[4] = 0xFE;
			response[5] = 0xFE;
			response[6] = powerful ? 2 : 0;

		    s21_reply(p, response, buf, S21_PAYLOAD_LEN);
			break;
		 case '4':
		    if (debug)
		       printf(" -> unknown ('F4')\n");
		    response[3] = 0x30; // No idea what this is, taken from my FTXF20D
			response[4] = 0x00;
			response[5] = 0xA0;
			response[6] = 0x30;

			s21_reply(p, response, buf, S21_PAYLOAD_LEN);
			break;

As to my older ATX20 unit, i have no idea; and i am waiting for my connectors order to arrive so that i could make an adapter for some of ESP hardware i have on hands. So, it doesn't have Faikin currently, so i can't actively research it. Hope parts to arrive next week.

Sonic-Amiga avatar Aug 09 '24 21:08 Sonic-Amiga

Thank you very much, we're moving. I started changing replies one by one. First i changed F4, the result was the same, error 252. Then i also changed F2, and controller moved on:

$ ./faikin-s21.exe -p COM3 -v
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: F8
 -> Unknown command, sending NAK
Got command: F8
 -> Unknown command, sending NAK

When it gets NAK, it resends the command in an infinite loop. So now i need to implement F8 and probably more. Stay tuned! BTW, you may also order some experiments with my BRP. I wonder if i could share it online...

Sonic-Amiga avatar Aug 09 '24 21:08 Sonic-Amiga

Wooohooo, off we go, it's alive! Status OK, control works! The code pushed to my repo.

Sonic-Amiga avatar Aug 09 '24 21:08 Sonic-Amiga

So, very interesting. This is the log when it worked:

$ ./faikin-s21.exe -p COM3 -v
Got command: F8
 -> unknown ('F8')
Got command: F9
 -> Unknown command, sending NAK
Got command: F6
 -> powerful ('F6') 0
Got command: F7
 -> eco 0
Got command: FB
 -> Unknown command, sending NAK
Got command: FG
 -> Unknown command, sending NAK
Got command: FK
 -> Unknown command, sending NAK
Got command: FM
 -> Unknown command, sending NAK
Got command: FN
 -> Unknown command, sending NAK
Got command: FP
 -> Unknown command, sending NAK
Got command: FQ
 -> Unknown command, sending NAK
Got command: FS
 -> Unknown command, sending NAK
Got command: FT
 -> Unknown command, sending NAK
Got command: Rd
 -> Unknown command, sending NAK
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: RL
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: RH
 -> 'H' sensor = +245
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: RN
 -> Unknown command, sending NAK
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: RI
 -> 'I' sensor = +185
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: Ra
 -> 'a' sensor = +205
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: RX
 -> Unknown command, sending NAK
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5
 -> swing 0
Got command: F2
 -> unknown ('F2')
Got command: F1
 -> power 0 mode 3 temp 22.5
Got command: F3
 -> powerful ('F3') 0
Got command: F4
 -> unknown ('F4')
Got command: F5

So, it looped: F2 F1 F3 F4 F5; and every iteration it also queried one sensor ('R'). Majority of them aren't implemented in the simulator yet.

But i am unable to reproduce this. After i restarted the sim and controller, after F8 it started wanting F9. Then FB. Something is off; perhaps i unintentionally exploited some bug.

Sonic-Amiga avatar Aug 09 '24 22:08 Sonic-Amiga

I reproduced my success following the algorithm: Every time we get F8, increment a counter. Drop it 15 times (do not respond), then reset the counter to zero and say NAK Eventually the controller gives up probing and goes online (see log above)

F8 response from my faikin-ized unit is 30 32 30 30, i. e. '0020' (we read it in reverse like other values) If i implement this response, the controller does not calm down and wants F9, then tons of other stuff (almost all english alphabet), then proceeds to 'Mx`, where x is more characters. I gave up on that, too many commands. Interestingly enough, my FTX20 knows all of them.

I have also just tried 30 30 30 30, and also 00 00 00 00. Different thing happens; the controller now wants MM

Conclusion: F8 is used to query for additional features.

Sonic-Amiga avatar Aug 10 '24 08:08 Sonic-Amiga

Further confirmation to the theory is the log:

Got command: F8
 -> unknown ('F8')
Got command: RH
 -> 'H' sensor = +245
Got command: Ra
 -> 'a' sensor = +205

So, it does not go for F9 (which, we know, reports home and outside temp in some 'new' form), but instead asks for RH and Ra. Protocol version maybe ?

Sonic-Amiga avatar Aug 10 '24 08:08 Sonic-Amiga

Confirmed. F8 = "protocol version". Known responses are '0020' and '0010'. '0000' does the same as '0010'; i guess they do "if (version > '1')" sort of check.

Version 1 has interesting 'MM' command, it replies with 'MFFFF' (yes, just one command byte, 5 bytes total). No idea what that is, grabbed from my FTXF20. I tried different second chars (MM, MN, MA), they all seem to produce an identical response.

Hack with timeouting removed, the controller is online with simulated A/C.

Funny that Faikin mis-detected 'M' response as loopback, i'll fix it.

Sonic-Amiga avatar Aug 10 '24 09:08 Sonic-Amiga

With my Japanese model, the command F8 returns: G 8 0 2 0x00 0x00. Command F2 returns: G 2 4 : 0x00 0x80. Command F4 returns: G 4 0 0x00 0xA0 the first time then always G 4 0 0x00 0x80

I've also tried to send different commands, like "A" or "HG" or "cd" and so on but only got responses from the following:

Command Response
A STX C A ETX
B ACK
G 0xC5
M STX M F F F F e ETX
V STX V 0 0 A 0 ' ETX

misterobotique avatar Aug 10 '24 10:08 misterobotique

@hedgepigdaniel So, i am currently simulating CTXM60RVMA (not exactly, however) . I can connect to this A/C using old "Online controller" app, and i can see:

  • The unit has vertical, horizontal and 3D swing modes
  • The unit does not have "night" fan speed. Is this correct or not ? If correct, does your second unit, CTXM25RVMA, have different set of these features ? Which one ?

@misterobotique The same question goes to you.

Sonic-Amiga avatar Aug 10 '24 21:08 Sonic-Amiga

@misterobotique

Command F2 returns: G 2 4 : 0x00 0x80. Command F4 returns: G 4 0 0x00 0xA0 the first time

Sorry, couldn't understand how to interpret this. The payload (i. e. what follows response code: 'G2', 'G4') should be 4 bytes. Can you show raw dump ?

Sonic-Amiga avatar Aug 10 '24 21:08 Sonic-Amiga

@hedgepigdaniel Lotta fun... If i respond '0247343000A0307B03' to F4, the controller says error 252, which is i am assuming "incompatible model". And that's the very same string my FTX20 reports, by the way.

Sonic-Amiga avatar Aug 10 '24 21:08 Sonic-Amiga

@Sonic-Amiga Mixing ASCII and hexadecimal was confusing, sorry. F8 returns: 02 47 38 30 32 00 00 E1 03. F2 returns: 02 47 32 34 3A 80 80 E7 03. F4 returns: 02 47 34 30 00 A0 00 4B 03 the first time then always 02 47 34 30 00 80 00 2B 03

misterobotique avatar Aug 11 '24 05:08 misterobotique

@hedgepigdaniel So, i am currently simulating CTXM60RVMA (not exactly, however) . I can connect to this A/C using old "Online controller" app, and i can see:

The unit has vertical, horizontal and 3D swing modes Correct The unit does not have "night" fan speed. Is this correct or not ? Incorrect. The IR remote has a "indoor unit quiet mode" with the night icon, and it clearly does reduce the fan speed compared to the auto mode. However, after setting night mode using the IR remote, Faikin sees it in auto mode. Setting it in night mode via Faikin seems to work correctly in that the fan is still low, and refreshing the UI shows it still in night mode.

If correct, does your second unit, CTXM25RVMA, have different set of these features ? Which one ?

As far as I can tell, the entire CTXM25RVMA, CTXM35RVMA, CTXM60RVMA have exactly the same set of features except that in the CTXM60RVMA there is only a single "intelligent eye" human presense sensor mode - on and off, whereas in the smaller units there are 3 settings - off, blow towards people, blow away from people. Same IR remote for all of them.

hedgepigdaniel avatar Aug 11 '24 06:08 hedgepigdaniel

And for all of CTXM25RVMA, CTXM35RVMA, CTXM60RVMA, F8 response is 024738303230304103 or "0200"

hedgepigdaniel avatar Aug 11 '24 06:08 hedgepigdaniel

@hedgepigdaniel So, i am currently simulating CTXM60RVMA (not exactly, however) . I can connect to this A/C using old "Online controller" app, and i can see:

  • The unit has vertical, horizontal and 3D swing modes
  • The unit does not have "night" fan speed. Is this correct or not ? If correct, does your second unit, CTXM25RVMA, have different set of these features ? Which one ?

@misterobotique The same question goes to you.

SxxWTES-W, SxxWTEP-W and SxxWTEV-W series only have the following features:

  • vertical swing mode
  • "night" fan speed
  • "comfort" fan speed

misterobotique avatar Aug 11 '24 06:08 misterobotique

I found out what FR reports: the louver vertical position setting.

Bytes Values Description
Byte(0) G -
Byte(1) R -
Byte(2) ?, 0, 1, 2, 3, 4, 5 Swing, "Comfort" mode position, upper position, high middle position, middle position, low middle position, lower position
Byte(3) 0
Byte(4) 0
Byte(5) 0

FS could be the louver horizontal position setting.

Also, I noticed F6 would returns 0 2 0 0 when "Night" mode is enabled (0 0 0 0 when disabled).

misterobotique avatar Aug 11 '24 09:08 misterobotique

Also, I noticed F6 would returns 0 2 0 0 when "Night" mode is enabled (0 0 0 0 when disabled).

Thank you for this finding; i'll recheck on my unit. This is going to solve our night mode detection problem, if confirmed.

Now back to F8. I's confirmed to be a protocol version. Now my sim returns '0100', which stands for v1. aircon/get_model_info (http api) says this:

ret=OK,model=NOTSUPPORT,type=N,pv=1,cpv=0,mid=NA,s_fdir=3,en_scdltmr=1,en_onofftmr=1

Note "pv" number, which definitely stands for "protocol version". We can also recognize some optional features:

  • s_fdir=3 - have horisontal + vertical swing ("fan direction")
  • en_onofftmr=1 - have on/off timer
  • en_scdltmr=1 - have scdl timer, whatever it is.
Let's compare this with my real ATXF unit, also running with BRP:

ret=OK,model=0000,type=N,pv=2,cpv=2,cpv_minor=00,mid=NA,humd=0,s_humd=0,acled=0,land=0,elec=0,temp=1,temp_rng=0,m_dtct=0,ac_dst=--,disp_dry=0,dmnd=0,en_scdltmr=1,en_frate=1,en_fdir=1,s_fdir=1,en_rtemp_a=0,en_spmode=0,en_ipw_sep=0,en_mompow=0

Note how much more flags we have; and also pv=2

The same number is displayed as "Indoor unit software" in Onecta: select unit -> Settings -> Daikin air-to-air heat pump -> Indoor unit

I tried playing with unknown values in the simulator, but i couldn't change s_fdir. Note also model=NOTSUPPORT. I think that BRP only has some rudimentary support for protocol v1 with some fallback options. In order to get the real picture, we need to implement protocol v2 and that's going to take me some time.

Sonic-Amiga avatar Aug 11 '24 10:08 Sonic-Amiga