How to connect to Nibe heat pump without the cloud

@kidwellj did you manage to send any new parameters to the pump? Like you can do it in native indoor module modbus?

Like “hot water demand” or set a desire room temperature?

Regards

2 Likes

Hi Jeremy

With your guide I first time managed to get some data displayed for my Nibe F2120-12 on my Homeassistant.
The here available Nibe integration never got any data with endless trials from my side.
Thanks a lot for this working solution.

May I ask you following questions:

  1. Your configuration.yaml includes the parameter friendly_name that is not working on my site, see Configuration validation message:

Invalid config for [modbus]: [friendly_name] is an invalid option for [modbus]. Check: modbus->modbus->0->sensors->0->friendly_name. (See /config/configuration.yaml, line 213).

After deleting friendly_name validation is ok.

  1. Where do you get all the name strings like “nibe_smos40_bt1”. Is there a complete list specific to NIBE models. As I have a F2120-12 not all
    Parameters you have in your config is working on my site.

Thanks a lot for any tipps.

Cheers,

Rene

You can plug an USB to your indoor module of the pump and get all the modbus sensors that ara available.

I have made a Nibe MQTT service. It uses same NibeGW Arduino module as Openhab’s nibeheatpump integration already uses.


1 Like

Does it work with S series?

With TCP Modbus? Not today, but should be easy to add. Need a tcp dump for request and reply. Or you are welcome to contribute =)

1 Like

I have added TCP and Serial Modbus support to the library. Somebody needs to try:

If all works then I will release it and add support to nibe-mqtt as well.

3 Likes

Would love to test it, but just don’t have the knowledge to work outside of HA. :pensive:

I copied your configuration exactly into my Home Assistant, and the config gave the error message
Invalid config for [modbus]: [friendly_name] is an invalid option for [modbus].
So I took out all the friendly names, and it worked. But there is no unique_id, so you can’t alter parameters in the UI.

1 Like

Here is my take. I created a nibe.yaml file and put in all the parameters I needed (There are a lot more) for my S1255 and I will add them as I go along.

My yaml file below:

- name: Nibe
  type: tcp
  host: 192.XXX.XX.XXX
  port: 502
  
  sensors:

# Overview

  - name: "Heatpump 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

  - name: "Heatpump Priority"
    unique_id: "operating_prioritisation"
    data_type: int16  # int8
    # 10: Off, 20: Hot Water, 30: Heat, 40: Pool, 60: Cooling
    address: 1028
    input_type: input  # R/W
    scale: 1
    precision: 0
    state_class: measurement
    slave: 1

# Heating

  - name: "Heatpump 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: "Heatpump - Supply Line (BT2)"
    unique_id: "supply_line_BT2"
    device_class: temperature
    state_class: measurement
    unit_of_measurement: "°C"
    data_type: int16
    address: 5
    count: 1
    slave: 1
    precision: 1
    input_type: input
    scale: 0.1
    scan_interval: 30

  - name: "Heatpump - Return Line (BT3)"
    unique_id: "return_line_BT3"
    device_class: temperature
    state_class: measurement
    unit_of_measurement: "°C"
    data_type: int16
    address: 7
    count: 1
    slave: 1
    precision: 1
    input_type: input
    scale: 0.1
    scan_interval: 30

  - name: "Heatpump - Outdoor Temperature (BT1)"
    unique_id: "outdoor_temperature_BT1"
    device_class: temperature
    state_class: measurement
    unit_of_measurement: "°C"
    data_type: int16
    address: 1
    count: 1
    slave: 1
    precision: 1
    input_type: input
    scale: 0.1
    scan_interval: 30

  - name: "Heatpump - Average Temperature (BT1)"
    unique_id: "average_temp_heatpump_BT1"
    device_class: temperature
    state_class: measurement
    unit_of_measurement: "°C"
    data_type: int16
    address: 37
    count: 1
    slave: 1
    precision: 1
    input_type: input
    scale: 0.1
    scan_interval: 30

  - name: "Heatpump 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: "Heatpump - Brine In (BT10)"
    unique_id: "brine_in_BT10"
    device_class: temperature
    state_class: measurement
    unit_of_measurement: "°C"
    data_type: int16
    address: 10
    count: 1
    slave: 1
    precision: 1
    input_type: input
    scale: 0.1
    scan_interval: 30

  - name: "Heatpump - Brine Out (BT11)"
    unique_id: "brine_out_BT11"
    device_class: temperature
    state_class: measurement
    unit_of_measurement: "°C"
    data_type: int16
    address: 11
    count: 1
    slave: 1
    precision: 1
    input_type: input
    scale: 0.1
    scan_interval: 30

# Hot Water

  - name: "Heatpump - Hot Water Top (BT7)"
    unique_id: "hotwater_top_BT7"
    device_class: temperature
    state_class: measurement
    unit_of_measurement: "°C"
    data_type: int16
    address: 8
    count: 1
    slave: 1
    precision: 1
    input_type: input
    scale: 0.1
    scan_interval: 30

  - name: "Heatpump - Hot Water Charging (BT6)"
    unique_id: "hotwater_charging_BT6"
    device_class: temperature
    state_class: measurement
    unit_of_measurement: "°C"
    data_type: int16
    address: 9
    count: 1
    slave: 1
    precision: 1
    input_type: input
    scale: 0.1
    scan_interval: 30

  - name: "Heatpump - 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

# Other

  - 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
1 Like

Now my question, has anyone been able to write to the heat pump?

I want to be able to do 2 things:

  1. Turn the heating on/off - currently i have it off because its warm.

  2. Adjust the heating curve offset. On my system its ranges from -10 to +10 and would like to create a slider for that.

Any assistance would be appreciated.

I haven’t found a way to write to modbus. With MQTT integration should be the easiest.

1 Like

this adds no new sensors for me. Should it work with VVM S320?

1 Like

Thank you for this!
This is what my config looks like https://take.ms/olfqS
These are the entities discovered: https://take.ms/RCz1R
Wondering what I am missing. Hint please :slight_smile: (I’m new to mqtt stuff)

This is intended to work with Nibe S series with Modbus TCP. Does yours have modbus tcp and usb port?

Victor, you look like you made more progress than i did. Please share the steps you used to get in into MQTT?

Oh! That was it! My pump had the modbus disabled. Just enabled it. I am now adding to the config list the sensors I would like to use with my hass. So far added the one for outside temp and the one for hot water (per your example). Please note that when using your config, and then check the sensors, each says that there’s no unique id present and so I have added the unique_id prop to the list.
So far the config: https://take.ms/xQc0u and the output in dashboard https://take.ms/BCpFq :smiley:

You use Modbus integration. Not my library. :slight_smile:

True :blush:
I will give another try to your library as soon as I figure out some details about setting it up. I have tried the add-on version you’re discussing here Hassio Addon · Issue #3 · yozik04/nibe-mqtt · GitHub but I am stuck at setting it up. I feel that I am not filling in the correct data in the config file (again, new to mqtt :slight_smile: )

Check for the usb outlet under the logo. Insert a usb and go to the modbus menu. It should allow you to dump the register.

Also look at this.

https://www.nibe.eu/download/18.3db69dc1795e0d992c5722/1622634529178/Modbus%20S-series%20EN%20M12676EN-1.pdf