After also restart of the nibe the readings came back. I’ve seen this once before now that after a ha powercycle the nibe modbus service seems to crap out… Maybe it gets bad input/requirests from ha and can’t handle, but it also does not reset.
Actually, I tracked the devs. And they asked for, and I supplied them with, some MODBUS stuff for SMO S40, and there are some other S models in the works too.
At first, it will be manual install, because also they need to build MODBUS over TCP, so it will be a dev version (or so I hope) but eventually it will perculate into HA proper I am sure.
Likewise, I provided them with registers from my heat pump.
Id like to change ”heating curve offset” value from dashboard, what is simpliest way to do it? Now i have made automations to write holding registers most used temperatures, but it would be nice to have some slider or enter a numeric state.
Edit: maybe moving ”heating curve offset” from sensor config to a climate is what i looking for?
@Toni_Karja - For which model. Is this? And Can you share your modbus conf and automation yaml code?
Thanks!
I have SMO S40 + F2040. how can I provide them info or volunteer for testing?
Hi,
got my fs2021 including SMO 40s installed this week. Fine to have some fellows with nibe heatpump around. Hello to you all!
At first I was very disappointed with the myuplink stuff. Premium subscription etc. But since I found this thread I mad a lot of progress. I can read and write registers using HA modbus integration (to write I have to call the modbus write service).
One question though: How can I write form the UI e.g. set a temperature?
Kind Regards,
Marco
Hi Marco, you can probably use a thermostat card to set temperature.
How are you connected to the heat pump? Modbus TCP?
Hi Waleed,
Yes Modbus TCP. Thanks got it. Works like that:
climates:
- name: "Start Brauchwasser"
address: 9
input_type: input
count: 1
data_type: int16
max_temp: 50
min_temp: 40
offset: 0
precision: 1
scale: 0.1
target_temp_register: 60
temp_step: 1
temperature_unit: C
Hi Marco,
Could you share your modbus setup in configuration.yaml?
You wrote to use ‘modbus write service’, how did you do this?
Here you are.
modbus:
- name: Nibe
type: tcp
host: # put in your server ip address here
port: 502
climates:
- name: "Start Brauchwasser"
address: 9
input_type: input
count: 1
data_type: int16
max_temp: 50
min_temp: 40
offset: 0
precision: 1
scale: 0.1
target_temp_register: 60
temp_step: 1
temperature_unit: C
- name: "Stop Brauchwasser"
address: 9
input_type: input
count: 1
data_type: int16
max_temp: 60
min_temp: 40
offset: 0
precision: 1
scale: 0.1
target_temp_register: 64
temp_step: 1
temperature_unit: C
sensors:
- name: "NI Außentemperatur"
unique_id: "ni_bt1"
unit_of_measurement: °C
data_type: int16
device_class: temperature
address: 1
input_type: input
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "NI Brauchwasser oben"
unique_id: "ni_bt7"
unit_of_measurement: °C
data_type: int16
device_class: temperature
address: 8
input_type: input
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "NI Brauchwasser unten"
unique_id: "ni_bt6"
unit_of_measurement: °C
data_type: int16
device_class: temperature
address: 9
input_type: input
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "NI Externer Vorlauf"
unique_id: "ni_bt25"
unit_of_measurement: °C
data_type: int16
device_class: temperature
address: 39
input_type: input
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "NI Drehzahl Ladepumpe"
unique_id: "ni_gp12"
unit_of_measurement: "%"
data_type: int16
address: 1589
input_type: input
scale: 1
precision: 1
state_class: measurement
slave: 1
- name: "NI Umschaltventil"
unique_id: "ni_gp10"
data_type: int16
address: 2196
input_type: input
scale: 1
precision: 1
state_class: measurement
slave: 1
- name: "NI Umwaelzpumpe"
unique_id: "ni_gp10"
data_type: int16
address: 2196
input_type: input
scale: 1
precision: 1
state_class: measurement
slave: 1
- name: "NI Heizkurve"
unique_id: "ni_heat_curve"
data_type: int16
address: 26
input_type: holding
scale: 1
precision: 1
state_class: measurement
slave: 1
- name: "NI Start Temp Brauchwasser niedrig"
unique_id: "ni_start_hotwater_low"
unit_of_measurement: °C
data_type: int16
device_class: temperature
address: 60
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: "NI Stop Temp Brauchwasser niedrig"
unique_id: "ni_stop_hotwater_low"
unit_of_measurement: °C
data_type: int16
device_class: temperature
address: 64
input_type: holding
scale: 0.1
precision: 1
state_class: measurement
slave: 1
Have a look at mushroom cards on HACS. They have some very nice “buttons” compared to the standard HA buttons.
https://github.com/piitaya/lovelace-mushroom
The climate card could be useful and its minimalist
This is sort of anoying. Modbus platforms are not really working form me. It actually needs a different address for each card. In my example there are two climate cards configured but only one shows up, that is due to using the same address to read the value (current upper temperature).
Now I tried to use the same address for address and target_temp_register but it reads some weird value there…
Also, I’m still lacking the connection from the registers and its description and what the actual effect on the system is. Is there any sort of enumeration for the values in any doc?
I like to disable the time programs on my smo 40s and use HA to configure different scene’s but I’m totally lost with all the parameters… does anybody have some suggestions how to set which parameters on the heatpump to:
- Only do hot water
- Do hot water and heating
Many thanks,
Marco
Sorry, no help here but emotional support .
I’ve asked aftersales support now twice about more details documentation on modbus parameters, but I only got the half baked documents back and the advice to export the register.
What needs to be clear is that the register (of smo s40) returns different sets based on features enabled and type of nibe heatpump attached.
Myself, smoS40+s2125—12, can’t see the register to read or set the target setpoint somehow.
Also the RMU-s40 sensor values do not appear.
So I have made a baby step progress. I created a switch to control the operating mode.
The operating mode has 3 positions; Automatic, Manual and Additional heat.
However I only know how to create a 2 way switch so can switch between Automatic and Manual only.
Anyone know how to create a switch with multiple states?
Are you talking about the Operating Priority?
Have you considered using a switch? You can turn on and off but you will not be able to set the temperature.
I have the following code for “More Hot Water”
# Switches
switches:
- name: "More Hot Water"
unique_id: "More Hot Water"
write_type: holding # R/W
address: 697
slave: 1
command_on: 3
command_off: 0`
Hello, I have SMO S40 with AMS 10-12 NIBE heat pump. I used configuration:
modbus:
- name: Nibe
type: tcp
host: 192.168.1.8 # put in your server ip address here
port: 502
sensors:
- name: nibe_smos40_bt1
friendly_name: "BT1: Outdoor Temperature"
unit_of_measurement: °C
data_type: int16
device_class: temperature
address: 1
input_type: input
scale: 0.1
precision: 1
state_class: measurement
slave: 1
- name: nibe_smos40_bt7
friendly_name: "BT7: Hot Water Top"
unit_of_measurement: °C
data_type: int16
input_type: input
scale: 0.1
precision: 1
address: 8
slave: 1
- name: nibe_smos40_bt6
friendly_name: "BT6: Hot Water Charging"
unit_of_measurement: °C
address: 9
slave: 1
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bt3
friendly_name: "BT3: Heating medium return line temp"
unit_of_measurement: °C
slave: 1
address: 1475
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bt14
friendly_name: "BT14: Hot gas discharge temp"
unit_of_measurement: °C
slave: 1
address: 1479
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bt15
friendly_name: "BT15: Condenser fluid pipe"
unit_of_measurement: °C
slave: 1
address: 1480
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bt17
friendly_name: "BT17: Suction Gas"
unit_of_measurement: °C
slave: 1
address: 1481
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bt12
friendly_name: "BT12: Condenser supply line temp"
unit_of_measurement: °C
slave: 1
address: 1478
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bt28
friendly_name: "BT28: Outdoor ambient temp"
unit_of_measurement: °C
slave: 1
address: 1621
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_smos40_bt50
friendly_name: "Room temperature"
unit_of_measurement: °C
slave: 1
address: 26
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_smos40_bt25
friendly_name: "BT25: External supply line temp"
unit_of_measurement: °C
slave: 1
address: 39
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bt16
friendly_name: "BT16a: Evaporator"
unit_of_measurement: °C
slave: 1
address: 1622
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bt16_2
friendly_name: "BT16b: Evaporator"
unit_of_measurement: °C
slave: 1
address: 1966
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_smos40_bt71
friendly_name: "BT71: Return temperature"
unit_of_measurement: °C
slave: 1
address: 88
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_f2040_bp4
friendly_name: "BP4: Pressure"
unit_of_measurement: bar
slave: 1
address: 1801
input_type: input
scale: 0.1
precision: 1
- name: nibe_f2040_bp2
friendly_name: "BP2: Low pressure switch"
unit_of_measurement: bar
slave: 1
address: 1802
input_type: input
scale: 0.1
precision: 1
- name: nibe_f2040_ep14_total_time
friendly_name: "Compressor total run time"
unit_of_measurement: hours
slave: 1
address: 1491
- name: nibe_f2040_compressor_freq
friendly_name: "Compressor current frequency"
unit_of_measurement: hz
slave: 1
address: 1803
- name: nibe_smos40_eb100-gp12
friendly_name: "Charge Pump (EB100-GP12)"
slave: 1
address: 1636
unit_of_measurement: Percent
data_type: int16
device_class: power_factor
input_type: input
scale: 1
precision: 1
state_class: measurement
- name: nibe_smos40_supply_temp_min
unit_of_measurement: °C
slave: 1
address: 34
data_type: int16
device_class: temperature
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_smos40_supply_temp_max
unit_of_measurement: °C
slave: 1
address: 38
data_type: int16
device_class: temperature
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_smos40_prioritisation
friendly_name: "Operating prioritisation 1-off, 2-hot water 3- heat"
slave: 1
address: 1028
- name: nibe_smos40_alarm
slave: 1
address: 1975
- name: nibe_smos40_hot_water_demand
friendly_name: "Hot Water Demand (Sm/Md/Lg/Smart)"
slave: 1
address: 56
scan_interval: 60
- name: nibe_smos40_bt70_outgoing_hot_water
unit_of_measurement: °C
slave: 1
address: 87
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
- name: nibe_smos40_degree_minutes
slave: 1
address: 18
- name: nibe_smos40_degree_minutes_cooling
slave: 1
address: 20
- name: nibe_smos40_reset_alarm
slave: 1
address: 22
- name: nibe_smos40_heating_curve
slave: 1
address: 26
- name: nibe_smos40_offset_curve
slave: 1
address: 30
- name: nibe_smos40_flow_sensor
unit_of_measurement: "l/m"
slave: 1
address: 40
scan_interval: 60
- name: nibe_smos40_current_be3
slave: 1
address: 46
- name: nibe_smos40_current_be2
slave: 1
address: 48
- name: nibe_smos40_current_be1
slave: 1
address: 50
- name: nibe_smos40_degree_minutes_start_additional_heat
slave: 1
address: 97
- name: nibe_smos40_degree_minutes_start_compressor
slave: 1
address: 159
- name: nibe_smos40_alarm_action_lower_room_temp
slave: 1
address: 196
- name: nibe_smos40_alarm_action_lower_hw_temp
slave: 1
address: 197
- name: nibe_smos40_operating_mode
slave: 1
address: 237
- name: nibe_smos40_pulse_energy_meter_be7
unit_of_measurement: kWh
slave: 1
address: 396
- name: nibe_smos40_pulse_energy_meter_be6
unit_of_measurement: kWh
slave: 1
address: 398
- name: nibe_smos40_calculated_supply_temp
friendly_name: "Calculated supply temp"
unit_of_measurement: °C
slave: 1
address: 1017
data_type: int16
device_class: temperature
input_type: input
scale: 0.1
precision: 1
state_class: measurement
But all sensors are unavailable. It shows error Connection to (192.168.1.8, 502) failed: [Errno 111] Connection refused. MODBUS in SMOS40 is enabled. Is that I should do a dump of AMS10-12 registry and edit my config?
Now I tried config from this topic (the first one) and everything is also unavailable.
It seams every heatpump has it s own register mapping. So yes, you have to export the file.