LG Therma V heat pump modbus control

Nice, thanks!

The heat pump is part of test setup, using multiple heating units. After wasting time on the UI and reading forums, I’ve asked ChaptGPT, after a small issue with indentation it wrote the following lines for me to create a schedule. Works great!

automation:
  - alias: "Turn On LG Therma V Weekdays"
    trigger:
      - platform: time
        at: "04:00:00"
    condition:
      - condition: time
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri
    action:
      - service: switch.turn_on
        entity_id: switch.lg_therma_v_verwarming  # Replace with your actual switch entity ID

  - alias: "Turn Off LG Therma V Weekdays"
    trigger:
      - platform: time
        at: "18:00:00"
    condition:
      - condition: time
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri
    action:
      - service: switch.turn_off
        entity_id: switch.lg_therma_v_verwarming  # Replace with your actual switch entity ID

  - alias: "Turn Off LG Therma V at Midnight"
    trigger:
      - platform: time
        at: "00:00:00"
    action:
      - service: switch.turn_off
        entity_id: switch.lg_therma_v_verwarming  # Replace with your actual switch entity ID

Hello. I see I am not the only one having issues with the LG Therma V modbus integration. I am seriously tearing my hair out with this. I have tried every combination from all the advice I have seen, and I still continue to see the same error, and I have never seen a response coming from the HP “[homeassistant.components.modbus.modbus] Pymodbus: waveshare1: Modbus Error: [Input/Output] No Response received from the remote slave/Unable to decode response”

I have stripped down my modbus yaml to the bear minimum to read one item. I have tried various combinations of the dip switches (Switch 1, 1 and 2), and Modbus addresses etc.

In my manual (for LG HU121/HN161) I see this for the option switch 1 :

I have also tried some Modbus scanning software, but all show timeout as if there is no signal at all from the heat pump (I can connect to the Waveshare module via TCP)

Any pointers at all would be greatly received!!

Thanks a lot

In my case the firmware was out of date, I tried everything and modbus was not working.

It talked with the LG directly. An engineer came to upgrade the FW and solve the issue.

P.S He told me he just upgraded the FW but I remember that he replaced also something on the PCB. Free of charge!

1 Like

Thanks for the heads up. Quite annoying if this is the case, but I suspect it might be. Do you have the details for contacting LG directly please?

I’m sorry to hear that, it’s so annoying when you try everything with no result…

Have you ever tried to connect another modbus device? Just to make 100% sure you have that part up and running?

For me that was what helped me the most the end.

Hi Peter,
Do you have a picture of how you mounted the waveshare modbus in you LG therma V heatpump?
I am interested how you managers the powersupply? Dit you use the powersupply of the LG?

By any chance, can someone please verify pitch of the jst connector for wifi module. It is hard for me to measure it, and this heatpump is not even at my home, so I cannpt easily just try if is is 1.5 or 2.0mm

I’ve got the LG Therma V modbus connection running for a while now and all seemed to be fine.

Except for… a couple of days ago, I suddenly lost an entity (sensor.water_outlet_temp)

I have not changed anything in the modbus.yaml file.
When looking in settings/device & services/entities, the entity doesn’t show up either.

This is the content of the modbus.yaml file for both in and out temp:
- name: water_inlet_temp
scale: 0.1
precision: 1
scan_interval: 5
address: 2
slave: 1
unit_of_measurement: °C
input_type: input

  - name: water_outlet_temp
    scale: 0.1
    precision: 1
    scan_interval: 5
    address: 3
    slave: 1
    unit_of_measurement: °C
    input_type: input

Is there anybody else who noticed this?

I can’t imagine it’s something on the LG side as that’s not being updated (and I’ve reset the heatpump to make sure it wasn’t some sort of glitch) but whatever I do, the value is gone.

It does show on the remote control panel, so the sensor in the LG Therma is functional… I just can’t get my head around the sensor disappearing all of a sudden.

Anyone else seen this? Any solution?

Same here!
I’ve just opened a new topic here, not realizing you have same problem!
The issue is that same registar is used by your climate enitity as well, showing you outlet temp from heating pump. If you temporarily disable climate entity in modbus configuration you will notice that sensor will start working again!
Meaning there is an issue accessing same register twice. That came from new 2024.3 version.

BR,
Vuk

I’ve brought up an issue here, unfortunatelly the developer hasn’t been very helpful :man_shrugging:: Lost Modbus Sensor after upgrade to Core 2024.3 · Issue #112607 · home-assistant/core · GitHub

Would anyone be able to provide guidance on configuring this using “automation”?

I’m having the same issue, and to be honest I’m not experienced enough to know what do change.

I was using this yaml Mastering Modbus: Heat Pump Integration with Home Assistant – Rod McBain

are there any better templates anywhere?

Hello everyone,
I think I can ask here without starting a new topic.
I have Therma V and from FEB this year I am using HA and modbus integration to control my hetapump. So, beginner. Since then I managed to establish a desent control over my pump but still I am missing some parts. For example control pump when it is in AI mode. As you probably know when heat pump works in this mode it actually doesn’t track the whater temp, it is looking on shifting whole heating curve defined in pump it self in range from -5 to 5.
In modbus that reffers in holding registar, address 4:
image

I have defined input_number to use slider between -5 to 5 values and send that to modbus register using automation, triggered by input_number. Something like this:

sequence:
            - service: modbus.write_register
              data_template:
                address: 4
                slave: 1
                hub: lg_heatpump
                value: "{{ trigger.to_state.state | int(0)  }}"

Everything is fine if I send positive value (from 0 to 5). It is written in register as expected. But I realized negative values cannot be written in modbus register like -5, -4, end so on. I need to use upper half of 16 bit register, for example if I want to set this value for -3 I need to send 65533, for -4 I need to send 65532, and so on.
I’ve tested this manually and it works fine, but I cannot make it work automatically with input_number and automation. If I move slider to -3 to send 65533 value to registar.
I would need help in defining variables or some kind of matching for negative values from input_number (slider) to send 65533, 65534 values to registar.

Anyone of you have a solution for this or any idea how to get it work? If anyone is using AI mode or have climate configure to use this mode with temp shifter instead of water temperatures?

I am using custom climate template to definte my thermostat for hp. This is how it looks like today

Any help highly appreciated. Thanks!!

1 Like

did sameone use D1 mini and TTL to RS485 module for HA modbus control

No experience with that one, but this one: https://www.waveshare.com/wiki/2-CH_RS485_HAT
works very well with HA, you can make 2 separate busses as below

modbus:

  • name: “WSHAT01”
    type: serial
    port: /dev/ttySC0
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: E
    stopbits: 1
    sensors:

  • name: “WSHAT02”
    type: serial
    port: /dev/ttySC1
    baudrate: 38400
    bytesize: 8
    method: rtu
    parity: N #standard
    stopbits: 2 #standard
    sensors:

esphome:
  name: toplotna-gretje-lg
  friendly_name: Toplotna gretje LG

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "50IYfJkXObgARYPxFoV7g+gPlPlEOaxB4mGb3b+H+nk="

ota:
  password: "f2cf769d81719c643f798f0da83f79f7"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

# Optional manual IP
  manual_ip:
    static_ip: 192.168.0.65
    gateway: 192.168.0.1
    subnet: 255.255.255.0
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Toplotna-Gretje-Lg"
    password: "D8OwjxSVKAcc"

captive_portal:
 
 - uart:
  id: mod_bus
  tx_pin: GPIO 1
  rx_pin: GPIO 3
  baud_rate: 9600
  stop_bits: 1
  parity: NONE
  
  binary_sensors:
    - name: "lg_therma_heating_mode"
      address: 0
      scan_interval: 60
      slave: 1
      input_type: coil
    - name: "lg_therma_flow_too_low"
      address: 0
      scan_interval: 60
      slave: 1
      input_type: discrete_input
    - name: "lg_therma_pump_status"
      address: 1
      scan_interval: 10
      slave: 1
      input_type: discrete_input
      device_class: running
    - name: "lg_therma_compressor_status"
      address: 3
      scan_interval: 10
      slave: 1
      input_type: discrete_input
      device_class: running
    - name: "lg_therma_defrost_status"
      address: 4
      scan_interval: 60
      slave: 1
      input_type: discrete_input
      device_class: running
    - name: "lg_therma_dhw_status"
      address: 5
      scan_interval: 60
      slave: 1
      input_type: discrete_input
      device_class: running
    - name: "lg_therma_disinfect_status"
      address: 6
      scan_interval: 60
      slave: 1
      input_type: discrete_input
      device_class: running
    - name: "lg_therma_silent_status"
      address: 7
      scan_interval: 10
      slave: 1
      input_type: discrete_input
    - name: "lg_therma_error_status"
      address: 13
      scan_interval: 60
      slave: 1
      input_type: discrete_input
      device_class: problem
      sensors:
    - name: "lg_therma_outlet_temp"
      unique_id: "lg_therma_outlet_temp"
      scan_interval: 10
      address: 3
      slave: 1
      input_type: input
      scale: 0.1
      device_class: temperature
      unit_of_measurement: "°C"
      precision: 1
    - name: "lg_therma_inlet_temp"
      unique_id: "lg_therma_inlet_temp"
      scan_interval: 10
      address: 2
      slave: 1
      input_type: input
      scale: 0.1
      device_class: temperature
      unit_of_measurement: "°C"
      precision: 1
    - name: "lg_therma_flow_rate"
      unique_id: "lg_therma_flow_rate"
      scan_interval: 10
      address: 8
      slave: 1
      input_type: input
      scale: 0.1
      unit_of_measurement: "l/min"
      precision: 1
      zero_suppress: 5
    - name: "lg_therma_outdoor_air_temp"
      unique_id: "lg_therma_outdoor_air_temp"
      scan_interval: 10
      address: 12
      slave: 1
      input_type: input
      scale: 0.1
      device_class: temperature
      unit_of_measurement: "°C"
      precision: 1
    - name: "lg_therma_compressor_rpm"
      unique_id: "lg_therma_compressor_rpm"
      scale: 60
      precision: 0.1
      scan_interval: 10
      address: 24
      slave: 1
      unit_of_measurement: rpm
      input_type: input
    - name: "lg_therma_evaporator_pressure" # Dampfdruck Kondensator
      unique_id: "lg_therma_evaporator_pressure"
      address: 22
      scan_interval: 60
      unit_of_measurement: Bar
      slave: 1
      input_type: input
    - name: "lg_therma_compressor_pressure" # Dampfdruck Verdampfer
      unique_id: "lg_therma_compressor_pressure"
      address: 23
      scan_interval: 60
      unit_of_measurement: Bar
      slave: 1
      input_type: input


      switches:
    - name: "lg_therma_power"
      slave: 1
      address: 0
      write_type: coil
      command_on: 1
      command_off: 0
      verify:
        input_type: coil
        address: 0
        state_on: 1
        state_off: 0
    - name: "lg_therma_silent_mode"
      slave: 1
      address: 2
      write_type: coil
      command_on: 1
      command_off: 0
      verify:
          input_type: coil
          address: 2
          state_on: 1
          state_off: 0
      climates:
      - name: "lg_therma_climate_control"
        address: 3
        slave: 1
        input_type: input
        max_temp: 50
        min_temp: 15
        offset: 0
        precision: 1
        scale: 0.1
        target_temp_register: 2
        temp_step: 1
        temperature_unit: C
          #hvac_onoff_register: 0
        write_registers: true
        hvac_mode_register:
          address: 0
          values:
            state_cool: 0
            state_heat: 4

Please help. Uart,modbus dont work. Error in captive portal. I have D1 mini and ttl rs485 on tx/rx pins

have sameone update the yaml for new version because i see only binars status

Did you figure this out?

i have resolved. The yaml from youtuber works normaly. My biggest problem was the wifi modbus,strange ports or setting on. My Cisco WLC was blocking the ports… So i buy the Waveshare rj45 poe and now works normaly.
I must just identify what kind the DHW 2pin senzor is for water tank,i wont pay 50€ fot maby ntc senzor

Did anyone manage to connect PENKTH000 so I have consumption info in LG controller AND at the same time rs485 interface to read and maybe control the unit?

If so how exactly did you connect it? and did you set thermaV unit switch to master or slave? https://community-assets.home-assistant.io/original/4X/e/8/9/e8918e7d19888b3a22d68edec155b77a8a475ec6.png

Ideally if rs485 electrical meter connected on the same bus and still working, but that is just nice to have.

HM123M U33
water flow sensor not working on this modbus. Have flow rate 0

- name: lg_current_flow_rate
        scale: 0.1
        precision: 1
        scan_interval: 15
        address: 8
        slave: 1
        zero_suppress: 5
        unit_of_measurement: l/min
        input_type: input