Skip to content

Voltas AC Remote IR Mapping #1238

@manj9501

Description

@manj9501

Hola @crankyoldgit et al.
I have put in a day's work to try and reverse engineer my AC's IR Remote mapping and after necessary following the steps given in the two wiki articles explaining how to do so, I've come up with the following results:

Voltas AC map (Model no: 122LZF 4011252 Window AC)
(MSBF)
  
byte 0 
        b0 = Horizontal Swing(1 = On, 0 = Off) (Works with all Basic Modes) (not compatible with my AC)
	b7-1 = UNKNOWN, typically 0b1111100
	(Becomes Don't Care with value 0b00110011(0x33) if any other parameter is changed, reason unknown)

byte 1
	b3-0 = Basic Modes
                1000 (8) = Chill 
                0100 (4) = Dry (fixed Fan speed(Low), fixed Temperature(24C))
                0010 (2) = Cool
		0001 (1) = Fan	(Fixed fan speed(Hi), Temperature = Cool mode temperature)
	b4 = UNKNOWN, typically 0
	b7-5 = Fan speed
		100 (1) = Low
		010 (2) = Mid
		001 (4) = Hi
		111 (7) = Auto
		
byte 2
	b2-0 = Vertical Swing (Works with all Basic Modes)
		000 (1) = Off
		111 (7) = On
	b3 = WiFi bit(Toggles between 0 and 1 upon pressing the button labelled 'WiFi') (not compatible with my AC)
	b4 = UNKNOWN, typically 0
	b5 = Turbo mode(1 = On, 0 = Off) (Works only with Chill mode)
	b6 = Sleep mode(1 = On, 0 = Off) (Works only with Chill mode)
	b7 = Power Status(1 = On, 0 = Off)
	
byte 3
       b3-0 =  Temperature
		0000 (0) = 16C
		0001 (1) = 17C
		0010 (2) = 18C
		...
		1101 (13) = 29C
		1110 (14) = 30C
	b5-4 = UNKNOWN, typically 0b01
	b6 = Energy Saver mode (1 = On, 0 = Off) (Works only with Chill mode)
	b7 = TEMP bit, goes HIGH for a few seconds upon pressing TEMP button, then changes back to LOW automatically and remote sends the message(not compatible with my AC)
	
 byte 4 
	b0 = Timer 24 Hr. bit (Works for both On and Off timer)
		0 = Time is 24 Hr.
		1 = Otherwise
	b6-1 = UNKNOWN, typically 0b011101
        b7 = On Timer 12+(byte 7 lower nibble) bit (works in conjuction with byte 7)
		0 = On Time is 24 Hr or Time < 12 Hrs. 
		1 = On Time =>12 Hr.
	
byte 5
       b0 = Timer 24 Hr. bit (Works for both On and Off timer)
		0 = Time is 24 Hr.
		1 = Otherwise
	b6-1 = UNKNOWN, typically 0b011101
	b7 = Off timer 12+(byte 7 upper nibble) bit (works in conjuction with byte 7)
		0 = Off Time is 24 Hr or Off Time < 12 Hrs. 
		1 = Off Time =>12 Hr.
		
byte 6 = UNKNOWN, typically 0b00111011(0x3B)

byte 7 
	b3-0 = On Timer bits (works in conjuction with byte 4)
		0000 (0) = 12 Hr. / 24Hr.
		0001 (1) = 1 Hr. / 13Hr.
		0010 (2) = 2 Hr. / 14Hr.
		...
		1010 (10) = 10 Hr. / 22Hr.
		1011 (11) = 11 Hr. / 23Hr.
	b7-4 = Off Timer bits (works in conjuction with byte 5)
		0000 (0) = 12 Hr. / 24Hr.
		0001 (1) = 1 Hr. / 13Hr.
		0010 (2) = 2 Hr. / 14Hr.
		...
		1010 (10) = 10 Hr. / 22Hr.
		1011 (11) = 11 Hr. / 23Hr.
		
byte 8
	b4-0 = UNKNOWN, typically 0b00000
	b5 = Lamp bit(1 = On, 0 = Off) (not compatible with my AC)
	b6 = Off Timer status (1 = Activated, 0 = Deactivated)
	b7 = On Timer status (1 = Activated, 0 = Deactivated)
        (On Timer can only be activated when the AC has been powered OFF from the remote, Off Timer can only be activated when the AC has been powered ON from the remote,)
	
byte 9 = Check byte
	Calcuted using the following formula:
	checksum = ~(Sum of all preceding bytes)&0xFF

My setup is a NodeMCU connected to an IR receiver I salvaged from a digital photo frame.
20200814_160509

A few of the IRrecvDumpV3 outputs after modifying the library are given below:

  1. Dry Mode, No Swing, No Lamp, No Timer
Library   : v2.7.9

Protocol  : VOLTAS
Code      : 0x338488183B3B3B1100E6 (80 Bits)
uint16_t rawData[161] = {1002, 584,  1000, 586,  1000, 2568,  1002, 2570,  1002, 586,  998, 588,  1000, 2568,  1002, 2570,  1002, 2572,  1002, 584,  1002, 586,  1000, 584,  1000, 586,  1002, 2568,  1004, 584,  1000, 586,  1002, 2568,  1002, 584,  1002, 584,  1004, 584,  1000, 2568,  1002, 586,  1000, 586,  998, 590,  998, 584,  1002, 584,  1000, 586,  1000, 2570,  1002, 2568,  1004, 584,  1000, 584,  1002, 584,  1002, 582,  1004, 584,  1002, 2568,  1002, 2570,  1004, 2570,  1000, 586,  1002, 2568,  1004, 2568,  1006, 584,  1000, 584,  1002, 2568,  1002, 2570,  1002, 2568,  1002, 586,  1002, 2570,  1000, 2570,  1002, 588,  998, 586,  1000, 2568,  1004, 2568,  1004, 2568,  1002, 588,  998, 2570,  1002, 2568,  1004, 586,  1002, 584,  1000, 586,  1000, 2570,  1000, 586,  1000, 584,  1002, 586,  1000, 2568,  1004, 584,  1000, 586,  1000, 586,  1002, 584,  1002, 586,  1000, 586,  1000, 586,  1000, 586,  1000, 2568,  1002, 2568,  1002, 2568,  1004, 586,  1000, 584,  1000, 2570,  1004, 2568,  1004, 584,  1002};  // VOLTAS
uint8_t state[10] = {0x33, 0x84, 0x88, 0x18, 0x3B, 0x3B, 0x3B, 0x11, 0x00, 0xE6};
  1. Chill mode(24C), no swing, Fan Auto, Turbo ON, No Timer, No lamp
Library   : v2.7.9

Protocol  : VOLTAS
Code      : 0x33E8A8183B3B3B110062 (80 Bits)
uint16_t rawData[161] = {1014, 574,  1012, 574,  1012, 2558,  1014, 2558,  1014, 574,  1014, 574,  1012, 2558,  1014, 2558,  1014, 2558,  1014, 2558,  1014, 2556,  1014, 574,  1012, 2558,  1014, 574,  1012, 574,  1012, 574,  1012, 2558,  1014, 572,  1014, 2558,  1014, 574,  1010, 2558,  1014, 574,  1012, 574,  1012, 574,  1012, 574,  1012, 572,  1014, 572,  1012, 2558,  1014, 2556,  1014, 572,  1036, 550,  1036, 550,  1012, 574,  1012, 576,  1010, 2556,  1038, 2534,  1038, 2534,  1016, 572,  1038, 2530,  1014, 2558,  1038, 548,  1012, 574,  1034, 2534,  1016, 2556,  1038, 2534,  1014, 574,  1012, 2558,  1014, 2558,  1014, 574,  1012, 572,  1012, 2558,  1014, 2556,  1014, 2558,  1014, 574,  1012, 2556,  1038, 2534,  1014, 572,  1012, 574,  1012, 574,  1036, 2534,  1012, 574,  1012, 574,  1012, 574,  1036, 2532,  1016, 572,  1014, 572,  1012, 574,  1012, 574,  1012, 572,  1014, 572,  1012, 574,  1012, 572,  1012, 574,  1012, 2556,  1014, 2556,  1014, 574,  1010, 574,  1012, 574,  1012, 2558,  1014, 572,  1014};  // VOLTAS
uint8_t state[10] = {0x33, 0xE8, 0xA8, 0x18, 0x3B, 0x3B, 0x3B, 0x11, 0x00, 0x62};

Also I've built an IR sender circuit and can confirm that the AC is responding to the change in parameters, with the correct checksum only.

Can you please confirm if I'm on the right path, so I can proceed towards the coding part, which admittedly, doesn't happen to be my strongest suit.

Voltas Remote pic:
Voltas AC Remote

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions