NIBE F2040 12kW with SMO S40 controls not following WC?

I’m helping a friend setup a 12kW NIBE F2040 with SMO S40 controls. The system is fully open-loop UFH with no third party controlls or thermostats.

I’m a bit puzzled why the system does not seem to be following the weather compensation settings.

I’ve set the following WC curve:

It’s currently about 10C outside, so the flow temp should be around 35C:

However, the flow temperature is always above 40C and sometimes rises to 45C! What could be causing this?

The system has a BT50 indoor sensor and the indoor temperature set point is set to 20C. Instead of maintaining 20C the system allows the temperature to swing between 18.8C and 20.8C, this is quite uncomfortable. The unit seems to run flat out for 8hrs and then switch off for 8hrs! The property has UFH on two floors. Is it possible to adjust the hysteresis to make the system run steady state to maintain close to 20C? There are no schedules set. Here’s an indoor temperature plot:

I’ve set the degree minutes to auto. I’m not very families with NIBE and don’t claim to understand degree minutes yet!

Hi Glyn, I’ll start this off (I have a 16kw F2040 Nibe unit)

My Nibe also does this, it will take the flow temperature above the WC target until the degree minute algorithm is satisfied. There are various settings which seem to control the level of permitted overshoot of the target temperature. I have left all mine at default.

Does your friend have Nibe Uplink/MyUplink running? This has all the parameters needed to look at this properly as we would need to see a few things like what the BT25 sensor is reading, what the charge pump is running at and what the WC derived target (S1) temperature is. The degree minutes algorithm (more on this below) seems to work from comparing the BT25 temperature vs the WC derived S1 temperature. BT25 should be installed after the red reversing valve on the CH flow pipe or in/around a buffer tank if installed.

I note there is an indoor sensor (I don’t have one fitted) and the sensitivity / impact this has can be adjusted. The indoor sensor will “offset” the WC derived target S1 temperature so it could be that this room sensor is having an influence on the target and hence pushing the flow towards 40 degrees. I only have an outdoor sensor fitted so my target S1 temperature is purely based on the outdoor temperature (no room influence). @dMb uses one and I’m sure will comment further.

Degree minutes - in my head (don’t take this as gospel) they work as follows:

  • BT25 temperature is compared to the target WC S1 temperature every minute
  • if the BT25 temperature is below the S1 target, there is a heat deficit and the degree minutes will accumulate negatively.
  • if the BT25 temperature is above the S1 target there is surplus heat and the degree minutes will accumulate positively.
  • when the degree minute value gets to 0 the heat pump turns off
  • when the degree minute value gets to -60 (or whatever is set in the controller) then the heat pump turns on and starts a heating cycle, if BT25 rises above WC S1 temperature then the degree minutes tick up towards 0 and the cycle repeats.

For you to be showing -321 degree minutes and an 8 hour run suggests BT25 is never really getting above the S1 temperature so the degree minutes constantly accumulate negative. This results in long runs times. my Nibe unit has 2-3 heating cycles an hour, all controlled by the degree minutes algorithm. This seems “normal” for Nibe units.

I’ll try post some plots of mine tomorrow and show how the above works on my unit.

1 Like

Wow, thanks so much for such a comprehensive and speedy reply! Your explanation of degree minutes is excellent.

Yes, I think that’s the issue, the degree minutes are very negative which presumably was causing the flow temp to be increased above WC target. The system had been off for a few days last week, so I guess it’s taking a while for the algorithm to stabilise and the degree minutes to be satisfied.

BT25 sensor is fitted and reading correctly.

I’ve now disabled BT50 indoor sensor to reduce the number of variables, also I notice NIBE recommends against using indoor sensor with UFH. How well does you NIBE maintain a constant indoor temp without an indoor sensor?

MyUplink is working, but currently the property is in-between tenants, so there’s no WiFi available.

What setting do you have your circulation pump ( Auto or intermittent. Which would you recommend? This system is currently set to ‘intermittent’

I have mine set to intermittent. This allows me to set an a minimum speed o f25% (I have some odd behaviour with the nibe wanting my charge pump to run at 1% a lot of the time)

In intermittent mode the charge pump will turn off when the compressor isn’t running (when degree minutes are positive). In auto mode the charge pump will run when the compressor is off at the level defined by the idle / wait mode setting on the controller.

You mentioned the system was open loop with 2x UFH systems. Do these have a circulation pumps on a manifold or is it just pumped via the charge pump? If its the latter and you’re running on intermittent setting, it could be you have no flow around the circuits once the degree minutes are satisfied and the compressor turns off. It will then rely on natural heat loss from the location of the BT25 sensor to drop below the target S1 temperature and get the degree minutes to -60 (or whatever is set on the controller). This might explain why you have 8 hour off periods.

On my system I turn off the charge pump when the compressor isnt running but the radiator circulation pump and UFH circulation pumps both keep running, I therefore keep losing heat from the circuits and my BT25 temperature drops below the target and the heat pump starts up again. The plot below shows this behaviour.

I find degree minute algorithm with no room influence maintains temperature very well, I suffer a lot of solar gain due to significant glazing and without room influence this can cause some higher temperature in the rooms.

The below is a plot of a blue tooth (not nibe sensor) of indoor temperature on the radiator circuit downstairs. It drops at night because I use a small “night set back” on the heating scheduler of nibe controller, this acts to “offset / lower” the S1 target temperature by a degree or two overnight.

My system works as shown on the annotated graph below

  1. Degree minutes are dropping because BT25 (yellow trace) is below the target S1 temperature (red trace), when the degree minutes get to -60 the compressor starts and the heatpump turns on. BT3, BT12 and BT25 all start to rise

  2. Degree minutes (mustard trace) start to increment positively as the BT25 temperature is above the S1 trace, the flow is being taken quite a bit above the WC S1 target

  3. Degree minutes are satisfied and get to 0, the heat pump turns off (purple trace) and the charge pump stops running. As a result of the radiator and UFH heating pumps running the BT25 starts to drop as the heat is lost and the degree minutes start to drop again back towards -60 and another cycle repeats

The target S1 temperature as set by WC only, there is no room influence to this. It remains constant and is only adjusted as the outdoor temperature changes.

1 Like

Hi Glyn. You’ve done the right thing in taking the indoor sensor out of the loop for now. It’s possible the controller has been told to take too much notice of that, driving the target flow temp high compared with the WC curve.

On cold-but-bright days I get a lot of passive solar gain - enough to raise the whole house by 1C or more and the south-facing ground-floor rooms can get uncomfortably warm. I therefore use BT50 to ‘dial down’ the WC curve when that happens, which works very well in my case. Live link to some example data from my system: Emoncms - app view and annotated screen-shot below:

This graph also also shows how the controller is attempting to make the red Flow temp follow the grey Target temp - effectively the Degree Minutes are measuring the extent to which the Flow temp over- or under-shoots the Target; you can think of the DMs ‘colouring in’ the area between the two curves.
(Bear in mind my system doesn’t have an inverter drive for the compressor - so it’s only ever On or Off - but that’s the type of system where NIBE’s DM control regime originated.)

I believe @Zapaman also uses BT50 as a control variable on his NIBE system.

I have also have the F2040-12 unit [], and have been experimenting with different things recently to try and ‘encourage’ the ASHP to run at a more steady-state rather than cycling. I may be on a hiding to nothing while ever my flow rate is poor at 20l/min but that’s another story!

Until recently I was on the Octopus Cosy tariff, so had been boosting the flow temperature in the morning & afternoon cheap periods, running it cooler in-between, and not running at all during the peak. Also doing the DHW runs at the start of each cheap period. A pattern that I noticed was that by the time the DHW run had finished the DegreeMinutes [DM] would then be very negative, like -500, and the ASHP had a lot of work to do to ‘catch up’. It would kick out a FlowTemp [BT25] at least 10K more than the CalculatedFlowTemp [S1] and the the deltaT would climb very high [often 10-11K] to the point that the output could sometimes be touching 15kW!

Then the pattern was that after hitting a peak output it would begin to calm itself down, gradually reducing the consumption, reducing the output, reducing the deltaT, and then just beginning to look like it might start running in a steady-state. But then it would hit the 16:00 Cosy period and the schedule would force the compressor to stop before DM was back up to 0.

So a couple of weeks ago I decided to see what would happen if I just kept running through the Cosy peak, and it was quite interesting. The ASHP backed off so much that BT25 was less than S1 and DM began to reduce again. It kept on at this low-level running until DM got down to around -350 then it increased the output again but only long enough for DM to get up to -146 before backing off once more. Did this several times over the evening - so it was kind of like ‘cycling’ but instead of the cycle minimum being ‘off’ it was closer to the minimum output that the ASHP could do whilst still running.

The upshot of all of that was that the ASHP compressor was running for much much longer. Would have been interesting to keep playing around with this idea but it actually got the house a bit too warm!

I realised after a long period of data collection that the Agile tariff will actually be much cheaper overall [although with the risk of occasional expensive days] so I switched over to that recently and have been running the ASHP in a more ‘normal’ way without the Cosy boosts.

I have the charge pump set to always run at 100% when the compressor is on - mainly because the flow rate is so poor it helps to keep it as high as it can, and therefore reduce the deltaT and the difference between BT25 and S1. I’ve also gradually tweaked the DM setting so that the compressor won’t start until DM is as low as -240. I’m seeing some pretty decent run times and COPs at the moment, but then it has been rather mild.

I’m very interested in the topic because I just installed a Mitsubishi Heavy Industries air source heat pump with an RC-HY40-W controller, which is manufactured by Nibe and is identical to the SMO40 (Alpha innotec also uses this hardware). I don’t have internet yet to connect the controller, but I’m researching how to collect data from the machine or even if it’s possible to give remote commands to improve its efficiency. I’ll be following this conversation, and once I have a clearer understanding of my equipment, I’ll start asking questions because I see that you are knowledgeable about how the machine operates.

1 Like

Update: Good news! After disabling the BT50 indoor sensor at around midnight last night, the system is now running today with the expected WC flow temp today. It’s maintaining a constant 20.5C, I’m very happy with this so far.

That’s a very good point. The system is fully open-loop with just a single circulator, there are no pumps on the manifolds. The BT25 sensor is located just above an insulated volumiser, so once the circulator stops, it will take a long time for the temperature the sensor sees to decay. This would explain why there’s such long gaps in between runtimes, I’ve now set the circulator on ‘Auto’ and set it to run at 10% between cycles. I’ll report back what difference this makes…

Are there any settings to set how much influence the BT50 indoor sensor has? It seems in my case it was having too much influence, coupled with the slow response time of UFH.

In my case the BT50 is located in a windowless hallway, so wouldn’t be much use for sensing solar gain, in fact the hallway is a terrible place since it’s adjacent to the front door, so would be getting a cold bast of air every time the front door is opened! I think it’s best I keep it disabled!

Interesting, thanks for sharing your findings. I agree, I’m sceptical how much load shifting is possible with a heat pump without a battery being involved. Possibly if a house is very well insulated with a lot of UFH thermal mass it might work, but for most houses I don’t think people will want the temperature to drop and the inefficiency of the HP having to work harder to re-gain the lost degrees.

1 Like

Good to hear it’s settled down somewhat with the room sensor disabled.

Yes indeed. It’s in Menu 1.9.4 “Room Sensor Settings” - which is presumably where you disabled use of BT50 (unless you physically disconnected it):

  • The “control room sensor” tick-box determines whether the Room Sensor (BT50) has any impact on the WC algorithm’s Target flow temperature
  • The “heating factor” determines how much impact the Room Sensor has
    • This is just about the most cryptically-named configuration setting NIBE systems have!
    • I have mine set to a factor of 4.0, which is pretty high (the maximum permitted being 6.0)
      • My sensor is on the first-floor landing of a three-storey house, with only a non-opening, triple-glazed, north-facing window on that landing - so it’s a robust indicator of the overall indoor temp
      • I have a lot of thermal mass and the Room Sensor is only indirectly affected by the passive solar gain so that ‘high’ factor seems to work well for me
    • I presume this ‘factor’ gets used as follows: if the room is 0.5 degrees too cold, the Target temp is adjusted by 0.5 x 4.0 = 2 degrees
1 Like

That’s an important change to have made, so the warm water in the volumiser gets circulated through the UFH slab even when the compressor is off (and BT25 sees a more representative value for the flow temp through the UFH loops).

I have my charge pump set to 20% when the compressor is off - but I have a GSHP so that water isn’t going outside and it’s only losing heat to the plant room (which is inside the thermal envelope). Your 10% sounds sensible - enough to keep the water moving through the volumiser but not so high that you’re losing too much heat in the outdoor unit or the connecting pipework.

Interesting, I don’t see any of those options. I just see a tick box to enable or disable the sensors control of ‘Heating’

Agree, nowhere in the manual does it mention that this is a necessary setting for open-loop systems without a secondary pump. It seems most NIBE systems include buffers.

I should probably mention the UFH in this property is in suspended timber floors, it’s a chapel conversion there is no slab, for this reason I’ve set the flow setting, climate system ( to ‘rads + UFH’ even though there are no rads, since the response time of timber based UFH is probably somewhere in-between rads and slab UFH?

Ah, my mistake: you’ve got an SMO S40 controller, not an SMO 40 as I’d mis-read (which has the same options as my SMO 20-like F1145 GSHP). Looks like the S-series doesn’t offer the option to configure the ‘factor’, not even in the Service Menu.

Then again, the S-series has all the funky stuff like using a weather forecast as part of the WC control - although I don’t know of anyone who is using that.

Excellent. It seems to be heading where you want it to. I note from your plot you still have some long run times but some very short off times. Maybe this is good / correct behaviour but it’s different to mine, I get about an hour on and hour off to maintain my temperature. I guess every set up is slightly different but I’m not entirely clear how Nibe expect their system to perform in this regard. All opinions most welcome.

The question I have, is it better to try and tune the system to achieve long / constant running so the degree minutes hover just below 0. Or is it better to cycle on and off like I tend to. I wouldn’t call this short cycling but more on/off control based on the degree minute algorithm. I don’t know which is best but I fear with my 16kw unit constant running will use a lot more electricity than on and off cycling (which still uses a lot!!)

Update: It’s continuing to run as expected following WC and maintaining a steady indoor temperature. Setting to pump to ‘Auto’ seems to have solved the long off time issue. Thanks a lot for all your help.

Having said all this I may have to re-enable the indoor sensor, since this is a rental property I think tenants will expect some degree of easy understandable temperature control. While the property is still unoccupied, I’ll experiment with re-enabling the sensor again to see what effect is has.

It’s a shame it’s not possible to adjust the indoor sensor to have a small effect, but it seems like the SMO S40 does not have these fine controls.

The lowest modulation of your 16kW unit is probably around 5kW which is probably too much heat for your house unless it’s cold, therefore the only option is for the unit to cycle. I guess long vs short runtimes is a trade-off of how much internal temperature swings do you want. In terms of cost savings, I don’t think it makes much difference, as long as the runtimes are not crazy short.

1 Like

Update: The system is now running as expected, even with the indoor temp sensor enabled.

So the most important setting here was setting the pump to ‘auto’ instead of ‘intermittent’ which is key for an open-loop system without a secondary pump, and the realisation that if the system has been off for a while the degree minutes will be negative therefore flow temp will be increased temporarily to compensate. It may take a while for the algorithm to sort itself out.

Thanks again for your help.


Great news.

I have 2 secondary pumps so I get away with the intermittent setting. This is a very useful piece of knowledge that isn’t documented by Nibe as far as I know.

1 Like

It’s good to hear this is all now working as expected, and after what ended up being a simple configuration change.

To summarise what we knew already about NIBE systems and what we’ve learned from this installation:

  • The BT25 sensor reading (‘External Flow Temperature’) is critical to the successful operation of the NIBE Weather Compensation control algorithm
    • The controller aims to make the BT25 reading match the S1 ‘Calculated’ (i.e. Target Flow Temperature) on average
      • The ‘Degree Minutes’ value is used to track the over- or under-shoot of BT25 versus S1
      • Negative DMs mean the actual flow temp (BT25) has been lower than the target flow temp (S1) - and will trigger the compressor to start once they get ‘negative enough’ (controlled via a configuration setting)
  • The BT25 sensor is typically installed at the top of a Buffer / Volumiser tank, where that is present on the Flow side of the circuit, or can be strapped to the flow pipe downstream of the DHW Diverter Valve
  • It is important for the BT25 sensor to ‘see’ some flow - even when the compressor is not running - in order for the BT25 reading to accurately represent the water temperature in the emitter circuit
    • If it is the NIBE ‘charge pump’ (rather than some secondary circulation pump) that is responsible for the flow past the BT25 sensor, the charge pump should be configured so that it runs at a low speed (10 - 20%) even when the compressor is off

Yeah the BT50 sensor works pretty well on my system (i don’t have UFH though).
I have tried various levels of sensitivity (multiplier) to the indoor temp and currently settled on a 1.2x factor.

1 Like