
The LG Therma V is an air-to-water heat pump (5–16 kW, single- and three-phase, R-410A and R32 generations) for space heating, cooling and domestic hot water. The pre-2021 generation exposes a native Modbus RTU interface on the indoor unit’s main PCB via the CN_MODBUS(WH) connector, so TapHome connects directly over RS-485 — no external LG gateway is needed.
This template covers the integrated Modbus interface on the older R-410A line (HU091MR / HM091M / AHUW / AHNW) and the early R32 Hydrosplit / Monobloc range (HU121MRB / HU141MRB / HU161MRB U30, HU123MRB / HU143MRB / HU163MRB U30, HN0916T.NB1 + HU091MR.U44). The 2021+ Therma V generation uses the external PMBUSB00A Modbus gateway with different register addressing — for those units use the lg-thermav-2021 template instead.
Make sure you have the correct hardware before importing this template. Look at the indoor unit’s main PCB: if you see a white
CN_MODBUS(WH)connector and no external gateway box near the unit, you have the pre-2021 generation that this template targets. If LG installed a separate small white box labelledPMBUSB00Abetween the indoor unit and the BMS, use thelg-thermav-2021template — its register addressing is incompatible with this one.
Hardware connection
The integrated Modbus interface lives on the indoor main PCB. The TapHome ModbusRtuCCU wires directly to the CN_MODBUS(WH) connector on the PCB with a twisted pair (A+/B−). Alternatively, an RS-485-to-Ethernet gateway (Waveshare RS485-TO-ETH(B), Elfin EW11, etc.) can be placed between the heat pump and TapHome — the template’s IpAddress import parameter handles both RTU-direct and RTU-over-TCP topologies.
Indoor PCB connectors

The bottom-left panel shows the Main PCB (Indoor) — find the connector labelled CN_MODBUS (white housing, typically WH in the chassis colour code). Relevant connectors on the indoor PCB:
| Connector | Colour | Purpose |
|---|---|---|
| CN_MODBUS | WH | RS-485 Modbus bus — connects to TapHome. A+, B− (GND optional, not present on every chassis revision) |
| CN_REMO | GR | Wired remote controller — used to set the Modbus slave address |
| CN_EXT | BL | External DI/DO terminal block (dry contact, not used by template) |
RS-485 wiring
- A (BUS_A / D+) → A+ on the TapHome RS-485 bus
- B (BUS_B / D−) → B− on the TapHome RS-485 bus
- GND (where provided) → GND on the TapHome power supply
Use shielded twisted-pair cable (CAT5 STP or industrial RS-485). For runs longer than 10 m, terminate the far end with a 120 Ω resistor; TapHome Core has a built-in termination resistor on its BUS terminals, so it can sit at one end of the daisy chain without an external resistor. Connect the cable shield to ground at one end only.
A GND reference between the heat pump and the TapHome bus is recommended for runs longer than a few metres, even though LG does not include a dedicated GND pin on every chassis revision. If the chassis lacks a
CN_MODBUSGND, use the PE/earth bar in the indoor unit as the bonding point.
USB-RS485 and Ethernet gateway alternatives
When TapHome Core cannot be wired directly to the indoor unit, an RS-485 gateway in front of the heat pump is a verified topology:
| Gateway | Notes |
|---|---|
| Waveshare RS485-TO-ETH(B) | Most commonly used. Set to TCP server mode, default port 4196. Use a static IP / DHCP reservation. |
| Elfin EW11 (RS-485 to Wi-Fi) | Works but adds latency — not recommended for control writes. |
| USB-RS485 (FTDI / Genuine Prolific) | Reliable for direct Core connection at 9600 baud. |
| USB-RS485 (CH340 cheap dongles) | Often drops frames at 9600 baud — avoid for production. |
Configuration
Enabling Modbus communication
The Modbus interface is disabled by default and must be activated via two DIP switches on the indoor PCB. Power down the indoor unit before changing DIP positions — switches are read at boot and changes made with power on are ignored until the next reset.

Set the following positions on Option Switch 1 (SW1) on the indoor main PCB:
| Switch | Position | Function |
|---|---|---|
| SW1-1 | ON (up) | MODBUS — As Slave (default is As Master) |
| SW1-2 | ON (up) | MODBUS Function — Unified Open Protocol (default is REGINE, a proprietary LG protocol not compatible with standard Modbus clients) |
If SW1-2 is left in the default REGINE position, TapHome will see “Read Error 02” on every poll and no register reads will succeed. Both SW1-1 and SW1-2 must be ON before standard Modbus communication works.
After setting the DIP switches, cycle power on the indoor unit. The “Modbus Address” menu item only appears in the wired-remote service menu after a power cycle with SW1-1 = ON.
Setting the slave address
Set the slave address from the indoor unit’s wired remote controller:
| |
The address can be set from 1 to 247 (Modbus RTU specification). The template defaults to slave ID 1, matching the LG factory default.
On some early R-410A firmware revisions, the factory default slave ID is 2 rather than 1. If communication times out with the default
SlaveId=1import parameter, trySlaveId=2first before checking wiring or DIP switches.
Communication parameters
The integrated interface uses fixed Modbus RTU parameters — only the slave ID is configurable.
| Parameter | Value |
|---|---|
| Baud rate | 9600 |
| Data bits | 8 |
| Parity | None |
| Stop bits | 1 |
| Slave ID | 1 (default; 2 on some early firmware) |
TapHome import parameters
When importing the template into TapHome, set:
| Parameter | Value |
|---|---|
SlaveId | 1 (or the value configured on the wired remote) |
IpAddress | IP address of an RS-485-to-Ethernet gateway (e.g. Waveshare). Leave at the placeholder default when wiring TapHome Core directly to CN_MODBUS over RS-485. |
Device capabilities
The template exposes twelve devices grouped around the four control axes of the heat pump: mode and demand selection, setpoint and thermostat, status sensing, and quiet-mode operation. Module-level error monitoring decodes CH01–CH18 fault codes into TapHome error messages automatically.
Operating mode and demand
- Heating/Cooling Demand (
C:0) — main on/off switch for the unit. Setting it to ON is equivalent to pressing on/off on the wired remote. - Mode (
H:0) — selects the operating mode: Cooling (0), Auto (3) or Heating (4). Only those three values are valid per the LG protocol — the placeholder values 1, 2 and 5–9 visible in the multi-value list should not be selected. - Operating Mode (
A:1) — read-only outdoor-unit operation cycle: Standby/Off (0), Cooling (1) or Heating (2). Reflects the actual current cycle, which may differ briefly from the requested Mode above (e.g. during defrost or warm-up). - Quiet Mode (
C:2) — silent-mode toggle that reduces outdoor-unit fan and compressor noise for night-time operation.
Control method and thermostat
Control Method (
H:1) — selects which sensor the heat pump uses for regulation: Water Outlet (0, default), Water Inlet (1) or Room Air (2). This setting also drives the thermostat’s process-variable register selection.Thermostat (setpoint
H:2, current temperature dynamically chosen) — combined setpoint and current-temperature device. The setpoint is stored inH:2on a ×10 scale (°C × 10). The current-temperature read register is selected dynamically based on the Control Method:- Control Method = Room Air → reads
A:7(Room Air Temperature, Circuit 1) - Control Method = Water Inlet → reads
A:2(Water Inlet Temperature) - Control Method = Water Outlet (default) → reads
A:3(Water Outlet Temperature)
If the underlying sensor reads ≤ −64.9 °C, TapHome reports a “Nezapojený teplomer” (sensor disconnected) error and the thermostat returns NaN. The setpoint range depends on the Control Method — approximately 30–50 °C for Water Outlet heating (Circuit 1 Target Temperature). Narrower comfort ranges apply in Room Air mode and also depend on firmware revision and whether high-temperature DHW is enabled.
- Control Method = Room Air → reads
Status sensing
- Compressor (
D:3) — ON when the outdoor-unit compressor is producing heating or cooling output. - Circulation Pump (
D:1) — ON when the heat pump’s internal water pump is moving water through the primary circuit. - Defrost (
D:4) — ON while the outdoor unit is running a defrost cycle. Heating output is temporarily suspended while ice is melted from the outdoor coil — expect a short drop in leaving water temperature during this period.
Temperatures
- Water Inlet Temperature (
A:2) — return water temperature entering the heat pump from the heating circuit. - Water Outlet Temperature (
A:3) — leaving water temperature exiting the heat pump to the heating circuit. - Outdoor Temperature (
A:12) — outdoor air temperature measured by the outdoor unit’s ambient sensor.
All three temperatures are scaled Int16 ÷ 10 (°C) and polled every 15 seconds. A raw reading at or below −64.9 °C is treated as “sensor disconnected” — TapHome reports a “Nezapojené” error and the value returns NaN.
Error monitoring
The module-level read script polls the discrete alarm flag (D:13) and, when set, reads the active error code from A:0 and decodes it into a human-readable TapHome error. The following CH codes are mapped:
| Code | Meaning |
|---|---|
| CH01 | Air temperature sensor error |
| CH03 | No communication between wired remote controller and indoor unit |
| CH05 | Indoor unit and outdoor unit communication error |
| CH08 | Water tank temperature sensor error |
| CH09 | Indoor unit EEPROM error |
| CH11 | Indoor unit and inverter PCB communication error |
| CH12 | Inverter PCB error |
| CH13 | Problem in solar-thermal sensor |
| CH14 | Flow switch error — water flow below threshold |
| CH15 | Water pipe overheated |
| CH16 | Combined water inlet/outlet temperature sensor error |
| CH17 | Water inlet temperature sensor error |
| CH18 | Water outlet temperature sensor error |
Outdoor-PCB error codes (CH21 and above) are not exposed via the indoor Modbus interface — they are reported only via the LED blink pattern on the outdoor unit.
Troubleshooting
“Read Error 02” on every poll
Almost always caused by SW1-2 = OFF (REGINE proprietary protocol). Power off the indoor unit, set SW1-2 = ON (Unified Open Protocol), power back on and retry.
Slave never responds
- DIP switch
SW1-1 = OFF— the unit acts as a Modbus master instead of slave and never answers polls. Set to ON and reboot the PCB. - Wrong slave ID — try
SlaveId=2on early R-410A firmware before changing wiring. - “Modbus Address” menu item missing in the wired remote — DIP
SW1-1is not ON, or the PCB was not power-cycled after the change.
Setpoint writes silently rejected
On older NK3 firmware (pre-2018), only holding registers H:0 (Mode), H:1 (Control Method) and H:2 (Setpoint) are universally writable. Circuit-2 setpoints and the DHW target temperature are documented in the register map but the unit may ignore writes to them — they are intentionally not exposed by this template for that reason.
Frame drops with cheap USB-RS485 adapters
CH340-based dongles often miss frames at 9600 baud due to OS scheduling and inter-character timing. Switch to an FTDI- or Prolific-based adapter, or move to a Waveshare RS485-TO-ETH gateway (RTU-over-TCP via the IpAddress import parameter) for production deployments.
Sensor reports “Nezapojené” / “Nezapojený teplomer”
The raw temperature register returned a value at or below −64.9 °C, indicating the underlying LG sensor is disconnected or faulty. Check the sensor wiring at the relevant indoor-PCB connector (CN_ROOM1 for room air, the leaving/return water sensors on the indoor unit) or the outdoor unit’s ambient sensor for the outdoor temperature device.
