Irremoteesp8266: Adding Support for Carrier AC 72 bit

Created on 25 Jun 2020  Â·  62Comments  Â·  Source: crankyoldgit/IRremoteESP8266

Hi,

I have checked version 2.7.7 of IRremoteESP8266, that is included in the latest development version of tasmota_ir, which has the just added basic support for Carrier 40 and 64 bit, but it did not work for my Carrier X-Power Gold Inverter ACs.

Consequently I looked at issue #1127 and went on to do the same, so I extracted the raw data from my Tasmota Tuya IR bridge, which was then processed and analyzed:

  • The protocol seems to be using mostly 144 bits
  • At the first glance there seem to be hints, that the message is being sent potentially more than once, but there is only partial data available in the raw data
  • Nevertheless the AC accepts the first ON message replay, if it includes the following at its end: '0' followed by a DoubleLengthMARK, and then the same MARKs from the start followed by a '0'

The Google Sheet with all the results, raw data, and details can be found here:
https://docs.google.com/spreadsheets/d/1yidE2fvaO9kpCHfKafIdH31q4uaskYR1OwwrkyOxbp0/edit?usp=drivesdk

The 144 bit message format covers the normal different operating modes, device on/off, fan, and temperature settings. These are details:

START(4406 4335); Header_32bit(0x55040051); ConstantInNormal_48bit(0x000555500001); Temp_8bit; 0_8bit; Fan_8bit; Mode_8bit; CheckSum1_8bit(Fan^Temp); CheckSum2_8bit(Mode^1); STOP(556 7441); STOP2_like_START_followed_by_0(4411 4335 565)

Nevertheless the less frequently used commands seem to have diverging bit lengths, e.g.:

  • Air direction and Swing seem to be 32 bits shorter: 112 bits
  • While the commands that enable Economy and Hi-Power seem to be even 16 bits longer: 160 bits

Considering these bit length oddities for the rarely used commands, the idea is to get support for the most important 144 bit length commands, which would cover all my needs.

The binary number encoding uses '0' fillers to avoid subsequent '1's, e.g.:
0=00000000
1=00000001
2=00000100
3=00000101
4=00010000
5=00010001
6=00010100
7=00010101
8=01000000
9=01000001
…

Finally the remote control works with many models from the Carrier 42NQV series ACs, e.g.:

Confirmed:

  • 42NQV060M2 / 38NYV060M2
  • 42NQV050M2 / 38NYV050M2
  • 42NQV035M2 / 38NYV035M2
  • 42NQV025M2 / 38NYV025M2

Unconfirmed:

  • 42NQV050M
  • 42NQV045H
  • 42NQV035M
  • 42NQV035H
  • 42NQV025M
  • 42NQV025H
  • 42NQV015MM
  • 42NQV012MM
  • 42NQV009MM
  • 42NQV007MM

Thanks for the great IRremoteESP8266

enhancement

Most helpful comment

I added some debug messages to see why 56 bit swing send does not work, and so far I confirmed, that the 56 bit command does not get accepted, and at the first look the IR Code seems to be wrong. I will update here once I have more details.

OK, I found it: The temperature needs to be reset to 17 temporarily too for 56 bit commands, and with that there is a double accept beep from the AC for the commands sent (72 bits and then 56 bits).

Potential 56 bit code fix diff:

*** ir_Toshiba.cpp_org  2020-07-05 14:31:36.911807900 -0400
--- ir_Toshiba.cpp      2020-07-05 14:32:10.508177000 -0400
***************
*** 86,91 ****
--- 86,92 ----
    _irsend.sendToshibaAC(getRaw(), getStateLength(), repeat);
    if (_send_swing && (getStateLength() != kToshibaACStateLengthShort)) {
      setStateLength(kToshibaACStateLengthShort);
+     setTemp(17);
      setSwing(_swing_mode);
      _irsend.sendToshibaAC(getRaw(), getStateLength(), repeat);
      _restoreState();

All 62 comments

Could you try to use the latest version, preferably git master
Several changes was made to Carrier in the last release, see https://github.com/crankyoldgit/IRremoteESP8266/releases/tag/v2.7.8

I can try it, but the existing supported Carrier versions seem to look different, e.g. the checksum calculation is completely different in IRCarrierAc64::calcChecksum() which adds nibbles instead of XORing values. Additionally the 144 bit version has 5 fan levels instead of 3.

Thanks

@NiKiZe / @casasale I'm pretty sure this isn't an existing Carrier protocol. i.e. It's a new/not-yet-supported one.

@casasale
Taking the raw data for your first raw tasmota entry in the spreadsheet (e.g. https://docs.google.com/spreadsheets/d/1dKMio_OyL5GJKlCluuyghA2mIfKFLx9iMn5D38pcYig/edit#gid=520670848&range=A2)

I've massaged it a bit, and used the auto_analyse_raw_data.py tool (as per https://github.com/crankyoldgit/IRremoteESP8266/wiki/Adding-support-for-a-new-IR-protocol)

It gives the following output:

$ cat /tmp/data
uint16_t rawData[] = {4386,4330,574,1588,574,1612,546,1610,552,1612,548,532,548,530,548,1588,574,530,550,530,548,532,546,532,550,532,550,1586,548,1614,560,544,548,1614,548,508,572,530,550,530,550,530,550,532,548,532,548,1610,550,1612,548,1612,548,1588,572,1612,550,1584,576,1612,550,1588,574,530,550,530,548,510,572,530,548,530,552,526,554,530,550,532,548,530,550,1612,550,530,550,1588,572,532,550,1610,550,532,548,532,548,530,550,530,550,530,550,528,552,532,550,530,548,530,550,530,550,532,548,532,550,534,546,530,550,530,550,528,552,506,548,558,548,530,548,528,554,526,552,1612,548,530,550,1608,552,530,548,532,548,532,548,1586,574,7456,4388,4330,574,1588,572,1612,550,1612,548,1612,550,530,550,530,550,1612,548,532,550,530,550,528,552,530,550,530,548,1612,550,1608,554,530,550,1610,550,530,552,504,548,558,548,530,548,530,552,526,552,1612,548,1610,552,1612,548,1612,550,1586,572,1608,554,1606,554,1610,550,528,552,528,552,526,552,530};
$ tools/auto_analyse_raw_data.py -f /tmp/data
Found 218 timing entries.
Potential Mark Candidates:
[4388, 576]
Potential Space Candidates:
[7456, 4330, 1614, 558]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4387
kHdrSpace  = 4330
kBitMark   = 552
kOneSpace  = 1604
kZeroSpace = 529
kSpaceGap = 7456

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+111100100000110100000011111111000000000101010000000000000000000001010001GAP(7456)
  Bits: 72
  Hex:  0xF20D03FC0150000051 (MSB first)
        0x8A00000A803FC0B04F (LSB first)
  Dec:  4465049936067702030417 (MSB first)
        2545650693717859807311 (LSB first)
  Bin:  0b111100100000110100000011111111000000000101010000000000000000000001010001 (MSB first)
        0b100010100000000000000000000010101000000000111111110000001011000001001111 (LSB first)
kHdrMark+kHdrSpace+1111001000001101000000111111110000
  Bits: 34
  Hex:  0x3C8340FF0 (MSB first)
        0x3FC0B04F (LSB first)
  Dec:  16243757040 (MSB first)
        1069592655 (LSB first)
  Bin:  0b1111001000001101000000111111110000 (MSB first)
        0b0000111111110000001011000001001111 (LSB first)

Total Nr. of suspected bits: 106

It doesn't look 144 bit to me.
The data/analysis seems to indicate 72 + 34 = 106 bits .. or less, as the trailing 34 bits in the second section of data appear to be a repeat of part of the first section of data.
e.g. (When looking at it in LSB first order)
0x8A00000A803FC0B04F & 0x3FC0B04F.

i.e. The protocol could actually only have <= 72 bits of data in it.

I'm also confused at where the 112, 144, or 160 bits you mention fit this example data.

Can I suggest you convert the data you've collected (or use IRrecvDumpV2 or V3) and follow the guides in the wiki so we have a clearer picture of what this protocol really looks like?

While your spreadsheet is a great bit of work, I'm worried it might have some fundamental issues that need to be resolved before we can use/trust the analysis/data etc. That is, my quick analysis disagrees with yours significantly.

@crankyoldgit Thank you very much for analyzing and confirming, that it is a new Carrier protocol. I will do the suggested items during the next days and come back.

@crankyoldgit Do I need to obtain data via IRrecvDumpV2 or V3, or would it be enough to convert the data that I get from Tasmota?

So far, looking at the 3 different length messages it seems like most of the commands are 72 bits, a few (AirDir/Swing) are 56 bits and the long ones (Eco/Hi) are 80 bits.

Here is the latest spreadsheet based on the converted data which was then processed by auto_analyse_raw_data.py:
https://docs.google.com/spreadsheets/d/1yidE2fvaO9kpCHfKafIdH31q4uaskYR1OwwrkyOxbp0/edit?usp=drivesdk

My previous fundamental error was to assume something like a pulse length encoding instead of the space encoding, and now things seem to look more reasonable.

Looking for Carrier 80 bit I found a Carrier decoder file for 40, 64 and 80 bit on Github:
https://github.com/ToniA/Raw-IR-decoder-for-Arduino
The file that contains the Carrier decoders is:
https://github.com/ToniA/Raw-IR-decoder-for-Arduino/raw/master/Carrier.cpp

It checks for 0x4F and 0xB0 at the beginning of the bytes to decide if it is a carrier protocol which would match the LSB HEX in my case, if the bytes are looked at from the back: 0x8A00000A803FC0B04F

But, what strikes me a bit is the unexpected order of the temperatures the LSB approach that decodeCarrier3() uses:
const byte temperatures[] = { 17, 25, 21, 29, 19, 27, 23, 00, 18, 26, 22, 30, 20, 28, 24 };

In the spreadsheet I have analyzed the MSB version, and there the temperatures end up in a correct order assigned to numbers from 0 to 13, so my conclusion is that the MSB version seems to look nicer, and hence should be correct.
@crankyoldgit and @NiKiZe What do you think which version is the correct one: LSB or MSB?

Nevertheless these different message lengths (72, 56, 80) seem somehow off.

If temp goes up with MSB one step at a time then use that, also you will find "the same bytes" at the beginning.

My approach for this would be to update the test file for Carrier with the raw data you collect, and then add a decoder, when that is verified to work, add a send function and verify that on the AC

When this is in place continue with the analysis

@casasale I'll try to take a look tomorrow night/day after that and see if we can make a simple decoder/sender for it.
I'm with you all, MSB sounds like the way to do it to me.

@casasale I've had a quick look at your raw data collected via Tasmota. I think it's being truncated. Can you please capture one each of the 56, 72, 80 bit messages using IRrecvDumpV2 (or better)? (that would also explains the odd bit size of 34bits etc for the "second" section of data. eg. 72 + 34, 80 + 26, & 56 + 50) I just want to confirm it is a "repeat" of exactly the same size & data for each bit size. e.g. 72 + 72, 80 + 80, & 56 + 56 etc.

Looking at your captured data, it seems tasmota's buffer is probably around 220. We probably need to extend it out to 340 or so to be safe. IRrecvDumpV2 etc uses 1000.

Tasmota probably has some feature to increase the capture buffer for it's IR stuff, increasing that would be fine too.
(Paging @s-hadinger who probably knows what/where to change that value in Tasmota)

@crankyoldgit Yes, the default buffer size value is low in tasmota-ir, and there seems to be no other way to change it, but to compile:

define IR_RCV_BUFFER_SIZE 100

define IR_RCV_TIMEOUT 15

define IR_RCV_MIN_UNKNOWN_SIZE 6

72 bit full message example for ON:

uint16_t rawData_ON[295] = {4426, 4314,  588, 1572,  590, 1572,  588, 1572,  588, 1572,  588, 492,  588, 492,  590, 1572,  588, 492,  588, 492,  588, 492,  590, 490,  588, 492,  590, 1572,  588, 1572,  588, 492,  588, 1572,  590, 492,  588, 492,  588, 492,  588, 492,  588, 492,  588, 490,  588, 1572,  588, 1572,  588, 1572,  588, 1572,  588, 1572,  588, 1572,  588, 1572,  590, 1570,  590, 490,  588, 492,  588, 492,  588, 492,  588, 494,  588, 492,  586, 492,  588, 492,  588, 492,  588, 1572,  588, 492,  588, 1572,  588, 492,  588, 1572,  588, 492,  586, 492,  588, 492,  590, 490,  588, 492,  588, 494,  586, 492,  588, 492,  586, 492,  588, 492,  588, 490,  588, 492,  586, 492,  590, 492,  586, 494,  588, 492,  588, 492,  588, 496,  584, 492,  588, 492,  588, 492,  588, 1572,  588, 492,  586, 1574,  588, 492,  588, 492,  588, 492,  590, 1570,  588, 7420,  4424, 4318,  588, 1572,  588, 1572,  590, 1572,  588, 1570,  588, 492,  588, 492,  588, 1572,  588, 492,  588, 492,  590, 492,  586, 492,  588, 490,  588, 1572,  588, 1572,  588, 492,  588, 1576,  584, 492,  590, 490,  588, 492,  588, 492,  588, 492,  588, 492,  588, 1574,  588, 1572,  588, 1576,  584, 1574,  586, 1574,  588, 1574,  584, 1574,  586, 1574,  588, 494,  584, 494,  588, 492,  588, 492,  588, 492,  590, 494,  584, 494,  586, 494,  588, 492,  586, 1572,  588, 492,  590, 1572,  588, 490,  588, 1574,  590, 490,  588, 490,  590, 490,  590, 490,  588, 490,  588, 490,  590, 490,  590, 492,  588, 492,  588, 492,  590, 494,  584, 490,  590, 498,  584, 490,  588, 492,  590, 490,  592, 488,  592, 490,  590, 494,  584, 490,  592, 494,  586, 1574,  586, 490,  590, 1570,  590, 492,  588, 490,  590, 488,  590, 1570,  590};  // TOSHIBA_AC
Found 295 timing entries.
Potential Mark Candidates:
[4426, 592]
Potential Space Candidates:
[7420, 4318, 1576, 498]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4425
kHdrSpace  = 4316
kBitMark   = 588
kOneSpace  = 1572
kZeroSpace = 491
kSpaceGap = 7420

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+111100100000110100000011111111000000000101010000000000000000000001010001GAP(7420)
  Bits: 72
  Hex:  0xF20D03FC0150000051 (MSB first)
        0x8A00000A803FC0B04F (LSB first)
  Dec:  4465049936067702030417 (MSB first)
        2545650693717859807311 (LSB first)
  Bin:  0b111100100000110100000011111111000000000101010000000000000000000001010001 (MSB first)
        0b100010100000000000000000000010101000000000111111110000001011000001001111 (LSB first)
kHdrMark+kHdrSpace+111100100000110100000011111111000000000101010000000000000000000001010001
  Bits: 72
  Hex:  0xF20D03FC0150000051 (MSB first)
        0x8A00000A803FC0B04F (LSB first)
  Dec:  4465049936067702030417 (MSB first)
        2545650693717859807311 (LSB first)
  Bin:  0b111100100000110100000011111111000000000101010000000000000000000001010001 (MSB first)
        0b100010100000000000000000000010101000000000111111110000001011000001001111 (LSB first)

Total Nr. of suspected bits: 144

56 bits full message example for SWING_ON and SWING_OFF:

uint16_t rawData_SWING_ON[231] = {4426, 4316,  590, 1572,  590, 1578,  584, 1570,  590, 1570,  590, 490,  588, 490,  590, 1570,  590, 490,  588, 492,  588, 492,  590, 490,  590, 490,  588, 1572,  590, 1570,  592, 490,  590, 1570,  590, 490,  588, 492,  590, 490,  590, 490,  590, 492,  588, 488,  590, 490,  590, 1572,  588, 1572,  590, 1570,  590, 1570,  590, 1574,  586, 1570,  590, 1570,  590, 1570,  590, 490,  590, 490,  590, 490,  590, 1570,  590, 490,  590, 490,  590, 490,  590, 490,  588, 1570,  590, 490,  590, 490,  588, 490,  590, 490,  590, 490,  590, 492,  588, 488,  590, 1570,  592, 488,  590, 496,  584, 1572,  590, 494,  588, 488,  590, 494,  586, 494,  586, 490,  588, 7420,  4428, 4314,  590, 1570,  590, 1570,  590, 1570,  590, 1570,  590, 490,  590, 494,  586, 1572,  590, 490,  590, 490,  590, 490,  590, 490,  590, 490,  590, 1570,  590, 1570,  590, 492,  590, 1570,  590, 490,  590, 492,  586, 494,  588, 488,  590, 490,  590, 490,  590, 490,  590, 1574,  586, 1570,  592, 1570,  590, 1574,  588, 1570,  590, 1570,  590, 1572,  590, 1570,  590, 490,  590, 494,  586, 494,  586, 1570,  590, 490,  590, 490,  588, 494,  586, 496,  584, 1572,  590, 492,  586, 490,  590, 494,  588, 492,  584, 494,  586, 496,  584, 496,  582, 1574,  588, 492,  588, 494,  584, 1572,  590, 494,  586, 494,  586, 494,  588, 488,  590, 494,  586};  // UNKNOWN 9C9F3C37
Found 231 timing entries.
Potential Mark Candidates:
[4428, 592]
Potential Space Candidates:
[7420, 4316, 1578, 496]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4427
kHdrSpace  = 4315
kBitMark   = 588
kOneSpace  = 1571
kZeroSpace = 491
kSpaceGap = 7420

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+11110010000011010000000111111110001000010000000100100000GAP(7420)
  Bits: 56
  Hex:  0xF20D01FE210120 (MSB first)
        0x0480847F80B04F (LSB first)
  Dec:  68131246573682976 (MSB first)
        1267206470021199 (LSB first)
  Bin:  0b11110010000011010000000111111110001000010000000100100000 (MSB first)
        0b00000100100000001000010001111111100000001011000001001111 (LSB first)
kHdrMark+kHdrSpace+11110010000011010000000111111110001000010000000100100000
  Bits: 56
  Hex:  0xF20D01FE210120 (MSB first)
        0x0480847F80B04F (LSB first)
  Dec:  68131246573682976 (MSB first)
        1267206470021199 (LSB first)
  Bin:  0b11110010000011010000000111111110001000010000000100100000 (MSB first)
        0b00000100100000001000010001111111100000001011000001001111 (LSB first)

Total Nr. of suspected bits: 112

uint16_t rawData_SWING_OFF[231] = {4424, 4318,  586, 1576,  586, 1572,  588, 1574,  588, 1572,  588, 494,  586, 498,  584, 1574,  586, 494,  588, 492,  588, 492,  586, 492,  588, 494,  586, 1574,  586, 1576,  584, 492,  588, 1578,  582, 494,  588, 490,  586, 494,  588, 498,  580, 496,  586, 494,  586, 492,  588, 1576,  582, 1574,  586, 1578,  584, 1572,  588, 1574,  588, 1574,  586, 1574,  586, 1574,  588, 494,  586, 494,  586, 494,  590, 1570,  588, 492,  586, 498,  584, 494,  586, 494,  588, 1576,  582, 494,  586, 494,  586, 494,  586, 492,  586, 494,  586, 492,  588, 1572,  588, 492,  586, 494,  586, 494,  586, 1574,  588, 492,  588, 492,  588, 494,  588, 1578,  582, 1574,  588, 7424,  4420, 4318,  588, 1574,  586, 1576,  584, 1580,  582, 1574,  588, 492,  588, 494,  584, 1574,  588, 492,  586, 496,  584, 494,  586, 492,  588, 494,  586, 1574,  588, 1574,  584, 494,  588, 1574,  588, 492,  586, 494,  586, 494,  588, 492,  586, 494,  588, 492,  586, 494,  584, 1580,  584, 1574,  588, 1572,  588, 1572,  588, 1576,  584, 1578,  584, 1572,  588, 1572,  588, 494,  586, 494,  584, 494,  588, 1574,  586, 496,  584, 494,  586, 492,  588, 492,  588, 1572,  588, 494,  588, 492,  586, 496,  586, 494,  586, 492,  588, 492,  586, 1574,  588, 492,  586, 492,  588, 496,  584, 1576,  584, 492,  586, 494,  588, 492,  588, 1574,  586, 1574,  588};  // UNKNOWN 2BC29FFB
Found 231 timing entries.
Potential Mark Candidates:
[4424, 590]
Potential Space Candidates:
[7424, 4318, 1580, 498]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4422
kHdrSpace  = 4318
kBitMark   = 586
kOneSpace  = 1574
kZeroSpace = 493
kSpaceGap = 7424

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+11110010000011010000000111111110001000010000001000100011GAP(7424)
  Bits: 56
  Hex:  0xF20D01FE210223 (MSB first)
        0xC440847F80B04F (LSB first)
  Dec:  68131246573683235 (MSB first)
        55240033254289487 (LSB first)
  Bin:  0b11110010000011010000000111111110001000010000001000100011 (MSB first)
        0b11000100010000001000010001111111100000001011000001001111 (LSB first)
kHdrMark+kHdrSpace+11110010000011010000000111111110001000010000001000100011
  Bits: 56
  Hex:  0xF20D01FE210223 (MSB first)
        0xC440847F80B04F (LSB first)
  Dec:  68131246573683235 (MSB first)
        55240033254289487 (LSB first)
  Bin:  0b11110010000011010000000111111110001000010000001000100011 (MSB first)
        0b11000100010000001000010001111111100000001011000001001111 (LSB first)

Total Nr. of suspected bits: 112

56 bits full message example for AIR_DIRECTION:

uint16_t rawData_AIR_DIRECTION[115] = {4424, 4318,  588, 1574,  588, 1572,  588, 1574,  586, 1572,  590, 490,  586, 494,  586, 1574,  588, 492,  586, 494,  586, 494,  586, 496,  584, 492,  588, 1572,  588, 1572,  590, 492,  588, 1572,  590, 490,  588, 492,  586, 494,  588, 492,  588, 492,  588, 494,  584, 492,  588, 1572,  588, 1574,  588, 1574,  588, 1572,  588, 1572,  588, 1572,  588, 1574,  590, 1570,  588, 494,  586, 496,  584, 494,  588, 1572,  588, 492,  588, 492,  588, 490,  588, 492,  590, 1572,  588, 492,  588, 496,  586, 492,  588, 492,  586, 492,  588, 492,  588, 490,  590, 490,  588, 492,  588, 490,  588, 1572,  588, 492,  588, 492,  588, 490,  588, 492,  588, 1572,  586};  // UNKNOWN DEB8845C
Found 115 timing entries.
Potential Mark Candidates:
[4424, 590]
Potential Space Candidates:
[4318, 1574, 496]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4424
kHdrSpace  = 4318
kBitMark   = 587
kOneSpace  = 1572
kZeroSpace = 492

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+11110010000011010000000111111110001000010000000000100001
  Bits: 56
  Hex:  0xF20D01FE210021 (MSB first)
        0x8400847F80B04F (LSB first)
  Dec:  68131246573682721 (MSB first)
        37155266000629839 (LSB first)
  Bin:  0b11110010000011010000000111111110001000010000000000100001 (MSB first)
        0b10000100000000001000010001111111100000001011000001001111 (LSB first)

Total Nr. of suspected bits: 56

80 bits full message example for HIGH_POWER ON:

uint16_t rawData_HIGH_POWER_ON[327] = {4424, 4320,  582, 1574,  588, 1578,  582, 1574,  586, 1578,  586, 496,  582, 492,  586, 1576,  586, 492,  586, 492,  588, 496,  584, 496,  584, 496,  584, 1626,  534, 1626,  534, 494,  586, 1578,  582, 494,  586, 494,  586, 494,  588, 492,  586, 492,  586, 1576,  586, 494,  588, 492,  588, 1574,  588, 1576,  584, 1578,  584, 1574,  588, 1574,  588, 492,  588, 1572,  590, 1570,  590, 492,  588, 492,  590, 488,  590, 494,  584, 1570,  592, 492,  586, 490,  590, 1572,  590, 490,  590, 1570,  590, 490,  590, 1570,  590, 492,  588, 490,  588, 492,  588, 492,  590, 490,  590, 494,  586, 490,  590, 490,  588, 490,  590, 490,  588, 492,  590, 490,  588, 492,  590, 490,  590, 490,  590, 494,  584, 490,  590, 490,  590, 490,  590, 490,  588, 490,  588, 492,  588, 492,  586, 492,  588, 490,  588, 492,  588, 490,  590, 1572,  588, 494,  586, 1574,  588, 492,  588, 1572,  590, 1572,  588, 492,  588, 492,  586, 494,  588, 7422,  4424, 4320,  586, 1572,  588, 1572,  588, 1576,  584, 1574,  588, 494,  586, 492,  588, 1572,  588, 492,  588, 492,  588, 492,  588, 494,  586, 496,  584, 1574,  586, 1578,  582, 494,  586, 1578,  584, 494,  586, 492,  588, 492,  586, 496,  584, 494,  586, 1578,  584, 494,  586, 494,  584, 1574,  588, 1572,  586, 1574,  588, 1574,  588, 1572,  588, 494,  590, 1572,  588, 1574,  588, 492,  588, 492,  588, 492,  586, 492,  588, 1572,  588, 498,  582, 492,  588, 1576,  586, 492,  588, 1572,  588, 494,  588, 1572,  588, 492,  586, 492,  588, 492,  590, 490,  588, 492,  586, 492,  588, 492,  590, 490,  588, 490,  588, 492,  590, 490,  588, 492,  590, 490,  588, 490,  590, 490,  590, 490,  592, 488,  592, 494,  584, 494,  586, 490,  590, 494,  586, 494,  588, 488,  592, 490,  588, 492,  586, 490,  592, 490,  588, 1576,  584, 494,  586, 1570,  590, 494,  586, 1576,  582, 1572,  590, 490,  590, 490,  588, 490,  590};  // UNKNOWN 54926187

Found 327 timing entries.
Potential Mark Candidates:
[4424, 592]
Potential Space Candidates:
[7422, 4320, 1626, 498]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4424
kHdrSpace  = 4320
kBitMark   = 586
kOneSpace  = 1576
kZeroSpace = 492
kSpaceGap = 7422

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+11110010000011010000010011111011000010010101000000000000000000000000000101011000GAP(7422)
  Bits: 80
  Hex:  0xF20D04FB095000000158 (MSB first)
        0x1A8000000A90DF20B04F (LSB first)
  Dec:  1143052855418246874005848 (MSB first)
        125142711807662933192783 (LSB first)
  Bin:  0b11110010000011010000010011111011000010010101000000000000000000000000000101011000 (MSB first)
        0b00011010100000000000000000000000000010101001000011011111001000001011000001001111 (LSB first)
kHdrMark+kHdrSpace+11110010000011010000010011111011000010010101000000000000000000000000000101011000
  Bits: 80
  Hex:  0xF20D04FB095000000158 (MSB first)
        0x1A8000000A90DF20B04F (LSB first)
  Dec:  1143052855418246874005848 (MSB first)
        125142711807662933192783 (LSB first)
  Bin:  0b11110010000011010000010011111011000010010101000000000000000000000000000101011000 (MSB first)
        0b00011010100000000000000000000000000010101001000011011111001000001011000001001111 (LSB first)

Total Nr. of suspected bits: 160

80 bit full message example for ECO ON:

uint16_t rawData_ECO_ON[327] = {4426, 4316,  590, 1572,  590, 1572,  590, 1570,  588, 1572,  588, 490,  590, 490,  590, 1574,  586, 490,  590, 490,  592, 494,  586, 488,  590, 490,  588, 1572,  590, 1572,  588, 490,  590, 1570,  588, 492,  588, 492,  588, 490,  592, 490,  588, 494,  586, 1570,  590, 492,  588, 492,  588, 1572,  590, 1572,  590, 1570,  588, 1572,  590, 1570,  590, 492,  588, 1572,  590, 1576,  584, 494,  586, 494,  586, 490,  590, 490,  590, 1572,  590, 490,  590, 490,  590, 1572,  592, 488,  590, 1572,  588, 496,  584, 1570,  590, 492,  590, 490,  592, 492,  586, 492,  590, 494,  588, 494,  582, 496,  584, 490,  590, 490,  590, 494,  584, 496,  584, 492,  588, 496,  584, 492,  590, 490,  590, 490,  588, 490,  590, 496,  582, 492,  590, 488,  592, 492,  586, 490,  588, 492,  590, 490,  590, 494,  586, 490,  590, 1572,  590, 1570,  590, 490,  590, 1570,  588, 492,  590, 1570,  590, 1570,  588, 492,  588, 1572,  588, 492,  588, 7422,  4424, 4316,  590, 1572,  590, 1576,  584, 1570,  590, 1572,  588, 492,  588, 494,  588, 1570,  588, 496,  586, 490,  590, 490,  590, 490,  590, 496,  584, 1576,  584, 1572,  590, 490,  590, 1570,  590, 490,  588, 496,  584, 494,  586, 494,  586, 496,  584, 1576,  586, 490,  590, 492,  588, 1572,  590, 1570,  590, 1570,  590, 1570,  592, 1570,  590, 490,  588, 1572,  590, 1570,  590, 490,  588, 492,  588, 496,  584, 496,  584, 1570,  592, 490,  590, 490,  588, 1572,  590, 492,  586, 1570,  590, 496,  584, 1570,  590, 494,  588, 490,  590, 490,  588, 494,  586, 494,  586, 490,  590, 496,  584, 490,  590, 492,  590, 494,  586, 492,  588, 490,  590, 490,  590, 488,  590, 496,  584, 494,  586, 490,  590, 494,  586, 490,  590, 494,  586, 490,  590, 492,  590, 490,  590, 488,  590, 494,  586, 494,  586, 1570,  590, 1570,  590, 494,  588, 1570,  590, 490,  590, 1570,  590, 1576,  584, 496,  586, 1570,  590, 490,  588};  // UNKNOWN 58D214DF
Found 327 timing entries.
Potential Mark Candidates:
[4426, 592]
Potential Space Candidates:
[7422, 4316, 1576, 496]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4425
kHdrSpace  = 4316
kBitMark   = 588
kOneSpace  = 1571
kZeroSpace = 491
kSpaceGap = 7422

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+11110010000011010000010011111011000010010101000000000000000000000000001101011010GAP(7422)
  Bits: 80
  Hex:  0xF20D04FB09500000035A (MSB first)
        0x5AC000000A90DF20B04F (LSB first)
  Dec:  1143052855418246874006362 (MSB first)
        428554758332037638172751 (LSB first)
  Bin:  0b11110010000011010000010011111011000010010101000000000000000000000000001101011010 (MSB first)
        0b01011010110000000000000000000000000010101001000011011111001000001011000001001111 (LSB first)
kHdrMark+kHdrSpace+11110010000011010000010011111011000010010101000000000000000000000000001101011010
  Bits: 80
  Hex:  0xF20D04FB09500000035A (MSB first)
        0x5AC000000A90DF20B04F (LSB first)
  Dec:  1143052855418246874006362 (MSB first)
        428554758332037638172751 (LSB first)
  Bin:  0b11110010000011010000010011111011000010010101000000000000000000000000001101011010 (MSB first)
        0b01011010110000000000000000000000000010101001000011011111001000001011000001001111 (LSB first)

Total Nr. of suspected bits: 160

80 bit message example for HI_POWER + TEMP23:

uint16_t rawData_HIGH_POWER_ON_TEMP23[327] = {4420, 4322,  584, 1576,  584, 1576,  584, 1576,  584, 1576,  584, 500,  580, 494,  586, 1574,  584, 496,  584, 494,  584, 500,  582, 494,  584, 496,  582, 1576,  586, 1576,  584, 500,  582, 1578,  582, 494,  584, 494,  586, 494,  586, 494,  586, 494,  584, 1574,  586, 496,  584, 494,  586, 1574,  586, 1576,  584, 1576,  586, 1574,  586, 1576,  586, 498,  582, 1576,  588, 1574,  586, 500,  580, 494,  586, 496,  582, 496,  586, 1574,  586, 496,  584, 496,  582, 1578,  582, 500,  582, 1574,  586, 1576,  584, 498,  582, 502,  578, 498,  580, 498,  584, 494,  586, 494,  584, 500,  578, 498,  586, 500,  580, 498,  582, 496,  586, 500,  578, 498,  582, 496,  584, 494,  584, 498,  584, 498,  580, 496,  586, 496,  582, 496,  582, 498,  584, 496,  584, 494,  586, 494,  586, 500,  580, 496,  584, 498,  582, 496,  584, 1576,  586, 500,  580, 1576,  582, 1576,  586, 496,  584, 1576,  586, 496,  582, 498,  582, 496,  586, 7430,  4414, 4322,  584, 1578,  584, 1576,  582, 1582,  580, 1580,  582, 498,  582, 496,  584, 1576,  584, 496,  584, 496,  584, 496,  584, 496,  584, 496,  586, 1574,  586, 1576,  586, 492,  586, 1576,  586, 494,  584, 496,  584, 496,  584, 498,  582, 494,  586, 1576,  582, 504,  576, 498,  584, 1574,  584, 1576,  584, 1580,  582, 1578,  584, 1576,  584, 496,  584, 1576,  582, 1578,  584, 496,  584, 494,  584, 498,  580, 498,  582, 1576,  586, 496,  582, 498,  584, 1576,  586, 496,  584, 1576,  584, 1576,  586, 496,  584, 496,  584, 496,  584, 496,  584, 496,  584, 496,  586, 494,  584, 496,  586, 496,  584, 498,  582, 496,  584, 496,  584, 496,  586, 494,  586, 494,  586, 496,  584, 496,  584, 496,  584, 500,  580, 496,  586, 494,  584, 496,  584, 496,  582, 554,  526, 502,  578, 496,  586, 496,  584, 494,  584, 1578,  584, 496,  584, 1576,  586, 1576,  584, 496,  582, 1578,  584, 494,  584, 496,  584, 496,  584};  // UNKNOWN 35DF3237
Found 327 timing entries.
Potential Mark Candidates:
[4420, 588]
Potential Space Candidates:
[7430, 4322, 1582, 554]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4417
kHdrSpace  = 4322
kBitMark   = 583
kOneSpace  = 1576
kZeroSpace = 496
kSpaceGap = 7430

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+11110010000011010000010011111011000010010110000000000000000000000000000101101000GAP(7430)
  Bits: 80
  Hex:  0xF20D04FB096000000168 (MSB first)
        0x168000000690DF20B04F (LSB first)
  Dec:  1143052855418315593482600 (MSB first)
        106253245871786305826895 (LSB first)
  Bin:  0b11110010000011010000010011111011000010010110000000000000000000000000000101101000 (MSB first)
        0b00010110100000000000000000000000000001101001000011011111001000001011000001001111 (LSB first)
kHdrMark+kHdrSpace+11110010000011010000010011111011000010010110000000000000000000000000000101101000
  Bits: 80
  Hex:  0xF20D04FB096000000168 (MSB first)
        0x168000000690DF20B04F (LSB first)
  Dec:  1143052855418315593482600 (MSB first)
        106253245871786305826895 (LSB first)
  Bin:  0b11110010000011010000010011111011000010010110000000000000000000000000000101101000 (MSB first)
        0b00010110100000000000000000000000000001101001000011011111001000001011000001001111 (LSB first)

Total Nr. of suspected bits: 160

80 bit message example for ECO_ON and TEMP24:

uint16_t rawData_ECO_ON_TEMP24[327] = {4420, 4318,  586, 1576,  558, 1600,  556, 1606,  554, 1606,  556, 524,  556, 526,  552, 1606,  554, 530,  548, 526,  552, 528,  554, 526,  552, 526,  554, 1612,  548, 1606,  554, 526,  554, 1606,  554, 528,  552, 526,  554, 526,  554, 526,  556, 524,  556, 1608,  550, 526,  554, 526,  552, 1608,  554, 1606,  556, 1606,  554, 1610,  550, 1608,  552, 528,  550, 1606,  556, 1604,  554, 528,  554, 526,  556, 522,  558, 526,  552, 1610,  548, 530,  552, 524,  556, 1610,  550, 524,  554, 1610,  550, 1606,  554, 1606,  556, 530,  550, 526,  554, 524,  554, 526,  556, 526,  554, 524,  556, 526,  554, 528,  554, 526,  556, 526,  552, 526,  554, 528,  552, 526,  554, 526,  554, 530,  550, 526,  554, 528,  552, 524,  554, 526,  556, 524,  556, 524,  556, 524,  556, 524,  556, 524,  554, 526,  556, 524,  554, 1664,  496, 1614,  548, 526,  552, 1608,  554, 1606,  556, 1606,  558, 1604,  558, 524,  552, 1610,  550, 528,  552, 7452,  4394, 4348,  558, 1602,  556, 1604,  558, 1604,  556, 1610,  550, 526,  552, 524,  556, 1608,  554, 530,  550, 526,  554, 526,  554, 528,  550, 524,  558, 1604,  556, 1602,  558, 524,  556, 1608,  552, 522,  556, 526,  554, 524,  556, 524,  558, 522,  556, 1608,  552, 524,  556, 522,  556, 1604,  556, 1604,  558, 1604,  556, 1604,  556, 1606,  556, 526,  554, 1606,  554, 1608,  552, 524,  556, 530,  548, 530,  552, 524,  554, 1608,  552, 526,  556, 526,  554, 1606,  556, 522,  556, 1608,  554, 1604,  556, 1604,  556, 526,  554, 526,  554, 524,  554, 526,  554, 524,  556, 526,  554, 524,  558, 524,  552, 528,  554, 522,  556, 524,  556, 532,  546, 530,  552, 524,  556, 526,  552, 526,  554, 524,  554, 524,  554, 532,  550, 524,  554, 524,  556, 524,  556, 526,  556, 526,  552, 524,  556, 524,  556, 1610,  552, 1608,  554, 528,  552, 1606,  554, 1610,  552, 1604,  556, 1604,  556, 524,  558, 1604,  554, 530,  552};  // UNKNOWN 3008239F
Found 327 timing entries.
Potential Mark Candidates:
[4420, 586]
Potential Space Candidates:
[7452, 4348, 1664, 532]

Guessing encoding type:
Looks like it uses space encoding. Yay!

Guessing key value:
kHdrMark   = 4407
kHdrSpace  = 4333
kBitMark   = 553
kOneSpace  = 1606
kZeroSpace = 525
kSpaceGap = 7452

Decoding protocol based on analysis so far:

kHdrMark+kHdrSpace+11110010000011010000010011111011000010010111000000000000000000000000001101111010GAP(7452)
  Bits: 80
  Hex:  0xF20D04FB09700000037A (MSB first)
        0x5EC000000E90DF20B04F (LSB first)
  Dec:  1143052855418384312959866 (MSB first)
        447444224267914265538639 (LSB first)
  Bin:  0b11110010000011010000010011111011000010010111000000000000000000000000001101111010 (MSB first)
        0b01011110110000000000000000000000000011101001000011011111001000001011000001001111 (LSB first)
kHdrMark+kHdrSpace+11110010000011010000010011111011000010010111000000000000000000000000001101111010
  Bits: 80
  Hex:  0xF20D04FB09700000037A (MSB first)
        0x5EC000000E90DF20B04F (LSB first)
  Dec:  1143052855418384312959866 (MSB first)
        447444224267914265538639 (LSB first)
  Bin:  0b11110010000011010000010011111011000010010111000000000000000000000000001101111010 (MSB first)
        0b01011110110000000000000000000000000011101001000011011111001000001011000001001111 (LSB first)

Total Nr. of suspected bits: 160

Protocol summary:

  • Normal operation (On/Off, Mode, Fan, temp): 72 bits message repeated twice with GAP in-between
  • Swing On/Off: 56 bits message repeated twice with GAP in-between
  • Air direction: 56 bits message without repeating and without GAP
  • If Hi-Power or Eco is set on, and any normal operation command used with Hi-Power/Eco : 80 bits message repeated twice with GAP in-between
72 bits:         MARK; SPACE; ID; ~ID; LENGTH; ~LENGTH; OP; (Temp, Swing); (Fan, Mode); Zero; (Fan^Temp, Mode^OP); GAP
56 bits Air_Dir: MARK; SPACE; ID; ~ID; LENGTH; ~LENGTH; OP; (Temp, Swing); (Fan, Air_Dir)
56 bits Swing:   MARK; SPACE; ID; ~ID; LENGTH; ~LENGTH; OP; (Temp, Swing); (Fan, Swing^Fan); GAP
80 bits Power:   MARK; SPACE; ID; ~ID; LENGTH; ~LENGTH; OP; (Temp, Swing); (Fan, Mode); Zero; Power; (Fan^Temp, Mode^Power^OP); GAP

Possible Length Values:

  • 0: 40 bits
  • 1: 56 bits
  • 2: 64 bits
  • 3: 72 bits
  • 4: 80 bits

72 bit full message example for ON:

uint16_t rawData_ON[295] = {4426, 4314,  [SNIP],  590};  // TOSHIBA_AC

TOSHIBA_AC? Is IRrecvDumpV2 etc detecting this as the TOSHIBA_AC protocol?

Yes, IRrecvDumpV2 is sometimes detecting it as Toshiba, but if you repeat the commands, then it appears again as Unknown, so it looks like a bogus detection.

I am uploading the latest spreadsheet.

Yes, IRrecvDumpV2 is sometimes detecting it as Toshiba

Can you supply the full output of the dump when it does? And if it decodes it into detailed settings, are those settings close/correct?

It's unlikely that the library is detecting it as Toshiba incorrectly, as it does have a check as part of the decode.
e.g.
https://github.com/crankyoldgit/IRremoteESP8266/blob/0fb37a3afa329487a03af8d333f5f869201009c0/src/ir_Toshiba.cpp#L336-L340
&
https://github.com/crankyoldgit/IRremoteESP8266/blob/0fb37a3afa329487a03af8d333f5f869201009c0/src/ir_Toshiba.cpp#L97-L110

In the dump I repeated the 72 bits ON/OFF (22C, Mode =Auto, Fan = AUTO), and as can be seen only 23 times it got detected as TOSHIBA_AC, and 48 times it was detected as UNKNOWN, while I have a feeling, that it gets detected more often as TOSHIBA_AC if I get really close to the photo IR detector, so eventually the timing settings are slightly different between Carrier and Toshiba.

The very few times it gets detected as TOSHIBA_AC, then the Mode seems to be partially correct when switching ON, but wrong (3) when switching OFF, i.e. heat is 0b0011, and off is 0b0111, so I believe the Toshiba decoder detects only 2 bits instead of the necessary 3 for the Carrier OFF and Mode_Fan, e.g. mode_fan is 0b0100, which seems to be detected too with just 2 bits instead of 3 bits, (Bold is wrong)

Mode 0 Auto 0b0000:

  • Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 22C, Fan: 0 (Auto)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)

Mode 1 Cool 0b0001:

  • Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 22C, Fan: 0 (Auto)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)

Mode 2 Dry 0b0010:

  • Mesg Desc.: Power: On, Mode: 2 (Dry), Temp: 22C, Fan: 0 (Auto)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)

Mode 3 Heat 0b0011:

  • Mesg Desc.: Power: On, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)

Mode 4 Fan 0b0010:

  • Mesg Desc.: Power: Off, Mode: 0 (Auto), Temp: 22C, Fan: 0 (Auto)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)

And the temperature seems to be correct:

  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 23C, Fan: 0 (Auto)
  • Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 23C, Fan: 0 (Auto)

The Fan seems to be detected correctly, but the levels 2 and 4 are marked UNKNOWN:

  • Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 23C, Fan: 1 (Low)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 17C, Fan: 1 (Low)
  • Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 17C, Fan: 2 (UNKNOWN)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 17C, Fan: 2 (UNKNOWN)
  • Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 17C, Fan: 3 (Medium)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 17C, Fan: 3 (Medium)
  • Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 17C, Fan: 4 (UNKNOWN)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 17C, Fan: 4 (UNKNOWN)
  • Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 17C, Fan: 5 (High)
  • Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 17C, Fan: 5 (High)

There was no match in commands of different non 72 bits lengths:

  • Repeated 80 bits for Power Hi/ECO
  • Repeated 56 bits for Swing On/Off
  • Once 56 bits for Air Dir

DUMP:

Timestamp : 000031.438
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4424, 4316, 590, 1572, 590, 1570, 590, 1572, 588, 1572, 588, 490, 590, 490, 590, 1570, 590, 496, 584, 490, 592, 498, 580, 492, 590, 494, 584, 1572, 588, 1572, 588, 490, 590, 1576, 584, 496, 584, 496, 584, 490, 592, 544, 534, 488, 590, 490, 590, 1570, 592, 1570, 590, 1572, 588, 1570, 590, 1570, 590, 1570, 590, 1570, 592, 1570, 588, 492, 588, 496, 584, 488, 592, 498, 580, 496, 584, 494, 584, 490, 590, 490, 590, 490, 590, 1570, 590, 490, 590, 1570, 590, 490, 590, 1572, 590, 490, 588, 490, 590, 498, 580, 492, 588, 490, 590, 490, 590, 492, 590, 488, 590, 490, 588, 490, 588, 490, 590, 490, 590, 494, 584, 490, 590, 488, 590, 488, 590, 490, 592, 488, 590, 490, 590, 490, 588, 490, 590, 1572, 588, 492, 588, 1570, 590, 490, 588, 490, 590, 490, 590, 1570, 590, 7418, 4424, 4316, 590, 1572, 590, 1570, 590, 1570, 590, 1570, 590, 488, 592, 494, 584, 1572, 592, 488, 590, 490, 588, 490, 590, 490, 588, 490, 590, 1572, 590, 1572, 590, 488, 592, 1570, 588, 490, 592, 488, 592, 488, 590, 490, 590, 490, 590, 490, 590, 1570, 592, 1568, 592, 1570, 592, 1570, 590, 1570, 592, 1570, 590, 1570, 592, 1568, 590, 490, 590, 490, 590, 488, 592, 488, 592, 488, 592, 488, 590, 490, 590, 488, 592, 488, 590, 1570, 590, 492, 586, 1576, 584, 490, 588, 1572, 590, 488, 592, 492, 586, 490, 592, 488, 590, 490, 590, 488, 592, 488, 590, 490, 588, 490, 590, 490, 590, 490, 590, 490, 590, 490, 590, 488, 592, 490, 590, 496, 584, 490, 590, 488, 590, 490, 590, 490, 590, 490, 590, 1568, 590, 490, 588, 1572, 588, 492, 590, 490, 590, 490, 590, 1570, 590}; // UNKNOWN E2D990EB

Timestamp : 000034.813
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4428, 4312, 590, 1570, 590, 1574, 588, 1568, 590, 1574, 588, 488, 592, 486, 592, 1568, 590, 490, 590, 490, 590, 488, 594, 488, 588, 490, 590, 1570, 592, 1568, 592, 492, 588, 1570, 590, 494, 586, 490, 592, 488, 592, 488, 592, 490, 592, 488, 590, 1570, 590, 1570, 592, 1568, 590, 1570, 590, 1570, 590, 1572, 588, 1570, 592, 1568, 592, 490, 590, 494, 586, 490, 590, 490, 592, 488, 590, 490, 588, 492, 588, 492, 592, 488, 590, 1570, 590, 488, 592, 1568, 592, 490, 590, 1570, 590, 544, 538, 488, 590, 490, 590, 490, 590, 490, 590, 488, 592, 488, 592, 488, 592, 488, 590, 1570, 592, 1568, 592, 1568, 592, 490, 588, 490, 592, 488, 590, 496, 584, 488, 592, 490, 592, 488, 588, 492, 590, 488, 590, 1570, 590, 490, 590, 1570, 592, 488, 588, 1572, 592, 1570, 590, 490, 590, 7424, 4422, 4312, 592, 1568, 592, 1570, 590, 1572, 588, 1570, 590, 490, 590, 490, 592, 1568, 590, 490, 590, 488, 592, 488, 588, 496, 586, 488, 592, 1570, 590, 1570, 590, 488, 592, 1570, 590, 490, 588, 490, 590, 490, 590, 488, 592, 488, 590, 490, 588, 1570, 590, 1570, 590, 1570, 590, 1572, 592, 1568, 590, 1574, 586, 1570, 592, 1570, 590, 494, 586, 488, 592, 488, 592, 492, 586, 490, 590, 488, 590, 490, 590, 494, 588, 494, 586, 1570, 590, 494, 586, 1574, 586, 488, 592, 1574, 584, 488, 592, 488, 592, 492, 588, 488, 590, 490, 592, 490, 590, 488, 592, 488, 590, 494, 586, 1570, 592, 1574, 588, 1568, 590, 490, 592, 488, 592, 488, 592, 492, 586, 492, 590, 494, 584, 490, 590, 488, 592, 488, 592, 1568, 592, 488, 592, 1568, 592, 488, 588, 1572, 592, 1568, 592, 492, 588}; // UNKNOWN 1B6696D7

Timestamp : 000039.946
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4414, 4322, 582, 1578, 582, 1580, 554, 1604, 584, 1576, 582, 498, 580, 500, 554, 1610, 576, 502, 578, 504, 548, 526, 578, 502, 582, 498, 554, 1618, 542, 1608, 562, 522, 552, 1606, 580, 498, 582, 498, 554, 528, 552, 528, 582, 498, 580, 498, 582, 1578, 568, 1594, 580, 1580, 582, 1578, 584, 1578, 554, 1606, 554, 1606, 582, 1578, 584, 498, 584, 496, 580, 502, 578, 500, 554, 524, 582, 496, 584, 496, 584, 496, 580, 500, 580, 1580, 554, 526, 554, 1606, 582, 498, 554, 1606, 582, 504, 548, 526, 582, 498, 582, 496, 584, 498, 582, 496, 584, 496, 586, 494, 584, 496, 584, 498, 582, 494, 586, 496, 584, 498, 584, 494, 584, 496, 584, 496, 584, 502, 576, 508, 572, 552, 528, 496, 586, 494, 586, 1576, 582, 498, 584, 1576, 586, 494, 586, 500, 576, 498, 584, 1584, 576, 7424, 4422, 4318, 588, 1574, 588, 1572, 586, 1574, 586, 1576, 586, 498, 582, 496, 584, 1572, 588, 500, 580, 492, 588, 496, 582, 498, 584, 496, 584, 1570, 590, 1572, 588, 498, 584, 1572, 588, 494, 584, 498, 582, 498, 584, 492, 586, 492, 588, 498, 582, 1574, 586, 1572, 590, 1570, 590, 1572, 588, 1572, 588, 1570, 590, 1572, 588, 1578, 582, 548, 532, 492, 588, 496, 582, 492, 588, 492, 586, 492, 588, 546, 534, 496, 584, 494, 586, 1574, 586, 496, 584, 1570, 588, 496, 584, 1570, 590, 492, 588, 494, 584, 492, 586, 498, 582, 492, 588, 546, 532, 496, 584, 498, 582, 546, 534, 494, 586, 496, 584, 492, 590, 494, 584, 492, 586, 492, 588, 496, 584, 496, 582, 492, 590, 496, 584, 496, 584, 496, 584, 1578, 582, 492, 588, 1578, 582, 498, 582, 494, 586, 496, 582, 1574, 586}; // UNKNOWN E2D990EB

Timestamp : 000041.743
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4424, 4314, 592, 1568, 592, 1568, 590, 1572, 590, 1572, 586, 488, 590, 490, 590, 1570, 590, 494, 586, 488, 592, 492, 586, 492, 588, 488, 592, 1570, 590, 1574, 586, 492, 588, 1572, 588, 488, 590, 494, 586, 490, 590, 494, 584, 492, 590, 490, 588, 1570, 590, 1570, 590, 1570, 592, 1570, 590, 1572, 588, 1572, 588, 1570, 592, 1574, 586, 494, 584, 490, 592, 494, 586, 488, 590, 490, 590, 494, 588, 492, 586, 492, 588, 492, 588, 1570, 590, 490, 590, 1568, 594, 490, 588, 1570, 590, 490, 590, 490, 590, 490, 590, 490, 590, 494, 584, 492, 588, 490, 588, 494, 586, 492, 586, 1570, 592, 1568, 592, 1572, 588, 492, 588, 492, 588, 492, 588, 490, 590, 492, 588, 492, 588, 496, 584, 488, 590, 490, 592, 1568, 592, 490, 590, 1576, 586, 494, 588, 1568, 590, 1574, 586, 492, 588, 7416, 4428, 4312, 592, 1572, 588, 1568, 592, 1572, 588, 1570, 588, 490, 590, 494, 586, 1570, 592, 492, 586, 492, 588, 488, 592, 494, 586, 490, 588, 1570, 592, 1574, 586, 490, 592, 1568, 590, 494, 586, 490, 590, 490, 590, 490, 590, 488, 592, 490, 588, 1570, 590, 1572, 590, 1568, 594, 1568, 590, 1576, 586, 1574, 586, 1574, 588, 1570, 590, 490, 590, 494, 586, 492, 588, 494, 586, 492, 588, 494, 586, 488, 592, 494, 584, 494, 586, 1568, 592, 490, 590, 1574, 588, 492, 586, 1578, 582, 494, 586, 492, 588, 494, 584, 494, 588, 492, 586, 494, 584, 496, 586, 494, 586, 494, 586, 1568, 590, 1576, 586, 1574, 586, 490, 588, 492, 590, 496, 584, 494, 586, 496, 584, 496, 584, 494, 586, 494, 586, 494, 586, 1576, 584, 492, 586, 1572, 590, 494, 584, 1572, 590, 1574, 586, 490, 590}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000066.239
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4422, 4322, 584, 1574, 586, 1574, 588, 1574, 586, 1574, 588, 496, 584, 494, 586, 1572, 588, 496, 584, 492, 588, 498, 582, 498, 584, 548, 532, 1574, 586, 1570, 590, 494, 584, 1576, 586, 492, 588, 494, 586, 498, 584, 496, 582, 496, 584, 494, 586, 1576, 586, 1570, 590, 1576, 584, 1570, 590, 1570, 590, 1570, 590, 1574, 586, 1578, 586, 494, 584, 494, 586, 494, 584, 492, 588, 496, 586, 492, 588, 494, 586, 492, 586, 498, 584, 1572, 590, 492, 586, 1570, 590, 496, 584, 1572, 590, 492, 586, 494, 586, 496, 584, 494, 586, 496, 584, 496, 584, 496, 584, 494, 586, 490, 592, 494, 584, 492, 588, 496, 584, 494, 586, 496, 584, 492, 588, 488, 590, 496, 586, 490, 588, 496, 582, 496, 584, 496, 582, 1576, 586, 496, 584, 1572, 588, 494, 586, 496, 584, 548, 532, 1574, 584, 7420, 4426, 4318, 586, 1570, 588, 1576, 586, 1576, 584, 1576, 586, 494, 584, 498, 584, 1574, 586, 496, 584, 494, 584, 496, 584, 494, 586, 494, 586, 1568, 592, 1570, 590, 492, 588, 1576, 586, 498, 582, 494, 586, 490, 592, 496, 582, 492, 586, 496, 584, 1628, 534, 1572, 586, 1574, 586, 1572, 590, 1576, 586, 1574, 586, 1576, 584, 1570, 590, 496, 584, 494, 586, 494, 584, 492, 588, 492, 588, 494, 586, 494, 584, 496, 584, 492, 586, 1574, 588, 494, 584, 1578, 582, 498, 584, 1572, 588, 496, 584, 496, 582, 498, 584, 496, 584, 494, 586, 490, 588, 496, 584, 496, 584, 546, 532, 496, 584, 494, 586, 492, 584, 496, 584, 494, 586, 496, 584, 496, 584, 492, 586, 500, 582, 498, 582, 490, 590, 490, 590, 1574, 586, 496, 582, 1572, 590, 494, 586, 496, 584, 492, 588, 1572, 588}; // UNKNOWN E2D990EB

Timestamp : 000068.577
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4422, 4318, 588, 1574, 588, 1572, 586, 1576, 586, 1576, 586, 492, 588, 492, 588, 1574, 588, 496, 582, 496, 584, 498, 582, 494, 586, 496, 584, 1572, 588, 1572, 590, 496, 582, 1572, 588, 500, 580, 496, 582, 498, 584, 496, 584, 496, 584, 496, 584, 1574, 586, 1572, 588, 1574, 586, 1574, 590, 1574, 586, 1576, 584, 1624, 536, 1570, 590, 496, 582, 496, 586, 546, 534, 494, 586, 490, 588, 496, 584, 494, 586, 548, 532, 496, 584, 1574, 588, 496, 582, 1572, 590, 494, 586, 1572, 588, 496, 584, 504, 576, 496, 584, 496, 582, 498, 584, 498, 582, 496, 582, 494, 584, 498, 582, 1572, 590, 1572, 590, 1572, 588, 490, 590, 492, 586, 496, 584, 496, 584, 494, 586, 492, 588, 496, 584, 494, 588, 496, 584, 1570, 590, 496, 584, 1574, 584, 498, 582, 1572, 588, 1574, 586, 496, 584, 7418, 4426, 4314, 590, 1576, 586, 1574, 588, 1570, 588, 1628, 534, 494, 584, 496, 586, 1576, 584, 494, 586, 492, 586, 492, 588, 496, 584, 498, 582, 1576, 586, 1570, 588, 496, 584, 1572, 590, 492, 586, 496, 584, 494, 586, 528, 552, 494, 586, 490, 590, 1574, 586, 1572, 590, 1576, 584, 1572, 590, 1578, 580, 1578, 584, 1574, 588, 1572, 588, 494, 586, 494, 584, 548, 532, 494, 584, 496, 584, 494, 586, 496, 586, 494, 584, 494, 586, 1570, 590, 502, 578, 1574, 586, 498, 582, 1574, 586, 496, 584, 496, 584, 496, 582, 498, 584, 496, 584, 492, 588, 496, 584, 496, 584, 494, 584, 1572, 590, 1570, 592, 1570, 588, 494, 586, 498, 582, 498, 582, 494, 586, 496, 582, 494, 584, 498, 584, 496, 584, 494, 584, 1572, 588, 496, 582, 1574, 588, 490, 590, 1570, 590, 1576, 586, 494, 582}; // UNKNOWN 1B6696D7

Timestamp : 000070.351
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4424, 4320, 586, 1574, 586, 1576, 582, 1574, 588, 1572, 588, 498, 584, 492, 588, 1576, 586, 496, 584, 496, 584, 490, 588, 548, 532, 498, 582, 1572, 588, 1574, 586, 496, 584, 1570, 590, 496, 582, 492, 588, 496, 584, 496, 584, 498, 582, 492, 586, 1572, 590, 1574, 586, 1572, 588, 1572, 588, 1576, 584, 1576, 586, 1572, 588, 1572, 588, 496, 584, 494, 584, 498, 582, 498, 580, 494, 586, 496, 586, 494, 586, 496, 584, 496, 582, 1576, 586, 498, 582, 1572, 588, 546, 532, 1572, 590, 498, 582, 496, 584, 496, 586, 494, 586, 494, 586, 548, 532, 494, 586, 496, 584, 496, 584, 548, 532, 498, 582, 492, 586, 496, 584, 496, 586, 496, 582, 548, 532, 494, 586, 496, 586, 494, 586, 492, 590, 490, 588, 1572, 588, 548, 532, 1572, 588, 496, 584, 496, 584, 494, 586, 1574, 586, 7476, 4368, 4316, 590, 1572, 590, 1572, 588, 1570, 590, 1570, 590, 492, 588, 498, 582, 1578, 582, 498, 584, 494, 584, 496, 584, 496, 584, 494, 584, 1572, 590, 1578, 582, 492, 588, 1576, 584, 496, 584, 496, 582, 498, 584, 494, 584, 492, 588, 496, 584, 1574, 586, 1574, 588, 1572, 590, 1572, 588, 1628, 534, 1572, 588, 1572, 588, 1572, 588, 496, 584, 494, 586, 496, 582, 496, 586, 496, 584, 490, 588, 496, 584, 496, 584, 494, 584, 1572, 588, 496, 584, 1574, 588, 496, 582, 1574, 586, 496, 584, 498, 582, 496, 584, 494, 586, 496, 582, 494, 586, 494, 584, 548, 532, 496, 586, 494, 586, 494, 586, 498, 582, 548, 530, 496, 584, 496, 584, 496, 584, 498, 582, 496, 584, 496, 584, 494, 584, 494, 586, 1572, 586, 498, 584, 1572, 588, 500, 580, 494, 586, 492, 586, 1576, 584}; // UNKNOWN E2D990EB

Timestamp : 000071.604
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4418, 4322, 582, 1578, 582, 1578, 586, 1580, 580, 1576, 584, 498, 580, 500, 580, 1578, 584, 496, 584, 496, 584, 498, 582, 502, 578, 496, 584, 1580, 580, 1578, 584, 552, 500, 1606, 584, 494, 584, 496, 584, 496, 582, 496, 584, 496, 584, 496, 584, 1576, 584, 1576, 582, 1580, 580, 1576, 584, 1576, 586, 1576, 584, 1576, 584, 1576, 584, 496, 584, 494, 586, 496, 584, 496, 586, 494, 584, 498, 580, 500, 578, 500, 580, 496, 584, 1576, 584, 496, 584, 1576, 584, 494, 584, 1578, 584, 496, 584, 498, 580, 496, 582, 498, 584, 496, 584, 496, 586, 496, 582, 496, 584, 496, 584, 1576, 584, 1576, 584, 1576, 586, 496, 584, 500, 580, 494, 584, 494, 586, 500, 578, 496, 584, 496, 584, 494, 586, 494, 584, 1576, 586, 494, 586, 1576, 586, 494, 586, 1574, 584, 1576, 584, 494, 586, 7422, 4422, 4318, 584, 1576, 584, 1576, 588, 1586, 572, 1576, 586, 494, 586, 494, 584, 1632, 528, 494, 584, 496, 588, 492, 586, 492, 586, 496, 584, 1574, 586, 1576, 584, 498, 582, 1574, 586, 494, 586, 494, 586, 494, 584, 496, 584, 496, 584, 494, 586, 1574, 586, 1580, 580, 1576, 586, 1576, 584, 1576, 584, 1576, 584, 1576, 584, 1574, 586, 494, 586, 494, 584, 496, 584, 494, 584, 496, 586, 494, 586, 496, 582, 496, 586, 496, 582, 1576, 584, 500, 580, 1576, 584, 498, 582, 1578, 582, 500, 582, 496, 584, 500, 578, 496, 584, 496, 584, 496, 584, 494, 586, 494, 586, 496, 584, 1576, 584, 1578, 584, 1576, 584, 500, 576, 500, 580, 496, 584, 498, 582, 496, 582, 498, 584, 496, 582, 496, 582, 498, 584, 1576, 584, 498, 582, 1582, 578, 498, 582, 1578, 580, 1578, 582, 498, 582}; // UNKNOWN 1B6696D7

Timestamp : 000073.186
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4420, 4376, 530, 1576, 584, 1574, 588, 1572, 588, 1574, 588, 496, 582, 496, 584, 1574, 588, 492, 586, 498, 580, 494, 588, 494, 586, 496, 584, 1574, 584, 1574, 588, 494, 586, 1572, 588, 494, 584, 494, 586, 494, 586, 494, 588, 498, 582, 496, 584, 1576, 584, 1576, 586, 1578, 582, 1574, 586, 1572, 588, 1576, 586, 1572, 588, 1572, 588, 498, 582, 496, 584, 494, 586, 496, 584, 492, 586, 492, 586, 496, 584, 498, 584, 548, 530, 1572, 588, 496, 586, 1574, 586, 498, 582, 1574, 586, 496, 584, 496, 584, 496, 584, 498, 582, 496, 584, 500, 580, 496, 582, 492, 590, 492, 588, 494, 586, 492, 590, 492, 586, 498, 582, 498, 582, 494, 584, 496, 584, 500, 580, 496, 584, 496, 586, 496, 582, 498, 582, 1574, 586, 498, 584, 1572, 588, 496, 582, 498, 582, 496, 586, 1570, 590, 7418, 4424, 4316, 588, 1576, 584, 1578, 584, 1574, 586, 1572, 590, 498, 582, 496, 584, 1572, 588, 496, 584, 494, 586, 498, 582, 496, 582, 492, 588, 1578, 584, 1574, 586, 496, 582, 1576, 586, 494, 586, 496, 584, 494, 584, 498, 582, 496, 584, 498, 580, 1574, 588, 1570, 590, 1570, 588, 1574, 586, 1574, 588, 1572, 588, 1572, 588, 1572, 588, 494, 584, 496, 584, 492, 588, 494, 588, 492, 586, 496, 584, 550, 530, 494, 586, 496, 582, 1578, 582, 494, 584, 1576, 586, 494, 586, 1576, 586, 494, 584, 496, 584, 496, 586, 494, 586, 494, 586, 494, 584, 496, 584, 494, 586, 496, 586, 496, 582, 496, 584, 496, 582, 496, 584, 496, 584, 502, 578, 494, 584, 496, 584, 496, 584, 494, 586, 496, 584, 494, 586, 1576, 584, 496, 584, 1576, 584, 496, 584, 494, 584, 496, 584, 1576, 584}; // UNKNOWN E2D990EB

Timestamp : 000074.790
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4362, 4322, 582, 1580, 582, 1634, 498, 1606, 554, 1608, 580, 498, 584, 496, 584, 1578, 554, 528, 580, 498, 582, 498, 582, 498, 582, 496, 582, 1586, 548, 1606, 582, 498, 582, 1578, 584, 502, 548, 526, 582, 496, 584, 496, 582, 498, 582, 498, 580, 1578, 582, 1584, 550, 1604, 582, 1576, 584, 1578, 582, 1576, 584, 1590, 544, 1606, 582, 496, 584, 496, 584, 496, 584, 496, 584, 498, 580, 498, 584, 496, 582, 498, 584, 496, 582, 1578, 584, 496, 582, 1634, 500, 526, 580, 1580, 584, 494, 584, 496, 584, 496, 584, 496, 582, 496, 584, 500, 578, 498, 582, 496, 584, 496, 586, 1576, 584, 1576, 582, 1578, 584, 500, 580, 496, 584, 498, 576, 506, 580, 496, 584, 496, 584, 496, 582, 498, 582, 496, 582, 1578, 584, 496, 582, 1580, 580, 496, 584, 1582, 578, 1576, 586, 496, 582, 7426, 4420, 4322, 584, 1580, 580, 1578, 582, 1578, 582, 1578, 584, 496, 582, 498, 584, 1582, 570, 508, 578, 496, 584, 496, 582, 496, 582, 496, 584, 1578, 582, 1578, 582, 554, 500, 1604, 584, 496, 582, 496, 582, 498, 584, 496, 582, 496, 584, 496, 584, 1576, 586, 1576, 582, 1578, 582, 1576, 586, 1576, 584, 1576, 582, 1578, 582, 1580, 582, 498, 582, 498, 584, 496, 582, 498, 584, 496, 582, 498, 582, 498, 582, 496, 582, 496, 582, 1586, 574, 500, 584, 1578, 582, 498, 582, 1578, 582, 498, 582, 504, 576, 498, 582, 498, 580, 500, 584, 496, 582, 498, 582, 498, 582, 496, 584, 1578, 582, 1580, 582, 1578, 582, 496, 584, 496, 582, 498, 580, 500, 582, 502, 578, 498, 582, 496, 582, 498, 580, 500, 580, 1578, 584, 498, 554, 1606, 582, 498, 582, 1578, 582, 1578, 582, 498, 582}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000076.354
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150000051 (72 Bits)
Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4416, 4322, 588, 1572, 584, 1576, 584, 1576, 586, 1574, 584, 496, 584, 494, 584, 1576, 584, 496, 584, 496, 584, 496, 584, 496, 582, 502, 580, 1578, 584, 1576, 584, 496, 584, 1578, 582, 498, 584, 494, 584, 498, 582, 496, 586, 494, 584, 500, 580, 1576, 584, 1576, 586, 1576, 584, 1576, 586, 1574, 584, 1576, 586, 1580, 580, 1576, 586, 494, 586, 498, 580, 496, 584, 496, 584, 496, 584, 494, 584, 496, 584, 498, 582, 500, 580, 1574, 584, 496, 584, 1576, 586, 496, 584, 1574, 586, 498, 584, 494, 584, 498, 584, 494, 586, 498, 582, 494, 586, 500, 580, 498, 582, 494, 586, 498, 582, 496, 584, 496, 584, 494, 586, 496, 586, 494, 584, 498, 584, 496, 584, 494, 586, 496, 584, 494, 586, 492, 584, 1576, 584, 498, 584, 1572, 588, 496, 584, 496, 584, 498, 584, 1626, 532, 7422, 4422, 4318, 588, 1574, 588, 1572, 588, 1572, 588, 1572, 588, 498, 582, 498, 582, 1576, 584, 494, 584, 498, 584, 496, 584, 496, 582, 498, 584, 1572, 588, 1572, 588, 496, 582, 1574, 586, 498, 584, 494, 584, 496, 584, 496, 584, 498, 582, 496, 584, 1574, 586, 1574, 588, 1576, 586, 1572, 588, 1572, 588, 1572, 590, 1574, 584, 1584, 576, 494, 586, 496, 582, 496, 584, 496, 584, 498, 582, 494, 586, 498, 582, 496, 584, 496, 584, 1574, 586, 494, 586, 1574, 588, 498, 580, 1574, 588, 494, 586, 496, 582, 498, 582, 494, 586, 494, 586, 494, 586, 494, 586, 496, 582, 502, 578, 494, 586, 496, 584, 496, 584, 504, 572, 496, 584, 498, 584, 494, 586, 494, 584, 494, 584, 498, 584, 494, 586, 496, 584, 1574, 586, 494, 586, 1574, 586, 494, 586, 496, 582, 494, 586, 1576, 584}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x00, 0x00, 0x51};

Timestamp : 000077.774
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4408, 4322, 582, 1578, 584, 1580, 580, 1578, 580, 1590, 544, 526, 582, 496, 582, 1578, 582, 496, 584, 498, 582, 504, 548, 526, 582, 510, 542, 1606, 582, 1578, 582, 498, 582, 1578, 582, 498, 582, 498, 582, 498, 582, 500, 582, 498, 582, 496, 586, 1576, 582, 1578, 584, 1584, 548, 1610, 550, 1606, 582, 1576, 584, 1578, 582, 1576, 584, 498, 582, 496, 582, 496, 584, 498, 580, 500, 580, 502, 576, 498, 584, 496, 582, 498, 580, 1584, 576, 498, 584, 1578, 580, 504, 548, 1618, 542, 528, 582, 496, 584, 496, 584, 496, 584, 496, 582, 498, 582, 498, 582, 498, 582, 498, 586, 1576, 584, 1576, 584, 1578, 582, 496, 584, 498, 582, 498, 582, 496, 584, 496, 582, 498, 582, 496, 584, 496, 584, 496, 584, 1632, 526, 500, 580, 1578, 584, 494, 584, 1576, 584, 1576, 584, 500, 578, 7426, 4418, 4322, 582, 1578, 582, 1634, 500, 1606, 584, 1578, 582, 552, 498, 526, 582, 1580, 580, 498, 582, 496, 584, 496, 586, 494, 584, 498, 580, 1580, 582, 1578, 582, 498, 582, 1576, 584, 496, 582, 500, 582, 496, 582, 554, 496, 530, 578, 498, 584, 1578, 582, 1580, 582, 1634, 526, 1578, 582, 1576, 584, 1578, 582, 1576, 582, 1578, 584, 498, 582, 498, 580, 498, 582, 496, 582, 498, 582, 500, 582, 500, 578, 500, 580, 496, 584, 1578, 584, 498, 578, 1586, 576, 500, 580, 1578, 582, 498, 584, 496, 582, 500, 582, 498, 582, 496, 584, 496, 582, 498, 584, 494, 584, 552, 526, 1580, 580, 1582, 578, 1582, 580, 496, 586, 500, 578, 498, 582, 496, 584, 496, 584, 496, 582, 498, 584, 496, 584, 552, 528, 1576, 584, 502, 578, 1576, 584, 496, 584, 1576, 582, 1578, 584, 496, 582}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000083.701
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150000051 (72 Bits)
Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4420, 4320, 586, 1570, 588, 1576, 584, 1572, 588, 1572, 588, 496, 584, 492, 588, 1572, 588, 494, 588, 496, 582, 500, 580, 496, 582, 496, 584, 1576, 584, 1574, 586, 496, 584, 1574, 586, 496, 584, 492, 588, 498, 582, 494, 586, 498, 582, 494, 584, 1574, 586, 1576, 586, 1574, 586, 1576, 586, 1574, 586, 1574, 586, 1576, 584, 1576, 584, 492, 588, 494, 586, 494, 584, 496, 584, 498, 582, 498, 582, 496, 582, 498, 582, 496, 584, 1574, 586, 494, 588, 1572, 586, 498, 582, 1572, 588, 498, 582, 494, 588, 496, 584, 496, 584, 496, 586, 492, 588, 492, 588, 498, 584, 496, 584, 494, 586, 496, 584, 496, 586, 490, 590, 494, 584, 492, 588, 496, 582, 494, 588, 494, 584, 496, 584, 498, 584, 494, 584, 1572, 590, 496, 584, 1572, 590, 494, 586, 492, 588, 494, 586, 1574, 584, 7420, 4424, 4316, 588, 1574, 588, 1574, 586, 1574, 586, 1572, 590, 500, 578, 496, 584, 1572, 588, 496, 582, 494, 588, 492, 588, 494, 584, 494, 586, 1574, 586, 1572, 588, 496, 584, 1576, 584, 494, 588, 492, 588, 492, 588, 494, 584, 492, 588, 494, 586, 1572, 588, 1628, 532, 1574, 588, 1570, 588, 1576, 586, 1574, 588, 1568, 590, 1574, 586, 498, 582, 498, 584, 496, 582, 496, 584, 496, 584, 496, 586, 494, 584, 494, 586, 496, 584, 1578, 584, 496, 586, 1626, 532, 500, 580, 1572, 588, 494, 586, 498, 584, 496, 582, 492, 586, 496, 586, 494, 586, 494, 584, 498, 582, 498, 582, 492, 588, 496, 584, 494, 584, 496, 584, 492, 588, 496, 582, 492, 590, 492, 588, 496, 584, 496, 582, 494, 590, 496, 582, 1574, 586, 492, 586, 1574, 586, 494, 586, 496, 584, 492, 588, 1572, 590}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x00, 0x00, 0x51};

Timestamp : 000085.361
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4424, 4316, 588, 1574, 586, 1576, 586, 1570, 588, 1574, 588, 494, 584, 496, 584, 1574, 586, 492, 588, 494, 584, 498, 582, 498, 584, 496, 582, 1574, 588, 1572, 588, 498, 580, 1574, 586, 494, 586, 492, 588, 492, 590, 494, 584, 494, 586, 494, 584, 1576, 586, 1578, 582, 1572, 590, 1572, 588, 1572, 590, 1570, 588, 1572, 588, 1572, 588, 496, 584, 498, 582, 492, 588, 496, 584, 498, 582, 496, 582, 498, 584, 496, 582, 496, 582, 1572, 590, 496, 584, 1572, 588, 496, 584, 1572, 588, 496, 586, 492, 590, 494, 582, 498, 582, 496, 584, 496, 584, 498, 580, 496, 584, 498, 582, 1572, 590, 1570, 588, 1576, 586, 494, 584, 496, 584, 496, 584, 496, 586, 490, 588, 496, 584, 492, 588, 494, 586, 490, 588, 1576, 586, 496, 586, 1576, 584, 496, 584, 1572, 588, 1574, 588, 494, 586, 7420, 4424, 4318, 586, 1626, 538, 1572, 588, 1574, 588, 1570, 588, 496, 584, 492, 588, 1572, 590, 494, 582, 494, 588, 496, 582, 496, 582, 492, 588, 1572, 588, 1578, 586, 494, 584, 1574, 586, 492, 588, 492, 588, 496, 584, 494, 586, 494, 586, 490, 588, 1576, 586, 1574, 588, 1574, 584, 1572, 588, 1576, 586, 1576, 586, 1578, 580, 1576, 584, 496, 582, 498, 584, 498, 582, 492, 588, 498, 582, 490, 588, 498, 582, 496, 584, 498, 584, 1576, 586, 494, 586, 1572, 588, 494, 586, 1572, 588, 496, 582, 496, 584, 492, 586, 498, 582, 496, 582, 494, 588, 496, 582, 492, 588, 498, 580, 1578, 584, 1574, 586, 1574, 588, 492, 588, 496, 582, 498, 582, 494, 584, 498, 584, 494, 586, 498, 582, 494, 584, 506, 576, 1572, 588, 500, 582, 1572, 588, 494, 586, 1572, 588, 1572, 588, 496, 584}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000087.822
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4422, 4320, 588, 1572, 588, 1572, 588, 1572, 588, 1578, 584, 496, 584, 548, 532, 1572, 590, 496, 582, 498, 582, 494, 588, 494, 586, 498, 582, 1574, 588, 1572, 588, 496, 584, 1574, 586, 492, 586, 498, 584, 500, 580, 496, 582, 498, 582, 496, 584, 1632, 528, 1574, 586, 1572, 590, 1572, 586, 1576, 586, 1576, 586, 1574, 586, 1572, 588, 496, 584, 496, 584, 494, 586, 496, 584, 494, 586, 494, 586, 494, 586, 494, 586, 496, 586, 1572, 586, 494, 588, 1572, 588, 496, 586, 1570, 590, 496, 582, 496, 584, 498, 582, 496, 584, 496, 582, 496, 584, 492, 588, 496, 584, 494, 584, 496, 584, 498, 582, 496, 584, 498, 584, 494, 584, 492, 586, 496, 584, 498, 584, 496, 582, 498, 580, 496, 584, 496, 584, 1572, 590, 492, 586, 1576, 584, 496, 584, 494, 586, 498, 582, 1576, 586, 7420, 4424, 4322, 582, 1572, 588, 1574, 588, 1572, 590, 1574, 586, 496, 582, 494, 586, 1576, 586, 494, 584, 496, 584, 496, 584, 492, 586, 492, 588, 1572, 588, 1572, 590, 494, 584, 1572, 590, 496, 584, 494, 584, 496, 584, 496, 584, 496, 584, 496, 582, 1576, 586, 1572, 588, 1572, 588, 1572, 590, 1570, 590, 1574, 588, 1574, 586, 1572, 588, 504, 576, 494, 584, 494, 586, 494, 584, 496, 584, 496, 584, 498, 582, 498, 582, 492, 588, 1572, 588, 494, 586, 1572, 588, 496, 582, 1572, 588, 494, 584, 498, 582, 494, 586, 496, 584, 496, 582, 492, 588, 496, 584, 494, 586, 498, 582, 496, 582, 492, 588, 496, 584, 496, 584, 496, 584, 492, 586, 498, 584, 492, 588, 496, 582, 496, 584, 494, 586, 496, 584, 1630, 530, 494, 586, 1576, 584, 554, 526, 548, 532, 494, 586, 1572, 588}; // UNKNOWN E2D990EB

Timestamp : 000089.077
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4422, 4318, 588, 1572, 586, 1580, 582, 1572, 590, 1572, 588, 498, 582, 496, 584, 1572, 590, 496, 584, 496, 584, 492, 588, 496, 586, 494, 584, 1572, 588, 1576, 584, 498, 582, 1572, 586, 498, 582, 496, 584, 496, 586, 494, 584, 496, 584, 498, 582, 1572, 588, 1576, 582, 1578, 582, 1576, 586, 1572, 588, 1580, 582, 1570, 590, 1572, 588, 492, 588, 496, 582, 498, 584, 490, 588, 496, 584, 492, 586, 498, 584, 496, 584, 496, 584, 1570, 590, 496, 586, 1572, 588, 496, 584, 1576, 584, 492, 588, 496, 584, 492, 588, 496, 584, 498, 582, 492, 586, 492, 588, 498, 582, 490, 590, 1576, 584, 1572, 588, 1572, 588, 498, 582, 496, 582, 496, 584, 492, 588, 496, 582, 496, 586, 496, 584, 496, 582, 496, 584, 1576, 586, 496, 584, 1572, 590, 492, 588, 1576, 584, 1574, 588, 492, 588, 7420, 4426, 4316, 588, 1572, 588, 1572, 588, 1626, 534, 1572, 590, 496, 582, 492, 590, 1570, 590, 496, 584, 494, 586, 492, 586, 498, 584, 496, 582, 1572, 588, 1572, 590, 496, 584, 1570, 590, 498, 580, 492, 590, 496, 584, 496, 584, 494, 584, 496, 584, 1572, 588, 1574, 586, 1572, 590, 1574, 586, 1572, 588, 1574, 586, 1572, 588, 1574, 588, 496, 582, 492, 586, 498, 584, 492, 586, 498, 582, 496, 586, 496, 582, 498, 582, 498, 582, 1572, 588, 492, 588, 1576, 586, 494, 586, 1572, 588, 498, 582, 496, 584, 502, 576, 498, 582, 496, 584, 494, 586, 496, 584, 496, 584, 492, 586, 1574, 588, 1572, 590, 1576, 586, 494, 584, 548, 532, 498, 580, 498, 582, 496, 584, 496, 582, 498, 584, 496, 586, 496, 584, 1572, 586, 498, 582, 1576, 586, 494, 586, 1578, 580, 1574, 588, 496, 584}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000090.337
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4426, 4314, 590, 1580, 580, 1574, 586, 1572, 588, 1572, 590, 546, 534, 494, 584, 1574, 586, 496, 584, 498, 584, 496, 582, 496, 586, 496, 584, 1572, 588, 1572, 588, 496, 582, 1572, 590, 494, 586, 494, 586, 496, 582, 498, 582, 498, 582, 498, 582, 1572, 590, 1570, 590, 1574, 586, 1574, 588, 1574, 586, 1576, 586, 1574, 586, 1570, 590, 494, 584, 496, 584, 496, 582, 498, 582, 496, 582, 498, 584, 496, 586, 494, 584, 496, 584, 1572, 588, 498, 582, 1574, 588, 492, 586, 1574, 586, 498, 584, 494, 584, 494, 584, 496, 582, 498, 582, 494, 584, 496, 584, 496, 586, 500, 578, 496, 586, 492, 586, 496, 584, 496, 584, 494, 588, 496, 584, 498, 582, 546, 534, 494, 584, 496, 584, 494, 586, 494, 584, 1576, 586, 498, 582, 1572, 588, 494, 586, 494, 586, 496, 582, 1570, 590, 7418, 4426, 4316, 590, 1572, 590, 1568, 590, 1572, 590, 1572, 588, 496, 584, 490, 590, 1576, 584, 492, 588, 496, 584, 496, 582, 498, 584, 494, 586, 1626, 534, 1572, 588, 494, 586, 1570, 590, 492, 588, 546, 534, 494, 586, 494, 584, 494, 586, 496, 584, 1572, 588, 1572, 588, 1574, 588, 1574, 584, 1576, 586, 1628, 532, 1572, 588, 1574, 586, 496, 582, 494, 586, 494, 586, 496, 584, 498, 580, 496, 584, 498, 582, 494, 586, 490, 588, 1572, 590, 494, 584, 1576, 584, 496, 584, 1572, 588, 494, 586, 494, 586, 494, 584, 496, 584, 496, 584, 494, 584, 492, 588, 496, 584, 496, 582, 496, 582, 494, 588, 496, 582, 498, 582, 496, 584, 496, 584, 496, 584, 496, 584, 498, 584, 496, 582, 550, 532, 494, 586, 1572, 588, 498, 582, 1572, 590, 492, 588, 492, 590, 494, 584, 1572, 586}; // UNKNOWN E2D990EB

Timestamp : 000091.515
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4426, 4314, 590, 1570, 588, 1574, 588, 1572, 590, 1574, 586, 496, 584, 494, 586, 1572, 588, 492, 588, 498, 580, 498, 582, 492, 588, 494, 586, 1576, 584, 1574, 588, 494, 586, 1570, 588, 496, 586, 498, 580, 498, 584, 496, 582, 494, 586, 496, 584, 1578, 584, 1574, 586, 1570, 590, 1574, 584, 1572, 590, 1574, 584, 1578, 582, 1570, 590, 498, 582, 492, 588, 492, 588, 496, 584, 494, 584, 498, 584, 494, 584, 498, 582, 496, 584, 1574, 588, 498, 580, 1578, 584, 496, 584, 1572, 588, 492, 588, 492, 588, 494, 584, 494, 586, 496, 582, 490, 590, 498, 580, 496, 584, 492, 588, 1574, 588, 1574, 586, 1572, 588, 494, 584, 496, 586, 498, 582, 496, 584, 494, 586, 496, 582, 494, 586, 496, 584, 496, 584, 1572, 590, 496, 582, 1574, 586, 498, 584, 1574, 586, 1572, 586, 498, 584, 7424, 4420, 4316, 588, 1572, 590, 1574, 588, 1570, 590, 1574, 584, 498, 582, 492, 586, 1572, 590, 492, 586, 498, 582, 492, 588, 494, 584, 496, 586, 1574, 584, 1572, 590, 496, 582, 1572, 588, 498, 584, 496, 582, 498, 582, 496, 584, 496, 584, 496, 584, 1572, 588, 1576, 584, 1572, 590, 1572, 588, 1574, 586, 1572, 588, 1572, 588, 1572, 588, 496, 584, 490, 590, 494, 586, 498, 582, 494, 586, 496, 584, 496, 582, 496, 584, 494, 586, 1574, 586, 498, 584, 1574, 584, 496, 586, 1572, 586, 492, 588, 498, 580, 498, 582, 496, 584, 496, 582, 492, 588, 496, 582, 494, 586, 494, 584, 1628, 532, 1574, 586, 1572, 588, 496, 582, 498, 582, 496, 582, 498, 582, 498, 582, 496, 584, 496, 582, 500, 582, 492, 588, 1580, 582, 492, 588, 1574, 586, 494, 586, 1572, 588, 1628, 532, 498, 582}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000093.894
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4426, 4372, 532, 1570, 588, 1572, 588, 1574, 588, 1574, 586, 492, 590, 496, 582, 1574, 588, 496, 584, 494, 586, 494, 584, 494, 586, 498, 582, 1574, 588, 1570, 588, 498, 582, 1574, 586, 494, 586, 496, 586, 496, 584, 494, 586, 496, 582, 496, 584, 1576, 584, 1574, 588, 1576, 584, 1572, 590, 1570, 588, 1572, 588, 1572, 590, 1570, 588, 494, 586, 496, 584, 498, 582, 496, 586, 546, 532, 496, 584, 496, 586, 494, 584, 496, 582, 1574, 588, 498, 582, 1574, 588, 490, 588, 1572, 590, 494, 584, 498, 582, 546, 532, 548, 530, 498, 582, 490, 590, 496, 582, 498, 584, 492, 588, 494, 584, 494, 586, 500, 580, 496, 582, 496, 584, 492, 588, 498, 582, 494, 586, 492, 588, 492, 588, 496, 584, 496, 584, 1574, 586, 496, 584, 1570, 590, 492, 590, 496, 584, 496, 584, 1574, 586, 7420, 4424, 4316, 592, 1570, 590, 1572, 588, 1572, 588, 1570, 590, 496, 582, 498, 584, 1570, 588, 496, 584, 492, 588, 498, 580, 496, 584, 496, 582, 1572, 588, 1576, 584, 494, 586, 1572, 588, 496, 584, 494, 586, 494, 584, 498, 584, 494, 586, 494, 584, 1572, 590, 1574, 588, 1570, 590, 1574, 588, 1570, 588, 1572, 588, 1572, 588, 1572, 588, 494, 588, 546, 534, 494, 586, 496, 584, 490, 592, 496, 582, 492, 588, 498, 582, 498, 582, 1574, 586, 492, 586, 1576, 586, 492, 588, 1574, 588, 496, 584, 546, 532, 498, 582, 494, 586, 498, 582, 496, 584, 496, 584, 496, 586, 496, 582, 498, 582, 492, 588, 496, 582, 498, 584, 492, 586, 498, 584, 492, 588, 494, 588, 496, 582, 498, 582, 498, 584, 494, 584, 1574, 588, 494, 584, 1574, 586, 496, 584, 496, 584, 496, 584, 1578, 584}; // UNKNOWN E2D990EB

Timestamp : 000095.042
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4422, 4372, 534, 1572, 588, 1572, 586, 1574, 588, 1572, 588, 496, 584, 492, 588, 1574, 586, 498, 582, 492, 588, 496, 584, 492, 586, 498, 582, 1572, 588, 1570, 590, 492, 588, 1574, 586, 492, 586, 494, 586, 494, 584, 498, 582, 496, 584, 496, 584, 1570, 590, 1572, 588, 1572, 588, 1572, 588, 1572, 588, 1572, 592, 1570, 586, 1574, 588, 490, 590, 496, 584, 498, 582, 496, 584, 496, 584, 494, 586, 496, 582, 494, 588, 498, 582, 1574, 586, 490, 590, 1628, 532, 496, 584, 1576, 584, 496, 584, 546, 534, 496, 584, 544, 534, 492, 588, 496, 584, 496, 584, 496, 584, 496, 584, 1576, 586, 1576, 588, 1570, 590, 494, 586, 494, 584, 496, 584, 492, 588, 496, 582, 494, 588, 494, 586, 494, 584, 496, 584, 1572, 588, 496, 584, 1626, 534, 494, 586, 1572, 590, 1578, 582, 492, 588, 7418, 4424, 4320, 586, 1572, 588, 1574, 586, 1572, 588, 1572, 590, 492, 586, 496, 582, 1574, 588, 494, 586, 496, 584, 496, 584, 496, 584, 494, 584, 1576, 586, 1576, 586, 496, 584, 1574, 586, 492, 588, 496, 584, 494, 584, 494, 584, 548, 532, 490, 590, 1576, 584, 1572, 588, 1572, 588, 1572, 588, 1572, 590, 1576, 584, 1572, 590, 1572, 588, 496, 582, 490, 590, 496, 584, 496, 582, 496, 584, 496, 584, 494, 584, 492, 588, 494, 584, 1574, 588, 498, 582, 1574, 588, 496, 584, 1572, 588, 494, 586, 496, 584, 492, 588, 498, 582, 500, 582, 490, 588, 496, 584, 494, 586, 498, 584, 1600, 560, 1576, 586, 1572, 588, 494, 588, 492, 586, 496, 584, 496, 584, 496, 584, 496, 582, 496, 582, 498, 584, 494, 586, 1572, 588, 492, 590, 1572, 586, 498, 584, 1574, 584, 1576, 586, 494, 586}; // UNKNOWN 1B6696D7

Timestamp : 000096.198
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4426, 4316, 590, 1578, 584, 1572, 588, 1572, 588, 1572, 586, 496, 584, 496, 584, 1572, 588, 496, 584, 498, 582, 496, 584, 490, 590, 494, 586, 1570, 590, 1576, 586, 492, 588, 1574, 586, 494, 584, 498, 582, 496, 582, 496, 584, 548, 532, 494, 586, 1570, 590, 1578, 582, 1576, 586, 1574, 586, 1574, 584, 1572, 588, 1572, 590, 1576, 584, 496, 582, 496, 586, 496, 582, 494, 586, 496, 584, 492, 586, 494, 586, 492, 590, 496, 582, 1576, 586, 494, 588, 1572, 588, 496, 582, 1576, 586, 496, 584, 494, 584, 494, 584, 494, 586, 496, 584, 492, 588, 492, 588, 492, 590, 494, 584, 492, 588, 492, 588, 492, 586, 498, 582, 498, 582, 496, 584, 494, 584, 494, 586, 502, 578, 496, 582, 498, 582, 496, 586, 1576, 586, 492, 586, 1572, 588, 494, 586, 496, 582, 496, 586, 1574, 586, 7420, 4426, 4314, 588, 1574, 588, 1570, 590, 1628, 532, 1572, 588, 494, 586, 492, 588, 1572, 588, 496, 584, 494, 586, 490, 586, 492, 588, 494, 588, 1572, 588, 1572, 590, 490, 588, 1572, 588, 498, 582, 496, 584, 496, 582, 494, 586, 496, 582, 498, 582, 1576, 584, 1572, 590, 1572, 588, 1572, 588, 1572, 588, 1628, 534, 1572, 590, 1572, 588, 496, 582, 496, 584, 492, 588, 490, 590, 498, 582, 490, 588, 494, 586, 496, 584, 490, 588, 1574, 588, 496, 582, 1576, 586, 496, 582, 1576, 586, 496, 584, 494, 586, 494, 584, 494, 586, 496, 586, 494, 584, 496, 584, 498, 584, 494, 584, 498, 582, 492, 586, 500, 580, 498, 582, 498, 582, 498, 584, 494, 586, 498, 582, 496, 584, 494, 588, 496, 582, 494, 586, 1576, 584, 496, 584, 1576, 586, 496, 584, 498, 584, 494, 584, 1574, 588}; // UNKNOWN E2D990EB

Timestamp : 000097.376
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4422, 4318, 590, 1570, 590, 1572, 588, 1574, 588, 1574, 586, 494, 584, 496, 584, 1576, 584, 496, 584, 496, 582, 492, 588, 494, 586, 496, 584, 1576, 584, 1576, 586, 548, 532, 1576, 584, 496, 584, 492, 588, 492, 586, 496, 584, 494, 586, 496, 584, 1574, 586, 1572, 588, 1574, 586, 1574, 590, 1570, 588, 1572, 588, 1576, 584, 1574, 588, 548, 532, 496, 582, 496, 584, 492, 588, 496, 584, 496, 584, 498, 584, 498, 582, 498, 582, 1574, 586, 496, 584, 1572, 588, 496, 584, 1570, 590, 492, 588, 492, 586, 494, 584, 496, 584, 542, 536, 498, 580, 496, 584, 496, 584, 498, 584, 1572, 588, 1572, 588, 1574, 588, 492, 586, 492, 588, 494, 584, 498, 580, 492, 590, 494, 584, 496, 584, 492, 588, 496, 584, 1572, 588, 498, 582, 1572, 592, 546, 530, 1576, 586, 1572, 586, 496, 586, 7418, 4422, 4318, 590, 1576, 582, 1574, 586, 1576, 584, 1572, 588, 498, 582, 492, 586, 1576, 586, 496, 584, 498, 582, 498, 580, 498, 584, 494, 584, 1572, 588, 1572, 588, 494, 586, 1576, 586, 496, 582, 494, 586, 498, 584, 496, 584, 550, 532, 494, 586, 1574, 586, 1572, 588, 1572, 588, 1572, 588, 1572, 588, 1572, 588, 1576, 584, 1572, 588, 548, 532, 496, 584, 494, 584, 494, 586, 498, 582, 492, 586, 498, 582, 498, 584, 492, 586, 1574, 586, 494, 586, 1578, 580, 498, 582, 1576, 584, 494, 586, 498, 584, 496, 584, 494, 584, 496, 586, 494, 586, 498, 582, 498, 582, 494, 584, 1574, 586, 1576, 584, 1576, 586, 494, 584, 496, 584, 496, 584, 498, 580, 496, 584, 496, 586, 494, 586, 494, 584, 496, 584, 1576, 586, 496, 582, 1576, 586, 494, 586, 1576, 586, 1576, 586, 500, 580}; // UNKNOWN 1B6696D7

Timestamp : 000098.724
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4424, 4314, 590, 1578, 582, 1572, 590, 1572, 588, 1576, 586, 494, 584, 492, 588, 1578, 582, 496, 586, 496, 582, 492, 588, 492, 586, 496, 584, 1572, 588, 1572, 588, 498, 582, 1576, 586, 498, 582, 500, 580, 490, 590, 548, 532, 496, 584, 492, 588, 1572, 588, 1572, 590, 1574, 586, 1578, 582, 1576, 584, 1578, 584, 1572, 588, 1578, 586, 492, 586, 494, 586, 494, 586, 498, 582, 492, 588, 494, 588, 490, 588, 498, 582, 494, 588, 1570, 590, 494, 586, 1570, 590, 546, 532, 1576, 584, 496, 584, 496, 584, 496, 584, 496, 584, 494, 586, 496, 582, 498, 582, 496, 584, 498, 582, 496, 584, 496, 584, 494, 586, 490, 590, 490, 588, 494, 584, 496, 582, 496, 584, 496, 582, 494, 588, 494, 584, 494, 588, 1576, 586, 496, 584, 1574, 584, 498, 584, 496, 584, 546, 534, 1572, 588, 7418, 4426, 4316, 588, 1576, 584, 1576, 586, 1576, 584, 1576, 586, 494, 588, 494, 584, 1572, 588, 496, 586, 494, 584, 494, 586, 548, 532, 498, 580, 1574, 588, 1572, 590, 492, 586, 1572, 590, 496, 584, 498, 582, 494, 586, 496, 584, 498, 582, 498, 584, 1574, 584, 1578, 582, 1578, 584, 1576, 584, 1572, 586, 1576, 588, 1574, 584, 1574, 586, 496, 584, 494, 586, 496, 582, 496, 584, 494, 584, 500, 580, 496, 582, 492, 588, 500, 580, 1572, 588, 496, 584, 1576, 584, 548, 532, 1572, 588, 498, 580, 494, 586, 498, 584, 494, 584, 498, 582, 498, 582, 494, 586, 496, 584, 498, 582, 492, 588, 498, 582, 494, 584, 492, 588, 494, 584, 492, 586, 492, 586, 496, 584, 496, 584, 494, 586, 494, 584, 494, 588, 1572, 588, 492, 588, 1572, 588, 492, 586, 494, 586, 494, 586, 1574, 586}; // UNKNOWN E2D990EB

Timestamp : 000099.960
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4416, 4316, 590, 1572, 588, 1574, 586, 1572, 588, 1572, 588, 496, 584, 494, 586, 1572, 588, 496, 582, 498, 582, 498, 582, 492, 590, 490, 590, 1574, 584, 1574, 586, 496, 584, 1574, 586, 498, 584, 496, 584, 496, 582, 492, 588, 496, 586, 494, 582, 1576, 584, 1572, 590, 1572, 588, 1574, 586, 1574, 588, 1578, 582, 1576, 586, 1578, 582, 498, 584, 490, 588, 492, 588, 496, 582, 494, 588, 496, 582, 496, 584, 496, 582, 496, 584, 1574, 588, 496, 582, 1574, 588, 498, 582, 1574, 586, 496, 586, 494, 582, 496, 582, 498, 582, 496, 586, 496, 582, 496, 584, 498, 582, 498, 582, 1574, 588, 1574, 586, 1574, 586, 496, 584, 492, 588, 494, 584, 494, 586, 494, 588, 494, 584, 496, 584, 498, 582, 498, 582, 1576, 584, 496, 584, 1572, 588, 548, 532, 1572, 588, 1574, 586, 498, 580, 7422, 4424, 4318, 586, 1572, 588, 1574, 588, 1572, 586, 1576, 584, 496, 584, 496, 584, 1572, 588, 494, 588, 494, 586, 496, 582, 494, 586, 496, 586, 1574, 582, 1576, 584, 496, 584, 1572, 590, 494, 584, 492, 586, 496, 584, 492, 586, 498, 582, 496, 586, 1572, 586, 1574, 588, 1574, 586, 1572, 588, 1586, 574, 1574, 586, 1574, 586, 1578, 584, 492, 586, 492, 588, 496, 584, 492, 588, 498, 580, 496, 586, 496, 582, 494, 586, 496, 582, 1576, 586, 498, 582, 1574, 586, 494, 586, 1574, 584, 496, 584, 496, 586, 494, 586, 494, 584, 496, 586, 496, 582, 494, 586, 492, 588, 496, 582, 1580, 580, 1574, 586, 1574, 584, 498, 582, 502, 578, 496, 584, 494, 586, 494, 586, 498, 582, 496, 584, 496, 584, 494, 586, 1572, 586, 496, 586, 1574, 586, 494, 586, 1574, 586, 1574, 588, 492, 586}; // UNKNOWN 1B6696D7

Timestamp : 000101.203
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4424, 4318, 588, 1572, 590, 1580, 580, 1574, 586, 1574, 588, 496, 584, 492, 588, 1572, 588, 496, 584, 496, 582, 500, 582, 496, 582, 496, 584, 1572, 588, 1572, 590, 494, 586, 1572, 588, 492, 588, 496, 584, 490, 590, 496, 582, 496, 584, 548, 534, 1570, 590, 1578, 580, 1576, 586, 1574, 588, 1572, 586, 1576, 586, 1574, 588, 1572, 588, 498, 582, 494, 586, 492, 588, 500, 578, 494, 586, 496, 584, 496, 584, 496, 584, 498, 580, 1572, 588, 498, 582, 1572, 588, 496, 584, 1578, 584, 498, 584, 494, 584, 494, 586, 494, 584, 496, 582, 492, 588, 496, 584, 492, 586, 498, 582, 548, 532, 490, 588, 496, 584, 498, 582, 548, 532, 498, 582, 498, 582, 496, 584, 496, 584, 496, 582, 496, 586, 496, 582, 1576, 586, 490, 588, 1574, 588, 496, 584, 498, 582, 496, 582, 1574, 586, 7420, 4424, 4316, 592, 1572, 588, 1572, 588, 1576, 586, 1574, 586, 490, 590, 548, 532, 1572, 590, 492, 586, 494, 586, 496, 584, 496, 584, 492, 588, 1574, 588, 1570, 588, 496, 584, 1574, 586, 496, 584, 496, 584, 496, 584, 496, 584, 496, 582, 496, 584, 1580, 582, 1572, 586, 1578, 584, 1572, 590, 1576, 586, 1574, 588, 1574, 586, 1574, 586, 494, 586, 496, 582, 494, 586, 496, 584, 496, 586, 496, 582, 496, 582, 498, 582, 494, 586, 1580, 578, 496, 586, 1574, 586, 496, 584, 1572, 588, 492, 588, 494, 584, 496, 584, 498, 582, 492, 588, 496, 584, 498, 582, 492, 586, 496, 584, 498, 582, 492, 590, 494, 584, 494, 586, 492, 586, 496, 584, 496, 584, 492, 588, 492, 590, 496, 584, 506, 572, 496, 584, 1576, 584, 492, 588, 1576, 586, 494, 586, 496, 584, 490, 588, 1630, 532}; // UNKNOWN E2D990EB

Timestamp : 000102.257
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4416, 4316, 588, 1572, 588, 1574, 586, 1572, 588, 1572, 588, 496, 584, 496, 582, 1574, 588, 498, 582, 496, 584, 494, 586, 492, 586, 494, 588, 1570, 590, 1574, 584, 492, 588, 1572, 588, 496, 586, 498, 582, 492, 588, 496, 582, 496, 586, 548, 532, 1570, 590, 1572, 588, 1572, 588, 1572, 588, 1628, 532, 1572, 588, 1574, 584, 1576, 586, 490, 588, 542, 538, 496, 584, 492, 590, 492, 588, 496, 582, 496, 584, 494, 584, 492, 588, 1572, 588, 496, 584, 1572, 590, 496, 584, 1572, 586, 498, 582, 492, 588, 498, 580, 496, 584, 496, 584, 492, 588, 494, 586, 492, 588, 498, 582, 1572, 588, 1628, 532, 1574, 586, 498, 584, 494, 584, 496, 584, 498, 582, 496, 584, 494, 588, 496, 584, 548, 532, 496, 580, 1574, 588, 492, 588, 1574, 586, 496, 582, 1574, 590, 1572, 588, 494, 588, 7428, 4414, 4316, 590, 1576, 584, 1578, 582, 1574, 588, 1576, 582, 496, 584, 496, 584, 1572, 588, 496, 584, 496, 584, 498, 582, 494, 588, 498, 582, 1574, 588, 1572, 590, 496, 584, 1576, 586, 496, 584, 496, 584, 492, 586, 496, 586, 496, 584, 494, 586, 1572, 588, 1574, 586, 1572, 590, 1574, 586, 1572, 588, 1574, 586, 1572, 590, 1574, 588, 492, 588, 496, 584, 496, 582, 496, 584, 500, 580, 494, 586, 494, 584, 496, 584, 494, 586, 1574, 586, 498, 582, 1576, 584, 496, 582, 1574, 588, 496, 582, 496, 584, 494, 584, 494, 588, 496, 582, 498, 584, 496, 582, 498, 582, 498, 584, 1572, 586, 1576, 586, 1574, 586, 494, 586, 492, 586, 494, 586, 494, 586, 498, 580, 496, 582, 494, 586, 498, 584, 496, 582, 1576, 586, 498, 582, 1578, 582, 492, 588, 1572, 588, 1572, 588, 490, 588}; // UNKNOWN 1B6696D7

Timestamp : 000103.378
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4424, 4324, 582, 1572, 590, 1572, 588, 1572, 590, 1576, 584, 540, 540, 498, 582, 1578, 584, 492, 586, 494, 584, 494, 588, 496, 584, 490, 590, 1574, 588, 1570, 588, 492, 586, 1574, 588, 492, 588, 490, 590, 498, 582, 496, 584, 492, 588, 496, 584, 1572, 588, 1572, 588, 1572, 588, 1572, 590, 1572, 588, 1628, 530, 1576, 586, 1574, 586, 490, 592, 494, 584, 492, 588, 492, 586, 496, 586, 498, 582, 492, 586, 494, 586, 494, 584, 1572, 588, 496, 584, 1572, 590, 496, 584, 1578, 584, 496, 584, 492, 586, 496, 586, 496, 584, 496, 582, 494, 584, 496, 584, 496, 584, 496, 584, 496, 584, 496, 584, 494, 588, 490, 588, 500, 580, 498, 584, 492, 588, 492, 586, 494, 584, 498, 584, 496, 582, 498, 584, 1572, 590, 494, 582, 1576, 586, 548, 532, 494, 586, 496, 584, 1572, 588, 7420, 4426, 4320, 586, 1570, 590, 1574, 584, 1574, 586, 1576, 586, 494, 584, 496, 584, 1572, 588, 494, 586, 496, 584, 496, 582, 498, 584, 496, 584, 1570, 590, 1570, 590, 496, 584, 1574, 586, 500, 580, 494, 586, 496, 584, 496, 584, 546, 532, 496, 586, 1576, 584, 1572, 588, 1576, 582, 1574, 590, 1570, 590, 1572, 588, 1570, 590, 1572, 588, 496, 584, 496, 584, 496, 584, 496, 582, 496, 584, 496, 586, 494, 582, 494, 588, 496, 582, 1628, 532, 498, 582, 1574, 586, 498, 584, 1572, 586, 494, 584, 498, 582, 496, 586, 494, 584, 496, 584, 500, 582, 494, 586, 496, 584, 492, 588, 496, 584, 494, 586, 496, 584, 496, 584, 494, 586, 496, 584, 494, 584, 496, 584, 496, 584, 498, 582, 496, 584, 496, 582, 1572, 590, 492, 586, 1572, 590, 496, 584, 496, 582, 498, 582, 1572, 588}; // UNKNOWN E2D990EB

Timestamp : 000104.485
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4424, 4316, 588, 1572, 588, 1574, 586, 1572, 588, 1574, 586, 494, 588, 492, 586, 1572, 588, 496, 584, 498, 584, 496, 582, 494, 586, 498, 582, 1576, 586, 1572, 586, 496, 586, 1574, 586, 496, 584, 492, 588, 496, 584, 496, 582, 496, 584, 496, 584, 1570, 588, 1576, 586, 1572, 588, 1572, 588, 1576, 584, 1572, 588, 1572, 588, 1572, 590, 496, 582, 496, 582, 498, 584, 492, 588, 496, 584, 494, 584, 498, 582, 494, 586, 492, 586, 1574, 588, 496, 584, 1572, 588, 494, 586, 1580, 580, 496, 584, 496, 584, 496, 582, 494, 586, 492, 588, 496, 584, 496, 584, 496, 586, 494, 586, 1574, 584, 1576, 586, 1572, 590, 494, 582, 496, 584, 496, 586, 496, 582, 496, 586, 492, 588, 500, 580, 494, 584, 496, 582, 1574, 588, 492, 586, 1576, 586, 494, 586, 1576, 584, 1572, 590, 494, 584, 7426, 4418, 4316, 590, 1570, 588, 1572, 588, 1572, 590, 1572, 590, 494, 584, 494, 586, 1574, 586, 550, 532, 496, 582, 496, 584, 498, 580, 498, 584, 1572, 588, 1574, 588, 498, 582, 1570, 590, 496, 582, 496, 584, 496, 586, 494, 586, 492, 586, 548, 532, 1624, 536, 1572, 588, 1572, 590, 1628, 534, 1570, 590, 1574, 586, 1572, 588, 1576, 586, 494, 586, 494, 586, 498, 582, 496, 584, 496, 586, 490, 588, 492, 586, 496, 584, 496, 582, 1574, 590, 490, 590, 1570, 588, 496, 584, 1574, 586, 500, 580, 494, 586, 496, 584, 496, 584, 496, 584, 496, 584, 494, 582, 494, 588, 496, 582, 1574, 588, 1572, 588, 1572, 590, 496, 584, 492, 588, 496, 586, 492, 588, 492, 588, 496, 584, 492, 588, 494, 588, 494, 584, 1574, 586, 494, 586, 1576, 586, 498, 582, 1572, 588, 1572, 588, 496, 586}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000105.795
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4418, 4316, 590, 1574, 586, 1572, 588, 1578, 582, 1572, 588, 494, 586, 498, 584, 1574, 584, 492, 588, 496, 582, 496, 584, 494, 586, 496, 582, 1574, 588, 1578, 582, 498, 584, 1574, 586, 496, 584, 490, 588, 492, 588, 494, 584, 496, 584, 496, 586, 1572, 588, 1578, 582, 1572, 588, 1572, 590, 1576, 586, 1570, 588, 1576, 586, 1578, 582, 494, 586, 492, 586, 492, 588, 496, 584, 496, 584, 496, 582, 498, 584, 494, 586, 496, 584, 1572, 588, 492, 590, 1570, 590, 496, 582, 1574, 586, 496, 584, 496, 584, 496, 584, 496, 584, 492, 588, 496, 584, 492, 588, 496, 584, 496, 584, 498, 582, 494, 586, 546, 532, 494, 586, 496, 582, 496, 582, 496, 584, 496, 584, 498, 582, 492, 588, 500, 582, 548, 530, 1572, 590, 496, 584, 1572, 590, 496, 584, 498, 582, 548, 530, 1630, 532, 7420, 4424, 4316, 588, 1574, 586, 1572, 588, 1572, 590, 1570, 590, 498, 582, 498, 584, 1572, 588, 492, 588, 494, 584, 496, 584, 492, 588, 494, 584, 1580, 582, 1572, 588, 498, 582, 1574, 586, 496, 584, 496, 584, 490, 588, 496, 584, 498, 582, 494, 586, 1576, 584, 1572, 588, 1574, 588, 1576, 584, 1574, 586, 1576, 586, 1574, 586, 1574, 586, 494, 584, 492, 588, 496, 584, 496, 584, 548, 532, 496, 584, 496, 584, 496, 584, 494, 584, 1574, 588, 498, 582, 1572, 590, 494, 584, 1576, 582, 494, 588, 496, 584, 494, 586, 500, 580, 496, 584, 496, 584, 496, 584, 496, 582, 496, 584, 550, 530, 498, 582, 496, 586, 496, 584, 494, 584, 494, 588, 496, 584, 496, 584, 498, 584, 494, 586, 496, 584, 492, 588, 1572, 588, 496, 584, 1572, 588, 496, 582, 494, 586, 496, 584, 1576, 586}; // UNKNOWN E2D990EB

Timestamp : 000106.898
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4424, 4316, 588, 1572, 588, 1572, 588, 1574, 588, 1572, 590, 494, 586, 490, 590, 1570, 590, 496, 584, 492, 588, 494, 584, 496, 584, 492, 586, 1576, 586, 1576, 584, 496, 584, 1572, 588, 498, 584, 494, 584, 496, 584, 490, 588, 492, 588, 498, 584, 1574, 584, 1574, 588, 1626, 532, 1576, 584, 1576, 586, 1576, 586, 1574, 586, 1628, 532, 496, 584, 496, 584, 496, 584, 496, 584, 496, 586, 494, 584, 496, 584, 494, 584, 496, 584, 1572, 588, 496, 584, 1572, 588, 492, 588, 1574, 588, 494, 586, 496, 584, 494, 584, 496, 582, 498, 584, 494, 586, 494, 588, 494, 584, 496, 584, 1572, 590, 1578, 580, 1572, 588, 496, 582, 496, 586, 494, 586, 498, 582, 494, 584, 496, 584, 494, 586, 498, 580, 490, 590, 1576, 584, 498, 584, 1574, 586, 496, 584, 1574, 586, 1574, 586, 494, 584, 7418, 4428, 4314, 590, 1570, 590, 1576, 586, 1576, 584, 1570, 590, 494, 584, 496, 584, 1572, 588, 496, 586, 496, 582, 498, 580, 498, 584, 496, 584, 1572, 590, 1576, 586, 494, 584, 1574, 588, 492, 588, 498, 584, 494, 584, 496, 584, 492, 588, 498, 582, 1572, 588, 1574, 586, 1572, 588, 1574, 586, 1576, 586, 1576, 586, 1570, 590, 1574, 588, 494, 584, 496, 584, 494, 588, 494, 584, 494, 586, 496, 584, 494, 586, 492, 588, 490, 590, 1568, 590, 492, 588, 1570, 590, 492, 588, 1574, 586, 496, 584, 492, 588, 498, 584, 496, 584, 496, 584, 496, 584, 494, 588, 494, 584, 496, 584, 1574, 584, 1572, 588, 1572, 588, 494, 584, 500, 582, 494, 584, 490, 590, 492, 588, 496, 584, 494, 584, 496, 584, 494, 586, 1570, 590, 496, 582, 1576, 586, 492, 586, 1572, 590, 1570, 590, 496, 584}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000108.135
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4424, 4316, 590, 1574, 586, 1576, 584, 1572, 590, 1576, 584, 492, 588, 498, 584, 1574, 586, 494, 586, 496, 582, 496, 584, 490, 592, 492, 586, 1570, 592, 1570, 588, 496, 584, 1574, 586, 496, 582, 494, 586, 492, 588, 494, 586, 496, 584, 496, 586, 1576, 582, 1576, 586, 1574, 586, 1576, 586, 1572, 588, 1578, 582, 1572, 590, 1576, 584, 496, 586, 494, 584, 496, 586, 496, 582, 496, 586, 496, 584, 490, 590, 494, 586, 492, 588, 1570, 590, 490, 590, 1572, 588, 490, 590, 1628, 532, 496, 584, 496, 582, 496, 584, 496, 582, 498, 582, 498, 582, 496, 584, 496, 586, 494, 586, 492, 588, 496, 584, 492, 588, 496, 584, 496, 584, 544, 536, 494, 586, 494, 584, 496, 584, 492, 588, 496, 584, 492, 588, 1574, 588, 498, 580, 1574, 588, 494, 584, 494, 586, 494, 586, 1570, 590, 7422, 4424, 4316, 590, 1572, 586, 1576, 584, 1576, 586, 1576, 584, 496, 582, 496, 584, 1576, 586, 496, 584, 496, 584, 494, 586, 496, 584, 496, 584, 1572, 588, 1576, 584, 548, 530, 1574, 588, 494, 586, 496, 584, 494, 588, 494, 584, 498, 584, 494, 586, 1578, 584, 1572, 586, 1576, 586, 1572, 588, 1570, 590, 1574, 586, 1574, 584, 1572, 590, 496, 584, 496, 584, 494, 584, 496, 584, 490, 590, 492, 586, 492, 590, 492, 586, 498, 582, 1574, 588, 494, 586, 1574, 586, 496, 584, 1574, 586, 496, 584, 494, 586, 496, 584, 494, 584, 494, 586, 494, 586, 496, 582, 498, 582, 496, 584, 494, 584, 494, 586, 498, 584, 494, 584, 496, 582, 498, 582, 490, 588, 494, 588, 496, 584, 496, 584, 498, 582, 496, 584, 1574, 586, 496, 582, 1576, 584, 494, 588, 496, 584, 496, 584, 1576, 584}; // UNKNOWN E2D990EB

Timestamp : 000109.318
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4424, 4316, 590, 1572, 590, 1572, 588, 1576, 586, 1576, 584, 544, 534, 496, 584, 1572, 588, 498, 584, 494, 584, 492, 588, 492, 588, 494, 586, 1574, 588, 1572, 588, 490, 590, 1574, 586, 494, 586, 492, 586, 494, 588, 494, 586, 496, 582, 496, 586, 1574, 588, 1572, 590, 1572, 586, 1574, 586, 1574, 588, 1572, 590, 1572, 590, 1574, 586, 494, 584, 496, 584, 496, 582, 496, 586, 496, 584, 496, 584, 492, 588, 496, 584, 492, 590, 1574, 586, 496, 582, 1572, 588, 496, 584, 1574, 588, 498, 582, 492, 586, 494, 586, 496, 580, 496, 588, 494, 584, 496, 582, 498, 584, 494, 584, 1576, 584, 1572, 590, 1572, 588, 496, 584, 492, 588, 494, 586, 494, 584, 494, 586, 548, 534, 494, 584, 496, 584, 490, 590, 1574, 586, 496, 582, 1572, 588, 492, 588, 1574, 586, 1576, 584, 498, 582, 7420, 4426, 4322, 582, 1572, 590, 1576, 584, 1572, 588, 1572, 588, 496, 584, 548, 532, 1572, 588, 498, 582, 494, 584, 496, 586, 496, 582, 498, 582, 1570, 590, 1576, 584, 496, 584, 1572, 588, 498, 582, 496, 584, 496, 582, 496, 584, 496, 584, 498, 582, 1572, 588, 1576, 586, 1572, 588, 1574, 588, 1574, 586, 1572, 588, 1574, 586, 1572, 588, 498, 582, 496, 584, 498, 582, 498, 582, 550, 532, 492, 588, 496, 582, 496, 586, 496, 584, 1572, 588, 494, 586, 1576, 584, 496, 582, 1572, 590, 496, 584, 498, 582, 494, 586, 498, 580, 498, 582, 498, 582, 498, 582, 496, 584, 494, 586, 1576, 584, 1570, 590, 1576, 586, 494, 586, 496, 584, 498, 582, 498, 582, 496, 584, 494, 586, 492, 588, 496, 586, 496, 582, 1576, 586, 496, 586, 1570, 590, 492, 586, 1572, 588, 1572, 588, 496, 582}; // UNKNOWN 1B6696D7

Timestamp : 000110.420
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150000051 (72 Bits)
Mesg Desc.: Power: On, Mode: 0 (Auto), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4424, 4316, 588, 1574, 586, 1576, 584, 1574, 586, 1576, 584, 494, 586, 492, 588, 1572, 588, 492, 588, 496, 584, 494, 586, 496, 584, 498, 582, 1574, 584, 1576, 584, 498, 582, 1574, 586, 494, 588, 496, 584, 492, 586, 498, 584, 492, 588, 492, 588, 1572, 588, 1574, 586, 1574, 586, 1578, 582, 1576, 584, 1574, 586, 1574, 588, 1574, 586, 496, 584, 496, 582, 498, 582, 494, 586, 496, 582, 498, 582, 494, 586, 496, 584, 492, 588, 1574, 588, 498, 580, 1582, 580, 496, 582, 1576, 586, 492, 586, 498, 582, 498, 582, 496, 582, 494, 586, 496, 584, 490, 588, 494, 586, 494, 586, 496, 584, 494, 588, 494, 586, 496, 582, 494, 586, 498, 582, 496, 586, 492, 588, 496, 582, 498, 582, 498, 582, 498, 582, 1580, 580, 496, 582, 1574, 588, 498, 582, 494, 586, 496, 582, 1574, 588, 7420, 4422, 4320, 586, 1576, 584, 1574, 586, 1576, 584, 1574, 590, 490, 588, 496, 580, 1580, 582, 498, 582, 492, 588, 492, 588, 496, 584, 496, 582, 1578, 582, 1576, 586, 496, 582, 1574, 586, 498, 584, 492, 586, 498, 582, 494, 586, 496, 584, 492, 586, 1578, 582, 1574, 588, 1572, 586, 1580, 578, 1576, 586, 1574, 586, 1574, 586, 1576, 586, 548, 532, 492, 586, 494, 586, 496, 584, 494, 586, 498, 582, 492, 588, 496, 584, 494, 584, 1574, 588, 492, 586, 1574, 586, 494, 586, 1630, 530, 492, 586, 498, 582, 498, 582, 494, 586, 496, 584, 494, 586, 494, 586, 494, 586, 496, 586, 494, 586, 498, 582, 494, 588, 492, 586, 498, 584, 494, 586, 494, 584, 492, 588, 496, 584, 494, 584, 494, 586, 494, 584, 1574, 586, 494, 586, 1574, 586, 496, 584, 494, 586, 498, 582, 1574, 586}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x00, 0x00, 0x51};

Timestamp : 000111.555
Library : v2.7.8

Protocol : TOSHIBA_AC
Code : 0xF20D03FC0150070056 (72 Bits)
Mesg Desc.: Power: Off, Mode: 3 (Heat), Temp: 22C, Fan: 0 (Auto)
uint16_t rawData[295] = {4418, 4324, 580, 1578, 580, 1580, 582, 1578, 584, 1578, 582, 496, 582, 498, 582, 1580, 584, 496, 582, 498, 582, 502, 578, 498, 582, 498, 584, 1578, 582, 1580, 580, 498, 584, 1578, 582, 498, 580, 502, 578, 498, 584, 498, 582, 500, 580, 496, 584, 1578, 584, 1576, 582, 1584, 550, 1604, 584, 1576, 582, 1578, 582, 1582, 578, 1580, 582, 502, 578, 500, 580, 496, 556, 524, 582, 498, 584, 496, 582, 498, 580, 498, 582, 498, 582, 1580, 582, 496, 582, 1578, 582, 502, 578, 1578, 582, 498, 552, 528, 580, 498, 580, 500, 574, 504, 580, 502, 576, 502, 580, 498, 582, 498, 582, 1578, 556, 1612, 548, 1610, 550, 526, 580, 498, 584, 496, 584, 496, 582, 498, 572, 508, 582, 496, 582, 500, 580, 500, 554, 1604, 582, 498, 582, 1584, 550, 526, 582, 1578, 582, 1578, 582, 502, 548, 7458, 4414, 4324, 580, 1580, 584, 1578, 554, 1608, 582, 1578, 582, 498, 554, 526, 580, 1582, 578, 504, 550, 528, 578, 504, 552, 524, 580, 500, 554, 1612, 550, 1662, 500, 530, 550, 1606, 582, 498, 580, 500, 580, 498, 580, 500, 554, 532, 548, 526, 554, 1608, 580, 1580, 582, 1578, 582, 1580, 582, 1590, 542, 1610, 578, 1584, 578, 1584, 562, 512, 582, 496, 582, 502, 576, 500, 582, 502, 550, 526, 580, 500, 578, 498, 584, 496, 580, 1580, 580, 504, 550, 1606, 582, 502, 576, 1580, 582, 498, 554, 526, 582, 500, 578, 500, 580, 500, 582, 498, 582, 498, 582, 560, 492, 528, 552, 1606, 554, 1608, 582, 1578, 556, 526, 578, 500, 580, 500, 582, 498, 580, 498, 554, 532, 546, 530, 578, 498, 556, 524, 582, 1576, 584, 498, 582, 1578, 584, 496, 580, 1580, 584, 1578, 582, 498, 582}; // TOSHIBA_AC
uint8_t state[9] = {0xF2, 0x0D, 0x03, 0xFC, 0x01, 0x50, 0x07, 0x00, 0x56};

Timestamp : 000112.783
Library : v2.7.8

Protocol : UNKNOWN
Code : 0xE2D990EB (148 Bits)
uint16_t rawData[295] = {4416, 4322, 584, 1582, 548, 1612, 548, 1606, 582, 1578, 580, 500, 580, 500, 554, 1604, 556, 524, 564, 516, 582, 498, 580, 498, 584, 498, 582, 1578, 584, 1578, 554, 526, 580, 1578, 584, 496, 582, 498, 578, 500, 580, 500, 580, 498, 554, 526, 582, 1578, 582, 1580, 584, 1576, 584, 1578, 580, 1580, 554, 1606, 582, 1578, 556, 1604, 582, 500, 582, 500, 552, 530, 548, 526, 582, 498, 582, 498, 582, 498, 582, 496, 582, 498, 580, 1582, 554, 524, 582, 1580, 582, 500, 554, 1606, 580, 500, 554, 526, 582, 498, 582, 498, 580, 500, 554, 532, 546, 526, 582, 496, 556, 582, 498, 528, 550, 528, 580, 498, 580, 500, 580, 500, 580, 500, 584, 496, 584, 500, 580, 496, 582, 498, 554, 526, 580, 498, 584, 1578, 552, 526, 582, 1578, 582, 510, 542, 530, 550, 528, 578, 1580, 580, 7430, 4418, 4322, 582, 1578, 554, 1608, 582, 1580, 578, 1580, 580, 504, 550, 526, 576, 1584, 582, 498, 582, 498, 582, 498, 582, 504, 548, 526, 582, 1578, 582, 1578, 582, 498, 556, 1606, 552, 526, 554, 526, 580, 498, 582, 498, 580, 504, 550, 526, 582, 1578, 582, 1578, 582, 1578, 584, 1578, 582, 1580, 580, 1580, 580, 1580, 580, 1580, 554, 526, 580, 500, 556, 526, 580, 498, 580, 500, 582, 496, 582, 502, 550, 526, 582, 498, 580, 1582, 568, 512, 580, 1580, 582, 498, 580, 1582, 582, 554, 498, 526, 554, 526, 580, 498, 584, 498, 552, 584, 496, 528, 552, 528, 580, 500, 578, 500, 582, 498, 582, 510, 542, 528, 580, 498, 554, 526, 556, 524, 582, 496, 584, 498, 554, 528, 552, 526, 554, 526, 554, 1606, 582, 498, 584, 1578, 582, 498, 582, 498, 554, 532, 546, 1608, 584}; // UNKNOWN E2D990EB

Timestamp : 000113.763
Library : v2.7.8

Protocol : UNKNOWN
Code : 0x1B6696D7 (148 Bits)
uint16_t rawData[295] = {4418, 4322, 582, 1580, 582, 1580, 554, 1606, 582, 1578, 582, 498, 584, 502, 550, 1608, 552, 526, 582, 498, 554, 532, 550, 524, 580, 554, 498, 1610, 580, 1578, 580, 498, 582, 1578, 554, 528, 580, 504, 548, 530, 550, 526, 582, 498, 584, 496, 582, 1578, 582, 1580, 582, 1578, 580, 1578, 582, 1578, 572, 1588, 582, 1578, 554, 1606, 556, 524, 582, 498, 554, 526, 558, 522, 580, 500, 554, 526, 580, 498, 582, 498, 582, 500, 578, 1580, 554, 524, 556, 1606, 584, 500, 552, 1604, 554, 526, 582, 498, 582, 498, 554, 526, 582, 498, 582, 496, 584, 496, 582, 500, 578, 498, 554, 1608, 554, 1604, 584, 1578, 582, 498, 582, 498, 576, 504, 556, 524, 580, 498, 582, 500, 582, 498, 552, 526, 582, 498, 582, 1580, 582, 498, 582, 1580, 552, 526, 584, 1580, 578, 1582, 580, 498, 582, 7426, 4416, 4324, 580, 1578, 582, 1592, 540, 1612, 550, 1606, 582, 498, 580, 500, 582, 1578, 582, 500, 552, 526, 582, 504, 548, 536, 542, 530, 558, 1602, 552, 1606, 580, 500, 582, 1578, 582, 500, 552, 584, 498, 526, 554, 526, 582, 498, 580, 500, 554, 1608, 582, 1578, 582, 1580, 582, 1576, 582, 1580, 582, 1578, 582, 1578, 554, 1608, 552, 528, 580, 500, 580, 500, 554, 528, 578, 506, 548, 528, 552, 526, 552, 528, 580, 504, 550, 1606, 582, 498, 582, 1580, 552, 526, 582, 1584, 546, 528, 552, 526, 554, 582, 498, 526, 554, 526, 554, 524, 582, 500, 552, 530, 578, 500, 554, 1608, 570, 1590, 580, 1592, 544, 528, 552, 524, 582, 498, 554, 532, 548, 528, 552, 526, 582, 500, 582, 498, 580, 498, 582, 1578, 582, 500, 552, 1606, 580, 500, 580, 1580, 554, 1606, 580, 498, 582}; // UNKNOWN 1B6696D7

Thanks for the data, that's helpful. I'll see what I can do.

Looking for Toshiba and Carrier on Google I found the following, which would explain things :)
https://www.toshiba-carrier.co.jp/global/about/index.htm
http://www.toshiba-carrier.co.th/AboutUs/Pages/CompanyProfile.aspx

So basically my AC models are branded as Carrier, and were produced at the Toshiba Carrier joint venture manufacturing plant in Thailand.

If I adjust the values for matchGeneric(), then all the 72 bit version messages so far are recognized as Toshiba.

bool IRrecv::decodeToshibaAC(decode_results* results, uint16_t offset,
                             const uint16_t nbits, const bool strict) {
  // Compliance
  if (strict && nbits != kToshibaACBits)
    return false;  // Must be called with the correct nr. of bytes.

  // Match Header + Data + Footer
  if (!matchGeneric(results->rawbuf + offset, results->state,
                    results->rawlen - offset, nbits,
/*
                    kToshibaAcHdrMark, kToshibaAcHdrSpace,
                    kToshibaAcBitMark, kToshibaAcOneSpace,
                    kToshibaAcBitMark, kToshibaAcZeroSpace,
                    kToshibaAcBitMark, kToshibaAcMinGap, true,
*/
                    4406, 4337,
                    554, 1604,
                    554, 526,
                    554, 7441, true,
                    _tolerance, kMarkExcess)) return false;
...

With the following small changes (does not include the different timing values for decodeToshibaAC/matchGeneric) the 72 bit messages get recognized mostly correctly, e.g. the 7 for the off mode gets an Unknown in the report, while Fan2 and Fan4 get Unknown, because of an unrelated generic issue, i.e. reporting seems to handle only generic Min(Fan1)/Med(Fan3)/Max(Fan5) values, and basically both reporting issues are just cosmetic none-issues.

diff ir_Toshiba.h ir_Toshiba_.h

< const uint8_t kToshibaAcModeSize = 2;  // Nr. of bits
---
> const uint8_t kToshibaAcModeSize = 3;  // Nr. of bits
36a37,38
> const uint8_t kToshibaAcFan = 4;
> const uint8_t kToshibaAcOff = 7;

diff ir_Toshiba.cpp ir_Toshiba_.cpp

28a29,38
>
> // Toshiba Carrier A/C
> const uint16_t kToshibaCarrierAcHdrMark = 4406;
> const uint16_t kToshibaCarrierAcHdrSpace = 4337;
> const uint16_t kToshibaCarrierAcBitMark = 554;
> const uint16_t kToshibaCarrierAcOneSpace = 1604;
> const uint16_t kToshibaCarrierAcZeroSpace = 526;
> const uint16_t kToshibaCarrierAcMinGap = 7441;
>
>
144c154
<             kToshibaAcHeat);
---
>             kToshibaAcOff);
208a219,220
>     case kToshibaAcFan:
>     case kToshibaAcOff:
227c239,240
<     // No Fan mode.
---
>     case stdAc::opmode_t::kFan:   return kToshibaAcFan;
>     case stdAc::opmode_t::kOff:   return kToshibaAcOff;
253a267,268
>     case kToshibaAcFan:  return stdAc::opmode_t::kFan;
>     case kToshibaAcOff:  return stdAc::opmode_t::kOff;
305c320
<                             kToshibaAcHeat, kToshibaAcDry, kToshibaAcAuto);
---
>                             kToshibaAcHeat, kToshibaAcDry, kToshibaAcFan);

The other question that remains is:

  • How to best to include the 80 bit messages and the 2 different kinds of the 56 bit messages, i.e. repeat(Swing) and no-repeat(AirDir))?

OK, I checked the IRsendDemo and used sendToshibaAC() to send a command periodically every 2 seconds: Basically, both the original timing values, as well as the ones I averaged over a few dozen of messages mentioned above worked, but only with my values does IRrecvDumpV2 recognize all the commands as Toshiba.

Looking at the differences of each timing value, it looks like as if the ZeroSpace one has the biggest difference of ~-11% followed by MinGap with ~-5%, while the rest of the values is 2% or less, so I tested adjusting ZeroSpace to the average between the original 472 and my 526, i.e. 499 and with that IRrecvDumpV2 recognizes it now in 83% of time as Toshiba in a test scenarion of around 100 samples. Setting it to 513 improved the recognition to 96%. Setting it to 515 started to degrade recognition grade, which indicates that some other parameter has influence too.

Using 549 for BitMark and 499 for MinGap improved the recognition rate from 83% to 90%, and using 549 for BitMark and 513 for MinGap did not improve the recognition rate from 90% significantly, and adjusting additionally OneSpace to 1613 too degraded to 86%.

Adjusting all of the following values to the average between the original and my values increased the recognition rate to 97%:
const uint16_t kToshibaAcBitMark = 549;
const uint16_t kToshibaAcOneSpace = 1613;
const uint16_t kToshibaAcZeroSpace = 499;
const uint16_t kToshibaAcMinGap = 7244;

There was no significant recognition rate difference with the above settings between OnceSpace 1613 and the original 1623.

And the consistency cross check over 100+ samples with my settings returned a 100% recognition rate.

The biggest impact has been achieved with the ZeroSpace adjustment, and then adding BitMark too.

@crankyoldgit Tomorrow I will check your basic support code

Thanks for the testing above. So, yeah, it looks like it's the same protocol. I'll look at adjusting timings & tolerances. I'll try to see if there is a way I can tell from the data if it is the Toshiba or the Carrier model, so we can get the mode/swing values correct etc

By the way the last byte of all different length messages is the XOR result over all previous bytes. The swing binary values are mixed up in the spreadsheet (hex is correct), and if they are corrected, then the XOR value is also correct.

Yep. That's the same as Toshiba.

BTW, nice work on working out that the 3rd byte is the length. That's cool/helpful. I'm still trying to work out how I can tell the difference between this and Toshiba from the decoded hex data. :-/

For the record, looking back at the history of Toshiba AC support, it looks like someone found a link to some existing code and I imported it based on me reading/re-coding it. So we don't have a lot of analysis data for it to verify against. :-/

So, I think the original code I looked at had poor analysis. Looking at your data & analysis, it looks a better fit. I'll thus update Toshiba to match your results.

Hey @casasale can you please download and try out the following branch: https://github.com/crankyoldgit/IRremoteESP8266/tree/Carrier72

I've tried to improve the Toshiba matching and protocol decoding. I think it will probably match the 72bit versions of your messages better.

Let me know how that goes, and I can then try to work on the shorter and longer versions of the messages.

Hi @crankyoldgit,

Great, thank you.
I will download it and test it.

Hi @crankyoldgit,

This is the current testing status of the receiving side:

  • The command recognition rate as TOSHIBA_AC is great and very high >99%
  • All different length commands get recognized with the following lengths: 72, 56, 56_no_repeat, and 80
  • There was 1 reporting issue in 72 bit mode regarding the mode string when Mode Fan is enabled (potential code fixes in code diff below)
  • 56 bit messages report wrong mode values (Auto, Cool, Heat), which seems to indicate that the last XOR byte is being used to get the mode value, and additionally it reports also wrong temperature, i.e. in case of 56 bit messages no Power/Mode/Temp/Fan states should be read or set, while 80 bit should be fine (needs to be enhanced)

By the way, another behavior information is that in the special 80 bit High/Eco power command modes the 80 bit command length stays only in 80 bit when no Mode (Auto/Cool/Dry/Heat/Fan) or Power (Off/On) is changed, i.e. if the Mode button is pressed or Power Off and then On, then the 80 bit Hi_Power/Eco mode is reset to the normal 72 bit mode, and vice versa changing temperature, swing on/off and air direction maintain the current bit length of 80 bit. Although a simplified approach where only setting Hi/ECO-Power is possible and any other command would reset it to 72 bit, e.g. if someone wants Hi/Eco, then the settings could be changed followed by enabling Hi/Eco.

Code diff:

*** ir_Toshiba.cpp_org  2020-06-30 05:04:09.000000000 -0400
--- ir_Toshiba.cpp      2020-06-30 13:33:37.640796200 -0400
***************
*** 225,230 ****
--- 225,231 ----
      case stdAc::opmode_t::kHeat: return kToshibaAcHeat;
      case stdAc::opmode_t::kDry:  return kToshibaAcDry;
      case stdAc::opmode_t::kFan:  return kToshibaAcFan;
+     //case stdAc::opmode_t::kOff:  return kToshibaAcOff;   //Don't know if this is necessary
      default:                     return kToshibaAcAuto;
    }
  }
***************
*** 251,256 ****
--- 252,259 ----
      case kToshibaAcCool: return stdAc::opmode_t::kCool;
      case kToshibaAcHeat: return stdAc::opmode_t::kHeat;
      case kToshibaAcDry:  return stdAc::opmode_t::kDry;
+     case kToshibaAcFan:  return stdAc::opmode_t::kFan;   //Missing case
+     //case kToshibaAcOff:  return stdAc::opmode_t::kOff;    //Don't know if this is necessary
      default:             return stdAc::opmode_t::kAuto;
    }
  }
***************
*** 303,309 ****
    result += addBoolToString(getPower(), kPowerStr, false);
    if (getPower())
      result += addModeToString(getMode(), kToshibaAcAuto, kToshibaAcCool,
!                               kToshibaAcHeat, kToshibaAcDry, kToshibaAcAuto);
    result += addTempToString(getTemp());
    result += addFanToString(getFan(), kToshibaAcFanMax, kToshibaAcFanMin,
                             kToshibaAcFanAuto, kToshibaAcFanAuto,
--- 306,312 ----
    result += addBoolToString(getPower(), kPowerStr, false);
    if (getPower())
      result += addModeToString(getMode(), kToshibaAcAuto, kToshibaAcCool,
!                             kToshibaAcHeat, kToshibaAcDry, kToshibaAcFan);    //Fix Mode Fan reporting
    result += addTempToString(getTemp());
    result += addFanToString(getFan(), kToshibaAcFanMax, kToshibaAcFanMin,
                             kToshibaAcFanAuto, kToshibaAcFanAuto,

Here are the reports with the above code changes:

Protocol : TOSHIBA_AC
 Code : 0xF20D03FC0150070056 (72 Bits)
 Mesg Desc.: Power: Off,Temp: 22C,Fan: 0 (Auto)
uint16_t rawData_OFF[295] = {4424,4322,584,1572,588,1576,582,1576,586,1572,590,496,584,490,588,1574,586,492,588,494,586,496,584,492,588,494,
  586,1576,584,1574,586,490,588,1572,586,496,584,496,584,494,586,496,582,492,590,494,584,1572,588,1578,582,1572,588,1572,588,1574,588,1580,580,
  1574,586,1576,586,496,584,490,590,496,584,490,588,496,584,498,582,496,586,496,582,500,584,1572,586,534,544,1572,588,498,582,1576,584,492,588,490,
  588,492,588,494,586,496,584,498,584,490,588,496,582,498,584,1570,588,1576,586,1576,586,490,588,498,584,494,586,496,584,492,590,490,588,490,590,494,
  586,492,588,1576,584,496,584,1576,584,492,586,1574,588,1572,590,494,586,7420,4424,4316,590,1574,586,1572,588,1574,586,1574,588,492,588,496,584,1576,
  586,494,586,496,584,492,588,496,586,492,588,1572,588,1576,586,496,582,1576,586,496,584,496,582,496,582,492,590,496,584,498,584,1576,584,1572,588,1572,
  588,1572,588,1576,584,1576,586,1576,582,1574,590,496,582,496,584,496,584,490,588,496,584,496,582,494,588,494,586,494,586,1578,582,498,582,1574,586,496,
  584,1574,586,496,584,492,586,494,584,496,584,498,582,496,584,490,590,496,584,496,584,1576,586,1576,586,1572,588,492,590,496,584,498,584,548,530,496,584,
  494,586,496,582,492,588,496,584,1576,584,492,590,1572,588,494,586,1576,586,1570,590,490,588}; // TOSHIBA_AC
 uint8_t state[9] = {0xF2,0x0D,0x03,0xFC,0x01,0x50,0x07,0x00,0x56};


Protocol : TOSHIBA_AC
 Code : 0xF20D03FC0150000051 (72 Bits)
 Mesg Desc.: Power: On,Mode: 0 (Auto),Temp: 22C,Fan: 0 (Auto)
uint16_t rawData_ON[295] = {4422,4316,590,1574,586,1572,588,1572,588,1576,586,490,586,498,586,1572,586,496,584,494,586,496,582,492,590,494,
584,1576,586,1570,588,496,582,1572,590,492,586,492,588,496,582,498,582,498,582,498,582,1572,588,1578,584,1576,584,1572,588,1576,586,1574,586,
1576,586,1572,588,494,586,494,586,496,582,494,586,494,584,494,588,496,584,492,590,494,586,1580,580,496,584,1574,586,494,584,1572,588,494,584,496,
586,494,586,496,584,496,584,496,584,496,584,494,586,496,582,498,584,496,584,496,584,496,582,492,590,494,584,496,586,490,588,500,582,496,584,494,584,
494,586,1574,586,490,590,1576,584,498,582,494,586,492,588,1572,590,7418,4426,4320,584,1576,586,1572,588,1574,586,1572,588,494,586,494,584,1572,590,
494,586,490,588,494,586,494,586,498,582,1572,588,1576,584,498,584,1572,588,494,584,496,584,496,582,494,588,490,590,496,582,1574,586,1572,588,1576,586,
1578,584,1572,586,1572,588,1576,584,1574,588,496,582,498,582,494,584,496,586,496,582,496,584,498,584,496,582,494,586,1572,588,496,584,1574,586,496,582,
1576,586,490,586,496,586,492,588,494,586,494,586,494,584,496,584,496,582,498,582,492,586,492,588,490,590,492,588,496,584,490,590,496,582,498,582,498,584,
494,584,492,588,496,584,1574,586,490,590,1570,590,498,582,496,584,498,582,1574,588}; // TOSHIBA_AC
 uint8_t state[9] = {0xF2,0x0D,0x03,0xFC,0x01,0x50,0x00,0x00,0x51};


Protocol : TOSHIBA_AC
 Code : 0xF20D01FE210120 (56 Bits)
 Mesg Desc.: Power: On,Mode: 0 (Auto),Temp: 17C,Fan: 0 (Auto)
uint16_t rawData_SWING_ON[231] = {4424,4320,586,1574,586,1578,582,1572,590,1574,586,496,582,498,582,1572,588,498,582,498,582,496,584,494,584,
  496,584,1574,586,1630,530,496,582,1576,586,498,582,498,582,498,580,496,586,494,584,492,588,498,582,1572,588,1572,588,1574,588,1572,588,1578,580,
  1572,590,1570,588,1576,586,494,586,498,582,494,586,1574,586,492,588,498,582,492,588,494,588,1574,586,494,586,490,590,492,588,492,588,496,584,498,
  584,496,582,1574,588,496,582,492,588,1574,586,546,534,496,584,496,584,496,584,490,590,7426,4418,4316,590,1572,590,1574,584,1572,590,1572,588,496,
  584,494,584,1574,588,494,586,494,586,494,584,496,584,494,586,1572,590,1576,586,494,584,1576,584,496,584,490,588,498,582,494,584,496,584,498,582,498,
  584,1572,588,1578,582,1578,582,1572,588,1576,584,1572,586,1576,586,1576,582,498,582,492,588,492,590,1580,580,498,582,498,582,494,586,496,582,1574,586,
  496,584,492,586,494,586,494,588,494,584,496,584,496,582,1572,590,496,584,496,586,1574,586,496,582,494,586,498,582,498,582,494,586}; // TOSHIBA_AC
 uint8_t state[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x01,0x20};


Protocol : TOSHIBA_AC
 Code : 0xF20D01FE210223 (56 Bits)
 Mesg Desc.: Power: On,Mode: 3 (Heat),Temp: 17C,Fan: 0 (Auto)
uint16_t rawData_SWING_OFF[231] = {4424,4322,584,1572,588,1576,586,1578,584,1572,588,494,586,490,588,1574,588,494,584,498,582,498,580,496,586,
  496,584,1578,584,1572,588,496,584,1572,588,494,584,494,584,500,580,494,586,490,590,496,582,496,584,1574,588,1574,584,1574,588,1572,590,1576,584,
  1574,586,1576,586,1574,584,496,584,492,586,492,590,1572,588,498,582,496,586,496,584,494,584,1572,588,492,588,496,584,496,584,496,582,498,582,496,
  584,1572,588,498,582,496,584,494,584,1572,588,494,588,492,586,496,584,1576,586,1576,584,7420,4424,4318,588,1576,584,1576,584,1576,584,1572,590,496,
  584,496,584,1630,530,496,582,494,586,498,582,496,586,494,584,1574,586,1572,586,498,582,1580,582,496,584,496,584,496,582,496,584,496,582,494,586,496,
  584,1572,590,1576,586,1570,590,1572,588,1570,588,1576,586,1574,588,1574,586,494,584,492,588,494,584,1578,582,492,590,494,586,496,584,494,586,1572,590,
  496,582,498,584,496,584,492,588,496,584,492,586,1574,588,494,584,496,584,496,584,1574,588,496,584,498,582,496,584,1576,584,1576,586}; // TOSHIBA_AC
 uint8_t state[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x02,0x23};


Protocol : TOSHIBA_AC
 Code : 0xF20D01FE210021 (56 Bits)
 Mesg Desc.: Power: On,Mode: 1 (Cool),Temp: 17C,Fan: 0 (Auto)
uint16_t rawData_AIR_DIR[115] = {4424,4320,586,1574,584,1574,588,1574,586,1574,586,494,584,496,584,1572,588,492,590,494,584,496,586,496,586,
  494,584,1574,586,1572,590,496,582,1580,584,492,586,494,586,496,584,490,590,494,586,496,584,494,584,1576,586,1574,586,1572,588,1578,584,1570,588,
  1572,588,1576,586,1570,590,498,582,498,582,498,582,1576,584,490,590,498,582,494,586,494,586,1576,584,496,584,494,586,494,584,498,584,494,586,496,
  584,492,588,496,584,494,586,494,584,1574,588,496,584,494,584,500,580,496,584,1576,586}; // TOSHIBA_AC
 uint8_t state[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x00,0x21};


Protocol : TOSHIBA_AC
 Code : 0xF20D04FB095000000158 (80 Bits)
 Mesg Desc.: Power: On,Mode: 0 (Auto),Temp: 22C,Fan: 0 (Auto)
uint16_t rawData_HIGH_POWER[327] = {4424,4318,588,1572,584,1572,590,1576,584,1572,590,492,586,494,586,1576,584,494,586,496,584,492,588,494,588,
  496,584,1572,588,1576,584,496,586,1576,586,494,584,496,582,498,584,494,584,498,584,1572,588,494,586,492,590,1624,536,1576,584,1570,590,1574,588,
  1574,584,496,584,1578,582,1572,588,490,588,496,584,492,586,496,584,1572,590,494,586,498,582,1576,584,496,584,1572,588,494,586,1576,584,496,586,496,
  582,498,582,496,586,494,586,494,586,492,588,496,584,492,588,498,582,494,584,498,584,496,582,490,590,494,586,496,580,498,584,490,590,496,582,498,584,
  496,582,494,586,492,588,498,582,496,584,496,584,494,586,1572,590,496,584,1576,584,498,582,1572,588,1576,586,498,582,498,582,496,584,7420,4424,4322,
  584,1572,590,1570,590,1578,582,1572,590,496,582,492,588,1576,584,500,582,496,584,490,590,496,582,496,586,1572,588,1572,590,496,582,1572,590,496,584,
  500,580,492,588,494,586,496,584,1574,586,494,584,492,588,1576,586,1576,584,1572,588,1576,586,1572,590,490,588,1578,584,1572,588,494,586,500,582,496,
  584,494,584,1572,588,498,582,496,586,1570,588,496,584,1572,588,494,586,1574,584,498,582,492,588,492,588,494,586,498,582,496,584,492,590,494,584,496,
  584,490,590,494,586,496,584,496,586,490,590,496,582,496,584,496,584,492,588,492,590,494,584,496,584,494,586,496,584,496,584,490,588,498,584,496,584,
  1574,586,494,584,1576,584,492,590,1576,582,1576,586,496,584,494,586,496,584}; // TOSHIBA_AC
 uint8_t state[10] = {0xF2,0x0D,0x04,0xFB,0x09,0x50,0x00,0x00,0x01,0x58};


Protocol : TOSHIBA_AC
 Code : 0xF20D04FB09500000035A (80 Bits)
 Mesg Desc.: Power: On,Mode: 0 (Auto),Temp: 22C,Fan: 0 (Auto)
uint16_t rawData_ECO_POWER[327] = {4418,4316,592,1574,586,1572,588,1572,588,1574,588,494,586,494,584,1576,586,494,584,496,584,494,586,494,586,
  490,588,1572,588,1572,590,494,584,1574,586,498,582,498,584,494,584,492,588,494,586,1576,586,496,582,500,582,1570,590,1576,584,1576,584,1572,588,
  1576,586,490,588,1574,586,1578,584,496,584,494,586,498,582,496,584,1572,588,496,584,496,582,1572,588,492,590,1570,588,492,588,1574,588,494,584,496,
  584,494,586,494,586,490,588,496,584,494,584,498,584,494,584,496,584,496,584,492,588,492,586,498,582,492,588,498,582,494,586,498,584,494,584,498,584,
  496,582,498,582,494,584,494,586,494,586,494,586,1578,582,1578,584,496,584,1578,582,496,582,1572,590,1572,590,496,584,1570,590,494,586,7424,4418,4318,
  588,1576,584,1572,590,1576,584,1572,588,490,588,498,582,1572,590,494,584,498,582,498,582,494,586,496,586,1570,590,1572,588,498,582,1572,590,494,584,
  492,588,494,584,496,584,496,582,1578,584,496,584,496,582,1574,588,1574,588,1576,584,1576,584,1576,584,496,582,1578,584,1576,584,494,586,496,584,494,
  586,496,582,1574,586,494,586,490,590,1576,584,494,586,1574,586,494,584,1576,586,494,586,492,588,494,586,490,588,498,584,496,582,498,584,496,582,498,
  584,496,584,492,590,494,586,496,584,494,584,494,586,490,588,492,586,498,584,490,588,496,584,496,584,494,586,492,588,492,588,496,586,496,584,1572,588,
  1572,588,494,586,1572,588,492,588,1578,582,1572,590,494,586,1570,588,492,590}; // TOSHIBA_AC
 uint8_t state[10] = {0xF2,0x0D,0x04,0xFB,0x09,0x50,0x00,0x00,0x03,0x5A};

If the code is changed to be correct for your model, it would be wrong for previous supported models (assuming they are/where correct), so more logic is probably needed(?)

Previous old Toshiba models potentially seem to have had just 2 bits for Mode, so extending it to 3 bits is still "somewhat" backwards compatible, e.g. I imagine the AC will either ignore the Mode Fan command (0b100), or read the lower 2 bits which would default to Auto mode (0b00). Nevertheless I imagine that newer Toshiba models support Mode Fan and have the same 3 bit value .

@casasale Thanks for the feedback and data.

  • There was 1 reporting issue in 72 bit mode regarding the mode string when Mode Fan is enabled (potential code fixes in code diff below)

Yep. That's something I missed. I'll add it shortly.

56 bit messages report wrong mode values (Auto, Cool, Heat), which seems to indicate that the last XOR byte is being used to get the mode value, and additionally it reports also wrong temperature, i.e. in case of 56 bit messages no Power/Mode/Temp/Fan states should be read or set, while 80 bit should be fine (needs to be enhanced)

As I said, the non-72 bits messages are not expected to decode to settings yet. If they do, that's just luck at this point.

My main goal is to get the 72 bit stuff working then fix up the 56/80 stuff later.

@NiKiZe

If the code is changed to be correct for your model, it would be wrong for previous supported models (assuming they are/where correct), so more logic is probably needed(?)

I think it's a case that the code I borrowed from was slightly incorrect/incomplete. Seeing the data that @casasale has collected, I can see how "that" code had evolved that way. The data is/format is largely compatible with the previous implementation, and I think still decodes "real" messages correctly. Previously people had guessed there was a single power on/off bit as used in most A/C implementations, however, it looks like it really is just a special "mode" that turns the unit off, which just happened to flip that bit as well. This is highlighted/proved by the "fan" mode. Which changed that bit, but didn't affect power operation. It also better fits the weird "the mode has to be set to heat in addition to turning the power off" previous implementation.

In general, we relied on someone else's implementation, and I think they didn't (or couldn't) do as good a data collection/analysis as we can with this make/model etc.

@casasale That branch has been updated and should have better "fan" mode support.

I'll try working on the different bit length stuff tonight.

Thank you very much.

@crankyoldgit FYI https://stackoverflow.com/questions/628526/is-short-circuiting-logical-operators-mandated-and-evaluation-order
The above can be taken advantage of by setting the faster to evaluate, or more probable to fail(&&)/hit(||), conditional expression first within e.g. a logical operator evaluation.

@crankyoldgit FYI https://stackoverflow.com/questions/628526/is-short-circuiting-logical-operators-mandated-and-evaluation-order
The above can be taken advantage of by setting the faster to evaluate, or more probable to fail(&&)/hit(||), conditional expression first within e.g. a logical operator evaluation.

Yep. I know this well. The most likely case is once it's made it through the data collection match (i.e. timings sequence, and length) successfully which is more than half and the most expensive battle, the "validation" step is almost always likely to pass and thus require all of the sub-checks to be run.
The checksum (Xor) is the most likely to fail (single bit error anywhere in the entire message) and it is checked first. It's not the fastest of the checks, but it's only a few instructions longer. i.e. it's _O(n)_, the "length" check is _O(1)_ but it's probably the least likely to be wrong/fail.

@casasale Can you please download and test the latest version of that branch?

I think it should support everything _except_ for the Swing Dir function. I'll look at adding that tomorrow.
i.e. swing on/off, turbo on/off, and econo on/off.

Let me know what doesn't work etc etc etc.

Thanks @crankyoldgit, I will test it and come back to you.

Reception test:

  • 72 bit: OK
  • 80 bit: Hi Power: OK
  • 80 bit: Eco Power: OK
  • 56 bit: Swing On/Off: Works but the states need to be exchanged (my error in the spreadsheet), i.e. On is Off, and Off is On, e.g. On == {0xF2,0x0D,0x01,0xFE,0x21,0x01,0x20}, and Off == {0xF2,0x0D,0x01,0xFE,0x21,0x02,0x23}
  • 56 bit no repeat: Swing Dir: Reception recognized as 56 bit, but not explicitly reported as Swing Dir

Additionally for all 56 bit Swing messages, maybe it would make sense not to report the dummy constant Temp 17?

Protocol  : TOSHIBA_AC
  Code      : 0xF20D03FC0150600031 (72 Bits)
    Mesg Desc.: Temp: 22C,Power: On,Mode: 0 (Auto),Fan: 2 (UNKNOWN),Turbo: Off,Econo: Off
      uint8_t state[9] = {0xF2,0x0D,0x03,0xFC,0x01,0x50,0x60,0x00,0x31};

Protocol  : TOSHIBA_AC
  Code      : 0xF20D04FB095060000138 (80 Bits)
    Mesg Desc.: Temp: 22C,Power: On,Mode: 0 (Auto),Fan: 2 (UNKNOWN),Turbo: On,Econo: Off
      uint8_t state[10] = {0xF2,0x0D,0x04,0xFB,0x09,0x50,0x60,0x00,0x01,0x38};

Protocol  : TOSHIBA_AC
  Code      : 0xF20D03FC0150600031 (72 Bits)
    Mesg Desc.: Temp: 22C,Power: On,Mode: 0 (Auto),Fan: 2 (UNKNOWN),Turbo: Off,Econo: Off
      uint8_t state[9] = {0xF2,0x0D,0x03,0xFC,0x01,0x50,0x60,0x00,0x31};

Protocol  : TOSHIBA_AC
  Code      : 0xF20D04FB09506000033A (80 Bits)
    Mesg Desc.: Temp: 22C,Power: On,Mode: 0 (Auto),Fan: 2 (UNKNOWN),Turbo: Off,Econo: On
      uint8_t state[10] = {0xF2,0x0D,0x04,0xFB,0x09,0x50,0x60,0x00,0x03,0x3A};

Protocol  : TOSHIBA_AC
  Code      : 0xF20D03FC0150600031 (72 Bits)
    Mesg Desc.: Temp: 22C,Power: On,Mode: 0 (Auto),Fan: 2 (UNKNOWN),Turbo: Off,Econo: Off
      uint8_t state[9] = {0xF2,0x0D,0x03,0xFC,0x01,0x50,0x60,0x00,0x31};

Protocol  : TOSHIBA_AC
  Code      : 0xF20D01FE210120 (56 Bits)
    Mesg Desc.: Temp: 17C,Swing(V): Off
      uint8_t state[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x01,0x20};

Protocol  : TOSHIBA_AC
  Code      : 0xF20D01FE210223 (56 Bits)
    Mesg Desc.: Temp: 17C,Swing(V): On
      uint8_t state[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x02,0x23};

Protocol  : TOSHIBA_AC
  Code      : 0xF20D01FE210021 (56 Bits)
    Mesg Desc.: Temp: 17C,Swing(V): Off
      uint8_t state[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x00,0x21};

Transmission test:

  • Default temp should be 22 instead of 17, e.g. if the remote control battery is reset, then the default settings are 22 and the rest in auto.

  • 72 bit: OK

  IRToshibaAC ac(kIrLed);
  ac.on();
  ac.setFan(2);
  ac.setMode(0);
  ac.setTemp(22);
  printState();
  ac.send();
Toshiba A/C remote is in the following state:
    Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 2 (UNKNOWN), Turbo: Off, Econo: Off
        IR Code: 0xF20D03FC0150600031



md5-65f6cb247cde2afa5a5b26dded66c8cf



ac.setTurbo(true);
printState();
ac.send();
delay(2000); 
ac.setTurbo(false);
printState();
ac.send();



md5-7ba59d9395e62ad0b2c493fc500179e8



Toshiba A/C remote is in the following state:
    Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 2 (UNKNOWN), Turbo: On, Econo: Off
        IR Code: 0xF20D04FB0950600001

Toshiba A/C remote is in the following state:
    Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 2 (UNKNOWN), Turbo: Off, Econo: Off
        IR Code: 0xF20D03FC0150600031



md5-8febbb6378a845273225c0bf8f3a3ab8



  ac.setEcono(true);
  printState();
  ac.send();
  delay(20000); 
  ac.setEcono(false);
  printState();
  ac.send();



md5-7ba59d9395e62ad0b2c493fc500179e8



Toshiba A/C remote is in the following state:
    Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 2 (UNKNOWN), Turbo: Off, Econo: On
        IR Code: 0xF20D04FB0950600003

Toshiba A/C remote is in the following state:
    Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 2 (UNKNOWN), Turbo: Off, Econo: Off
        IR Code: 0xF20D03FC0150600031



md5-a43d9f680a0f46cd9aaf82939a6fe8cf



  ac.setSwing(false);
  printState();
  ac.send();
  delay(5000);
  ac.setSwing(true);
  printState();
  ac.send();



md5-7ba59d9395e62ad0b2c493fc500179e8



Toshiba A/C remote is in the following state:
    Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 2 (UNKNOWN), Turbo: Off, Econo: Off
        IR Code: 0xF20D03FC0150600031

Toshiba A/C remote is in the following state:
    Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 2 (UNKNOWN), Turbo: Off, Econo: Off
        IR Code: 0xF20D03FC0150600031

Transmission raw test:

  • 72 bits: OK
IRsend irsend(kIrLed);  // Set the GPIO to be used to sending the message.
uint8_t state[9] = {0xF2,0x0D,0x03,0xFC,0x01,0x50,0x60,0x00,0x31};
irsend.sendToshibaAC(state, 9, true);
  • 80 bits: OK
uint8_t state2[10] = {0xF2,0x0D,0x04,0xFB,0x09,0x50,0x60,0x00,0x01,0x38};
irsend.sendToshibaAC(state2, 10, true);
  • 56 bits Swing On/Off: OK
 uint8_t state3[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x01,0x20}; 
 irsend.sendToshibaAC(state3, 7, true);
 delay(5000);
 uint8_t state4[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x02,0x23};
 irsend.sendToshibaAC(state4, 7, true);

  • 56 Swing Dir: OK, and interestingly it worked with repeat, although the remote control does not repeat
 uint8_t state5[7] = {0xF2,0x0D,0x01,0xFE,0x21,0x00,0x21};
 irsend.sendToshibaAC(state5, 7, true);
  • 56 bit no repeat: Swing Dir: Reception recognized as 56 bit, but not explicitly reported as Swing Dir

As I said, it hasn't been added/supported yet. So that's expected.

56 bit: Swing On/Off: Works but the states need to be exchanged (my error in the spreadsheet), i.e. On is Off, and Off is On

(Being) fixed.

80 bit Hi Power On/Off: OK, but in the ac.send() report only 72 bits instead of 80 bits are reported, i.e. the checksum byte is missing in the IR Code

(Being) Fixed. It's a bug in the Example code, not the IRToshibaAc class.

56 bits Swing On/Off: Commands accepted, _but Swing does not work_, and IR Code report looks like 72 bit report instead of 56 bits

Size should be fixed. Can you give me the code it now produces and the equivalent code from actual remote for the same settings?

@casasale I've created PR #1212 and updated the existing branch. Fingers crossed, it should now detect/support the swing direction/step/move/whatever command. I may have also fixed the swing problem too.

As usual, can you please download and test it out for me and let me know if there are any problems.

Thanks @crankyoldgit .

Reception test: Everything OK with all bit lengths (72, 80, 56, and 56 no repeat)

Code      : 0xF20D03FC0150400011 (72 Bits)
    Mesg Desc.: Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 1 (Low), Turbo: Off, Econo: Off

Code      : 0xF20D04FB095040000118 (80 Bits)
    Mesg Desc.: Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 1 (Low), Turbo: On, Econo: Off

Code      : 0xF20D04FB09504000031A (80 Bits)
    Mesg Desc.: Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 1 (Low), Turbo: Off, Econo: On

Code      : 0xF20D01FE210120 (56 Bits)
    Mesg Desc.: Temp: 17C, Swing(V): 1 (On)

Code      : 0xF20D01FE210223 (56 Bits)
    Mesg Desc.: Temp: 17C, Swing(V): 2 (Off)

Code      : 0xF20D01FE210021 (56 Bits)
    Mesg Desc.: Temp: 17C, Swing(V): 0 (Step)

Transmission test:

  • 80 bits OK
ac.setTurbo(true);
printState();
ac.send();
Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 1 (Low), Turbo: On, Econo: Off
    IR Code: 0xF20D04FB095040000118



md5-d1c3fc71242ba1851ea7c9cf094e5d20



ac.setSwing(kToshibaAcSwingOn);
printState();
ac.send();
delay(10000);
ac.setSwing(kToshibaAcSwingOff);
printState();
ac.send();
delay(5000);
ac.setSwing(kToshibaAcSwingStep);
printState();
ac.send();



md5-7ba59d9395e62ad0b2c493fc500179e8



Toshiba A/C remote is in the following state:
    Temp: 22C, Power: On, Mode: 0 (Auto), Fan: 1 (Low), Turbo: Off, Econo: Off
        IR Code: 0xF20D03FC0150400011

I added some debug messages to see why 56 bit swing send does not work, and so far I confirmed, that the 56 bit command does not get accepted, and at the first look the IR Code seems to be wrong. I will update here once I have more details.

OK, I found it: The temperature needs to be reset to 17 temporarily too for 56 bit commands, and with that there is a double accept beep from the AC for the commands sent (72 bits and then 56 bits).

Potential 56 bit code fix diff:

*** ir_Toshiba.cpp_org  2020-07-05 14:31:36.911807900 -0400
--- ir_Toshiba.cpp      2020-07-05 14:32:10.508177000 -0400
***************
*** 86,91 ****
--- 86,92 ----
    _irsend.sendToshibaAC(getRaw(), getStateLength(), repeat);
    if (_send_swing && (getStateLength() != kToshibaACStateLengthShort)) {
      setStateLength(kToshibaACStateLengthShort);
+     setTemp(17);
      setSwing(_swing_mode);
      _irsend.sendToshibaAC(getRaw(), getStateLength(), repeat);
      _restoreState();

@casasale Ah yes, that makes sense. I didn't notice/know it was a requirement for the 56 bit messages.
I'm using your suggested solution. Can you please re-download and confirm it's all working now? If so, we can merge PR #1212 which will close this issue.

The Toshiba A/C example code ... well, it probably won't show/display the short codes too well. I'm not to worried about that. It's something I can live with.

@crankyoldgit I will test it today

All sent commands are accepted, i.e. all previously reported issues are resolved.

  • One small remaining item is that on start swing-dir is sent once, which makes the swing move once, and the solution is to set kToshibaAcSwingOff as default (potential fix below)
  • Another thing that is different compared to how the remote control works is that Turbo/Econo is not reset on Power On/Off or Mode changes, e.g. if Turbo or Econo is ON, then it gets set to OFF on AC restart or mode change. (potential fix below)

Potential code changes for above 2 items:

*** ir_Toshiba.cpp_org  2020-07-06 10:28:21.000000000 -0400
--- ir_Toshiba.cpp      2020-07-06 17:01:20.014761100 -0400
***************
*** 70,75 ****
--- 70,76 ----
        0xF2, 0x0D, 0x03, 0xFC, 0x01};
    memcpy(remote_state, kReset, kToshibaACStateLength);
    setTemp(22);  // Remote defaults to 22C after factory reset. So do the same.
+   setSwing(kToshibaAcSwingOff); // Swing off is the default
    prev_mode = getMode();
    _send_swing = true;  // Force sending the swing state with the first send msg
                         // batch.
***************
*** 195,201 ****
  void IRToshibaAC::setPower(const bool on) {
    if (on) {  // On
      // If not already on, pick the last non-off mode used
!     if (!getPower()) setMode(prev_mode);
    } else {  // Off
      setMode(kToshibaAcOff);
    }
--- 196,207 ----
  void IRToshibaAC::setPower(const bool on) {
    if (on) {  // On
      // If not already on, pick the last non-off mode used
!     if (!getPower()) {
!       setMode(prev_mode);
!       // Reset Turbo/Econo on restart
!       setTurbo(false);
!       setEcono(false);
!     }
    } else {  // Off
      setMode(kToshibaAcOff);
    }
***************
*** 283,288 ****
--- 289,299 ----
  /// @param[in] mode The desired operating mode.
  /// @note If we get an unexpected mode, default to AUTO.
  void IRToshibaAC::setMode(const uint8_t mode) {
+   // Reset Turbo/Econo on mode change
+   if (mode != prev_mode) {
+     setTurbo(false);
+     setEcono(false);
+   }
    switch (mode) {
      case kToshibaAcAuto:
      case kToshibaAcCool:

@casasale I just updated the PR/branch. I think it covers all of your recent points/suggests. Can you please confirm it works as you would expect?

@crankyoldgit Yes, it works as expected. Thank you very much.

Thanks for confirming.

FYI, the aforementioned changes have been included in the latest release (v2.7.9) of the library.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

crankyoldgit picture crankyoldgit  Â·  3Comments

bilkosem picture bilkosem  Â·  5Comments

MehranMazhar picture MehranMazhar  Â·  5Comments

ilyasrois picture ilyasrois  Â·  3Comments

mariusmotea picture mariusmotea  Â·  7Comments