Reverse engineered IR code for the Daikin FWT-GT air conditioner.
The protocol is based pulse width encoding, where the bits are encoded as the duration of the high and low pulses.
The frame is composed of a header, followed by the data, and ending with a footer.
After converting the signal to integers, corresponding to the duration of the high and low pulses, the header and footer are as follows:
header = [38, 150, 256, 59, 15873, 256, 60, 15873, 20885]
footer = [11, 37122, 148, 1293]
The bits are encoded as follows:
Bit | Pulse duration |
---|---|
0 | ~3300 |
1 | ~8000 |
See the Decode notebook for more details.
The code is composed of 64 bits on the body, organized into 16 nibbles (4 bits).
Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | ||||||||
Nibble0 | Nibble1 | Nibble2 | Nibble3 | Nibble4 | Nibble5 | Nibble6 | Nibble7 | Nibble8 | Nibble9 | Nibble10 | Nibble11 | Nibble12 | Nibble13 | Nibble14 | Nibble15 |
0001 | 0110 | 1000 | 0100 | 0000 | 0000 | 0001 | 0011 | 0001 | 0100 | 0001 | 0101 | 0010 | 0100 | 1100 | 0100 |
Prefix | Fan mode | Mode | Clock | Time ON | Time OFF | Temperature | Checksum | Power | |||||||
Always | Always | Auto, Low, Medium, High, Turbo, Quiet | Cool, Dry, Fan, Heat | Minutes tens | Minutes units | Hours tens | Hours units | Active + Halfhour + Hours tens | Hours units | Active + Halfhour + Hours tens | Hours units | Tens | Units | Sum(nibbles)%16 | Power + Sleep + Swing |
Always 0001 0110
Fan mode | Nibble 2 |
---|---|
Auto | 0001 |
Low | 1000 |
Medium | 0100 |
High | 0010 |
Turbo | 0011 |
Quiet | 1001 |
Mode | Nibble 3 |
---|---|
Dry | 0001 |
Cool | 0010 |
Fan | 0100 |
Heat | 1000 |
These nibbles encode the current time, as set by the user on the remote control.
The time is encoded in BCD format, with the tens digit in the high nibble and the units digit in the low nibble.
Example:
Time | Nibble 4 | Nibble 5 | Nibble 6 | Nibble 7 |
---|---|---|---|---|
Minutes tens | Minutes units | Hours tens | Hours units | |
12:34 | 0011 | 0100 | 0001 | 0010 |
23:59 | 0101 | 1001 | 0010 | 0011 |
These nibbles encode the time at which the air conditioner should turn on. The time has a resolution of 30 minutes.
The MSB bit is used to indicate if the timer is active or not. If the timer is active the air conditioner will turn on at the specified time.
The second bit is used to indicate whether the time is at o'clock or half past. If the bit is not set, the time is at o'clock; otherwise, it is at half past.
The time is encoded in BCD format, with the tens digit in the high nibble (the remaining two bits only) and the units digit in the low nibble
Example:
Time | Active | Nibble 8 | Nibble 9 |
---|---|---|---|
Hours tens | Hours units | ||
00:00 | OFF | 0000 | 0000 |
00:30 | ON | 1100 | 0000 |
01:00 | ON | 1000 | 0001 |
12:30 | ON | 1101 | 0010 |
23:00 | ON | 1010 | 0011 |
23:30 | ON | 1110 | 0011 |
These nibbles encode the time at which the air conditioner should turn off. The time has a resolution of 30 minutes. The encoding is the same as for the Time ON nibbles.
These nibbles encode the desired temperature. The temperature is encoded in BCD format, with the tens digit in the high nibble and the units digit in the low nibble.
Temperature | Nibble 12 | Nibble 13 |
---|---|---|
16 | 0001 | 0110 |
17 | 0001 | 0111 |
18 | 0001 | 1000 |
19 | 0001 | 1001 |
20 | 0010 | 0000 |
21 | 0010 | 0001 |
22 | 0010 | 0010 |
23 | 0010 | 0011 |
24 | 0010 | 0100 |
25 | 0010 | 0101 |
26 | 0010 | 0110 |
27 | 0010 | 0111 |
28 | 0010 | 1000 |
29 | 0010 | 1001 |
30 | 0011 | 0000 |
The checksum is calculated as the sum of all nibbles, excluding the checksum nibble itself, modulo 16.
Bit | Meaning |
---|---|
0 | Power toggle |
1 | Always set to 1 |
2 | Sleep |
3 | Swing |
Example: 1101
means Power toggle, Sleep OFF, Swing ON.
00010110 10000100 00000000 00010011 00010100 00010101 00100100 11000100
Fan mode: low
Mode: fan_only
Clock: 13:00
Time on: OFF 14:00
Time off: OFF 15:00
Temperature: 24
Checksum: 12, Calculated: 12
Power Toggle: OFF
Sleep: OFF
Swing: OFF
The Encode notebook contains the code to generate new commands and encode them following the IR protocol.
The SmartIR generator notebook is used to generate the JSON file for the SmartIR integration for Home Assistant.