LG AC Wired Controller integration via ESPHome/ESP32

Whenever the LG indoor unit is turned off, it appears that changing temperature or fan speed doesn’t work.
I can change for example fan speed, but it automatically reverts back to it’s old setting.

Only when the unit is powered on, the change in setting is accepted and preserved.

Is that to be expected? The unit is an AA12SP.NS1 artcool dual inverter.

[edit]
Already confirmed by the topic starter: yes, that is to be expected.

I have some spare tiny PCB, could ship in Europe.

Hi everyone,

I’m looking for some help because I haven’t received any response on GitHub. I also found the LG PREMTB100 control project by JanM321 for ESP. The published project reverse-engineered the climate control. I have an LG LZ-H035GBA5 heat-recovery ventilator with the same PREMTB100 wall controller, which works with the same 13-bit commands – only the commands themselves differ compared to the AC.

Apparently, DanceAddiction has already reverse-engineered these on GitHub and promised to publish them, but since the project was opened over a year ago, he hasn’t responded, and the code hasn’t been shared. I’ll probably have to figure it out myself.
Project link:

Since I’m not very experienced with C++, I tried using ChatGPT/Grok to write a YAML that would allow me to control the 5 necessary functions. However, I either get a checksum error or nothing happens at all.

What I need:

  • Fan: low / medium / high
  • Heat recovery
  • Bypass

I only need these 5 commands in a simple YAML. No temperature or CO₂ sensors or any other extras – just these 5 functions so I can finally integrate it with Home Assistant.

I found these on JanM321’s forum, which contain the commands for my ventilator:

`fan speed low: 
[14:30:25.595][D][lg-controller:950]: received 03.60.80.00.00.00.00.00.00.00.00.C6.B0 (13) 
[14:30:25.602][E][lg-controller:960]: invalid checksum03.60.80.00.00.00.00.00.00.00.00.C6.B0 (13) 
[14:30:25.603][D][lg-controller:950]: received 03.60.40.00.00.00.00.00.00.00.00.06.B0 (13)
[14:30:25.604][E][lg-controller:960]: invalid checksum 03.60.40.00.00.00.00.00.00.00.00.06.B0 (13) 
[14:30:25.608][D][lg-controller:950]: received 03.60.20.00.00.00.00.00.00.00.00.66.B0 (13) 
 
  Heat Exchange:  
13.666][D][lg-controller:1358]: update 
[14:35:13.669][D][lg-controller:950]: received E0.01.00.00.01.00.27.00.20.9A.07.2B.A8 (13) 
[14:35:13.672][E][lg-controller:960]: invalid checksum E0.01.00.00.01.00.27.00.20.9A.07.2B.A8 (13) 
[14:35:13.675][D][lg-controller:950]: received 4A.00.00.80.00.81.93.00.80.04.80.DF.A8 (13) 
[14:35:13.678][E][lg-controller:960]: invalid checksum 4A.00.00.80.00.81.93.00.80.04.80.DF.A8 (13) 
[14:35:13.681][D][lg-controller:950]: received 4A.00.00.80.00.81.93.00.80.04.80.DF.AC (13) 
[14:35:13.684][E][lg-controller:960]: invalid checksum 4A.00.00.80.00.81.93.00.80.04.80.DF.AC (13) 
[14:35:13.687][D][lg-controller:950]: received 00.00.00.00.00.00.00.00.27.00.00.86.AC (13)
 
 Auto Mode:  
49.674][D][lg-controller:1358]: update 
[14:35:49.680][D][lg-controller:950]: received 00.00.00.00.00.00.00.00.27.00.00.86.B0 (13) 
[14:35:49.682][E][lg-controller:960]: invalid checksum 00.00.00.00.00.00.00.00.27.00.00.86.B0 (13) 
[14:35:49.684][D][lg-controller:950]: received 02.20.20.00.00.00.00.00.00.00.00.A7.B0 (13) 
[14:35:49.687][E][lg-controller:960]: invalid checksum 02.20.20.00.00.00.00.00.00.00.00.A7.B0 (13) 
[14:35:49.690][D][lg-controller:950]: received 02.20.20.00.00.00.00.00.00.00.00.A7.D0 (13) 
[14:35:49.693][E][lg-controller:960]: invalid checksum 02.20.20.00.00.00.00.00.00.00.00.A7.D0 (13) 

 Bypass (Mode 3): 
[14:36:37.693][D][lg-controller:1358]: update 
[14:36:37.694][D][lg-controller:950]: received 00.00.00.00.00.00.00.00.27.00.00.86.AC (13) 
[14:36:37.698][E][lg-controller:960]: invalid checksum 00.00.00.00.00.00.00.00.27.00.00.86.AC (13) 
[14:36:37.700][D][lg-controller:950]: received 00.00.00.00.00.00.00.00.27.00.00.86.AE (13) 
[14:36:37.704][E][lg-controller:960]: invalid checksum 00.00.00.00.00.00.00.00.27.00.00.86.AE (13) 
[14:36:37.707][D][lg-controller:950]: received 80.36.00.00.00.00.00.02.8E.13.03.5F.AE (13) 
[14:36:37.710][E][lg-controller:960]: invalid checksum 80.36.00.00.00.00.00.02.8E.13.03.5F.AE (13) 
[14:36:37.714][D][lg-controller:950]: received 80.36.00.00.00.00.00.02.8E.13.03.5F.B0 (13)
[14:36:37.718][E][lg-controller:960]: invalid checksum 80.36.00.00.00.00.00.02.8E.13.03.5F.B0 (13) 
    
ON: 
[14:38:19.718][D][lg-controller:1358]: update 
[14:38:19.722][D][lg-controller:950]: received 00.00.00.00.00.00.00.00.00.00.8E.30.B0 (13) 
[14:38:19.725][E][lg-controller:960]: invalid checksum 00.00.00.00.00.00.00.00.00.00.8E.30.B0 (13) 
[14:38:19.729][D][lg-controller:950]: received 03.60.20.00.00.00.00.00.00.00.00.66.B4 (13) 
[14:38:19.732][E][lg-controller:960]: invalid checksum 03.60.20.00.00.00.00.00.00.00.00.66.B4 (13)[14:38:19.736][D][lg-controller:950]: received FF.01.00.00.01.00.27.00.40.9A.07.E8.B4 (13) [14:38:19.739][E][lg-controller:960]: invalid checksum FF.01.00.00.01.00.27.00.40.9A.07.E8.B4 (13) 

OFF:  
14:39:01.734][D][lg-controller:1358]: update 
[14:39:01.740][D][lg-controller:950]: received 00.00.00.00.00.00.00.00.27.00.00.86.B0 (13) 
[14:39:01.740][E][lg-controller:960]: invalid checksum 00.00.00.00.00.00.00.00.27.00.00.86.B0 (13) 
[14:39:01.743][D][lg-controller:950]: received 01.60.20.00.00.00.00.00.00.00.00.64.B0 (13) 
[14:39:01.746][D][lg-controller:950]: received 01.60.20.00.00.00.00.00.00.00.00.64.B0 (13)

To reward anyone who can help, I can offer 4 JLCPCB-made panels for FeatherS3 and 1 unused LG PWFMDD200 Wi-Fi module, with shipping within the EU. Free

Also, we found this regarding my ventilator:

| `XXXX_0000` | Source of the message<br>0xA: master controller (for example 0xA8 or 0xAA)<br>0xC: AC unit (for example 0xC8 or 0xC9)<br>0x2: slave controller |
| `0000_X000` | Product type <br>0: ventilation<br>1: AC|
| `XXX0_0000` | Source of the message<br>1: slave controller (for example `0x28` or `0x2A`)<br>5: master controller (for example `0xA8` or `0xAA`)<br>6: unit (for example `0xC8` or `0xC9`) |
| `000X_X000` | Product type <br>0: ventilation<br>1: AC<br>2: heat exchanger?|
| `0000_0XXX` | Message type (0-7)<br>0: status message<br>1: capabilities message<br>2: settings<br>... see below ... |

For example 0xC8 means it's a status message sent by the AC unit.
The two "product type" bits are always set to `01` for normal HVAC units. This means the (master) controller sends messages with first byte `0xA8` to `0xAF` and the AC unit will send messages `0xC8` to `0xCF`. You can use this to identify the source of a message.

Bit 0x8 is always set for normal HVAC units. LG controllers will send messages with this bit cleared only when connected to a ventilation product. This documentation and the ESPHome controller only cover AC units.
For instance, `0xC8` is a status message sent by the AC unit. `0xAA` is a settings message sent by the controller.

The last byte of each message is a checksum, computed by adding up the other bytes and XOR'ing with 0x55.
LG controllers send messages with the product type field set to 0 or 2 only when connected to a ventilation product responding with such messages. For example if a heat exchanger unit responds with `0xD0` messages, the LG controllers will switch from sending `0xA8` to `0xB0` messages. This documentation and the ESPHome controller only cover AC units.

The last byte of each message is a checksum, computed by adding up the other bytes and XOR'ing with `0x55`.

I can help you decode the data, PM me.

[14:35:13.687][D][lg-controller:950]: received 00.00.00.00.00.00.00.00.27.00.00.86.AC (13)
[14:35:49.680][D][lg-controller:950]: received 00.00.00.00.00.00.00.00.27.00.00.86.B0 (13)

[14:35:13.675][D][lg-controller:950]: received 4A.00.00.80.00.81.93.00.80.04.80.DF.A8 (13)
[14:35:13.681][D][lg-controller:950]: received 4A.00.00.80.00.81.93.00.80.04.80.DF.AC (13)

They are same data but with difference checksum, it is not right. May be it cause by your hardware problem.

Hi all, does anyone have four spare tiny PCBs they could ship to Europe?

You can send me message or chat with me on the Facebook group

Hello, i need one with shipping to Poland

Kupię jedno PCB jeżeli ktoś ma dostępne i działające.

Hi… I managed to disassebly my LG aircon today indoor model USNW126HSA1 (Z12EM.NSH) but there is no green JST connector for CN-REMO…


Doesnt show anything on the diagram of the wiring sticker either!

Also, all the connectors are being used!
Is anybody in the same situation? Anyway around this ?

It seems that CN-LINK is the only available port in my LG pcb!
No CN-REMO!
Did you make any progress on this?
Anyone managed to setup an actual interface?

for any one that is not afraid of soldering smd ic’s (SOC8 package), this also good option for a pcb:

https://nl.aliexpress.com/item/1005009551995646.html?spm=a2g0o.productlist.main.2.6b23kimckimcT7&algo_pvid=123e8e8d-7522-453c-a51e-ca071e421893&algo_exp_id=123e8e8d-7522-453c-a51e-ca071e421893-1&pdp_ext_f={"order"%3A"5"%2C"eval"%3A"1"%2C"fromPage"%3A"search"}&pdp_npi=6%40dis!EUR!13.46!12.59!!!15.49!14.49!%40211b61d017723881867111497ece0d!12000049443009297!sea!NL!0!ABX!1!0!n_tag%3A-29910%3Bd%3Ab92e2393%3Bm03_new_user%3A-29895%3BpisId%3A5000000197833545&curPageLogUid=qFhs09rQWhsK&utparam-url=scene%3Asearch|query_from%3A|x_object_id%3A1005009551995646|_p_origin_prod%3A

choose the 3.3v version, you can power the esp from it and only thing that has to be replaced is the LIN ic, I used a NXP TJA1027, works like a charm

This indoor unit too old, it does not has CN_REMO so it not compatible

Hello everyone :slight_smile:
I recently purchased a house with a LG MULTI V system installed on the roof, along with LG HVAC thermostats in every room.
Initially, I was leaning towards the “esphome-lg-controller” route but then found out that someone reversed the LGAP protocol of the outdoor unit ( esphome-lgap)

I opened up the Multi V pcb panel board but I can’t seem to find a header connected to CEN_A and CEN_B on the pcb or CN_CENTRAL for that matter.

Both pins seem to be present on the PCB (see pictures below) but I was expecting a full header, that wouldn’t require any soldering. I generally don’t mind soldering but, this is an expensive PCB, and I would refrain to do so, so not to void the warranty.

Does anyone have experience with this specific system? Is there a better way or should I just use those pins on the PCB (CEN_A, CEN_B, 12VA, GND_DIGITAL)

Thank you


Yes, there is no CN-REMO but there is a CN_LINK. In my case its a 7 pin header

Is there a way to program the HVAC with the ESP32 kit? i have the device up and running but need to program in HA i.e automatic turn ON/OFF within an Automation/scene

Hi. Has anyone had any success using this project on boards with an unsoldered CN_REMO header? I have an LG LS09GQ. Any chance?

Stumbled across this post and during the regular cleaning of the AC took the time to look for the CN-REMO, it’s there!

However, I do not have any experience with PCBway and the other platform to get the hardware sorted. Is there anyone in NL that has 2 boards available for purchase?