Mitsubishi AC IR remote protocol documentation

January 4, 2026 · View on GitHub

Overview

This document describes a Mitsubishi Air Conditioner infrared remote control protocol, reverse-engineered from a IR capture recorded using a Flipper Zero.

The protocol:

Transmits the entire AC state in a single frame

Is stateless on the receiver side (no ACK, no repeats observed)

Сompatible models:

  • SRK20ZSP-S
  • SRK25ZSP-S
  • SRK35ZSP-S
  • SRK45ZSP-S

Timing Definitions

It consist of 179 samples and we can select 5 distinct values.

HVAC_MITSUBISHI_HDR_MARK ~3180 - Header mark

HVAC_MITSUBISHI_HDR_SPACE ~1620 - Header space

HVAC_MITSUBISHI_BIT_MARK ~420 - bit mark, used to indicate a bit

HVAC_MITSUBISHI_ONE_SPACE ~1175 - Logical 1 space

HVAC_MITSUBISHI_ZERO_SPACE ~390 - Logical 0 space

A signal is ending with bit mark.

Raw signal

This is an example of a typical Mitsubishi AC remote IR signal(this signal was recorded using flipper zero):

frequency: 38000
duty_cycle: 0.330000
3188 1617 424 405 394 1178 424 377 422 406 394 1178 424 378 421 1178 423 377 422 405 394 1177 425 1177 424 1178 424 378 421 1179 423 404 395 1178 424 1176 424 1178 423 405 395 405 394 406 394 405 394 1179 423 1176 425 377 422 1178 424 1177 424 377 423 405 394 1179 423 405 394 406 394 1178 424 377 422 405 394 1179 422 1177 424 405 394 1178 424 1179 424 1176 425 405 394 1180 425 1175 426 1177 425 1176 425 1177 424 1177 424 405 395 1178 423 405 394 406 394 405 394 406 394 405 394 406 394 1177 425 1178 423 1178 423 404 395 406 394 1177 425 1176 425 1177 424 378 421 406 394 405 394 1178 424 1176 425 378 422 405 394 406 394 406 394 1178 424 1177 425 376 423 1179 423 376 423 1178 424 377 422 1178 423 405 395 405 395 1177 424 377 422 1177 424 377 423 1177 424

Decoding Process

  • Discard header (HVAC_MITSUBISHI_HDR_MARK & HVAC_MITSUBISHI_HDR_SPACE)

  • Remove all bit marks

  • Group into bytes

  • Convert to least significant bit version

MSB-first:

0: 01001010

1: 01110101

2: 11000011

3: 01100100

4: 10011011

5: 10111111

6: 01000000

7: 11100111

8: 00011000

9: 01101010

10: 10010101

Normalized Bytes (LSB-first)

0: 01010010 -\

1: 10101110 -|

2: 11000011 -| - Identifier bytes

3: 00100110 -|

4: 11011001 -/

5: 11111101 - bitwise reverse of byte 6

6: 00000010 - vane postion(part 1)

7: 11100111 - bitwise reverse of byte 8

8: 00011000 - first 3 bits are responsible for fan speed, next 2 for vane position(part 2)

9: 01010110 - bitwise reverse of byte 6

10: 10101001 - first 4 bits for temperature, last for AC mode

How it works

Temperature, 10th byte:

Temperature range: 18 - 32

x - value of first 4 bits of the last byte, representing the temperature

x = Temperature - 17

i.e.:

tmp = 32 => x = 15 = 0b1111 => 10th byte is 1111xxxx

tmp = 24 => x = 7 = 0b0111 => 10th byte is 0111xxxx


AC Modes, 10th byte:

xxxx0001 - AC off

xxxx1000 - Auto

xxxx1001 - Cold

xxxx1010- Dry

xxxx1011 - Fan

xxxx1100 - Heat


Fan speed, 8th byte:

000xxxxx - Auto fan speed

010xxxxx - Fan speed 1

011xxxxx - Fan speed 2

100xxxxx - Fan speed 3

110xxxxx - Fan speed 4

111xxxxx - Silent fan speed


Vane:

Vane Auto:

6th byte: 00000000

8th byte: xxx00xxx


Vane H1:

6th byte: 00000000

8th byte: xxx11xxx


Vane H2:

6th byte: 00000010

8th byte: xxx00xxx


Vane H3:

6th byte: 00000010

8th byte: xxx01xxx


Vane H4: 6th byte: 00000010

8th byte: xxx10xxx


Vane H4:

6th byte: 00000010

8th byte: xxx11xxx


Vane Auto Move:

6th byte: 00000000

8th byte: xxx10xxx