Project 2018‎ > ‎

Daikin IR Protocol


My Air Conditioner ARC433A46

I have a Daikin FTXS25DVMA split system air conditioner with the manufacturers remote (remote model: ARC433A46).



Home-made Oscilloscope

I also have made a home-made oscilloscope of sorts by soldering an IR Phototransistor to a cut headphone cable. This assembly is then connected to the microphone port of my Windows 7 computer. To view the waveforms of the IR signals and their timings I used this software.

Daikin Protocol ARC433A46

*** Note ***

Every time a decimal (base 10) number is in the protocol, the number is backwards. For example the number 20 in binary is 10100but in the Daikin protocol it will appear as 00101.

The Protocol

The Daikin protocol, is split into three 'messages' these messages are split by a 33-34 millisecond gap. The first message, in the case of my air conditioner) doesn't change and is 8 bytes long. The second message holds the current time and is 8 bytes long. Finally the third message holds everything else and is 19 bytes long.

Each message is encoded in waves in the following way:

  1. A start bit peak of length 3400 microseconds
  2. A start bit trough of length 1750 microseconds
  3. For each bit in the message a peak of length 430 microseconds then a delay based on the value of the bit
    • For a '0' a delay of 1320 microseconds
    • For a '1' a delay of 420 microseconds
  4. And a final peak of length 430 microseconds

Here is a same set of messages with the settings replaced by corresponding letters. All times are recorded by my home-made oscilloscope so they are 99% likely to be inexact. A text version of this images is at the bottom of this section.

Key

S) The time on the remote (see Time below)
C) See Checksum below
P) Power State (On - Off) (0 - 1)
N) Is there a On Timer (Yes - No) (0 - 1)
A) If there is a On Timer then the time the air conditioner should turn on is stored here (see Time below) (Important: for highlighted bits see Timers) 
F) Is there a Off Timer (Yes - No) (0 - 1)
B) If there is a Off Timer then the time the air conditioner should turn off is stored here (see Time below) (Important: for highlighted bits see Timers) 
M) Mode (see Mode below) 
T) The Temperature (sent as a reversed binary number) 
F) Fan Speed (see Fan Speed below) 
V) Vertical Swing (Yes - No) (0000 - 1111) - I have no idea why it needs four bits 
H) Horizontal Swing (Yes - No) (0000 - 1111) - Thanks to dannypic.tw@gmail.com for finding this 
W) Sensor (Yes - No) (0 - 1) 
X) Mold Proof (Yes - No) (0 - 1) 
Y) Silent (Yes - No) (0 - 1) 
Z) Powerful (Yes - No) (0 - 1) 
E) Econo (Yes - No) (0 - 1) 

Time

Time in the Daikin protocol is sent as the number of minutes from midnight. For example 18:32 would be 1112. This number is then converted to binary and reversed as ever.

Timers

In the location where the time for a timer is set is two important bits. These bits are highlighted in yellow in the image above or bolded in the text at the bottom of this section. If no timer is set (e.g. no 'off' timer) these two bits are '1's rather than '0's.

Mode

Mode Codes:

  • 000 - Auto
  • 010 - Dry
  • 110 - Cool
  • 001 - Heat
  • 011 - Fan

Fan Speed

Fan Speed Codes:

  • 0101 - Auto
  • 1101 - Night
  • 1100 - 1
  • 0010 - 2
  • 1010 - 3
  • 0110 - 4
  • 1110 - 5

Checksum

The checksum is the last byte (8 bits) or each message and is based of the content of the message. The checksum for a message in the Daikin protocol is calculated in the following way:

  1. Each byte is converted to decimal (base 10) (remember to reverse the binary first)
  2. Each byte's decimal number is added together
  3. The total is converted to binary (don't reverse yet)
  4. Make binary string one byte long
    • If binary total is longer than a byte (8 bits) then remove front (left most) bits until one byte long
    • If binary total is shorter than a byte (8 bits) then add '0's to the front until one byte long
  5. Reverse and add to the end of the message

Text Version

Message 1: 10001000 01011011 11100100 00000000 10100011 00000000 00000000 11101011
Message 2: 10001000 01011011 11100100 00000000 01000010 SSSSSSSS SSS00000 CCCCCCCC
Message 3: 10001000 01011011 11100100 00000000 00000000 PNF1MMM0 0TTTTTT0 00000000 VVVVFFFF HHHH0000 AAAAAAAA AAA0BBBB BBBBBBB0 Z0000Y00 00000000 00000011 0WE00000 0X000000 CCCCCCCC

Modifying this Protocol

Chances are the Daikin protocol used in your air conditioner will be slightly different to mine. To modify the protocol for your air conditioner, I would highly recommend make you own home-made oscilloscope. If you have some old earphones lying around the additional part (a IR Phototransistor) costs all of $1.25 AUD. Once you got it working as I describe above then you can use your remote to take your own readings. If the program doesn't appear to be working try inverting the signal (worked for me).

To figure out this protocol I just ran about 30 readings (noting the settings), ran them through this python script and then compared them in an excel document. Finally I wrote Python script to fully decode the timings recorded by the program to the settings. You can download it here. To use it these two python scripts, run them, record a message, then go File -> "Copy timings to clipboard" then paste the timings in to the python console.


DAIKIN ARC423A5

The code for ARC423A5 is much more different than ARC433 with total 20 byte frame and be divided into 2 part: part 1 = 7 bytes, part 2 = 13 bytes

1. Tracking Mark and Space with Arduino and TSOP1738 we have raw code as below

4950 2150 300 1800 350 700 300 700 350 700 350 1750 350 700 350 700 300 750 300 700 350 1800 300 700 350 1750 350 1800 350 700 300 1800 300 1800 350 1750 350 1750 350 1750 350 700 350 700 300 1800 350 700 300 750 300 750 300 700 350 700 350 700 300 1800 350 1750 350 1750 350 1800 350 1750 350 700 300 1800 300 1800 350 700 300 700 350 700 350 700 300 750 300 750 300 700 350 700 350 700 300 750 300 750 300 700 350 1750 350 1800 350 1750 350 1750 350 700 300 750 300 700 350 700 350 

29150 4950 2150 350 1750 350 700 300 750 300 750 300 1800 300 700 350 700 350 700 300 750 300 1800 300 750 300 1800 300 1800 350 700 300 1800 350 1750 350 1750 350 1800 350 1750 350 700 300 700 350 1750 350 700 350 700 350 700 300 750 300 700 350 700 350 700 350 700 300 750 300 700 350 1800 300 1800 350 700 300 700 350 1800 300 700 350 1750 350 1800 350 650 350 700 350 700 300 750 300 1800 300 1800 350 700 300 750 300 1800 300 750 300 700 350 700 350 1750 350 1800 300 1800 300 1800 350 700 300 750 300 700 350 700 350 700 300 750 300 750 300 700 350 700 350 700 300 750 300 700 350 700 350 700 300 750 300 750 300 700 350 1750 350 700 350 1750 350 700 350 1750 350 700 350 700 300 1800 350 1750 350 700 350 700 300 750 300 750 300 700 350 700 350 700 300 750 300 750 300 1800 300 700 350 700 350 700 300 750 300 1800 300 1800 350 700 300 1800 350 1750 350 1750 350 700 350 700 300

2. Define threshold level in C

#define DAIKIN_MARK  400
#define DAIKIN_ONE_SPACE  1500
#define DAIKIN_ZERO_SPACE 650

#define DAIKIN_LONG_MARK   5000   // ^^^^^^|___|^^|__|^^
#define DAIKIN_POST_SPACE  2200  


#define DAIKIN_LONG_SPACE  29300
#define DAIKIN_VERY_LONG_SPACE 35150

3. Example decode for Daikin On-Off

Power On at 25C, Fan Speed = Max      11DA27F00D000F     11DA2700 D3312100001E0708         64

Power OFF at 25C, Fan Speed =  Max  11DA27F00D000F      11DA2700 D3302100001E0708         63

                                                              First Part Fix code      Second Part    Code                  Check Sum


Comments