Heat pump monitorin...
 
Notifications
Clear all

Heat pump monitoring - what are you using?

52 Posts
10 Users
25 Reactions
3,288 Views
(@johnmo)
Prominent Member Member
2299 kWhs
Joined: 2 years ago
Posts: 422
 

Install so far straight forward. Inserted the new electric meter between the the outgoing lead from fuse the existing heat pump electric meter in its own enclosure. Managed to connect so it was reading a negative number so swopped the live wires round to resolve.

IMG20240825123203

The web page is pretty much configure to allow you read data straight away. But took a while to get my head round how to navigate.

Screen shot of what I see, basically just electric, outside temp and there is a DHW flag but I think it needs connecting to something else for a stronger reading, 

Screenshot 2024 08 25 16 42 25 46 40deb401b9ffe8e1df2f1cc5ba480b12

Just waiting for a M bus to heat meter reader.

Maxa i32V5 6kW ASHP (heat and cooling)
6.5kW PV
13.5kW GivEnergy AIO Battery.


   
👍
1
ReplyQuote
cathodeRay
(@cathoderay)
Famed Member Moderator
9917 kWhs
Joined: 3 years ago
Posts: 1996
 

Posted by: @lucia

I'm wondering how someone like me, who runs away screaming when pointed at Github, manages to monitor their heat pump system for all the key factors like flow and return temps, power use, outside/inside temperatures, SCOP etc. 

...

I'm asking for self-interested reasons - it seems to be an arcane science - but also because I think it is an under-discussed topic.

There has in fact been plenty of discussion, but it is probably not easy to find unless you know the right search terms, and I am not sure what they are!

In effect, there are three routes to monitoring:

(a) rely on the manufacturer's app or whatever. Easy, but constrained 100% by whatever the manufacturer wants to let you see. Whatever.

(b) what we might broadly call third party solutions, ranging from Home Assistant (very Home Assistant, very Marmite) and the other various hardware/software packages through to things like Homely. Almost all will involve some sort of expenditure (sometimes not trivial) and most will require DIY and computing skills. At the most expensive, most complex end of this route you get third party sensors, ie you are no longer reliant on the manufacturer's data, which may or may not be tweaked in various ways (we just don't know, and given dieselgate, we should probably be wary unless we can do some verification, which often can be done). 

(c) the DIY approach, typically using something called a modbus connection to the AHSP or its controller. Many (50% or more?) AHSPs have modbus, you just have to find out how to access it), and the simplest most reliable way to connect is by wire; the data collected over this connection goes into a database, from where it can be viewed and analysed. One compromise is that I monitor the manufacturer's sensors/data, and so am dependent on the manufacturer not cooking the books. This is the route I chose, and although it does require modest expenditure, some DIY stuff and some computing ability, it is definitely not beyond what I call the reasonably capable interested amateur. I then plot the results using a plotting package from python (python being a relatively easy to use programming language eg if room is too hot, then turn the heating down a bit). The charts look like this, and as you can see, they cover most if not all the variables you are interested in:

image

 

This is a week at the end of last January (you can zoom and pan these charts to your heart's content). You can see among other things:

(a) frequent cycling (the zig-zag in the upper chart), though if you zoom in, it is not necessarily detrimental cycling, at about two cycles per hour

and, as it was cold on the night of the 26th/27th Jan,

(b) multiple defrost cycles (these are marked by the actual LWT (leaving water temperature, the temp of the water as it leaves the heat pump) dropping below the Actual RWT (returning water temperature, the temp as it returns to the heat pump)

(c) how the hourly energy consumption goes up, and the hourly COP (blue line on the chart) falls rather dramatically during this period of defrost cycling.

I have partly written up how to do this on the forum, see here, but was overtaken by various events before I could complete it. I have every intention of completing the write up this coming winter...     

      

Midea 14kW (for now...) ASHP heating both building and DHW


   
👍
1
ReplyQuote
Toodles
(@toodles)
Famed Member Contributor
11253 kWhs
Veteran
Joined: 2 years ago
Posts: 1818
 

@cathoderay Being a renewable energy nerd sans programming ability, I have taken the middle but relatively expensive Homely mode; I am reliant on the manufacturer’s honesty and the installer’s ability to ensure my ASHP is running efficiently. I realise that I could employ external monitoring and bypassing what the manufacturers are telling me but, even if I did that, I doubt that I could better the settings Homely chooses dynamically anyway.

External metering might be more accurate to tell me the COP or even the SCOP I suppose - but my system would still be consuming the same amount as the system did without the more precise measurements. 😉

I’ll stick with the present arrangement and just sprinkle a little salt on the COP readings - my consumption history over the last few years during which N-Power then Eon Next and more recently Octopus Energy has been very difficult to tie down to weekly / monthly consumption as the first two suppliers made a total mess of my meter reading throughout the time they supplied me. As best I can tell, (allowing for all the changes I have made to the property’s heat loss, added solar PV, added battery storage, method of heating, going all electric) added an ASHP and removed the gas heating and cooking, our annual consumption is somewhat lower than it was. Another twelve months time, and I feel I will have enough data to make an accurate account of the savings. Regards, Toodles.

This post was modified 7 months ago by Toodles

Toodles, he heats his home with cold draughts and cooks his food with magnets.


   
ReplyQuote
cathodeRay
(@cathoderay)
Famed Member Moderator
9917 kWhs
Joined: 3 years ago
Posts: 1996
 

Posted by: @toodles

Being a renewable energy nerd sans programming ability, I have taken the middle but relatively expensive Homely mode; I am reliant on the manufacturer’s honesty and the installer’s ability to ensure my ASHP is running efficiently. I realise that I could employ external monitoring and bypassing what the manufacturers are telling me but, even if I did that, I doubt that I could better the settings Homely chooses dynamically anyway.

I also rely on the manufacturer's data, but, as noted above, I do have some ways of verifying some of the data. For example, I have an independent heat pump dedicated kWh meter (not modbus enabled, so I can't wire it in) which I can and do read manually. The energy in data it produces is similar to, but not the same as, the data Midea make available. I have yet to determine why the Midea data is different. I also have a crude analogue flow meter in the primary circuit, and thereby can verify one of the key determinants of energy out (the other two are delta t between LWT and RWT, which I can get crude IR thermometer readings for, and specific heat of the circulating fluid, which is a known). I can therefore get a tolerable independent manual estimate of energy out, and that means that, given I also have energy in, I can calculate an independent COP. These are ad hoc manual checks, not automated monitoring running in parallel, but they do at least provide a way of checking Midea's data. By and large, the discrepancies aren't that great.

The system I use also allows for basic Homely like dynamic controls, the 'if the room is too hot, then turn down the LWT a bit, if it is too cold, then turn up the LWT a bit' type controls. I could add, with a bit of slightly more complex coding, anticipatory controls based on weather forecasts, but as the forecasts aren't always even close to the actual weather, I haven't bothered. The room temp being over or under temp is one of the most useful variables to use to tweak the system, because it is the end result of all the other factors currently (and recently) in play eg solar gain/doing a lot of cooking will cause the room temp to overshoot, wind and rain chill will cause it to undershoot, and my automatic dynamic control then just tweaks the LWT whichever way it needs to go.

To give an idea of the coding complexity involved, I reproduce below the full heavily commented (makes it look much busier than it is!) python code from my auto-adaption script. The script runs all the time in the background, if there is a power cut (as happened yesterday!), it gets restarted automatically. It first sets up the modbus connections, one to the Midea wired controller, one to my independent room temp sensor, and then checks the room temperature (aIAT - dIAT, actual indoor air temp minus desired indoor air temp) every hour (the scheduler is at the bottom of the code), and tweaks the LWT as needed by moving the ends of the weather compensation curve (WCC) up or down. It looks like a lot of code, but it is very repetitive, if X do Y, with elif being shorthand for 'else if' - it simply runs through the code which executes a series of if X do Y statements. It also logs it's activity to a log file, that way I can check it is doing it's thing (it does). Note that a Midea modbus connection allow you to both read and write to the controller, that is, I can both get a variable's value, and in some cases set the value, eg the ends of the WCC. This is extremely useful...

import minimalmodbus
import serial
from datetime import datetime
import schedule
import time
import os
import sys

# I think these are needed to keep things running smoothly...
os.fork() and sys.exit()

# set up the wired controller connection
instrument = minimalmodbus.Instrument('/dev/ttyUSB0', 1)  
instrument.serial.port  
instrument.serial.baudrate = 9600         
instrument.serial.bytesize = 8
instrument.serial.parity   = serial.PARITY_NONE
instrument.serial.stopbits = 1
instrument.mode = minimalmodbus.MODE_RTU

# set up the aIAT sensor connection (uses the same serial settings as above)
instrument_MD02 = minimalmodbus.Instrument('/dev/ttyUSB0', 3)
instrument_MD02.mode = minimalmodbus.MODE_RTU

# set the desired IAT
dIAT = 19

# baseline standard WCC pre auto-adapt was 58@-4 / 33@15
# auto-adapt started 0800 30th Oct 2023

def hrCheck():

    # check DHW is NOT running (ie reg0 is not 6) and only do hrCheck it it is not running
    # reg0 = instrument.read_register(0)   ## doesn't work, DHW can be on, but not actually heating as tank is > 40 degrees
    # use valve position instead

    on_off = instrument.read_register(129, 0)
    valve_pos = "{:08b}".format(on_off)[-5]      # 1 = DHW is on, 0 = DHW is off

    # note valve_pos is a string, not an integer, hence need '0' not 0
    if valve_pos == '0':

        #print(f'valve_pos={valve_pos}')
        #print(type(valve_pos))
            
        # get a datetime for logging
        now = datetime.now()
        now = now.strftime("%Y-%m-%dT%H:%M:%S")
        
        # get the aIAT (it is reported as x 10, ie 12.6 as 126 so need to divide by 10)
        aIAT = instrument_MD02.read_register(1, 0, 4)/10

        #sleep a while to reduce bus collisions
        time.sleep(0.1)    

        # compare the aIAT to the dIAT and set the ends of the WCC accordingly
        # for now, keep it simple, no loops, write code out in full

        # set the baseline, non-adapted curve values
        #  NOTE MAX value for left hand end =60, baseline plus adaption must not exceed this 
        # log changes here
        # original values: left/right: 56/32
        # 2023-11-08 1655: 56/34
        
        leftBase = 56
        rightBase = 34
        
        if aIAT - dIAT >= 3:     # house is too warm, lower ends of WCC by 3 degree C
            instrument.write_register(265, leftBase - 3, 0)  
            instrument.write_register(266, rightBase - 3, 0)
            # sleep then get current WCC settings, just to be sure
            time.sleep(0.1)
            leftWCC = instrument.read_register(265, 0)
            rightWCC = instrument.read_register(266, 0)
            with open('./modbus/auto_adapt_log.csv', 'a') as f:
                f.write(f'\n{now},{round(aIAT - dIAT, 1)},{leftWCC},{rightWCC}') 

        elif aIAT - dIAT >= 2 and aIAT - dIAT < 3:     # house is too warm, lower ends of WCC by 2 degree C
            instrument.write_register(265, leftBase - 2, 0)  
            instrument.write_register(266, rightBase - 2, 0)
            # sleep then get current WCC settings, just to be sure
            time.sleep(0.1)
            leftWCC = instrument.read_register(265, 0)
            rightWCC = instrument.read_register(266, 0)
            with open('./modbus/auto_adapt_log.csv', 'a') as f:
                f.write(f'\n{now},{round(aIAT - dIAT, 1)},{leftWCC},{rightWCC}') 

        elif aIAT - dIAT >= 1 and aIAT - dIAT < 2:     # house is too warm, lower ends of WCC by 1 degree C
            instrument.write_register(265, leftBase - 1, 0)  
            instrument.write_register(266, rightBase - 1, 0)
            # sleep then get current WCC settings, just to be sure
            time.sleep(0.1)
            leftWCC = instrument.read_register(265, 0)
            rightWCC = instrument.read_register(266, 0)
            with open('./modbus/auto_adapt_log.csv', 'a') as f:
                f.write(f'\n{now},{round(aIAT - dIAT, 1)},{leftWCC},{rightWCC}')

        elif aIAT - dIAT > -1 and aIAT - dIAT < 1:     # house is right range, set non-adapted WCC ends
            instrument.write_register(265, leftBase, 0)  
            instrument.write_register(266, rightBase, 0)
            # sleep then get current WCC settings, just to be sure
            time.sleep(0.1)
            leftWCC = instrument.read_register(265, 0)
            rightWCC = instrument.read_register(266, 0)
            with open('./modbus/auto_adapt_log.csv', 'a') as f:
                f.write(f'\n{now},{round(aIAT - dIAT, 1)},{leftWCC},{rightWCC}')

        elif aIAT - dIAT > -2 and aIAT - dIAT <= -1:     # house is too cool, raise ends of WCC by 1 degree C
            instrument.write_register(265, leftBase + 1, 0)  
            instrument.write_register(266, rightBase + 1, 0)
            # sleep then get current WCC settings, just to be sure
            time.sleep(0.1)
            leftWCC = instrument.read_register(265, 0)
            rightWCC = instrument.read_register(266, 0)
            with open('./modbus/auto_adapt_log.csv', 'a') as f:
                f.write(f'\n{now},{round(aIAT - dIAT, 1)},{leftWCC},{rightWCC}')

        elif aIAT - dIAT > -3 and aIAT - dIAT <= -2:     # house is too cool, raise ends of WCC by 2 degree C
            instrument.write_register(265, leftBase + 2, 0)  
            instrument.write_register(266, rightBase + 2, 0)
            # sleep then get current WCC settings, just to be sure
            time.sleep(0.1)
            leftWCC = instrument.read_register(265, 0)
            rightWCC = instrument.read_register(266, 0)
            with open('./modbus/auto_adapt_log.csv', 'a') as f:
                f.write(f'\n{now},{round(aIAT - dIAT, 1)},{leftWCC},{rightWCC}')

        elif aIAT - dIAT <= -3:     # house is too cool, raise ends of WCC by 3 degree C
            instrument.write_register(265, leftBase + 3, 0)  
            instrument.write_register(266, rightBase + 3, 0)
            # sleep then get current WCC settings, just to be sure
            time.sleep(0.1)
            leftWCC = instrument.read_register(265, 0)
            rightWCC = instrument.read_register(266, 0)
            with open('./modbus/auto_adapt_log.csv', 'a') as f:
                f.write(f'\n{now},{round(aIAT - dIAT, 1)},{leftWCC},{rightWCC}')

        else:      # only gets executed if nothing matches ie an error has occured
            # sleep then get current WCC settings, just to be sure
            time.sleep(0.1)
            leftWCC = instrument.read_register(265, 0)
            rightWCC = instrument.read_register(266, 0)
            with open('./modbus/auto_adapt_log.csv', 'a') as f:
                f.write(f'\n{now},{round(aIAT - dIAT, 1)},{leftWCC},{rightWCC},error, WCC ends were not set')
            
#def hwON():
#    instrument.write_register()

# do the check every hour at 10m 30s past the hour (won't accept '00' for minutes)
# changed to 10m 30s to test whether running hrCheck turns off DHW at 13:10:30 
schedule.every().hour.at("10:30").do(hrCheck)

# after running 13:01:30 hrCheck make sure DHW is on
# schedule.every().day.at("13:03:30").do(hwON)

# uncomment this to cancel schedule temporarily
# schedule.clear()

# for testing, uncomment this line and kill/restart in terminal to get one off run
# schedule.run_all()

while True:
    schedule.run_pending()
    time.sleep(1)

  

       

Midea 14kW (for now...) ASHP heating both building and DHW


   
👍
1
ReplyQuote
(@johnmo)
Prominent Member Member
2299 kWhs
Joined: 2 years ago
Posts: 422
 

Posted by: @cathoderay

In effect, there are three routes to monitoring:

Well 4 really, you have missed heat pump monitor. It not reliant on anything from the heat pump, so no need to tap in to modbus etc. Class 2 heat meter, electric meter, outside temperature from that you get everyone need to monitor. All pre configured ready to install and go 

Maxa i32V5 6kW ASHP (heat and cooling)
6.5kW PV
13.5kW GivEnergy AIO Battery.


   
ReplyQuote
(@old_scientist)
Reputable Member Member
783 kWhs
Joined: 9 months ago
Posts: 110
 

Following this thread with much interest.

Posted by: @cathoderay

I also rely on the manufacturer's data, but, as noted above, I do have some ways of verifying some of the data. For example, I have an independent heat pump dedicated kWh meter (not modbus enabled, so I can't wire it in) which I can and do read manually. The energy in data it produces is similar to, but not the same as, the data Midea make available. I have yet to determine why the Midea data is different.

@cathoderay I have a Samsung Gen6. I have an independent electricity meter showing ASHP usage. The numbers don't quite match the Samsung data, but I put this down to the fact on my circuit the meter is only measuring ASHP unit consumption (on a separate RCD circuit) and does not include the two 50W circulating pumps nor the couple watts drawn by the Samsung controller itself. When taken into consideration, I am satisfied the values are consistently reliable.

I found the rest of your post very enlightening, particularly your dynamic modification of LWTs based on room temp as affected by external factors other than outside ambient temperatures - brilliant!

My installation is new, and at present I'm stuck manually taking readings daily and recording them in a spreadsheet. I have reliable electrical metering, manufacturers temp sensors, and electronic and mechanical flow meters installed. I have some limited python knowledge and a technical background, so am keen to work out how to increase my monitoring capability, but an reluctant to install any invasive monitoring equipment - sticking a sensor on a pipe is OK, but I'm not prepared to cut into pipework to install additional measuring meters. I guess my next task should be to determine if my controller has modbus capability to allow me to read and record data more  frequently, and to modify settings such as LWT (Edit - I see it does with an additional modbus module that can be purchased separately)

This post was modified 6 months ago 2 times by Old_Scientist

   
ReplyQuote



bontwoody
(@bontwoody)
Noble Member Contributor
5014 kWhs
Joined: 3 years ago
Posts: 741
 

@old_scientist The samsung Gen 6 can use modbus to communicate but it needs an additional PCB in the outside unit. I believe Homely uses the same card, like this

 

image

https://midsummerwholesale.co.uk/buy/samsung-heat-pumps/Samsung-modbus-MIM-B19

House-2 bed partial stone bungalow, 5kW Samsung Gen 6 ASHP (Self install)
6.9 kWp of PV
5kWh DC coupled battery
Blog: https://thegreeningofrosecottage.weebly.com/
Heatpump Stats: http://heatpumpmonitor.org/system/view?id=60


   
👍
1
ReplyQuote
Toodles
(@toodles)
Famed Member Contributor
11253 kWhs
Veteran
Joined: 2 years ago
Posts: 1818
 

@bontwoody In the case of my Daikin ASHP, Homely supplied the DCOM-LT/IO Modbus for the install. (I’m uncertain whether that is ‘IO’ or ‘10’ but I think IO) and the supplied manual has ‘loads’ of dip switch combinations for many configurations! Regards, Toodles.

Toodles, he heats his home with cold draughts and cooks his food with magnets.


   
ReplyQuote
Toodles
(@toodles)
Famed Member Contributor
11253 kWhs
Veteran
Joined: 2 years ago
Posts: 1818
 

This is the unit I have:

https://www.saturnsales.co.uk/Daikin%20DCOM-LT-IO%20Modbus%20Sequence%20Controller.html

Regards, Toodles.

Toodles, he heats his home with cold draughts and cooks his food with magnets.


   
ReplyQuote
(@old_scientist)
Reputable Member Member
783 kWhs
Joined: 9 months ago
Posts: 110
 

Posted by: @bontwoody

@old_scientist The samsung Gen 6 can use modbus to communicate but it needs an additional PCB in the outside unit. I believe Homely uses the same card, like this

 

-- Attachment is not available --

https://midsummerwholesale.co.uk/buy/samsung-heat-pumps/Samsung-modbus-MIM-B19

 

@bontwoody Thanks, that's the one and for other Samsung owners who may be interested I found loads more info here:

https://community.openenergymonitor.org/t/emonhub-support-for-samsung-heatpump-monitoring-via-modbus/21154


   
ReplyQuote
(@judith)
Honorable Member Member
2549 kWhs
Joined: 1 year ago
Posts: 298
 

Question first to @lucia Why?

what each of us need is a method of controlling the temperature of our house. Each ashp has an interface to do that. The key bit is to be shown how to use it, and ensure it is set up for weather compensation with the lowest feasible water flow temperatures.

i understand the Heatgeek optimisation method is to reduce the weather compensation parameters until the house is cold and then increase them a bit. Then let the pump and weather compensation do its own thing. Then monitor electricity usage with the supplier app.

I’m really glad that enthusiast geeks want to robustly monitor their equipment and advance the (b)leading edge of the technology eg. https://community.openenergymonitor.org/t/heatpumpmonitor-org-starts-starts-per-hour/26246 but I hope and expect (as an everyday user) to not need to.

I also realise that many want to fine tune their total renewable technology to minimise their bills in conjunction with their batteries. But for a heatpump alone the extra, specialist degree of control shouldn’t be need surely. Making the optimal use of agile needs extra control certainly.

So fundamentally what do you want the monitoring to do?

 

2kW + Growatt & 4kW +Sunnyboy PV on south-facing roof Solar thermal. 9.5kWh Givenergy battery with AC3. MVHR. Vaillant 7kW ASHP (very pleased with it) open system operating on WC


   
ReplyQuote
(@lucia)
Honorable Member Member
1646 kWhs
Joined: 9 months ago
Posts: 255
Topic starter  

Question first to @lucia Why?

Good question @judith  

Because I want/need to know exactly how my kit is faring, what it is costing me and what, if anything I can do to improve things. And by all accounts the supplied monitoring kit is fairly naff whatever brand of heat pump is installed. 

Before I had a smart meter I was reading my gas/electric meters weekly, every Sunday. Unless I was away of course. I'm shoe string productions I can't afford for things to go astray. Hopefully, I manage this without being a pain in the proverbial... 

I can't afford batteries and solar.

I am on Octopus Tracker and have been from the start of it. That's what prompted weekly meter reads because those prices can/have fluctuated quite dramatically at times. Octopus will generate a bill within days of new readings being supplied. Thus no nasty surprises.

And I turned into an utter energy geek. 🤷🏻‍♀️

I monitor Agile through the Octopus Compare app and would change if necessary.

I had a Twitter chat with one of the Octopus Heat Pump head honchos the other night about their 50º design temps. He admitted that they do it to keep costs down but reckoned it was balanced out by smart tariffs. I think that's a very privileged way of justifying it because those tariffs still need batteries and solar to make a real dent in running costs. 

So back to your Q - good, accurate, accessible, open data, monitoring capabilities should be mandatory with all heat pump installations. It should be universalised from the word go. But it isn't and it won't ever be. 

Sadly, what's available right now is beyond my pay grade and geek capabilities but hopefully someone will come up with something cheaper and easier to install... 

Until then it will bug me... for sure. 


   
👍
1
ReplyQuote



Page 2 / 5
Share:

Join Us!

Heat Pump Dramas?

Thinking about installing a heat pump but unsure where to start? Already have one but it’s not performing as expected? Or are you locked in a frustrating dispute with an installer or manufacturer? We’re here to help.

Pre-Installation Planning
Post-Installation Troubleshooting
Performance Optimisation
✅ Complaint Support (Manufacturer & Installer)

👉 Book a one-to-one consultation now.

Latest Posts

x  Powerful Protection for WordPress, from Shield Security
This Site Is Protected By
Shield Security