This maps every entity of basti242/homeassistant_lg_therma_v_modbus (modbus_lg_heatpump.yaml, state of 2026-05-05) to its counterpart in this integration.
There is no automatic migration: the entities have different ids and belong to one device now. Update dashboards, automations and the Energy configuration by hand. Running both side by side for a while and comparing the values is the safest way across.
The new entity ids follow from the entity names with the default device name
LG ThermaV R290. Check them under Developer tools → States before changing a dashboard.
| Reg. | basti242 | This integration |
|---|---|---|
| 0 | sensor.hp_error_code |
sensor.lg_thermav_r290_error_code |
| 1 | sensor.hp_odu_operation_cycle |
sensor.lg_thermav_r290_operation_cycle_odu |
| 2 | sensor.hp_inlet_temp |
sensor.lg_thermav_r290_inlet_temperature |
| 3 | sensor.hp_outlet_temp |
sensor.lg_thermav_r290_outlet_temperature |
| 4 | sensor.hp_backup_heater_outlet_temp |
sensor.lg_thermav_r290_backup_heater_outlet_temperature |
| 5 | sensor.hp_dhw_water_temp |
sensor.lg_thermav_r290_dhw_temperature |
| 6 | sensor.hp_solar_collector_temp |
sensor.lg_thermav_r290_solar_collector_temperature |
| 7 | sensor.hp_temp_technikraum |
sensor.lg_thermav_r290_room_air_temperature_circuit_1 |
| 8 | sensor.hp_flow_rate |
sensor.lg_thermav_r290_flow_rate |
| 9 | sensor.hp_flow_temp_circle_2 |
sensor.lg_thermav_r290_flow_temperature_circuit_2 |
| 10 | sensor.hp_room_air_temp_circuit2_input |
sensor.lg_thermav_r290_room_air_temperature_circuit_2 |
| 11 | sensor.hp_energy_state_input |
sensor.lg_thermav_r290_energy_control_signal |
| 12 | sensor.hp_outside_temp |
sensor.lg_thermav_r290_outdoor_temperature |
| 13 | sensor.hp_water_pressure |
sensor.lg_thermav_r290_water_pressure |
| 16 | sensor.hp_temp_liquid_gas |
sensor.lg_thermav_r290_liquid_gas_temperature |
| 18 | sensor.hp_temp_suction |
sensor.lg_thermav_r290_suction_temperature |
| 19 | sensor.hp_temp_heatgas |
sensor.lg_thermav_r290_hot_gas_temperature |
| 20 | sensor.hp_temp_before_vaporiser |
sensor.lg_thermav_r290_temperature_before_evaporator |
| 21 | sensor.hp_temp_after_vaporiser |
sensor.lg_thermav_r290_temperature_after_evaporator |
| 22 | sensor.hp_high_pressure |
sensor.lg_thermav_r290_high_pressure_condenser |
| 23 | sensor.hp_low_pressure |
sensor.lg_thermav_r290_low_pressure_evaporator |
| 24 | sensor.hp_compressor_rpm |
sensor.lg_thermav_r290_compressor_speed |
| 9998 | sensor.hp_product_info |
sensor.lg_thermav_r290_product_information (plus …_device_group from 9997) |
| Reg. | basti242 | This integration |
|---|---|---|
| 0 | sensor.hp_operation_mode_raw + select.hp_operation_mode_select |
select.lg_thermav_r290_operation_mode (+ text sensor sensor.…_operation_mode) |
| 1 | sensor.hp_control_method_raw + select.hp_control_method_select |
select.lg_thermav_r290_control_method (+ sensor.…_control_method) |
| 2 | sensor.hp_target_temp_circuit1 + number.hp_hk1_target_temperatur_number |
number.lg_thermav_r290_target_temperature_circuit_1_radiators |
| 3 | sensor.hp_room_air_temp_circuit1 + number.hp_room_air_temp_circuit1_number |
sensor.lg_thermav_r290_room_air_temperature_circuit_1_holding (read only) |
| 4 | sensor.hp_shift_value_in_auto_mode_circuit1 + …_number |
number.lg_thermav_r290_setpoint_shift_circuit_1 |
| 5 | sensor.hp_target_temp_circuit2 + number.hp_hk2_target_temperatur_number |
number.lg_thermav_r290_target_temperature_circuit_2_underfloor |
| 6 | sensor.hp_room_air_temp_circuit2 + number.hp_room_air_temp_circuit2_number |
sensor.lg_thermav_r290_room_air_temperature_circuit_2_holding (read only) |
| 7 | sensor.hp_shift_value_in_auto_mode_circuit2 + …_number |
number.lg_thermav_r290_setpoint_shift_circuit_2 |
| 8 | sensor.hp_dhw_target_temp + number.hp_dhw_target_temperatur_number |
number.lg_thermav_r290_dhw_target_temperature |
| 9 | sensor.lg_wp_energiezustand_eingang + select.hp_energy_state_select |
sensor.lg_thermav_r290_energy_state and binary_sensor.…_energy_state_* (read only) |
| Coil | basti242 | This integration |
|---|---|---|
| 0 | switch.hp_hauptschalter |
switch.lg_thermav_r290_heat_pump |
| 1 | switch.hp_dhw |
switch.lg_thermav_r290_dhw |
| 2 | switch.lg_wp_ruhemodus |
switch.lg_thermav_r290_silent_mode |
| 3 | switch.hp_dhw_desinfection_mode |
button.lg_thermav_r290_start_disinfection (trigger, not a switch) |
| 4 | switch.hp_emergency_stop |
switch.lg_thermav_r290_emergency_stop |
| Bit | basti242 (binary_sensor.…) |
This integration (binary_sensor.…) |
|---|---|---|
| 10001 | hp_water_flow_status |
lg_thermav_r290_water_flow (logic inverted, see below) |
| 10002 | hp_water_pump_status |
lg_thermav_r290_water_pump |
| 10003 | hp_ext_water_pump_status |
lg_thermav_r290_external_water_pump |
| 10004 | hp_compressor_status |
lg_thermav_r290_compressor |
| 10005 | hp_defrosting_status |
lg_thermav_r290_defrost |
| 10006 | hp_dhw_heating_status |
lg_thermav_r290_dhw_heating |
| 10007 | hp_dhw_tank_desinfection_status |
lg_thermav_r290_dhw_disinfection |
| 10008 | hp_silent_mode_status |
lg_thermav_r290_silent_mode |
| 10009 | hp_cooling_status |
lg_thermav_r290_cooling_active (not reliable, see README) |
| 10010 | hp_solar_pump_status |
lg_thermav_r290_solar_pump |
| 10011 | hp_backup_heater_step1_status |
lg_thermav_r290_backup_heater_step_1 |
| 10012 | hp_backup_heater_step2_status |
lg_thermav_r290_backup_heater_step_2 |
| 10013 | hp_dhw_boost_heater_status |
lg_thermav_r290_dhw_boost_heater |
| 10014 | hp_error_status |
lg_thermav_r290_fault |
| 10015 | hp_emergency_operation_available_space_heating_cooling |
lg_thermav_r290_emergency_heating_cooling_available |
| 10016 | hp_emergency_operation_available_dhw |
lg_thermav_r290_emergency_dhw_available |
| 10017 | hp_mix_pump_status |
lg_thermav_r290_mixing_pump |
- Computed thermal power:
…_thermal_power_total,…_thermal_power_heating_circuit,…_thermal_power_dhw. - The energy states 0–8 as individual binary sensors.
Whether these exist on the R290 was checked with read-only requests against a 9 kW unit on 2026-10-03 (see register-scan.md).
| basti242 | Register | On the R290 | Here |
|---|---|---|---|
number.hp_power_limit_number + sensor.hp_power_limit |
Holding 24 (40025) | No answer. Not in the manual either. | not implemented, nothing to implement |
switch.hp_active_power_limitation |
Coil 6 (00007) | No answer. Not in the manual either. | not implemented, nothing to implement |
switch.hp_emergency_stop_switch |
Coil 5 (00006) | Answers. The manual calls it Auslöser Notaus-Betrieb ("trigger emergency operation": 0 hold status / 1 start), a trigger rather than a switch. | read internally, deliberately not writable |
number.hp_room_air_temp_circuit1_number / …circuit2_number |
Holding 3 / 6 | Readable. Whether writing has an effect was not tested. | read-only sensor |
select.hp_energy_state_select |
Holding 9 | Readable. Writing was not tested. | read-only |
So the two entities of basti242's setup that look like a power limit probably do nothing on this model: the addresses are not served.
water_flowis inverted. basti242 treats 10001 as a problem sensor per the manual (1 = flow too low). On the R290 monoblock the bit is set while water is flowing (see the note in the README). Automations built onhp_water_flow_statushave to be flipped.- Register 7 is called "Technikraum" in the YAML. It is the same value as
Room Air Temperature Circuit 1here. The manual lists input 30008 as Raumlufttemp. (Kreislauf 1), so the integration's name follows the manual. - Pressures use the same scale in both: registers 22 and 23 count in hundredths of a bar (kPa). They are not in the manual's table; the scale comes from measurement.
- DHW target range: the YAML allows 45–60 °C, this integration 35–60 °C.