Note that this was done for a NIBE S1155 PC, but would expect the majority to work for other heatpumps from the S series as well.
After combining information from the modbus documentation from NIBE themselves, the exported CSV from the heatpump and a lot of trail and error (with the assistance of myuplink), I would like to share the current yaml I have for at least the majority of sensors as included in the ‘info’ menu.
More than willing to receive any feedback and or comments, particularly as I would not consider myself experienced with this kind of stuff yet, hence any best practices are welcome.
Added comments where possible, including some deviations (mainly data type) between the modbus reference and what I ended up using, in the comments you’ll find what is included in the most recent version of the reference document.
- name: "NIBE S1155"
type: tcp
host: 192.168.2.11
port: 502
sensors:
# 3.1.2 Overview
- name: "Operating Prioritisation"
unique_id: "operating_prioritisation"
data_type: int16 # int8
# 10: Off, 20: Hot Water, 30: Heat, 40: Pool, 50: Cooling
address: 1028
input_type: input # R/W
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Power Usage"
unique_id: "power_usage"
unit_of_measurement: "W"
data_type: int16
device_class: power
address: 2166
input_type: input
scale: 1
precision: 0
slave: 1
# 3.1.3 Heating
- name: "Degree Minutes (Heating)"
unique_id: "degree_minutes_heating"
unit_of_measurement: "DM"
data_type: int16
address: 18
input_type: holding # R/W
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Room Temperature" # BT50
unique_id: "room_temperature_bt50"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 116 # 116 for RMU S40, 26 for BT50
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Calculated Supply (Heating)"
unique_id: "calculated_supply_heating"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 1017
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Supply Line Temperature" # BT2
unique_id: "supply_line_temperature_bt2"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 5
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Return Line Temperature" # BT3
unique_id: "return_line_temperature_bt3"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 7
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Outdoor Temperature" # BT1
unique_id: "outdoor_temperature_bt1"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 1
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Average Outdoor Temperature"
unique_id: "average_outdoor_temperature"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 37
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Condenser Supply" # BT12
unique_id: "condenser_supply_bt12"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 12
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Brine In" # BT10
unique_id: "brine_in_bt10"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 10
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Brine Out" # BT11
unique_id: "brine_out_bt11"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 11
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Underfloor Drying Function"
unique_id: "underfloor_drying_function"
data_type: int16
address: 120
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
# 3.1.4 Hot Water
- name: "Hot Water Demand" # aka "Comfort Mode"
unique_id: "hot_water_demand"
data_type: int16 # int8
# 0: Small, 1: Medium, 2: Large, 3: Smart Control
address: 56
input_type: holding # R/W
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Hot Water Charging" # BT6
unique_id: "hot_water_charging_bt6"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 9
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Hot Water Top" # BT7
unique_id: "hot_water_top_bt7"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 8
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
# 3.1.5 Cooling
- name: "Calculated Supply (Cooling)"
unique_id: "calculated_supply_cooling"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 1567
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
# 3.1.7 Compressor
- name: "Compressor Frequency"
unique_id: "compressor_frequency"
unit_of_measurement: "Hz"
data_type: int16 # uint16
device_class: frequency
address: 1046
input_type: input # R
scale: 0.1
precision: 0 # could be set to 1
state_class: measurement
slave: 1
- name: "Requested Compressor Frequency"
unique_id: "requested_compressor_frequency"
unit_of_measurement: "Hz"
data_type: int16
device_class: frequency
address: 140
input_type: input # R
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Minimum Compressor Frequency"
unique_id: "minimum_compressor_frequency"
unit_of_measurement: "Hz"
data_type: int16
device_class: frequency
address: 1041
input_type: input # R
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Compressor Status"
unique_id: "compressor_status"
data_type: int16 # uint8
# 0: Off, 1: On (Operate)
address: 1100
input_type: input # R
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Discharge" # BT14
unique_id: "discharge_bt14"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 13
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Liquid Line" # BT15
unique_id: "liquid_line_bt15"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 14
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Suction Gas" # BT17
unique_id: "suction_gas_bt17"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 16
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Inverter Temperature"
unique_id: "inverter_temperature"
unit_of_measurement: "°C"
data_type: int16
device_class: temperature
address: 1047
input_type: input
scale: 0.1
precision: 1
state_class: measurement
slave: 1
# 3.1.9 Additional Heating
- name: "Status Additional Heating"
unique_id: "status_additional_heating"
data_type: int16
address: 1029
input_type: input
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Power Usage Additional Heating"
unique_id: "power_usage_additional_heating"
unit_of_measurement: "kW"
data_type: int16
device_class: power
address: 1027
input_type: input # R
scale: 0.01
precision: 1
state_class: measurement
slave: 1
- name: "Maximum Power Usage Additional Heating"
unique_id: "maximum_power_usage_additional_heating"
unit_of_measurement: "kW"
data_type: int16
device_class: power
address: 102
input_type: holding # R
scale: 0.01
precision: 1
state_class: measurement
slave: 1
- name: "Fuse Size"
unique_id: "fuze_size"
unit_of_measurement: "A"
data_type: int16
device_class: current
address: 103
input_type: holding
scale: 1
precision: 0
slave: 1
- name: "Current Phase 1" # BE1
unique_id: "current_be1"
unit_of_measurement: "A"
data_type: uint32
device_class: current
address: 50
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Current Phase 2" # BE2
unique_id: "current_be2"
unit_of_measurement: "A"
data_type: uint32
device_class: current
address: 48
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Current Phase 3" # BE3
unique_id: "current_be3"
unit_of_measurement: "A"
data_type: uint32
device_class: current
address: 46
input_type: input # R
scale: 0.1
precision: 1
state_class: measurement
slave: 1
# 3.1.10 Circulation Pumps
- name: "Operating Mode Heating Pump"
unique_id: "operating_mode_heating_pump"
data_type: int16
# 0: Auto, 1: Manual
address: 853
input_type: input # R
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Heating Pump Speed" # GP1
unique_id: "heating_pump_speed"
unit_of_measurement: "%"
data_type: int16
device_class: power_factor
address: 1102
input_type: input # R
scale: 1
precision: 0.1
state_class: measurement
slave: 1
- name: "Heating Pump Speed (Manual)"
unique_id: "heating_pump_speed_manual"
unit_of_measurement: "%"
data_type: int16
device_class: power_factor
address: 218
input_type: input # R
scale: 1
precision: 0.1
state_class: measurement
slave: 1
- name: "Brine Pump Speed" # GP2
unique_id: "brine_pump_speed"
unit_of_measurement: "%"
data_type: int16
device_class: power_factor
address: 1104
input_type: input # R
scale: 1
precision: 0.1
state_class: measurement
slave: 1
- name: "Brine Pump Speed (Manual)"
unique_id: "brine_pump_speed_manual"
unit_of_measurement: "%"
data_type: int16
device_class: power_factor
address: 222
input_type: input # R
scale: 1
precision: 0.1
state_class: measurement
slave: 1
# 3.1.12 Statistics
- name: "Number Of Starts (Compressor)"
unique_id: "number_of_starts_compressor"
data_type: int16
address: 1534
input_type: input
scale: 1
precision: 0
state_class: total_increasing
slave: 1
- name: "Operating Time (Total)"
unique_id: "operating_time_total"
data_type: int16
address: 1536
input_type: input
scale: 1
precision: 0
state_class: total_increasing
slave: 1
- name: "Operating Time (Hot Water)"
unique_id: "operating_time_hot_water"
data_type: int16
address: 1538
input_type: input
scale: 1
precision: 0
state_class: total_increasing
slave: 1
- name: "Flow Hot Water (Compressor)"
unique_id: "flow_hot_water_compressor"
unit_of_measurement: "kWh"
data_type: int16
device_class: energy
address: 1583
input_type: input
scale: 0.1
precision: 1
state_class: total_increasing
slave: 1
- name: "Flow Hot Water (Total)"
unique_id: "flow_hot_water_total"
unit_of_measurement: "kWh"
data_type: int16
device_class: energy
address: 1575
input_type: input
scale: 0.1
precision: 1
state_class: total_increasing
slave: 1
- name: "Flow Heating (Compressor)"
unique_id: "flow_heating_compressor"
unit_of_measurement: "kWh"
data_type: int16 # No idea what this should be
device_class: energy
address: 1585
input_type: input
scale: 0.1
precision: 1
state_class: total_increasing
slave: 1
- name: "Flow Heating (Total)"
unique_id: "flow_heating_total"
unit_of_measurement: "kWh"
data_type: int16 # No idea what this should be
device_class: energy
address: 1577
input_type: input
scale: 0.1
precision: 1
state_class: total_increasing
slave: 1
# To bo categorised
- name: "Active Alarm"
unique_id: "active_alarm"
data_type: int16 # uint8
address: 2195
input_type: input
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Alarm Number"
unique_id: "alarm_number"
data_type: int16 # uint16
address: 1975
input_type: input
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Start Compressor"
unique_id: "start_compressor"
unit_of_measurement: "DM"
data_type: int16
address: 159
input_type: holding
scale: 1
precision: 1
state_class: measurement
slave: 1
- name: "Start Additional Heat"
unique_id: "start_additional_heat"
unit_of_measurement: "DM"
data_type: int16
address: 97
input_type: holding
scale: 1
precision: 1
state_class: measurement
slave: 1
- name: "Degree Minutes Cooling"
unique_id: "degree_minutes_cooling"
unit_of_measurement: "DM"
data_type: int16
address: 20
input_type: holding
scale: 1
precision: 1
state_class: measurement
slave: 1
- name: "Reset Alarm"
unique_id: "reset_alarm"
data_type: int16 # int8
address: 22
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Heating Curve" # 1.30.1
unique_id: "heating_curve"
data_type: int16 # int8
address: 26
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Heating Curve Offset" # 1.30.1
unique_id: "heating_curve_offset"
data_type: int16 # int8
address: 30
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Supply Temperature Min" # 1.30.4
unique_id: "supply_temperature_min"
unit_of_measurement: "°C"
data_type: int16 # int8
device_class: temperature
address: 34
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Supply Temperature Max" # 1.30.6
unique_id: "supply_temperature_max"
unit_of_measurement: "°C"
data_type: int16 # int8
device_class: temperature
address: 38
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Own Curve" # 1.30.7
unique_id: "own_curve"
data_type: int16 # int8
address: 39 # 39-45
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Flow Sensor (BF1)"
unique_id: "flow_sensor_bf1"
unit_of_measurement: "l/min"
data_type: int16
address: 40
input_type: input
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Start Temperature Hot Water"
unique_id: "start_temperature_hot_water"
unit_of_measurement: "°C"
data_type: int16 # int8
device_class: temperature
address: 59
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Stop Temperature Hot Water"
unique_id: "stop_temperature_hot_water"
unit_of_measurement: "°C"
data_type: int16 # int8
device_class: temperature
address: 63
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Period Time Heating" # unclear unit, hours per day?
unique_id: "period_time_heating"
unit_of_measurement: "h"
data_type: int16 # int8
address: 92
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Period Time Hot Water" # unclear unit, hours per day?
unique_id: "period_time_hot_water"
unit_of_measurement: "h"
data_type: int16 # int8
address: 93
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Period Time Cooling" # unclear unit, hours per day?
unique_id: "period_time_cooling"
unit_of_measurement: "h"
data_type: int16 # int8
address: 94
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Start Temperature Cooling"
unique_id: "start_temperature_cooling"
unit_of_measurement: "°C"
data_type: int16 # int8
device_class: temperature
address: 183
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Stop Temperature Heating"
unique_id: "stop_temperature_heating"
unit_of_measurement: "°C"
data_type: int16 # int8
device_class: temperature
address: 184
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Stop Temperature Additional Heating"
unique_id: "stop_temperature_additional_heating"
unit_of_measurement: "°C"
data_type: int16 # int8
device_class: temperature
address: 185
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Lower Room Temperature Alarm"
unique_id: "lower_room_temperature_alarm"
data_type: int16 # uint8
address: 196
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Lower Hot Water Temperature Alarm"
unique_id: "lower_hot_water_temperature_alarm"
data_type: int16 # uint8
address: 197
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Operating Mode" # 4.1
# 0: auto, 1: manual, 2: additional heating only
unique_id: "operating_mode"
data_type: int16 # uint8
address: 237
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Allow Additional Heating (Manual)" # 4.1
unique_id: "allow_additional_heating_manual"
data_type: int16 # uint8
address: 180
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Allow Heating (Manual)" # 4.1
unique_id: "allow_heating_manual"
data_type: int16 # uint8
address: 181
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Allow Cooling (Manual)" # 4.1
unique_id: "allow_cooling_manual"
data_type: int16 # uint8
address: 182
input_type: holding
scale: 1
precision: 0
state_class: measurement
slave: 1
- name: "Total Run Time Additional Heat" # Value does not align with UpLink?
unique_id: "total_run_time_additional_heat"
data_type: int32
address: 1025
input_type: input
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "Compressor Statistics (EP14)"
unique_id: "compressor_statistics_ep14"
data_type: int32
address: 1087
input_type: input
scale: 1
precision: 0
state_class: measurement
slave: 1