Version 2.4.3
I've managed to add the new encoding and now in IRrecvDumpV2 it appears the command but the AC has a mode called 6th Sense it's a full auto mode and if put an on offset of greater than 2 Celsius deegres the hex command should also change like the rest of commands
stays the same even for the down command so i used the auto_analyse_raw_data.py scrpt and i have a chunk of 56 bits that changes on every command but i don't know exactly how to use that piece of data
ON_OFF_6th_mode_0offset_fan_auto
Timestamp : 004520.075
Encoding : WHIRLPOOL_AC
Code : C160208E0000 (48 bits)
Library : v2.4.3
uint16_t rawData[343] = {8952, 4482, 598, 1640, 598, 1644, 596, 532, 596, 534, 596, 540, 600, 536, 592, 550, 602, 1644, 594, 526, 604, 1636, 602, 1642, 596, 536, 594, 540, 600, 538, 602, 540, 600, 530, 598, 522, 598, 526, 594, 1648, 600, 532, 598, 536, 594, 544, 596, 546, 594, 536, 592, 1644, 596, 530, 600, 528, 602, 530, 600, 1650, 600, 1656, 594, 1664, 606, 526, 594, 528, 602, 522, 596, 530, 600, 532, 598, 536, 594, 544, 596, 544, 596, 534, 594, 526, 592, 530, 600, 528, 602, 530, 600, 534, 596, 542, 598, 542, 598, 516, 592, 7924, 602, 1638, 602, 524, 596, 532, 596, 534, 596, 1654, 596, 544, 596, 546, 596, 1652, 598, 1640, 600, 526, 594, 1650, 600, 532, 598, 1654, 596, 544, 596, 546, 596, 536, 594, 528, 592, 530, 598, 530, 600, 530, 600, 534, 596, 540, 600, 542, 598, 532, 598, 524, 596, 526, 592, 534, 596, 536, 594, 540, 600, 538, 592, 550, 602, 528, 600, 520, 600, 524, 596, 532, 598, 534, 596, 538, 592, 546, 594, 546, 594, 536, 594, 526, 592, 532, 598, 528, 602, 530, 600, 534, 596, 542, 598, 540, 600, 532, 598, 522, 598, 524, 594, 532, 598, 532, 596, 538, 592, 544, 596, 544, 596, 536, 594, 1642, 598, 526, 594, 534, 596, 536, 594, 1654, 596, 1686, 574, 1660, 600, 1656, 574, 7918, 596, 526, 594, 530, 598, 530, 600, 530, 600, 534, 596, 542, 598, 542, 598, 532, 598, 1640, 600, 524, 596, 532, 598, 534, 596, 538, 602, 536, 594, 546, 596, 536, 592, 528, 592, 532, 598, 528, 602, 530, 600, 534, 596, 542, 600, 542, 598, 532, 598, 522, 598, 526, 592, 534, 596, 534, 594, 540, 600, 536, 594, 548, 592, 540, 602, 518, 600, 524, 596, 532, 598, 532, 598, 536, 594, 544, 596, 546, 594, 536, 594, 526, 592, 532, 598, 528, 600, 530, 600, 534, 596, 542, 598, 542, 598, 534, 596, 1640, 600, 524, 594, 534, 596, 534, 596, 538, 602, 536, 594, 548, 594, 520, 598}; // WHIRLPOOL_AC
uint8_t state[6] = {0xC1, 0x60, 0x20, 0x8E, 0x00, 0x00};
6th_mode_offset_1C
Timestamp : 005070.666
Encoding : WHIRLPOOL_AC
Code : C160088E0000 (48 bits)
Library : v2.4.3
uint16_t rawData[343] = {8950, 4484, 598, 1642, 598, 1646, 594, 534, 594, 538, 602, 532, 598, 540, 600, 542, 598, 1650, 600, 522, 598, 1644, 596, 1650, 600, 532, 598, 538, 602, 536, 594, 548, 592, 538, 602, 518, 600, 524, 596, 532, 598, 532, 598, 1654, 596, 544, 596, 544, 596, 536, 594, 1644, 596, 528, 600, 528, 592, 538, 602, 1648, 602, 1654, 596, 1664, 598, 534, 594, 526, 594, 530, 598, 528, 602, 530, 600, 534, 596, 542, 598, 542, 598, 534, 596, 526, 594, 530, 600, 528, 602, 530, 600, 534, 596, 542, 598, 544, 596, 518, 602, 7916, 598, 1642, 598, 528, 600, 528, 602, 530, 600, 1652, 598, 542, 598, 544, 596, 1654, 596, 1644, 596, 1648, 602, 1644, 596, 1654, 596, 1656, 604, 536, 594, 548, 602, 528, 600, 520, 600, 524, 596, 532, 598, 532, 596, 538, 602, 536, 594, 546, 594, 538, 602, 518, 600, 524, 596, 532, 598, 532, 598, 536, 594, 544, 596, 544, 596, 536, 594, 526, 592, 530, 600, 528, 600, 530, 602, 532, 596, 542, 598, 542, 598, 534, 596, 524, 596, 528, 600, 526, 592, 538, 592, 542, 598, 540, 600, 540, 600, 530, 598, 522, 598, 526, 594, 534, 596, 534, 594, 540, 602, 536, 592, 548, 592, 538, 600, 1636, 594, 1648, 602, 1642, 598, 1652, 598, 538, 602, 1680, 570, 1662, 598, 1634, 596, 7924, 600, 520, 598, 526, 592, 534, 596, 534, 596, 540, 600, 536, 604, 538, 602, 530, 600, 520, 598, 1640, 600, 528, 600, 530, 600, 534, 594, 544, 596, 544, 596, 534, 596, 526, 594, 528, 600, 526, 594, 536, 592, 542, 598, 538, 602, 538, 602, 528, 600, 520, 600, 524, 596, 530, 600, 532, 598, 534, 596, 542, 598, 542, 598, 532, 598, 524, 596, 528, 602, 526, 594, 536, 594, 540, 600, 536, 594, 548, 592, 538, 602, 518, 602, 522, 596, 530, 600, 530, 600, 534, 596, 542, 598, 544, 596, 534, 596, 524, 594, 1644, 596, 532, 596, 534, 596, 538, 602, 536, 594, 546, 594, 520, 600}; // WHIRLPOOL_AC
uint8_t state[6] = {0xC1, 0x60, 0x08, 0x8E, 0x00, 0x00};
6th_sense_offset_2C
Timestamp : 004526.142
Encoding : WHIRLPOOL_AC
Code : C160048E0000 (48 bits)
Library : v2.4.3
uint16_t rawData[343] = {8950, 4482, 598, 1640, 598, 1642, 596, 532, 598, 532, 598, 536, 604, 534, 594, 546, 594, 1652, 598, 524, 594, 1646, 604, 1640, 600, 532, 598, 536, 604, 534, 596, 544, 594, 536, 594, 526, 594, 530, 600, 526, 604, 526, 604, 530, 598, 1654, 596, 546, 604, 528, 602, 1634, 606, 520, 598, 528, 602, 528, 600, 1648, 602, 1652, 596, 1662, 598, 536, 594, 526, 594, 528, 600, 526, 602, 528, 602, 532, 598, 540, 600, 540, 600, 530, 600, 520, 598, 526, 604, 524, 596, 534, 596, 538, 600, 538, 602, 538, 602, 512, 596, 7920, 604, 1636, 604, 520, 598, 530, 600, 530, 598, 1652, 598, 542, 598, 544, 596, 1650, 600, 524, 596, 1642, 596, 1650, 600, 534, 598, 1652, 596, 544, 596, 546, 594, 536, 604, 516, 602, 522, 598, 530, 600, 532, 598, 536, 604, 536, 594, 548, 602, 528, 602, 518, 600, 524, 596, 532, 598, 532, 596, 538, 602, 536, 596, 546, 604, 526, 602, 520, 600, 522, 596, 530, 598, 532, 598, 536, 602, 536, 594, 546, 604, 526, 602, 518, 602, 522, 598, 530, 598, 532, 598, 538, 602, 534, 596, 546, 604, 528, 602, 518, 602, 522, 596, 532, 598, 534, 596, 538, 602, 536, 594, 548, 602, 528, 602, 518, 600, 1640, 600, 1644, 596, 538, 602, 1646, 604, 536, 604, 1654, 606, 1628, 602, 7916, 598, 524, 594, 530, 600, 528, 602, 528, 602, 534, 596, 542, 598, 544, 596, 534, 596, 526, 594, 1646, 604, 526, 604, 528, 602, 534, 594, 542, 598, 544, 596, 536, 594, 526, 604, 520, 600, 528, 602, 530, 600, 536, 594, 544, 596, 546, 594, 538, 602, 518, 600, 524, 596, 532, 598, 534, 596, 538, 602, 536, 604, 536, 602, 530, 600, 522, 598, 528, 602, 526, 594, 538, 602, 532, 598, 540, 600, 542, 598, 532, 598, 522, 596, 528, 602, 526, 602, 528, 602, 534, 596, 542, 598, 542, 598, 534, 596, 526, 594, 1644, 606, 526, 604, 528, 602, 532, 598, 540, 600, 542, 598, 516, 592}; // WHIRLPOOL_AC
uint8_t state[6] = {0xC1, 0x60, 0x04, 0x8E, 0x00, 0x00};
6th_sense_OFFSET_3C
Timestamp : 005082.410
Encoding : WHIRLPOOL_AC
Code : C160048E0000 (48 bits)
Library : v2.4.3
uint16_t rawData[343] = {8948, 4486, 606, 1634, 596, 1646, 604, 526, 604, 528, 602, 534, 598, 540, 600, 542, 598, 1650, 600, 522, 596, 1644, 606, 1640, 598, 534, 596, 538, 602, 536, 604, 538, 602, 528, 600, 520, 600, 524, 596, 532, 598, 534, 594, 540, 600, 1652, 598, 546, 594, 536, 604, 1632, 598, 528, 602, 526, 594, 536, 604, 1646, 604, 1650, 598, 1660, 600, 530, 600, 522, 598, 524, 594, 532, 598, 532, 596, 538, 602, 536, 594, 546, 604, 526, 604, 516, 604, 520, 598, 530, 600, 530, 600, 534, 596, 542, 598, 542, 598, 516, 604, 7906, 598, 1640, 600, 524, 596, 532, 596, 534, 596, 1652, 598, 540, 600, 542, 598, 1646, 604, 1634, 596, 1646, 604, 1640, 600, 1648, 602, 1648, 602, 538, 602, 538, 602, 528, 602, 518, 600, 524, 596, 530, 600, 530, 600, 534, 594, 544, 596, 544, 596, 534, 596, 524, 594, 530, 600, 526, 594, 536, 604, 530, 600, 538, 602, 540, 600, 530, 600, 520, 598, 524, 596, 532, 598, 532, 598, 536, 594, 544, 596, 544, 596, 534, 596, 522, 596, 528, 602, 524, 594, 536, 594, 540, 600, 536, 604, 536, 604, 526, 602, 518, 602, 522, 598, 530, 600, 532, 600, 532, 596, 542, 600, 542, 598, 530, 598, 1636, 602, 1640, 600, 1644, 596, 1652, 598, 1654, 596, 542, 598, 1658, 602, 1628, 600, 7912, 602, 518, 600, 524, 594, 532, 598, 532, 598, 536, 602, 534, 596, 544, 596, 536, 594, 526, 594, 1644, 596, 534, 596, 534, 596, 538, 602, 536, 604, 536, 604, 528, 602, 518, 600, 522, 596, 1646, 604, 528, 602, 532, 596, 540, 602, 540, 600, 530, 600, 520, 598, 524, 596, 532, 596, 534, 596, 538, 602, 536, 594, 546, 594, 538, 602, 518, 602, 522, 596, 530, 600, 530, 598, 536, 594, 542, 598, 544, 596, 534, 596, 524, 596, 526, 602, 524, 594, 536, 594, 538, 602, 536, 604, 536, 604, 526, 602, 518, 602, 1636, 604, 1640, 598, 532, 598, 538, 602, 534, 596, 544, 596, 518, 590}; // WHIRLPOOL_AC
uint8_t state[6] = {0xC1, 0x60, 0x04, 0x8E, 0x00, 0x00};
6TH_SENSE_OFFSET_2C
Timestamp : 004530.508
Encoding : WHIRLPOOL_AC
Code : C160048E0000 (48 bits)
Library : v2.4.3
uint16_t rawData[343] = {8962, 4482, 598, 1642, 598, 1644, 606, 524, 596, 538, 602, 532, 598, 540, 600, 542, 598, 1650, 600, 522, 598, 1644, 606, 1640, 600, 532, 596, 540, 600, 538, 602, 538, 602, 532, 598, 522, 598, 526, 604, 524, 594, 536, 594, 540, 600, 1654, 606, 538, 602, 528, 602, 1636, 604, 522, 596, 530, 600, 532, 598, 1654, 596, 1660, 600, 1660, 600, 532, 598, 522, 596, 528, 602, 526, 604, 528, 602, 532, 598, 540, 600, 542, 598, 532, 598, 522, 598, 526, 602, 526, 604, 528, 602, 532, 598, 540, 600, 540, 600, 516, 602, 7912, 602, 1636, 602, 522, 598, 530, 600, 532, 596, 1654, 596, 544, 596, 546, 604, 1646, 604, 518, 602, 1638, 602, 1644, 606, 526, 602, 1648, 602, 538, 602, 540, 600, 530, 598, 522, 598, 528, 602, 526, 604, 526, 602, 532, 598, 542, 598, 542, 598, 534, 596, 524, 596, 528, 600, 526, 602, 528, 602, 534, 596, 542, 598, 544, 596, 534, 596, 524, 594, 530, 600, 528, 602, 528, 600, 534, 596, 542, 598, 542, 598, 534, 596, 526, 604, 520, 600, 526, 602, 528, 600, 534, 596, 542, 598, 544, 596, 534, 596, 524, 596, 528, 600, 528, 602, 528, 602, 532, 596, 542, 598, 544, 596, 534, 596, 524, 606, 1636, 604, 1642, 598, 534, 596, 1658, 602, 536, 604, 1654, 596, 1638, 602, 7916, 598, 524, 596, 528, 602, 526, 604, 528, 602, 534, 598, 540, 600, 542, 598, 532, 598, 524, 596, 1646, 604, 524, 606, 526, 602, 532, 598, 540, 600, 542, 598, 532, 596, 524, 594, 530, 602, 526, 602, 528, 600, 534, 596, 542, 598, 544, 596, 536, 604, 516, 604, 520, 598, 528, 600, 530, 600, 536, 604, 534, 598, 544, 596, 536, 606, 516, 602, 520, 598, 528, 602, 530, 600, 534, 606, 532, 596, 544, 596, 536, 604, 516, 604, 522, 598, 530, 600, 532, 598, 536, 604, 532, 596, 546, 604, 528, 602, 518, 602, 1638, 600, 528, 602, 530, 600, 534, 606, 534, 596, 544, 596, 518, 600}; // WHIRLPOOL_AC
uint8_t state[6] = {0xC1, 0x60, 0x04, 0x8E, 0x00, 0x00};
6TH_SENSE_OFFSET_1C
Timestamp : 004532.065
Encoding : WHIRLPOOL_AC
Code : C160088E0000 (48 bits)
Library : v2.4.3
uint16_t rawData[343] = {8956, 4484, 598, 1642, 598, 1644, 606, 524, 596, 536, 604, 530, 598, 540, 600, 540, 600, 1646, 602, 520, 600, 1642, 598, 1648, 602, 530, 600, 536, 604, 532, 598, 544, 606, 526, 604, 518, 602, 522, 598, 530, 598, 532, 598, 1654, 606, 534, 596, 546, 606, 526, 604, 1634, 606, 520, 600, 528, 600, 530, 600, 1652, 598, 1660, 600, 1660, 600, 532, 598, 524, 596, 528, 602, 526, 604, 528, 602, 532, 596, 542, 598, 544, 596, 534, 606, 516, 604, 520, 598, 530, 600, 530, 600, 536, 604, 536, 606, 536, 604, 510, 598, 7922, 604, 1636, 604, 522, 598, 530, 598, 532, 598, 1654, 606, 534, 596, 544, 596, 1652, 598, 524, 606, 1636, 604, 1642, 596, 536, 606, 1646, 602, 536, 606, 536, 602, 530, 600, 520, 598, 526, 604, 524, 596, 536, 604, 530, 600, 538, 602, 540, 600, 532, 598, 522, 596, 526, 604, 524, 604, 526, 602, 532, 598, 542, 598, 542, 598, 534, 596, 524, 594, 530, 600, 526, 604, 528, 600, 534, 596, 542, 598, 544, 596, 536, 604, 516, 602, 524, 596, 530, 600, 532, 598, 538, 602, 536, 604, 536, 604, 528, 602, 520, 600, 526, 604, 524, 606, 526, 604, 532, 596, 542, 598, 544, 596, 536, 604, 518, 600, 1642, 598, 1648, 600, 532, 598, 538, 602, 1652, 598, 1662, 598, 1634, 596, 7920, 604, 518, 602, 522, 598, 530, 600, 530, 598, 536, 604, 534, 596, 546, 594, 536, 604, 516, 602, 1638, 602, 526, 602, 530, 600, 534, 596, 542, 598, 544, 596, 536, 604, 516, 602, 522, 598, 532, 598, 532, 598, 536, 604, 534, 596, 546, 606, 526, 604, 516, 602, 522, 598, 532, 598, 532, 596, 538, 602, 538, 602, 538, 602, 530, 600, 520, 598, 526, 604, 524, 596, 536, 604, 530, 600, 538, 602, 538, 602, 530, 600, 522, 598, 526, 602, 524, 606, 526, 604, 532, 598, 540, 600, 540, 600, 532, 598, 522, 596, 1646, 604, 524, 606, 526, 604, 532, 598, 540, 602, 540, 600, 514, 594}; // WHIRLPOOL_AC
uint8_t state[6] = {0xC1, 0x60, 0x08, 0x8E, 0x00, 0x00};
6TH_SENSE_OFFSET_0C
Timestamp : 004533.833
Encoding : WHIRLPOOL_AC
Code : C160008E0000 (48 bits)
Library : v2.4.3
uint16_t rawData[343] = {8958, 4486, 604, 1634, 604, 1638, 602, 528, 602, 530, 600, 536, 604, 534, 596, 546, 604, 1644, 604, 518, 600, 1642, 598, 1652, 598, 534, 606, 530, 598, 542, 598, 544, 596, 536, 604, 518, 602, 524, 606, 524, 596, 536, 604, 532, 598, 542, 598, 544, 596, 536, 604, 1636, 604, 524, 596, 532, 598, 536, 604, 1650, 600, 1658, 602, 1658, 602, 530, 598, 522, 598, 526, 602, 526, 604, 528, 602, 532, 598, 542, 598, 544, 596, 536, 604, 518, 600, 524, 606, 522, 596, 536, 606, 530, 598, 540, 600, 542, 598, 516, 602, 7920, 604, 1636, 604, 522, 596, 532, 598, 534, 596, 1654, 604, 536, 604, 538, 604, 1644, 604, 518, 602, 1640, 598, 1648, 602, 556, 574, 1652, 596, 570, 570, 572, 578, 526, 602, 518, 602, 522, 596, 560, 570, 534, 596, 566, 574, 564, 576, 568, 572, 532, 598, 522, 596, 528, 602, 526, 604, 528, 600, 560, 568, 570, 572, 570, 578, 554, 576, 518, 602, 522, 596, 558, 572, 560, 570, 566, 574, 562, 578, 564, 576, 554, 574, 520, 598, 526, 604, 524, 596, 562, 578, 558, 572, 566, 574, 568, 572, 560, 570, 524, 604, 546, 574, 528, 602, 556, 574, 562, 578, 560, 570, 572, 578, 552, 576, 544, 576, 1638, 600, 1646, 604, 554, 576, 1650, 600, 1658, 604, 1656, 604, 1628, 600, 7922, 602, 546, 574, 526, 604, 550, 570, 562, 578, 558, 572, 568, 574, 568, 570, 562, 580, 542, 576, 1640, 600, 556, 574, 558, 572, 562, 578, 560, 578, 564, 576, 556, 574, 546, 574, 550, 578, 550, 570, 562, 578, 558, 572, 566, 574, 568, 572, 558, 570, 550, 570, 554, 574, 554, 576, 556, 574, 560, 580, 560, 570, 572, 576, 554, 576, 546, 574, 550, 570, 558, 570, 562, 578, 556, 574, 564, 576, 566, 574, 558, 572, 548, 570, 554, 574, 552, 578, 554, 576, 560, 570, 568, 572, 570, 570, 560, 578, 542, 578, 1638, 602, 554, 576, 558, 572, 562, 578, 560, 568, 574, 578, 536, 572}; // WHIRLPOOL_AC
uint8_t state[6] = {0xC1, 0x60, 0x00, 0x8E, 0x00, 0x00};
Read codes when in 6th Sense Mode and analyze with auto_analyse_raw_data.py
https://github.com/redmusicxd/IRremoteESP8266/commit/553736ac8d32f6df84170be8bf72191c1b287161
I used an ESP-01 with some IR receiver
YES
First off. Wow. Congrats on writing a sender and a decoder. Top effort! I look forward to the Pull Request when it's done!
Next. I'm fairly confident that the protocol you're dealing with is NOT 48bits. It's far far bigger. Like 168 bits/21 bytes long.
e.g.
Found 343 timing entries.
Potential Mark Candidates:
[8950, 604]
Potential Space Candidates:
[7924, 4484, 1680, 548]
Guessing encoding type:
Looks like it uses space encoding. Yay!
Guessing key value:
kHdrMark = 8950
kHdrSpace = 4484
kBitMark = 597
kOneSpace = 1649
kZeroSpace = 533
kSpaceGap = 7920
Decoding protocol based on analysis so far:
kHdrMark+kHdrSpace+110000010110000000001000100011100000000000000000GAP(7916)
Bits: 48
Hex: 0xC160088E0000 (MSB first)
0x000071100683 (LSB first)
Dec: 212618204545024 (MSB first)
1896875651 (LSB first)
Bin: 0b110000010110000000001000100011100000000000000000 (MSB first)
0b000000000000000001110001000100000000011010000011 (LSB first)
kBitMark(UNEXPECTED)1000100111111000000000000000000000000000000000000000000011110111GAP(7924)
Bits: 64
Hex: 0x89F80000000000F7 (MSB first)
0xEF00000000001F91 (LSB first)
Dec: 9941696177420370167 (MSB first)
17221764975064784785 (LSB first)
Bin: 0b1000100111111000000000000000000000000000000000000000000011110111 (MSB first)
0b1110111100000000000000000000000000000000000000000001111110010001 (LSB first)
kBitMark(UNEXPECTED)00000000010000000000000000000000000000000000000001000000
Bits: 56
Hex: 0x00400000000040 (MSB first)
0x02000000000200 (LSB first)
Dec: 70368744177728 (MSB first)
562949953421824 (LSB first)
Bin: 0b00000000010000000000000000000000000000000000000001000000 (MSB first)
0b00000010000000000000000000000000000000000000001000000000 (LSB first)
Total Nr. of suspected bits: 168
Basically there are 3 sections to the entire message, separated by an approx 8000usec pause/space.
48 bits (which you've worked out), then 64 bits, and then a final 56 bits section.
In short, you've got a lot more message to decode (and send) than you previously thought before you're close to fully reproducing it.
Here is the _raw_ output from the analyse program for suggested code (Use the '-g' flag):
Generating a VERY rough code outline:
// WARNING: This probably isn't directly usable. It's a guide only.
const uint16_t kHdrMark = 8950;
const uint16_t kBitMark = 597;
const uint16_t kHdrSpace = 4484;
const uint16_t kOneSpace = 1649;
const uint16_t kZeroSpace = 533;
const uint16_t kSpaceGap = 7920;
const uint16_t kXyzBits = 168;
const uint16_t kXyzStateLength = 21;
// DANGER: More than 64 bits detected. A uint64_t for 'data' won't work!
// Function should be safe up to 64 bits.
void IRsend::sendXyz(const uint64_t data, const uint16_t nbits, const uint16_t repeat) {
enableIROut(38); // A guess. Most common frequency.
for (uint16_t r = 0; r <= repeat; r++) {
// Header
mark(kHdrMark);
space(kHdrSpace);
// Data
// e.g. data = 0xC160088E0000, nbits = 48
sendData(kBitMark, kOneSpace, kBitMark, kZeroSpace, data, nbits, true);
// Footer
mark(kBitMark);
space(kSpaceGap);
// Data
// e.g. data = 0x89F80000000000F7, nbits = 64
sendData(kBitMark, kOneSpace, kBitMark, kZeroSpace, data, nbits, true);
// Footer
mark(kBitMark);
space(kSpaceGap);
// Data
// e.g. data = 0x400000000040, nbits = 56
sendData(kBitMark, kOneSpace, kBitMark, kZeroSpace, data, nbits, true);
// Footer
mark(kBitMark);
space(100000); // A 100% made up guess of the gap between messages.
}
}
// Alternative >64 bit Function
void IRsend::sendXyz(uint8_t data[], uint16_t nbytes, uint16_t repeat) {
// nbytes should typically be kXyzStateLength
// data should typically be:
// uint8_t data[kXyzStateLength] = {0xC1, 0x60, 0x08, 0x8E, 0x00, 0x00, 0x89, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40};
// data[] is assumed to be in MSB order for this code.
for (uint16_t r = 0; r <= repeat; r++) {
sendGeneric(kHdrMark, kHdrSpace,
kBitMark, kOneSpace,
kBitMark, kZeroSpace,
kBitMark,
100000, // 100% made-up guess at the message gap.
data, nbytes,
38000, // Complete guess of the modulation frequency.
true, 0, 50);
}
Modifying the last bit of that code to be a bit more likely to reproduce the message would be:
_(FYI, completely unchecked/uncompiled/untested etc etc)_
void IRsend::sendXyz(uint8_t data[], uint16_t nbytes, uint16_t repeat) {
// nbytes should typically be kXyzStateLength
// data should typically be:
// uint8_t data[kXyzStateLength] = {0xC1, 0x60, 0x08, 0x8E, 0x00, 0x00, 0x89, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40};
// data[] is assumed to be in MSB order for this code.
for (uint16_t r = 0; r <= repeat; r++) {
// Section 1
sendGeneric(kHdrMark, kHdrSpace,
kBitMark, kOneSpace,
kBitMark, kZeroSpace,
kBitMark,
kSpaceGap,
data, 6, // 6 bytes == 48 bits
38000, // Complete guess of the modulation frequency.
true, 0, 50);
// Section 2
sendGeneric(0, 0,
kBitMark, kOneSpace,
kBitMark, kZeroSpace,
kBitMark,
kSpaceGap,
data + 6, 8, // 8 bytes == 64 bits
38000, // Complete guess of the modulation frequency.
true, 0, 50);
// Section 3
sendGeneric(0, 0,
kBitMark, kOneSpace,
kBitMark, kZeroSpace,
kBitMark,
100000, // Completely made up "end of message" gap.
data + 6 + 8, 7, // 7 bytes == 56 bits
38000, // Complete guess of the modulation frequency.
true, 0, 50);
}
_(Edited to fix up some code examples)_
FYI, I've added some comments in your git repo. Hope they help.
Ok, thank you for helping me, i'll keep you posted.
Good luck. Let me know if/when you're ready for me to take another look at it for you.
I've just updated the pseudo-code etc in the previous comment.
i.e. the 2nd & 3rd sections should NOT have sendGeneric(kHdrMark, kHdrSpace,, they should be sendGeneric(0, 0, as there is no "Header mark & space" for those sections. Hey. I said it was not tested. :)
I've created a PR/branch https://github.com/markszabo/IRremoteESP8266/tree/2.5-dev-whirlpool_ac which should send and decode the full 168 bits of the Whirlpool messages.
Can you give it a try please?
I think this is all, I hope you can help me implement all of this cause I don't quite understand how this works
Codes_whirlpool.txt
Can you please give us a run of temperatures? e.g. from the lowest to the highest temp.
I'm asking as Cooling_mode_25C_auto_fan & Cooling_mode_26C_auto_fan have 0xE and 0x1 as their temperature respectively. i.e. 0b1110 & 0b0001. I suspect the data might be in LSB order rather than MSB. If so, that would make 25C == 0b0111 == 7 & 26C == 0b1000 == 8. i.e. Linear.
Also, I strongly suggest you record the values in a spreadsheet. Google Sheets/LibreOffice etc if you don't have excel etc etc, Google Sheets is best as others can see it in real-time if it gets updated.
I wouldn't go crazy recording values until we determine the bit-order first to save you repeating effort. Temperature is easiest way of typically working that out as it _normally_ increments linearly. If it IS in LSB order, I'll need to change the code, and it will report completely different values back.
I have no idea what the sixth-sense feature is (and some others). Can you link to a manual to describe it's operation?
I would start with as "manual" a mode as possible. i.e. Cool or Heat or Auto mode, fan auto, vents auto, fixed temperature and then explore the other features turning them on and off to see which bits flip etc. Of course, the time/clock thing is going to hamper that effort.
Also, another tip. In the spreadsheet, record all the settings for a remote's message/value.
e.g. mode, temp, fan, clock, turbo, sleep, etc etc. It will help in the long run.
Here is the data requested:Google Sheets
and also the manual
Yep. The temperature indicates the bit ordering is LSB first. Not MSB. i.e. bit order is reversed for each "byte"/octet etc.
e.g. In the 4th transmitted byte which stores the temp.
18C = 0x8 (MSB) = 0x1 (LSB)
19C = 0x4 (MSB) = 0x2 (LSB)
20C = 0xC (MSB) = 0x3 (LSB)
21C = 0x2 (MSB) = 0x4 (LSB)
...
30C = 0xB (MSB) = 0xD (LSB)
31C = 0x7 (MSB) = 0xE (LSB)
Makes far more sense in LSB order.
@redmusicxd If you can git pull the latest branch and collect data based on that, I believe that should give you _better_ data that may be easier to decode/make sense of. (No promises other than for the Temp ;-)
i.e. Anything at/after https://github.com/markszabo/IRremoteESP8266/commit/4c2077da8633fd82e8a52eee2cbed01d578a6826 in that branch should be fine.
Alternatively, you can use the data you've collected and just reverse the bits within each byte.
e.g. 0x010203 = 0x8040C0
BTW, don't be afraid to say if the data looks better in MSB order than in LSB order. It might just be they are storing/recording the temperature data oddly.
i.e. If plenty of other things look more logical in MSB vs in LSB order. Speak up. You're doing the leg work on the analysis, so it's your call.
@redmusicxd Any luck with the v2.5-dev branch and any further progress on deep message decoding?
Marking this issue closed until there is feedback on deep message decoding. Just update this issue and I'll reopen it. The basic sending/decoding support has been merged in to the 2.5 branch and will be released soon.
v2.5.0 has been released.
hello, sorry for not being active for so long i've been long but i'm back and i've updated the spreadsheet, hope i've done good, make sure to also check "Codes" Sheet, I couldn't figure the checksum(the last byte of the 64-bit chunk)
FYI, I'll try to take a look soon but I'm travelling for several weeks. So don't expect a lot of response from me for a bit.
Hello!, it's been almost a month since your last comment, could you at least give a thought at how is the checksum calculated, I don't have any experience in such things and I don't know how to begin so I really need your help, sorry if you are still traveling and I am bothering you.
@redmusicxd I'm still travelling (for at least two more weeks).
In the meantime, can you include in the Google Spreadsheet (https://docs.google.com/spreadsheets/d/1ukDBLcyO1tuC8ndHScNZSDD-Lr1VlAjPaB72wdfyKts/edit#gid=0) a sequence of codes captured from the _v2.5.2_ library where all the settings are the same, except varying the temperature. Starting from the lowest temp (typically 16degC) to the maximum temp (typically 30-32C), including each increment, and list what the other unchanging settings are:
e.g.
Power On, Cool Mode, fan auto, swing off, any-other-modes off, time 0:00, temp 16C
Power On, Cool Mode, fan auto, swing off, any-other-modes off, time 0:00, temp 17C
Power On, Cool Mode, fan auto, swing off, any-other-modes off, time 0:00, temp 18C
...
Power On, Cool Mode, fan auto, swing off, any-other-modes off, time 0:00, temp 30C
That will help us to determine what algorithm the checksum might be using.
Wow, this is really great. Is there a way to have different codes for ON and OFF? Wanting to control this remotely but i will never know if i turned it off or on since same code is being used for ON and OFF.
@raducostea Not sure. The data in @redmusicxd 's spreadsheet indicates the state does contain info about if the power is on or off, but no idea if there is a descrete on & off signal that can be used. You'll have to get a response from them as I don't have access to the device.
Have you tried contacting the manufacturer and asking them if there is such a code for what you want?
Have you captured the on & off signals with IRrecvDumpV2? Do the codes differ at all?
@crankyoldgit unfortunately not, they don't change. Currently, to "safely" turn it on and off while not at home i am basically programming to ON in one minute and same for OFF, off in one minute. This will make sure its ON or OFF when i send the command.
That's a real bummer for you/Whirlpool owners. BTW @raducostea if you can provide the state lines/codes for the above min temp to max temp in cool mode etc above, that would be a big step to help me work out what the checksum algorithm might be.
@crankyoldgit ,
I requested access to the document. I can provide the codes for you.
I don't control access to that doc. Feel free to create a new doc in the meantime.
@crankyoldgit posted more codes here https://docs.google.com/spreadsheets/d/1SUMVL0_LN6fI_3e_GeEPigtIe2B_PvkzKfDIA2mBiHM/edit#gid=0
Can you share a 'public read-only' link please, so anyone following this thread can access it. It's in the sharing settings.
Thanks
@crankyoldgit sure https://docs.google.com/spreadsheets/d/1SUMVL0_LN6fI_3e_GeEPigtIe2B_PvkzKfDIA2mBiHM/edit?usp=sharing
Let me know if you need extra information. Looking forward to have this ready, i have couple of AC commands working already by sending uint8_t codes but its hard to map all of them.
Btw, in the IRDumpV2 clicking power on/off on head mode and cool mode (same clock) results in the same uint8 state
Encoding : WHIRLPOOL_AC
Code : 830604500000872B0000000000F800010000000001 (168 bits)
uint16_t rawData[343] = {9088, 4446, 676, 1580, 674, 1582, 674, 490, 646, 494, 646, 496, 644, 502, 648, 502, 646, 1590, 674, 482, 646, 1584, 676, 1584, 676, 492, 644, 498, 648, 498, 646, 502, 646, 492, 648, 482, 646, 486, 644, 1588, 674, 494, 648, 496, 646, 500, 646, 504, 646, 494, 646, 484, 644, 488, 646, 488, 648, 492, 646, 1594, 674, 502, 646, 1600, 676, 492, 644, 484, 646, 486, 646, 490, 644, 494, 648, 496, 648, 500, 644, 504, 646, 494, 646, 484, 644, 488, 646, 490, 646, 494, 646, 498, 646, 500, 648, 502, 646, 476, 648, 7900, 676, 1578, 678, 1582, 674, 1588, 672, 494, 644, 498, 646, 498, 648, 502, 646, 1590, 674, 1580, 674, 1586, 674, 490, 646, 1590, 678, 496, 648, 1596, 676, 502, 646, 494, 646, 484, 646, 484, 648, 488, 646, 494, 644, 498, 644, 500, 648, 500, 648, 492, 644, 484, 646, 486, 648, 488, 646, 492, 646, 496, 646, 500, 646, 504, 648, 492, 644, 484, 644, 488, 646, 488, 646, 492, 644, 498, 646, 500, 646, 502, 646, 492, 642, 486, 644, 486, 646, 490, 644, 492, 646, 496, 646, 500, 646, 504, 644, 494, 646, 484, 646, 486, 648, 488, 648, 490, 646, 496, 644, 500, 648, 502, 644, 494, 648, 482, 644, 488, 646, 488, 648, 1592, 672, 1596, 674, 1598, 676, 1598, 676, 1572, 678, 7898, 678, 482, 646, 486, 646, 490, 644, 496, 646, 496, 646, 502, 646, 504, 644, 494, 646, 1580, 676, 486, 646, 490, 646, 494, 646, 498, 646, 500, 646, 504, 644, 496, 644, 484, 648, 484, 646, 490, 646, 492, 644, 498, 646, 498, 648, 502, 646, 492, 644, 484, 646, 486, 646, 490, 646, 494, 646, 496, 648, 498, 644, 506, 646, 492, 646, 484, 646, 486, 646, 490, 646, 492, 646, 498, 646, 500, 644, 506, 648, 492, 644, 484, 646, 488, 646, 490, 646, 492, 644, 498, 646, 502, 646, 504, 646, 492, 646, 1578, 676, 486, 646, 492, 646, 492, 644, 498, 644, 500, 646, 504, 648, 474, 632}; // WHIRLPOOL_AC
uint8_t state[21] = {0x83, 0x06, 0x04, 0x50, 0x00, 0x00, 0x87, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01};Encoding : WHIRLPOOL_AC
Code : 830604520000872B0000000000FA00010000000001 (168 bits)
uint16_t rawData[343] = {9080, 4452, 670, 1614, 640, 1592, 666, 468, 668, 470, 668, 474, 668, 478, 668, 480, 668, 1598, 668, 458, 672, 1616, 640, 1594, 666, 470, 668, 474, 668, 478, 668, 482, 668, 472, 668, 458, 670, 460, 670, 1596, 666, 472, 668, 474, 668, 476, 670, 480, 670, 468, 670, 460, 670, 1592, 666, 466, 672, 468, 670, 1602, 666, 478, 668, 1636, 640, 470, 668, 458, 670, 464, 668, 468, 666, 470, 670, 472, 668, 478, 670, 480, 668, 468, 670, 462, 668, 464, 668, 466, 668, 472, 666, 476, 666, 478, 670, 480, 668, 454, 670, 7912, 664, 1592, 666, 1596, 664, 1598, 664, 472, 666, 476, 666, 482, 664, 484, 666, 1602, 664, 1590, 662, 1598, 662, 468, 666, 1628, 636, 478, 666, 1636, 634, 484, 664, 474, 666, 464, 664, 400, 730, 470, 666, 474, 666, 476, 664, 482, 664, 484, 664, 474, 664, 466, 662, 468, 664, 472, 664, 476, 666, 478, 662, 482, 666, 486, 662, 476, 664, 466, 664, 470, 664, 474, 664, 472, 666, 480, 664, 482, 662, 488, 662, 476, 664, 466, 664, 468, 664, 474, 662, 476, 664, 480, 662, 484, 664, 486, 664, 476, 664, 464, 664, 470, 662, 472, 664, 476, 664, 480, 664, 484, 662, 486, 662, 478, 664, 466, 660, 1626, 632, 476, 662, 1632, 634, 1636, 634, 1640, 632, 1616, 660, 1588, 660, 7918, 664, 468, 660, 472, 662, 476, 662, 476, 662, 480, 662, 484, 662, 492, 660, 476, 662, 1620, 634, 470, 662, 472, 664, 476, 662, 482, 662, 484, 662, 488, 662, 476, 664, 468, 662, 470, 660, 478, 662, 476, 662, 480, 662, 486, 660, 490, 664, 476, 662, 466, 662, 470, 664, 474, 662, 476, 662, 482, 664, 484, 662, 486, 660, 480, 660, 470, 660, 474, 658, 474, 660, 478, 660, 484, 660, 484, 658, 490, 662, 478, 662, 468, 658, 474, 658, 478, 658, 482, 658, 484, 658, 486, 660, 490, 662, 478, 660, 1596, 656, 476, 660, 476, 660, 480, 658, 482, 658, 490, 658, 494, 656, 462, 624}; // WHIRLPOOL_AC
uint8_t state[21] = {0x83, 0x06, 0x04, 0x52, 0x00, 0x00, 0x87, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01};
FYI. Those two states are different
@raducostea I gave you access to the document if you want to make further additions.
Thaks @redmusicxd
@crankyoldgit is there a way to send the 168 bits code right now? Will be easier for mapping until the library is ready.
Try sendWhirlpoolAC(state);
e.g.
uint8_t state[21] = {0x83, 0x06, 0x04, 0x52, 0x00, 0x00, 0x87, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01};
irsend.sendWhirlpoolAC(state);
It was added in v2.5.0 of the library.
That works, i was thinking about the 168 bits code
That is 168 bits. 21 * 8 = 168 bits. The longest integer size the ESP8266 supports is 64 bits. (i.e. uint64_t/unsigned long long) Hence you need to store it in an array.
You can send the 0x830604520000872B0000000000FA00010000000001 code via the IRMQTTServer program. It just converts it to the state method above.
@raducostea Thanks for the data/spreadsheet. Looking at that data, I think the checksum may be based on an XOR function of the preceding bytes.
I still need to check that out with some firm analysis.
I checked the XOR but it would never return me the same checksum instead it would be an almost value but anyway must be a miscalculation or there are some bits that I may have missing, anyway good luck.
Yeah. Testing that against three codes. It seems to work.
i.e. XOR of state[2..13] gives the checksum which seems to be in state[14]
IR Remote Code modified4.xlsx
I have 4 SAGA AC units using the whirlpool protocol I have attached my Spread sheet if that helps someone here. There are two checksums for my units and they exclude the preamble (the first part of the IR code and the checksum it's self. I also found https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/ to be a good tool for helping me solve the checksum on my ac units.
@josh929800 Many thanks for that. That's really useful.
I'm still away from home for another week. So, I may not be able to get to coding it till then.
I am using HomeAssistant mqtt climate module to talk to nodeRed via MQTT. Then I have nodeRed generate the IR code to send to the ESP8266 via MQTT. If it helps you or someone else here is the nodeRed logic that generates the IR code and sends it to the AC unit.
[{"id":"bb7c54cc.538af8","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"83f32013.fb9a2","type":"inject","z":"bb7c54cc.538af8","name":"On","topic":"frontNode1/ac/power/set","payload":"On","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":740,"wires":[["fcc4735.740db9"]]},{"id":"fcc4735.740db9","type":"switch","z":"bb7c54cc.538af8","name":"Power Bit","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Off","vt":"str"},{"t":"eq","v":"On","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":420,"y":800,"wires":[["8732aafe.a0a518"],["de3e7dd7.2753d"]]},{"id":"c6339d74.f1a6b","type":"function","z":"bb7c54cc.538af8","name":"modeBlock","func":"var acMode = flow.get(\"ac-mode\")||\"Standby\";\nvar fanSpeed = flow.get(\"fanspeed\")||\"00\";\nvar power = flow.get(\"power\")||\"0\";\nvar swing = flow.get(\"swing\")||\"0\";\nvar sleep = flow.get(\"sleep\")||\"0\";\nvar Super = flow.get(\"Super\")||\"0\";\nvar swingHex = \"0\";\nvar mode = flow.get(\"mode\")||\"4\"; \nif (Super === \"1\" && fanSpeed !== \"10\") Super = \"0\";\nif (mode === \"2\") {\n var setTemp = flow.get(\"setTemp\")||\"8\"; // AC Default Temp 24\n} else if (mode === \"0\") {\n var setTemp = flow.get(\"setTemp\")||\"B\"; // Heat Default Temp 27\n} else{\n var setTemp = \"7\"; // Default Temp 23\n}\nif (swing === \"1\") {\n swingHex = \"8\";\n}\n\nvar nowHourBinary = flow.get(\"nowHourBinary\")||\"00000\"; // 5 - 16H,8H,4H,2H,1H\nvar dimmer = flow.get(\"dimmer\")||\"0\"; // 1 - LED Off & O - LED On\nvar nowMinuteBinary = flow.get(\"nowMinuteBinary\")||\"000000\"; // 6 - 32M,16M,8M,4M,2M,1M\nif (acMode === \"Stanby\") {\n var timerOffInBinary = flow.get(\"timerOffInBinary\")||\"1000000000001\";\n var timerOnInBinary = flow.get(\"timerOnInBinary\")||\"0000000000000\";\n} else {\n var timerOffInBinary = flow.get(\"timerOffInBinary\")||\"0000000000000\";\n var timerOnInBinary = flow.get(\"timerOnInBinary\")||\"1000000000001\";\n}\nvar timerOffIO = timerOffInBinary.slice(0,-12); // 1 - I/O\nvar timerOffHour = timerOffInBinary.slice(1,-6); //6 - 32H,16H,8H,4H,2H,1H\nvar timerOffMin = timerOffInBinary.substr(7); // 6 - 32M,16M,8M,4M,2M,1M\nvar timerOnIO = timerOnInBinary.slice(0,-12); // 1 - I/O\nvar timerOnHours = timerOnInBinary.slice(1,-6); // 6 - 32H,16H,8H,4H,2H,1H\nvar timerOnMin = timerOnInBinary.substr(7); // 6 - 32M,16M,8M,4M,2M,1M\nvar ifeel = flow.get(\"ifeel\")||\"00\"; // I/O - Hex\nvar ifeelIO = ifeel.slice(0,-1);\nvar ifeelTempHex = ifeel.substr(1);\n\nvar inBin = sleep+power+fanSpeed+\"10\"+dimmer+nowHourBinary+timerOffIO+\"0\"+nowMinuteBinary+\"0\"+swing+timerOffHour+timerOnIO+\"0\"+timerOffMin+\"00\"+timerOnHours+\"00\"+timerOnMin+\"000\"+ifeelIO\n\nvar len = inBin.length;\n\n// determine how many bits in first nibble\nvar firstBits = len % 4;\n\n// if firstBits > 0 generate padding to make even nibbles\n// increase len by number of padding bits\nvar inPadded = \"\";\nif(firstBits > 0)\n{\n var padding = \"\";\n for(var i = 0; i < 4 - firstBits; i++)\n {\n padding = \"0\" + padding;\n len++;\n }\n inPadded = padding + inBin;\n}\nelse\n{\ninPadded = inBin;\n}\n\n// Binary to hexadecimal lookup table in\n// a multidimensional array\nvar hexDigits = [\n[\"0000\",\"0\"],\n[\"0001\",\"1\"],\n[\"0010\",\"2\"],\n[\"0011\",\"3\"],\n[\"0100\",\"4\"],\n[\"0101\",\"5\"],\n[\"0110\",\"6\"],\n[\"0111\",\"7\"],\n[\"1000\",\"8\"],\n[\"1001\",\"9\"],\n[\"1010\",\"A\"],\n[\"1011\",\"B\"],\n[\"1100\",\"C\"],\n[\"1101\",\"D\"],\n[\"1110\",\"E\"],\n[\"1111\",\"F\"]];\n\n// grab the input bits nibble by nibble\n// look up in array and fetch hexadecimal value\nvar nibble = \"\";\nvar outHex = \"\";\nfor(var start = 0; start <= len - 4; start += 4)\n{\n nibble = inPadded.substring(start, start + 4);\n for(var j = 0; j < hexDigits.length; j++)\n {\n if(nibble == hexDigits[j][0])\n {\n outHex += hexDigits[j][1];\n }\n }\n} \n\npowerFanHex = outHex.slice(0,-13);\noutHex = outHex.substr(1); //3\n\nhex = swingHex+powerFanHex+setTemp+mode+\"00\"+Super+\"0\"+outHex+ifeelTempHex;\nmsg.payload = hex;\nreturn msg;","outputs":1,"noerr":0,"x":230,"y":80,"wires":[["6864fa0a.f50b44"]]},{"id":"1484d8bf.5f2357","type":"switch","z":"bb7c54cc.538af8","name":"Fan","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"high","vt":"str"},{"t":"eq","v":"medium","vt":"str"},{"t":"eq","v":"low","vt":"str"},{"t":"eq","v":"auto","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":410,"y":580,"wires":[["fa9b3d46.1c8ac"],["1caa22bc.c7fe9d"],["498cf32e.40921c"],["7d111777.d60b88"]]},{"id":"d68b8b52.903b88","type":"mqtt in","z":"bb7c54cc.538af8","name":"frontNode1/ac/fan/set","topic":"frontNode1/ac/fan/set","qos":"0","broker":"393ef689.1db1da","x":200,"y":640,"wires":[["1484d8bf.5f2357"]]},{"id":"7d111777.d60b88","type":"change","z":"bb7c54cc.538af8","name":"Auto","rules":[{"t":"set","p":"fanspeed","pt":"flow","to":"00","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":640,"wires":[["bcf81a2b.b94cd8"]]},{"id":"fa9b3d46.1c8ac","type":"change","z":"bb7c54cc.538af8","name":"High","rules":[{"t":"set","p":"fanspeed","pt":"flow","to":"10","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":520,"wires":[["bcf81a2b.b94cd8"]]},{"id":"1caa22bc.c7fe9d","type":"change","z":"bb7c54cc.538af8","name":"Medium","rules":[{"t":"set","p":"fanspeed","pt":"flow","to":"01","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":560,"wires":[["bcf81a2b.b94cd8"]]},{"id":"498cf32e.40921c","type":"change","z":"bb7c54cc.538af8","name":"Low","rules":[{"t":"set","p":"fanspeed","pt":"flow","to":"11","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":600,"wires":[["bcf81a2b.b94cd8"]]},{"id":"8e22e508.ce7368","type":"inject","z":"bb7c54cc.538af8","name":"auto","topic":"frontNode1/ac/fan/set","payload":"auto","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":600,"wires":[["1484d8bf.5f2357"]]},{"id":"ef2a565.959eca8","type":"mqtt in","z":"bb7c54cc.538af8","name":"frontNode1/ac/mode/set","topic":"frontNode1/ac/mode/set","qos":"0","broker":"393ef689.1db1da","x":210,"y":1160,"wires":[["dba5ae4.8189e5"]]},{"id":"dba5ae4.8189e5","type":"switch","z":"bb7c54cc.538af8","name":"Mode","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Super","vt":"str"},{"t":"eq","v":"cool","vt":"str"},{"t":"eq","v":"heat","vt":"str"},{"t":"eq","v":"dry","vt":"str"},{"t":"eq","v":"fan_only","vt":"str"},{"t":"eq","v":"Standby","vt":"str"},{"t":"eq","v":"off","vt":"str"},{"t":"eq","v":"Smart","vt":"str"}],"checkall":"true","repair":false,"outputs":8,"x":434.28571701049805,"y":1052.8571739196777,"wires":[["ff65a9c6.8820a8"],["eb765455.ab9818"],["70e1908e.57b22"],["7f9f0b3f.e474a4"],["102dfdeb.f4d242"],["42104d50.774884"],["42104d50.774884"],["6e49013f.de89"]]},{"id":"42104d50.774884","type":"change","z":"bb7c54cc.538af8","name":"Standby","rules":[{"t":"set","p":"mode","pt":"flow","to":"4","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"0000000000000","tot":"str"},{"t":"set","p":"ac-mode","pt":"flow","to":"Standby","tot":"str"},{"t":"set","p":"SetTemp","pt":"flow","to":"1110","tot":"str"},{"t":"set","p":"Super","pt":"flow","to":"0","tot":"str"},{"t":"set","p":"dimmer","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":1080,"wires":[["b948a6ff.357be8"]]},{"id":"e921ba3b.19a388","type":"mqtt out","z":"bb7c54cc.538af8","name":"frontNode1/ac/temperature/get","topic":"frontNode1/ac/temperature/get","qos":"0","retain":"false","broker":"393ef689.1db1da","x":1030,"y":1709,"wires":[]},{"id":"491f56cb.2308c8","type":"mqtt in","z":"bb7c54cc.538af8","name":"frontNode1/ac/power/set","topic":"frontNode1/ac/power/set","qos":"0","broker":"393ef689.1db1da","x":210,"y":820,"wires":[["fcc4735.740db9"]]},{"id":"6f6a9dbb.e55a94","type":"change","z":"bb7c54cc.538af8","name":"set-temp","rules":[{"t":"set","p":"set-temp","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":821,"y":1709,"wires":[["e921ba3b.19a388"]]},{"id":"165d50d8.5ecaef","type":"range","z":"bb7c54cc.538af8","minin":"16.0","maxin":"30.0","minout":"16","maxout":"30","action":"scale","round":true,"property":"payload","name":"Round","x":451,"y":1720,"wires":[["9925dd18.2d30b"]]},{"id":"4e680712.e0f258","type":"mqtt in","z":"bb7c54cc.538af8","name":"frontNode1/ac/temperature/set","topic":"frontNode1/ac/temperature/set","qos":"0","broker":"393ef689.1db1da","x":230,"y":1720,"wires":[["165d50d8.5ecaef"]]},{"id":"102dfdeb.f4d242","type":"change","z":"bb7c54cc.538af8","name":"fan_only","rules":[{"t":"set","p":"mode","pt":"flow","to":"4","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"SetTemp","pt":"flow","to":"1110","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"0000000000000","tot":"str"},{"t":"set","p":"ac-mode","pt":"flow","to":"fan_only","tot":"str"},{"t":"set","p":"Super","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":1040,"wires":[["b948a6ff.357be8"]]},{"id":"7f9f0b3f.e474a4","type":"change","z":"bb7c54cc.538af8","name":"dry","rules":[{"t":"set","p":"ac-mode","pt":"flow","to":"dry","tot":"str"},{"t":"set","p":"mode","pt":"flow","to":"3","tot":"str"},{"t":"set","p":"SetTemp","pt":"flow","to":"1110","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"0000000000000","tot":"str"},{"t":"set","p":"Super","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":1000,"wires":[["b948a6ff.357be8"]]},{"id":"eb765455.ab9818","type":"change","z":"bb7c54cc.538af8","name":"cool","rules":[{"t":"set","p":"mode","pt":"flow","to":"2","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"0000000000000","tot":"str"},{"t":"set","p":"ac-mode","pt":"flow","to":"cool","tot":"str"},{"t":"set","p":"Super","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":920,"wires":[["b948a6ff.357be8"]]},{"id":"47eab5ba.88991c","type":"inject","z":"bb7c54cc.538af8","name":"cool","topic":"frontNode1/ac/mode/set","payload":"cool","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":960,"wires":[["dba5ae4.8189e5"]]},{"id":"6864fa0a.f50b44","type":"function","z":"bb7c54cc.538af8","name":"chk8xor","func":"let checksum = chk8xor(msg.payload)\n\nfunction chk8xor(hexstring) {\n\n\t\tvar s = hexstring.match(/../g);\n\t\tvar sum = 0;\n\t\ts.forEach(function (hexbyte) {\n\t\t\tvar n = 1 * ('0x' + hexbyte); // convert hex to number\n\t\t\tsum ^= n;\n\t\t});\n\t\tsum = (sum & 255).toString(16);\n\t\tif (sum.length % 2)\n\t\t\tsum = '0' + sum;\n\t\treturn sum;\n}\n\nflow.set(\"blockOne\",msg.payload+checksum)\nmsg.payload = msg.payload+checksum.toUpperCase()\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":80,"wires":[["fddb918e.a3dea"]]},{"id":"22a27bff.60e5d4","type":"inject","z":"bb7c54cc.538af8","name":"off","topic":"","payload":"45,83060074000080800001000000750017000008001F","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1010,"y":560,"wires":[["d97b3c41.d09dc"]]},{"id":"d97b3c41.d09dc","type":"mqtt out","z":"bb7c54cc.538af8","name":"","topic":"frontNode1/ir/send","qos":"0","retain":"false","broker":"393ef689.1db1da","x":1250,"y":560,"wires":[]},{"id":"fddb918e.a3dea","type":"function","z":"bb7c54cc.538af8","name":"blockTwo","func":"\npart3 = \"0x00000000000\";\nvar acMode = flow.get(\"ac-mode\")||\"Standby\";\nvar power = flow.get(\"power\")||\"0\"; // Power - I/O\nvar swing = flow.get(\"swing\")||\"0\"; // Swing - I/O\nvar dimmer = flow.get(\"dimmer\")||\"0\"; // Dimmer - I/O\nvar auto = flow.get(\"fanspeed\"); // fanspeed 00 = auto \n\nif (acMode === \"Stanby\") {\n var timerOffInBinary = flow.get(\"timerOffInBinary\")||\"1000000000001\";\n var timerOnInBinary = flow.get(\"timerOnInBinary\")||\"0000000000000\";\n} else {\n var timerOffInBinary = flow.get(\"timerOffInBinary\")||\"0000000000000\";\n var timerOnInBinary = flow.get(\"timerOnInBinary\")||\"1000000000001\";\n}\nvar timerOff = timerOffInBinary.slice(0,-12); // 1 - I/O\nvar timerOn = timerOnInBinary.slice(0,-12); // 1 - I/O\nvar ifeelTempInBinary = flow.get(\"ifeelTempInBinary\")||\"000000\"; // I/O - 8,4,2,1\nvar ifeel = ifeelTempInBinary.slice(0,-5); // IFEEL - I/O\nvar mode = flow.get(\"mode\"); // Fan or SMART\n\n//bit249\n//Power, swing, Timer, Fan, SMART, ifeel, or sleep \n// sleep \nif (power === \"1\") msg.payload = part3 + \"1\"; // If Power is On = On \nelse if (swing === \"1\") msg.payload = part3 + \"1\"; // If Swing is On = On \nelse if (timerOff === \"1\") msg.payload = part3 + \"1\"; // If Timer Off is On = On \nelse if (timerOn === \"1\") msg.payload = part3 + \"1\"; // If Timer On is On = On \nelse if (mode === '4') msg.payload = part3 + \"1\"; // If Fan is On = On\n//else if (mode === '1000') msg.payload = part3 + \"1\"; // If SMART is On = On\nelse if (ifeel === \"1\") msg.payload = part3 + \"1\"; // If ifeel is On = On \nelse msg.payload = part3 + \"0\";\n\n// bit 250\n//Auto, No Timer, No Power, No Dmmer, No ifeel, No Super Off\nif (timerOff === \"1\") msg.payload = msg.payload + \"0\"; // Not on if Timer Off\nelse if (timerOn === \"1\") msg.payload = msg.payload + \"0\"; // Not on if Timer On\nelse if (power === \"1\") msg.payload = msg.payload + \"0\"; // Not on if Power On\nelse if (dimmer === \"1\") msg.payload = msg.payload + \"0\"; // Not on if Dimmer On\nelse if (ifeel === \"1\") msg.payload = msg.payload + \"0\"; // Not on if IFEEL On\n// Not on if turning SUPER off.\nelse if (auto === \"00\") msg.payload = msg.payload + \"1\"; // Auto is On\nelse msg.payload = msg.payload + \"0\";\n\n// bit251 \n//Swing, SMART, Timer, ifeel, or Super\t\n// SUPER\nif (swing === \"1\") msg.payload = msg.payload + \"1\"; // Swing\n//else if (mode === '1000') msg.payload = msg.payload + \"1\"; // If SMART is On = On\nelse if (timerOn === \"1\") msg.payload = msg.payload + \"1\"; // Timer On\nelse if (timerOff === \"1\") msg.payload = msg.payload + \"1\"; // Timer Off\nelse if (ifeel === \"1\") msg.payload = msg.payload + \"1\"; // If ifeel is On = On \n// SUPER\nelse msg.payload = msg.payload + \"0\";\n\n// bit252\n//Timer Off / IFEEL\t\nif (timerOff === \"1\") msg.payload = msg.payload + \"1\"\nelse if (ifeel === \"1\") msg.payload = msg.payload + \"1\"\nelse msg.payload = msg.payload + \"0\"\n\n// bit253\n//Fan, Timer Off\t\nif (timerOff === \"1\") msg.payload = msg.payload + \"1\";\nelse if (mode === '4') msg.payload = msg.payload + \"1\";\nelse msg.payload = msg.payload + \"0\";\n\n// the rest of block2\nmsg.payload = msg.payload + \"00000000000000000000100000000000\"\n\nvar inBin = msg.payload.substring(2);\nvar len = inBin.length;\n\n// determine how many bits in first nibble\nvar firstBits = len % 4;\n\n// if firstBits > 0 generate padding to make even nibbles\n// increase len by number of padding bits\nvar inPadded = \"\";\nif(firstBits > 0)\n{\n var padding = \"\";\n for(var i = 0; i < 4 - firstBits; i++)\n {\n padding = \"0\" + padding;\n len++;\n }\n inPadded = padding + inBin;\n}\nelse\n{\ninPadded = inBin;\n}\n\n// Binary to hexadecimal lookup table in\n// a multidimensional array\nvar hexDigits = [\n[\"0000\",\"0\"],\n[\"0001\",\"1\"],\n[\"0010\",\"2\"],\n[\"0011\",\"3\"],\n[\"0100\",\"4\"],\n[\"0101\",\"5\"],\n[\"0110\",\"6\"],\n[\"0111\",\"7\"],\n[\"1000\",\"8\"],\n[\"1001\",\"9\"],\n[\"1010\",\"A\"],\n[\"1011\",\"B\"],\n[\"1100\",\"C\"],\n[\"1101\",\"D\"],\n[\"1110\",\"E\"],\n[\"1111\",\"F\"]];\n\n// grab the input bits nibble by nibble\n// look up in array and fetch hexadecimal value\nvar nibble = \"\";\nvar outHex = \"\";\nfor(var start = 0; start <= len - 4; start += 4)\n{\n nibble = inPadded.substring(start, start + 4);\n for(var j = 0; j < hexDigits.length; j++)\n {\n if(nibble == hexDigits[j][0])\n {\n outHex += hexDigits[j][1];\n }\n }\n}\nmsg.payload = outHex\nreturn msg;","outputs":1,"noerr":0,"x":520,"y":80,"wires":[["78755871.3a4938"]]},{"id":"50a349ae.879398","type":"inject","z":"bb7c54cc.538af8","name":"dry","topic":"frontNode1/ac/mode/set","payload":"dry","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":1000,"wires":[["dba5ae4.8189e5"]]},{"id":"78755871.3a4938","type":"function","z":"bb7c54cc.538af8","name":"chk8xor","func":"\nlet checksum = chk8xor(msg.payload)\n\nfunction chk8xor(hexstring) {\n\n\t\tvar s = hexstring.match(/../g);\n\t\tvar sum = 0;\n\t\ts.forEach(function (hexbyte) {\n\t\t\tvar n = 1 * ('0x' + hexbyte); // convert hex to number\n\t\t\tsum ^= n;\n\t\t});\n\t\tsum = (sum & 255).toString(16);\n\t\tif (sum.length % 2)\n\t\t\tsum = '0' + sum;\n\t\treturn sum;\n}\nvar blockOne = flow.get(\"blockOne\")\nmsg.payload = \"45,8306\"+blockOne+msg.payload+checksum.toUpperCase()\nreturn msg;","outputs":1,"noerr":0,"x":660,"y":80,"wires":[["4c2e07ca.5373c8","86c33d4.db275c","6fb22ded.8a9704","75730d30.150944"]]},{"id":"4c2e07ca.5373c8","type":"mqtt out","z":"bb7c54cc.538af8","name":"","topic":"frontNode1/ir/send","qos":"0","retain":"false","broker":"393ef689.1db1da","x":870,"y":80,"wires":[]},{"id":"9af96f2f.c5e87","type":"function","z":"bb7c54cc.538af8","name":"temp2hex","func":"var Temp = msg.payload;\n\nif (Temp === 16) hex = \"0\"\nelse if (Temp === 17) hex = \"1\"\nelse if (Temp === 18) hex = \"2\"\nelse if (Temp === 19) hex = \"3\"\nelse if (Temp === 20) hex = \"4\"\nelse if (Temp === 21) hex = \"5\"\nelse if (Temp === 22) hex = \"6\"\nelse if (Temp === 23) hex = \"7\"\nelse if (Temp === 24) hex = \"8\"\nelse if (Temp === 25) hex = \"9\"\nelse if (Temp === 26) hex = \"A\"\nelse if (Temp === 27) hex = \"B\"\nelse if (Temp === 28) hex = \"C\"\nelse if (Temp === 29) hex = \"D\"\nelse if (Temp === 30) hex = \"E\"\nelse hex = \"7\"\nmsg.payload = hex\nflow.set(\"setTemp\", hex);\nreturn msg","outputs":1,"noerr":0,"x":821,"y":1660,"wires":[["feca9bb2.bdceb8"]]},{"id":"8355ab97.7d7758","type":"inject","z":"bb7c54cc.538af8","name":"ac24","topic":"","payload":"45,83060082000080000080000100830014000008001C","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1010,"y":600,"wires":[["d97b3c41.d09dc"]]},{"id":"a773ca7f.d4fb78","type":"inject","z":"bb7c54cc.538af8","name":"high","topic":"frontNode1/ac/fan/set","payload":"high","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":560,"wires":[["1484d8bf.5f2357"]]},{"id":"86c33d4.db275c","type":"debug","z":"bb7c54cc.538af8","name":"Sent IR Command","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":870,"y":40,"wires":[]},{"id":"eacbab17.57e048","type":"link in","z":"bb7c54cc.538af8","name":"Front Room AC - BuildIR","links":["b81835d7.ca9918","b902dd7b.f9156","636455c9.19e94c","bcf81a2b.b94cd8","73905584.a5f0ec","c1379b99.4063c8","66357132.762b4","5d17b72b.dbef98","b948a6ff.357be8","d67022e4.53e1f","cdc17a4f.d18d18","c196bbac.b92918","d290e45b.3fa8f8","feca9bb2.bdceb8"],"x":115,"y":80,"wires":[["bf30fc60.b3cc8","c6339d74.f1a6b"]]},{"id":"bcf81a2b.b94cd8","type":"link out","z":"bb7c54cc.538af8","name":"Front Room BuildIR - Fan","links":["eacbab17.57e048"],"x":755,"y":580,"wires":[]},{"id":"9c3bc64a.c903b8","type":"link in","z":"bb7c54cc.538af8","name":"Front Room AC - Mode & Power","links":["fb12b3aa.91861"],"x":295,"y":940,"wires":[["dba5ae4.8189e5","f134c9a5.ed0828"]]},{"id":"80ce5f39.db5d1","type":"inject","z":"bb7c54cc.538af8","name":"Off","topic":"frontNode1/ac/power/set","payload":"Off","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":780,"wires":[["fcc4735.740db9"]]},{"id":"b2db3e58.b038f","type":"inject","z":"bb7c54cc.538af8","name":"Dimmer On","topic":"frontNode1/ac/mode/set","payload":"Dimmer On","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1260,"wires":[["6ba145c1.f9d04c"]]},{"id":"1f532bce.ab2c34","type":"change","z":"bb7c54cc.538af8","name":"swing - On/Off","rules":[{"t":"set","p":"swing","pt":"flow","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":699.9999847412109,"y":1335.7142343521118,"wires":[["5d17b72b.dbef98"]]},{"id":"6fb22ded.8a9704","type":"change","z":"bb7c54cc.538af8","name":"swing - Off","rules":[{"t":"set","p":"swing","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":120,"wires":[[]]},{"id":"5f62aa1a.73c114","type":"change","z":"bb7c54cc.538af8","name":"dimmer - On","rules":[{"t":"set","p":"dimmer","pt":"flow","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":689.9999847412109,"y":1255.7142343521118,"wires":[["5d17b72b.dbef98"]]},{"id":"5d17b72b.dbef98","type":"link out","z":"bb7c54cc.538af8","name":"Front Room BuildIR - Swing Mode","links":["eacbab17.57e048"],"x":874.9999847412109,"y":1375.7142343521118,"wires":[]},{"id":"9a0ce43e.67e268","type":"inject","z":"bb7c54cc.538af8","name":"Swing","topic":"frontNode1/ac/mode/set","payload":"Swing","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":1340,"wires":[["6ba145c1.f9d04c"]]},{"id":"7bb95875.49b678","type":"comment","z":"bb7c54cc.538af8","name":"Power On/Off - Not in Use","info":"","x":410,"y":740,"wires":[]},{"id":"c10cb84a.26c038","type":"comment","z":"bb7c54cc.538af8","name":"Create Whorlpool IR Command","info":"","x":230,"y":40,"wires":[]},{"id":"1b7a8050.38435","type":"comment","z":"bb7c54cc.538af8","name":"Test Wherlpool IR commands","info":"","x":1260,"y":520,"wires":[]},{"id":"b76454d3.32c008","type":"debug","z":"bb7c54cc.538af8","name":"See Flow","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1300,"y":1000,"wires":[]},{"id":"83441a5e.156c18","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"ac-mode","payload":"ac-mode","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1030,"y":1000,"wires":[["b76454d3.32c008"]]},{"id":"5cd79561.ce4bfc","type":"comment","z":"bb7c54cc.538af8","name":"Set AC Fan Speed","info":"","x":190,"y":520,"wires":[]},{"id":"4f3c8de7.b61344","type":"comment","z":"bb7c54cc.538af8","name":"Set AC Mode","info":"","x":430,"y":880,"wires":[]},{"id":"4a84752c.fd0bfc","type":"comment","z":"bb7c54cc.538af8","name":"Set AC Set Temp","info":"","x":179.64283752441406,"y":1673.3928680419922,"wires":[]},{"id":"238edada.9d94f6","type":"change","z":"bb7c54cc.538af8","name":"Power - On/Off","rules":[{"t":"set","p":"power","pt":"flow","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":699.9999847412109,"y":1455.7142343521118,"wires":[["5d17b72b.dbef98"]]},{"id":"75730d30.150944","type":"change","z":"bb7c54cc.538af8","name":"Power - Off","rules":[{"t":"set","p":"power","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":160,"wires":[[]]},{"id":"6514cba6.803734","type":"link in","z":"bb7c54cc.538af8","name":"Front Room AC - Mode","links":["7e7f7ac6.6d0f04","fb12b3aa.91861","fcbc66d2.dcd148"],"x":295,"y":900,"wires":[["dba5ae4.8189e5"]]},{"id":"7ecb692.7c9da98","type":"inject","z":"bb7c54cc.538af8","name":"Standby","topic":"frontNode1/ac/mode/set","payload":"Standby","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":1080,"wires":[["dba5ae4.8189e5"]]},{"id":"3ee68d49.5fe332","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"mode","payload":"mode","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":960,"wires":[["b76454d3.32c008"]]},{"id":"b948a6ff.357be8","type":"link out","z":"bb7c54cc.538af8","name":"Front Room BuildIR - Mode","links":["eacbab17.57e048"],"x":790.714282989502,"y":1027.1428260803223,"wires":[]},{"id":"7393d5f4.4cc63c","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"timerOffInBinary","payload":"timerOffInBinary","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1050,"y":1080,"wires":[["b76454d3.32c008"]]},{"id":"25c020b7.dec18","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"timerOnInBinary","payload":"timerOnInBinary","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1050,"y":1120,"wires":[["b76454d3.32c008"]]},{"id":"d68fdc39.382c5","type":"inject","z":"bb7c54cc.538af8","name":"dehumidify","topic":"","payload":"45,83060073000080000080000100720014000008001C","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":640,"wires":[["d97b3c41.d09dc"]]},{"id":"bf30fc60.b3cc8","type":"debug","z":"bb7c54cc.538af8","name":"initiate","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":210,"y":120,"wires":[]},{"id":"f8945591.add1b8","type":"debug","z":"bb7c54cc.538af8","name":"See Flow","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1300,"y":1380,"wires":[]},{"id":"a4dcf303.5e60d","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"swing","payload":"swing","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":1340,"wires":[["f8945591.add1b8"]]},{"id":"ac7905f5.f786e8","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"power","payload":"power","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":1460,"wires":[["f8945591.add1b8"]]},{"id":"3f76bf7.700044","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"dimmer","payload":"dimmer","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1030,"y":1300,"wires":[["f8945591.add1b8"]]},{"id":"a5078ab5.301e68","type":"inject","z":"bb7c54cc.538af8","name":"dimmer","topic":"","payload":"45,830600730000A8250000000000FE00000000000000","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1010,"y":520,"wires":[["d97b3c41.d09dc"]]},{"id":"ac2f67fc.a98748","type":"mqtt in","z":"bb7c54cc.538af8","name":"frontNode1/ac/swing_mode/set","topic":"frontNode1/ac/swing_mode/set","qos":"0","broker":"393ef689.1db1da","x":230,"y":1500,"wires":[["6ba145c1.f9d04c"]]},{"id":"6ba145c1.f9d04c","type":"switch","z":"bb7c54cc.538af8","name":"Swing Mode","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Dimmer On","vt":"str"},{"t":"eq","v":"Dimmer Off","vt":"str"},{"t":"cont","v":"Swing","vt":"str"},{"t":"eq","v":"iFeel On","vt":"str"},{"t":"eq","v":"iFeel Off","vt":"str"},{"t":"cont","v":"Power","vt":"str"},{"t":"eq","v":"Sleep On","vt":"str"},{"t":"eq","v":"Sleep Off","vt":"str"}],"checkall":"true","repair":false,"outputs":8,"x":470,"y":1420,"wires":[["5f62aa1a.73c114"],["ec814e59.beb52"],["1f532bce.ab2c34"],["5265e34.0c74e1c"],["e6c327c.11002d8"],["238edada.9d94f6"],["df801663.3f6348"],["ff18ca5e.52df58"]]},{"id":"ec814e59.beb52","type":"change","z":"bb7c54cc.538af8","name":"dimmer - Off","rules":[{"t":"set","p":"dimmer","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":689.9999847412109,"y":1295.7142343521118,"wires":[["5d17b72b.dbef98"]]},{"id":"d67022e4.53e1f","type":"link out","z":"bb7c54cc.538af8","name":"Front Room BuildIR - Fan","links":["eacbab17.57e048"],"x":755,"y":800,"wires":[]},{"id":"de3e7dd7.2753d","type":"change","z":"bb7c54cc.538af8","name":"Dry - On","rules":[{"t":"set","p":"ac-mode","pt":"flow","to":"dry","tot":"str"},{"t":"set","p":"mode","pt":"flow","to":"3","tot":"str"},{"t":"set","p":"power","pt":"flow","to":"1","tot":"str"},{"t":"set","p":"SetTemp","pt":"flow","to":"1110","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"0000000000000","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":820,"wires":[["d67022e4.53e1f"]]},{"id":"8732aafe.a0a518","type":"change","z":"bb7c54cc.538af8","name":"Fan Off - TimerOff","rules":[{"t":"set","p":"mode","pt":"flow","to":"4","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"0000000000000","tot":"str"},{"t":"set","p":"ac-mode","pt":"flow","to":"Standby","tot":"str"},{"t":"set","p":"SetTemp","pt":"flow","to":"1110","tot":"str"},{"t":"set","p":"power","pt":"flow","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":780,"wires":[["d67022e4.53e1f"]]},{"id":"ba36214d.d3292","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"fanspeed","payload":"fanspeed","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1030,"y":920,"wires":[["b76454d3.32c008"]]},{"id":"9eacb570.279028","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"ifeelIO","payload":"ifeelIO","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":1380,"wires":[["f8945591.add1b8"]]},{"id":"aea199c0.701568","type":"inject","z":"bb7c54cc.538af8","name":"test","topic":"frontNode1/ir/recieved","payload":"45,83060274000080000000000000F600110000080019","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":340,"wires":[["fb1f1e4.edbe8e"]]},{"id":"fb1f1e4.edbe8e","type":"function","z":"bb7c54cc.538af8","name":"AC Decode","func":"var irCode = msg.payload;\nvar ac_Mode = flow.get(\"ac-mode\");\nvar fanspeed = flow.get(\"fanspeed\");\nvar setTemp = flow.get(\"set-temp\")\nvar n = irCode.startsWith(\"45,\");\nif (n === true) {\nvar fan = irCode.slice(8,-36);\nvar tempHex = irCode.slice(9,-35);\nvar mode = irCode.slice(10,-34);\nvar Super = irCode.slice(13,-31);\nvar remote = irCode.slice(40,-4);\nvar timeStamp1 = irCode.slice(15,-29);\nvar timeStamp2 = irCode.slice(16,-28);\nvar timeStamp3 = irCode.slice(17,-27);\nvar timeStamp4 = irCode.slice(18,-26);\nvar timeStamp5 = irCode.slice(21,-23);\nvar timeStamp = 0;\nvar timerOn = \"\";\nvar timerOff = \"\";\nvar fanspeed = \"?\";\nvar acMode = \"?\";\nvar powerIO = \"false\";\nvar msg1 = { payload:fanspeed}; //fanspeed\nvar msg2 = { payload:setTemp}; //temp\nvar msg3 = { payload:ac_Mode}; //ac-mode\nvar msg4 = { payload:null};\nif (fan === \"0\" || fan === \"4\") fanspeed = \"auto\";\nif (fan === \"1\" || fan === \"5\") fanspeed = \"medium\";\nif (fan === \"2\" || fan === \"6\") fanspeed = \"high\";\nif (fan === \"3\" || fan === \"7\") fanspeed = \"low\";\nif (fan === \"4\" || fan === \"5\" || fan === \"6\" || fan === \"7\") powerIO = \"true\";\nif (mode === \"0\") acMode = \"heat\";\nif (mode === \"1\") acMode = \"Smart\";\nif (mode === \"2\" && Super === \"1\") acMode = \"Super\";\nif (mode === \"2\" && Super === \"0\") acMode = \"cool\";\nif (mode === \"3\") acMode = \"dry\";\nif (mode === \"4\") acMode = \"fan_only\";\nif (remote === \"8\") {\nif (tempHex === \"0\") temp = \"16\";\nelse if (tempHex === \"1\") temp = \"17\";\nelse if (tempHex === \"2\") temp = \"18\";\nelse if (tempHex === \"3\") temp = \"19\";\nelse if (tempHex === \"4\") temp = \"20\";\nelse if (tempHex === \"5\") temp = \"21\";\nelse if (tempHex === \"6\") temp = \"22\";\nelse if (tempHex === \"7\") temp = \"23\";\nelse if (tempHex === \"8\") temp = \"24\";\nelse if (tempHex === \"9\") temp = \"25\";\nelse if (tempHex === \"A\") temp = \"26\";\nelse if (tempHex === \"B\") temp = \"27\";\nelse if (tempHex === \"C\") temp = \"28\";\nelse if (tempHex === \"D\") temp = \"29\";\nelse if (tempHex === \"E\") temp = \"30\";\n} else {\n if (tempHex === \"0\") temp = \"18\";\nelse if (tempHex === \"1\") temp = \"19\";\nelse if (tempHex === \"2\") temp = \"20\";\nelse if (tempHex === \"3\") temp = \"21\";\nelse if (tempHex === \"4\") temp = \"22\";\nelse if (tempHex === \"5\") temp = \"23\";\nelse if (tempHex === \"6\") temp = \"24\";\nelse if (tempHex === \"7\") temp = \"25\";\nelse if (tempHex === \"8\") temp = \"26\";\nelse if (tempHex === \"9\") temp = \"27\";\nelse if (tempHex === \"A\") temp = \"28\";\nelse if (tempHex === \"B\") temp = \"29\";\nelse if (tempHex === \"C\") temp = \"30\";\nelse if (tempHex === \"D\") temp = \"31\";\nelse if (tempHex === \"E\") temp = \"32\"; \n}\nif (timeStamp1 === \"8\") {\n timeStamp = timeStamp+0;\n} else if (timeStamp1 === \"9\") {\n timeStamp = timeStamp+1;\n} else if (timeStamp1 === \"A\") {\n timeStamp = timeStamp+0;\n} else if (timeStamp1 === \"B\") {\n timeStamp = timeStamp+1;\n}\nif (timeStamp2 != \"0\") timeStamp = timeStamp+1;\nif (timeStamp3 === \"8\") {\n timerOff = \"true\"; \n timeStamp = timeStamp+0;\n} else if (timeStamp3 === \"9\") {\n timerOff = \"true\"; \n timeStamp = timeStamp+1;\n} else if (timeStamp3 === \"A\") {\n timerOff = \"true\"; \n timeStamp = timeStamp+1;\n} else if (timeStamp3 === \"B\") {\n timerOff = \"true\"; \n timeStamp = ttimeStamp+2;\n} else if (timeStamp3 === \"0\") {\n timerOff = \"false\"; \n timeStamp = timeStamp+0;\n} else if (timeStamp3 === \"1\") {\n timerOff = \"false\"; \n timeStamp = timeStamp+1;\n} else if (timeStamp3 === \"2\") {\n timerOff = \"false\"; \n timeStamp = timeStamp+1;\n} else if (timeStamp3 === \"3\") {\n timerOff = \"false\"; \n timeStamp = timeStamp+1;\n} \nif (timeStamp4 != \"0\") timeStamp = timeStamp+1;\n\nif (timerOff === \"true\") acMode = \"Standby\";\nif (fanspeed != \"?\") msg1 = { payload:fanspeed};\nif (ac_Mode != \"auto\" && timeStamp === 0) msg2 = { payload:temp};\nif (ac_Mode != \"auto\" && timeStamp === 0 ) msg3 = { payload:acMode};\nvar msg4 = { payload:powerIO+timeStamp+ac_Mode};\n\nreturn [msg1,msg2,msg3,msg4];\n}","outputs":4,"noerr":0,"x":410.00001525878906,"y":365.0000171661377,"wires":[["707d811c.55944","47b20bb3.9ffc84"],["707d811c.55944","e77addfa.7c89"],["707d811c.55944","38a1e682.dc2dca"],["707d811c.55944"]],"outputLabels":["fan","temp","mode",""]},{"id":"707d811c.55944","type":"debug","z":"bb7c54cc.538af8","name":"frontNode1 Processed","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":760,"y":420,"wires":[]},{"id":"541e11df.93ce9","type":"mqtt in","z":"bb7c54cc.538af8","name":"frontNode1/ir/recieved","topic":"frontNode1/ir/recieved","qos":"0","broker":"393ef689.1db1da","x":200,"y":440,"wires":[["6ed0d57e.6b756c"]]},{"id":"47b20bb3.9ffc84","type":"mqtt out","z":"bb7c54cc.538af8","name":"frontNode1/ac/fan/get","topic":"frontNode1/ac/fan/get","qos":"0","retain":"false","broker":"393ef689.1db1da","x":760,"y":300,"wires":[]},{"id":"38a1e682.dc2dca","type":"mqtt out","z":"bb7c54cc.538af8","name":"frontNode1/ac/mode/get","topic":"frontNode1/ac/mode/get","qos":"0","retain":"false","broker":"393ef689.1db1da","x":770,"y":380,"wires":[]},{"id":"e77addfa.7c89","type":"mqtt out","z":"bb7c54cc.538af8","name":"frontNode1/ac/temperature/get","topic":"frontNode1/ac/temperature/get","qos":"0","retain":"false","broker":"393ef689.1db1da","x":790,"y":340,"wires":[]},{"id":"6ed0d57e.6b756c","type":"debug","z":"bb7c54cc.538af8","name":"Front Room Receved","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":440,"y":420,"wires":[]},{"id":"5346388.6a572c8","type":"inject","z":"bb7c54cc.538af8","name":"auto cooling","topic":"","payload":"45,830602undefined200008000008000011C130014000008001C","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1030,"y":680,"wires":[["d97b3c41.d09dc"]]},{"id":"6e49013f.de89","type":"change","z":"bb7c54cc.538af8","name":"Smart","rules":[{"t":"set","p":"mode","pt":"flow","to":"1","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"0000000000000","tot":"str"},{"t":"set","p":"ac-mode","pt":"flow","to":"Smart","tot":"str"},{"t":"set","p":"Super","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":605.714282989502,"y":1119.1428260803223,"wires":[["b948a6ff.357be8"]]},{"id":"90c707df.d899e8","type":"inject","z":"bb7c54cc.538af8","name":"Smart","topic":"frontNode1/ac/mode/set","payload":"Smart","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":1120,"wires":[["dba5ae4.8189e5"]]},{"id":"ff65a9c6.8820a8","type":"change","z":"bb7c54cc.538af8","name":"Super","rules":[{"t":"set","p":"mode","pt":"flow","to":"2","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"0000000000000","tot":"str"},{"t":"set","p":"ac-mode","pt":"flow","to":"cool","tot":"str"},{"t":"set","p":"Super","pt":"flow","to":"1","tot":"str"},{"t":"set","p":"fanspeed","pt":"flow","to":"10","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":609.714282989502,"y":881.1428260803223,"wires":[["b948a6ff.357be8"]]},{"id":"acd1118c.68d35","type":"inject","z":"bb7c54cc.538af8","name":"Super","topic":"frontNode1/ac/mode/set","payload":"Super","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":920,"wires":[["dba5ae4.8189e5"]]},{"id":"df801663.3f6348","type":"change","z":"bb7c54cc.538af8","name":"sleep - On","rules":[{"t":"set","p":"sleep","pt":"flow","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":689.9999694824219,"y":1491.4284687042236,"wires":[["5d17b72b.dbef98"]]},{"id":"ff18ca5e.52df58","type":"change","z":"bb7c54cc.538af8","name":"sleep - On","rules":[{"t":"set","p":"sleep","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":689.9999694824219,"y":1531.4284687042236,"wires":[["5d17b72b.dbef98"]]},{"id":"5265e34.0c74e1c","type":"function","z":"bb7c54cc.538af8","name":"ifeelTemp2hex","func":"var temp = global.get(\"frontNode1.heatIndex\");\nvar temp = Math.round(temp)\nflow.set(\"ifeelIO\",true);\nmsg.topic = \"ifeel - start\";\n\nif (temp <= 16) hex = \"0\"\nelse if (temp === 17) hex = \"1\"\nelse if (temp === 18) hex = \"2\"\nelse if (temp === 19) hex = \"3\"\nelse if (temp === 20) hex = \"4\"\nelse if (temp === 21) hex = \"5\"\nelse if (temp === 22) hex = \"6\"\nelse if (temp === 23) hex = \"7\"\nelse if (temp === 24) hex = \"8\"\nelse if (temp === 25) hex = \"9\"\nelse if (temp === 26) hex = \"A\"\nelse if (temp === 27) hex = \"B\"\nelse if (temp === 28) hex = \"C\"\nelse if (temp === 29) hex = \"D\"\nelse if (temp >= 30) hex = \"E\"\n\nflow.set(\"ifeel\", \"1\"+hex);\nreturn msg","outputs":1,"noerr":0,"x":699.9999847412109,"y":1375.7142343521118,"wires":[["5d17b72b.dbef98"]]},{"id":"f1055854.424608","type":"function","z":"bb7c54cc.538af8","name":"ifeelTemp2hex","func":"var temp = global.get(\"frontNode1.heatIndex\");\nvar temp = Math.round(temp)\nvar ifeelIO = flow.get(\"ifeelIO\")||false;\nmsg.topic = \"ifeel - update\";\n\nif (temp <= 16) hex = \"0\"\nelse if (temp === 17) hex = \"1\"\nelse if (temp === 18) hex = \"2\"\nelse if (temp === 19) hex = \"3\"\nelse if (temp === 20) hex = \"4\"\nelse if (temp === 21) hex = \"5\"\nelse if (temp === 22) hex = \"6\"\nelse if (temp === 23) hex = \"7\"\nelse if (temp === 24) hex = \"8\"\nelse if (temp === 25) hex = \"9\"\nelse if (temp === 26) hex = \"A\"\nelse if (temp === 27) hex = \"B\"\nelse if (temp === 28) hex = \"C\"\nelse if (temp === 29) hex = \"D\"\nelse if (temp >= 30) hex = \"E\"\n\nif (ifeelIO === true) {\n flow.set(\"ifeel\", \"1\"+hex);\n msg.payload = \"1\"+hex;\n return msg\n}\nelse {\n flow.set(\"ifeel\", \"00\");\n}","outputs":1,"noerr":0,"x":699.9999847412109,"y":1575.7142343521118,"wires":[["5d17b72b.dbef98"]]},{"id":"e6c327c.11002d8","type":"change","z":"bb7c54cc.538af8","name":"ifeelIO - Off","rules":[{"t":"set","p":"ifeelIO","pt":"flow","to":"false","tot":"bool"},{"t":"set","p":"ifeel","pt":"flow","to":"00","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":689.9999847412109,"y":1415.7142343521118,"wires":[["5d17b72b.dbef98"]]},{"id":"48d55df2.cb76e4","type":"inject","z":"bb7c54cc.538af8","name":"10 min timer","topic":"","payload":"","payloadType":"date","repeat":"600","crontab":"","once":false,"onceDelay":0.1,"x":340,"y":1580,"wires":[["b8e7d8ff.18ba58"]]},{"id":"a47c4347.3b6f2","type":"comment","z":"bb7c54cc.538af8","name":"Set AC Swing Mode","info":"","x":450,"y":1260,"wires":[]},{"id":"26048f55.2255c","type":"inject","z":"bb7c54cc.538af8","name":"fan_only","topic":"frontNode1/ac/mode/set","payload":"fan_only","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":1040,"wires":[["dba5ae4.8189e5"]]},{"id":"c16c2474.05e468","type":"inject","z":"bb7c54cc.538af8","name":"Dimmer Off","topic":"frontNode1/ac/mode/set","payload":"Dimmer Off","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1300,"wires":[["6ba145c1.f9d04c"]]},{"id":"9ecedbf6.6b20e8","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"ifeel","payload":"ifeel","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":1420,"wires":[["f8945591.add1b8"]]},{"id":"d5b2e9b4.950ef8","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"sleep","payload":"sleep","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":1500,"wires":[["f8945591.add1b8"]]},{"id":"ed067d49.40006","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"Super","payload":"Super","payloadType":"flow","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1020,"y":1040,"wires":[["b76454d3.32c008"]]},{"id":"a6badf19.79896","type":"change","z":"bb7c54cc.538af8","name":"dimmer - Off","rules":[{"t":"set","p":"dimmer","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":200,"wires":[[]]},{"id":"9f51e1d1.2fb5","type":"comment","z":"bb7c54cc.538af8","name":"Reverse Engeneer Recived IR Code to set current state","info":"You can pic between the code as sent or as received by the IR recever. ","x":300,"y":300,"wires":[]},{"id":"70e1908e.57b22","type":"change","z":"bb7c54cc.538af8","name":"heat","rules":[{"t":"set","p":"mode","pt":"flow","to":"0","tot":"str"},{"t":"set","p":"timerOnInBinary","pt":"flow","to":"1000000000001","tot":"str"},{"t":"set","p":"timerOffInBinary","pt":"flow","to":"0000000000000","tot":"str"},{"t":"set","p":"ac-mode","pt":"flow","to":"heat","tot":"str"},{"t":"set","p":"Super","pt":"flow","to":"0","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":960,"wires":[["b948a6ff.357be8"]]},{"id":"48a671c8.88955","type":"inject","z":"bb7c54cc.538af8","name":"","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":200,"wires":[["b280802d.354cd"]]},{"id":"b280802d.354cd","type":"switch","z":"bb7c54cc.538af8","name":"frontOnline","property":"frontNode1Availability","propertyType":"flow","rules":[{"t":"eq","v":"online","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":200,"wires":[["47abb43e.0bdf1c"]]},{"id":"47abb43e.0bdf1c","type":"link out","z":"bb7c54cc.538af8","name":"Front 1min","links":["1ad017d0.a1dae8"],"x":455,"y":200,"wires":[]},{"id":"b8e7d8ff.18ba58","type":"switch","z":"bb7c54cc.538af8","name":"frontOnline","property":"frontNode1Availability","propertyType":"flow","rules":[{"t":"eq","v":"online","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":510,"y":1580,"wires":[["f1055854.424608"]]},{"id":"f134c9a5.ed0828","type":"change","z":"bb7c54cc.538af8","name":"Power - On","rules":[{"t":"set","p":"power","pt":"flow","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":430,"y":940,"wires":[[]]},{"id":"9925dd18.2d30b","type":"function","z":"bb7c54cc.538af8","name":"AC Mode","func":"mode = flow.get(\"ac-mode\")\nroomTemp = global.get(\"frontNode1.temperature\") || 50;\nsetTemp = msg.payload\nif (roomTemp > setTemp && mode !== \"auto\") { // cool\n return [msg,msg,msg,null];\n}\nelse if (roomTemp < setTemp && mode !== \"auto\") { // heat\n return [msg,msg,null,msg];\n}\nelse if (mode == \"auto\") { \n return [null,msg,null,null];\n}\nelse if (mode == \"cool\" || mode == \"heat\" ) { \n return [msg,msg,null,null];\n}\nelse{\n return [msg,msg,msg,null];\n}","outputs":4,"noerr":0,"x":601,"y":1720,"wires":[["9af96f2f.c5e87"],["6f6a9dbb.e55a94"],["47c51583.909efc"],["a8782b39.c4e608"]],"outputLabels":["temp2hex","set-temp","cool","heat"]},{"id":"feca9bb2.bdceb8","type":"link out","z":"bb7c54cc.538af8","name":"Front Room BuildIR - Temp","links":["eacbab17.57e048"],"x":916,"y":1660,"wires":[]},{"id":"fcbc66d2.dcd148","type":"link out","z":"bb7c54cc.538af8","name":"Front Room AC Temp - mode","links":["6514cba6.803734"],"x":916,"y":1780,"wires":[]},{"id":"47c51583.909efc","type":"change","z":"bb7c54cc.538af8","name":"cool","rules":[{"t":"set","p":"payload","pt":"msg","to":"cool","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":811,"y":1760,"wires":[["fcbc66d2.dcd148"]]},{"id":"a8782b39.c4e608","type":"change","z":"bb7c54cc.538af8","name":"heat","rules":[{"t":"set","p":"payload","pt":"msg","to":"heat","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":811.3571624755859,"y":1806.6071319580078,"wires":[["fcbc66d2.dcd148"]]},{"id":"6f79b389.e4cf8c","type":"mqtt in","z":"bb7c54cc.538af8","name":"frontNode1/ir/sent","topic":"frontNode1/ir/sent","qos":"0","broker":"393ef689.1db1da","x":190,"y":380,"wires":[["6ed0d57e.6b756c","fb1f1e4.edbe8e"]]},{"id":"393ef689.1db1da","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"NodeRED","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
My travel is over, and I'll try to get to this in the next few days as I deal with jet lag etc.
@redmusicxd @raducostea @josh929800 I've started coding up detailed support in this branch: https://github.com/markszabo/IRremoteESP8266/tree/whirlpool-detailed
Feel free to test it out as I add to it. Feedback welcome etc.
Thank you for the update... I did some testing with the IRrecvDumpV2 app and here are my findings:
powerToggle was not working - Fixed the mask
fanSpeed was not working - Fixed the mask
Temp was off for one of my remotes - added a check for the second remote
ir_Whirlpool.cpp
line 141: // Return the set temp. in deg C
uint8_t IRWhirlpoolAc::getTemp() {
uint8_t minTemp = kWhirlpoolAcMinTemp;
if (((remote_state[kWhirlpoolAcRemotePos] & kWhirlpoolAcRemoteMask) >> 2) == 2) minTemp = kWhirlpoolAcMinTemp1;
return ((remote_state[kWhirlpoolAcTempPos] & kWhirlpoolAcTempMask) >> 4) +minTemp;
}
ir_Whirlpool.h
line 41: const uint8_t kWhirlpoolAcFanMask = 0b00000011;
line 51: const uint8_t kWhirlpoolAcPowerToggleMask = 0b00000100;
line 59 (New): const uint8_t kWhirlpoolAcRemoteMask = 0b00001000;
line 60 (New): const uint8_t kWhirlpoolAcRemotePos = 18;
Results before the changes...
Remote 1
Note Temp was 19
Timestamp : 000027.938
Encoding : WHIRLPOOL_AC
Code : 83060130000092360000000000950002000008000A (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 0 (HEAT), Temp: 21C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 18:54, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x01, 0x30, 0x00, 0x00, 0x92, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x0A};
Note temp was 20
Timestamp : 000079.247
Encoding : WHIRLPOOL_AC
Code : 83060140000092370000000000E40002000008000A (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 0 (HEAT), Temp: 22C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 18:55, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x01, 0x40, 0x00, 0x00, 0x92, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x0A};
Remote 2
Timestamp : 000226.802
Encoding : WHIRLPOOL_AC
Code : 8306003000008B3500000000008E00020000000002 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 0 (HEAT), Temp: 21C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 11:53, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x30, 0x00, 0x00, 0x8B, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02};
Timestamp : 000234.013
Encoding : WHIRLPOOL_AC
Code : 8306004000008B350000000000FE00020000000002 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 0 (HEAT), Temp: 22C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 11:53, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x40, 0x00, 0x00, 0x8B, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02};
Note: Power Toggle did not trip.
Timestamp : 000350.621
Encoding : WHIRLPOOL_AC
Code : 83060540000093000000000000D600010000080009 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 0 (HEAT), Temp: 22C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:00, On Timer: Off, Off Timer: Off, Command: 1 (POWER)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x05, 0x40, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x09};
Note Power did not trip
Timestamp : 000362.698
Encoding : WHIRLPOOL_AC
Code : 83060540000093000000000000D600010000080009 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 0 (HEAT), Temp: 22C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:00, On Timer: Off, Off Timer: Off, Command: 1 (POWER)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x05, 0x40, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x09};
Worked as expected.
Timestamp : 000415.858
Encoding : WHIRLPOOL_AC
Code : 83060082000093010000000000100006000008000E (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:01, On Timer: Off, Off Timer: Off, Command: 6 (MODE)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x82, 0x00, 0x00, 0x93, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x0E};
Worked as expected
Timestamp : 000432.810
Encoding : WHIRLPOOL_AC
Code : 83060073000093010000000000E10006000008000E (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 3 (DRY), Temp: 25C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:01, On Timer: Off, Off Timer: Off, Command: 6 (MODE)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x73, 0x00, 0x00, 0x93, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x0E};
Worked as expected
Timestamp : 000460.094
Encoding : WHIRLPOOL_AC
Code : 83060174000093010000000000E70006000008000E (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 4 (FAN), Temp: 25C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:01, On Timer: Off, Off Timer: Off, Command: 6 (MODE)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x01, 0x74, 0x00, 0x00, 0x93, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x0E};
Worked as expected
Timestamp : 000470.208
Encoding : WHIRLPOOL_AC
Code : 83060050000093020000000000C10006000008000E (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 0 (HEAT), Temp: 23C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:02, On Timer: Off, Off Timer: Off, Command: 6 (MODE)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x50, 0x00, 0x00, 0x93, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x0E};
Fan Speed did not change (still 0 (AUTO))
Timestamp : 000476.601
Encoding : WHIRLPOOL_AC
Code : 830601820000930200000000001200110000080019 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:02, On Timer: Off, Off Timer: Off, Command: 17 (FANSPEED)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x01, 0x82, 0x00, 0x00, 0x93, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x11, 0x00, 0x00, 0x08, 0x00, 0x19};
Fan Speed did not change (still 0 (AUTO))
Timestamp : 000502.856
Encoding : WHIRLPOOL_AC
Code : 830602820000930200000000001100110000080019 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:02, On Timer: Off, Off Timer: Off, Command: 17 (FANSPEED)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x02, 0x82, 0x00, 0x00, 0x93, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x11, 0x00, 0x00, 0x08, 0x00, 0x19};
Fan Speed did not change (still 0 (AUTO))
Timestamp : 000567.154
Encoding : WHIRLPOOL_AC
Code : 830603820000930300000000001100110000080019 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:03, On Timer: Off, Off Timer: Off, Command: 17 (FANSPEED)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x03, 0x82, 0x00, 0x00, 0x93, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x11, 0x00, 0x00, 0x08, 0x00, 0x19};
worked as expected
Timestamp : 000591.354
Encoding : WHIRLPOOL_AC
Code : 83068382000093044000000000D60007000008000F (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: On, Light: On, Clock: 19:04, On Timer: Off, Off Timer: Off, Command: 7 (SWING)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x83, 0x82, 0x00, 0x00, 0x93, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x0F};
worked as expected
Timestamp : 000599.350
Encoding : WHIRLPOOL_AC
Code : 83068382000093044000000000D60007000008000F (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: On, Light: On, Clock: 19:04, On Timer: Off, Off Timer: Off, Command: 7 (SWING)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x83, 0x82, 0x00, 0x00, 0x93, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x0F};
did not change speed
Timestamp : 000609.300
Encoding : WHIRLPOOL_AC
Code : 83060B820000930400000000001E0003000008000B (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:04, On Timer: Off, Off Timer: Off, Command: 3 (SLEEP)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x0B, 0x82, 0x00, 0x00, 0x93, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x00, 0x08, 0x00, 0x0B};
Power was toggled but not indicated
Timestamp : 000621.569
Encoding : WHIRLPOOL_AC
Code : 83060102009093040000000000040004000008000C (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 18C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:04, On Timer: Off, Off Timer: Off, Command: 4 (SUPER)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x01, 0x02, 0x00, 0x90, 0x93, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x0C};
Power toggle not indicated
Timestamp : 000630.526
Encoding : WHIRLPOOL_AC
Code : 830607820000930400000000001200010000080009 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:04, On Timer: Off, Off Timer: Off, Command: 1 (POWER)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x07, 0x82, 0x00, 0x00, 0x93, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x09};
Worked as expected
Timestamp : 001020.715
Encoding : WHIRLPOOL_AC
Code : 830603820000B30B00000000003900000000080008 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 26C, Fan: 0 (AUTO), Swing: Off, Light: Off, Clock: 19:11, On Timer: Off, Off Timer: Off, Command: 0 (LIGHT)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x03, 0x82, 0x00, 0x00, 0xB3, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08};
Worked as expected
Timestamp : 001063.787
Encoding : WHIRLPOOL_AC
Code : 830600718000930B0000000000690017000008001F (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 1 (AUTO), Temp: 25C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:11, On Timer: Off, Off Timer: Off, Command: 23 (6THSENSE)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x71, 0x80, 0x00, 0x93, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x00, 0x17, 0x00, 0x00, 0x08, 0x00, 0x1F};
Worked as expected
Timestamp : 001123.652
Encoding : WHIRLPOOL_AC
Code : 830600710000938C00200000004E001D0000080015 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 1 (AUTO), Temp: 25C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:12, On Timer: Off, Off Timer: 00:32, Command: 29 (OFFTIMER)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x71, 0x00, 0x00, 0x93, 0x8C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x1D, 0x00, 0x00, 0x08, 0x00, 0x15};
Worked as expected
Timestamp : 001141.407
Encoding : WHIRLPOOL_AC
Code : 830600710000938D00A0173A00E20005000008000D (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 1 (AUTO), Temp: 25C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:13, On Timer: 23:58, Off Timer: 00:32, Command: 5 (ONTIMER)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x71, 0x00, 0x00, 0x93, 0x8D, 0x00, 0xA0, 0x17, 0x3A, 0x00, 0xE2, 0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x0D};
Worked as expected
Timestamp : 001164.175
Encoding : WHIRLPOOL_AC
Code : 830600710000938D00A0173A00E2000D0000080005 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 1 (AUTO), Temp: 25C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:13, On Timer: 23:58, Off Timer: 00:32, Command: 13 (IFEEL)
Library : v2.5.2
uint8_t state[21] = {0x83, 0x06, 0x00, 0x71, 0x00, 0x00, 0x93, 0x8D, 0x00, 0xA0, 0x17, 0x3A, 0x00, 0xE2, 0x00, 0x0D, 0x00, 0x00, 0x08, 0x00, 0x05};
_[Edited by crankyoldgit to remote the unneeded rawData info]_
I also tested the decoder and here is the result:
1.the temp is working as expected
2.mode is working as expected
3.Clock is just right
4.Fan Mode is always on AUTO
5.Swing is never On
6.Light is never On
I'll provide some data when i can.
@josh929800 Thanks for all of that. The data is super helpful. Yes. You are correct. I was off by a nibble in my calculations for Power and Fan speed. Fixed.
I'm intrigued by the difference in remotes. I'm glad you've found the distinguishing bit. Can you tell me what the model numbers are for the "Remote 1" and "Remote 2" please? I'll need to add a set/getModel() so we can handle temperatures correctly.
[Q] Do both remotes work correctly on all the units? i.e. Are they interchangeable?
@redmusicxd Ditto for you. Can you please tell me what the model number is for your remote? Swing appears to be working for one of @josh929800's remotes, so I'm going to need some state[21] lines from you with some descriptions to the Swing & Light(dim) behavior on yours to get it working for you.
@josh929800 I trimmed your earlier response. If the code is detecting it fine as Whirlpool etc and everything is _mostly_ okay, you don't need to include all the rawData stuff. Just the Mesg Desc.: and uint8_t state[] lines are all that's need when we are working out the sub-parts of the "working" protocol decode.
The Remote Model is: DG11J1-3A
Basic model detection has now been added to that branch.
@josh929800 Re: Temperature.Can you please test it with your "Remote 1", especially can you determine what the maximum temperature is for that remote model. I suspect it's 30C.
Remote 1 (18-32C) Saga by Tornado DG11J1-04 and Remote 2 (16-30C) DG11J1-91
All is working for me... 馃槂
DG11J1-91 (using new code)
Code : 830602020000821A0000000000980002000008000A (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 02:26, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
Code : 830682020000821D40000000005F0007000008000F (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: On, Light: On, Clock: 02:29, On Timer: Off, Off Timer: Off, Command: 7 (SWING)
Code : 830602020000A21D0000000000BF00000000080008 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: Off, Light: Off, Clock: 02:29, On Timer: Off, Off Timer: Off, Command: 0 (LIGHT)
Code : 830602E2000082210000000000430002000008000A (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 30C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 02:33, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
DG11J1-04
Code : 830600020000931600000000008700020000000002 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 18C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:22, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
Code : 830680020000931940000000004800070000000007 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 18C, Fan: 0 (AUTO), Swing: On, Light: On, Clock: 19:25, On Timer: Off, Off Timer: Off, Command: 7 (SWING)
Code : 830600020000B31A0000000000AB00000000000000 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 18C, Fan: 0 (AUTO), Swing: Off, Light: Off, Clock: 19:26, On Timer: Off, Off Timer: Off, Command: 0 (LIGHT)
Code : 830600E20000931B00000000006A00020000000002 (168 bits)
Mesg Desc.: Power toggle: Off, Mode: 2 (COOL), Temp: 32C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 19:27, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
Thanks @josh929800 However I think you were not using the correct code in the above results. You may have been still using your own/modified code. The code in that branch should have also listed the "Model:" info in the "Mesg Desc.:". I added that at the same time.
Eitherway, I've made some more changes to that branch which should report your new model info you supplied and handle max temp setting etc. Please try that out.
@josh929800 @raducostea @redmusicxd
I still have Smart, IFeel, Quiet, Turbo (Super?) etc support to still workout and add. Am I missing any other obvious/important modes?
I have the following buttons on my remotes: On/Off, Temp up, Temp down, Mode (toggles Cool, Dry, Fan, Heat), Fan (toggles Auto, High, Medium, Low), Swing, Sleep, Super, Smart, iFeel, Dimmer, Timer On, Timer Off, Clock (sets the remote time using temp up & down)
All is working for me...
Code : 830600020000890C00000000008700020000000002 (168 bits)
Mesg Desc.: Model: 1 (DG11J13A), Power toggle: Off, Mode: 2 (COOL), Temp: 18C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 09:12, On Timer: Off, Off Timer: Off, Command: 2 (TEMP)
Code : 830600020000A90E0000000000A500000000000000 (168 bits)
Mesg Desc.: Model: 1 (DG11J13A), Power toggle: Off, Mode: 2 (COOL), Temp: 18C, Fan: 0 (AUTO), Swing: Off, Light: Off, Clock: 09:14, On Timer: Off, Off Timer: Off, Command: 0 (LIGHT)
Code : 830600020000890F000000000084000D000000000D (168 bits)
Mesg Desc.: Model: 1 (DG11J13A), Power toggle: Off, Mode: 2 (COOL), Temp: 18C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 09:15, On Timer: Off, Off Timer: Off, Command: 13 (IFEEL)
Code : 830680020000891040000000005B00070000000007 (168 bits)
Mesg Desc.: Model: 1 (DG11J13A), Power toggle: Off, Mode: 2 (COOL), Temp: 18C, Fan: 0 (AUTO), Swing: On, Light: On, Clock: 09:16, On Timer: Off, Off Timer: Off, Command: 7 (SWING)
Code : 830600E20000899108850728005800020000000002 (168 bits)
Mesg Desc.: Model: 1 (DG11J13A), Power toggle: Off, Mode: 2 (COOL), Temp: 32C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 09:17, On Timer: 07:40, Off Timer: 08:05, Command: 2 (TEMP)
Code : 830600020000909800A0173A00870002000008000A (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 2 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 16:24, On Timer: 23:58, Off Timer: 00:32, Command: 2 (TEMP)
Code : 830680020000909A40A0173A00450007000008000F (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 2 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: On, Light: On, Clock: 16:26, On Timer: 23:58, Off Timer: 00:32, Command: 7 (SWING)
Code : 830600E20000909B00A0173A00640002000008000A (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 2 (COOL), Temp: 30C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 16:27, On Timer: 23:58, Off Timer: 00:32, Command: 2 (TEMP)
Code : 830601E20000909B00A0173A006500110000080019 (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 2 (COOL), Temp: 30C, Fan: 1 (HIGH), Swing: Off, Light: On, Clock: 16:27, On Timer: 23:58, Off Timer: 00:32, Command: 17 (FANSPEED)
Code : 830602E20000909B00A0173A006600110000080019 (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 2 (COOL), Temp: 30C, Fan: 2 (MEDIUM), Swing: Off, Light: On, Clock: 16:27, On Timer: 23:58, Off Timer: 00:32, Command: 17 (FANSPEED)
Code : 830601740000909C00A0173A00F40006000008000E (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 4 (FAN), Temp: 23C, Fan: 1 (HIGH), Swing: Off, Light: On, Clock: 16:28, On Timer: 23:58, Off Timer: 00:32, Command: 6 (MODE)
Code : 830600500000909C00A0173A00D10006000008000E (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 0 (HEAT), Temp: 21C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 16:28, On Timer: 23:58, Off Timer: 00:32, Command: 6 (MODE)
Code : 830600730000909D00A0173A00F30006000008000E (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 3 (DRY), Temp: 23C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 16:29, On Timer: 23:58, Off Timer: 00:32, Command: 6 (MODE)
Code : 83060B730000909E00A0173A00FB0003000008000B (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 3 (DRY), Temp: 23C, Fan: 3 (LOW), Swing: Off, Light: On, Clock: 16:30, On Timer: 23:58, Off Timer: 00:32, Command: 3 (SLEEP)
Code : 830601020090909F00A0173A00110004000008000C (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 2 (COOL), Temp: 16C, Fan: 1 (HIGH), Swing: Off, Light: On, Clock: 16:31, On Timer: 23:58, Off Timer: 00:32, Command: 4 (SUPER)
Code : 83060071800090A000A0173A004C0017000008001F (168 bits)
Mesg Desc.: Model: 2 (DG11J191), Power toggle: Off, Mode: 1 (AUTO), Temp: 23C, Fan: 0 (AUTO), Swing: Off, Light: On, Clock: 16:32, On Timer: 23:58, Off Timer: 00:32, Command: 23 (6THSENSE)
@josh929800 What does "Super" do on your device? The manual I have has "Jet" and "Super Silent" modes. I'm guessing the later. Correct?
Code for all of this is now in the master branch and will be included in the next release.
If you have any issues or feature requests, please create a new issue, as this issue is now closed (For the second time ;-)
v2.5.3 has been release. It includes the code discussed here.
Most helpful comment
Thank you for the update... I did some testing with the IRrecvDumpV2 app and here are my findings:
powerToggle was not working - Fixed the mask
fanSpeed was not working - Fixed the mask
Temp was off for one of my remotes - added a check for the second remote
ir_Whirlpool.h
Results before the changes...
_[Edited by crankyoldgit to remote the unneeded rawData info]_