Category: Planning

  • Finding the best tariff

    Heat pumps in winter

    Heat pumps are most efficient when they heat radiators to just above room temperature. This requires them to run almost continuously with result that most electricity consumption is during standard or peak times.

    While storage batteries give access to off-peak electricity, conventional tariffs with a single early morning slot are not ideal because the duration to the next slot is too long. A heat pump for a 4 to 5 bedroom running on a cold day consumes about 2kW – 4kW, and would drain a decent sized 13.5kWh battery by midday. Tariffs with multiple off-peak slots per day are prefered because they shorten the discharge periods.

    Heat pumps such as Octopus Energy’s Cosy tariff (above) allow batteries

    Solar pv

    Conversely in spring and summer, houses with solar pv and batteries prefer high export rates.

    With the steady growth in solar generation capacity there is an over supply of electricity.

    An oversupply is developing in the middle of the day which drives down export prices, but which peak in the evening as the sun goes down: the so called “duck curve“.

    Octopus Energy’s Flux export tariff, for example, currently pays 29p/kWh between 4 and 7pm in our area: compared to only 10p/kWh or less at other times.

    Octopus Energy’s Flux tariff

    The result is that the economic benefit of solar generation is progressively reducing unless one can either use it or store it for use export later in the day.

    Avoid generalisations

    Being on the wrong tariff can result in significant and unnecesary penalties – but do not rely on bloggers or suppliers’ marketing to tell you what tariff is best for you. No two homes are alike. Seasons and local weather complicate things further, especially if you have a heat pump or solar pv.

    In particular, “heat pump” tariffs do not automatically make sense for homes with heat pumps. In our our case, we are about £1,400pa better off on Flux Import/Export compared to Cosy: this is because we have a comparatively large 40x panel solar pv array.

    Switching tariffs during the year fine tunes things further: in our case, being on Cosy during the very coldest and darkest months of December and January, reduces electricity costs further by approximately £200pa.

    Simulate to accumulate

    While being on the optimum electricity tariff can result in big savings, finding it is not easy.

    Many home owners are guided by the data from their home energy dashboards, using daily costs before and after switches to confirm their decisions. This is an unreliable because many things like weather, seasonal changes and consumption patterns changes can mislead interpretation of the results.

    A better approach is to simulate tariff options to find the best for your case. To do this, put the tariff possibilities into “energy” tag, set “max_project_duration_years” to 1 year and pick the tariff whose simulation gives the best NPV.

    Nevertheless, there is a limit to how accurate simulators can be. By contrast, home energy controllers measure real data in real time and so, for this reason, I wrote tariff selection into our battery controller. It reviews the tariffs daily and e-mails us when something better is found.

    Some energy providers discourage frequent tariff changes: so choose your supplier and switches accordingly.

  • Requesting my server

    If you don’t want to install the simulator on your server, try mine. It’s up 24/7, but no promises of course concerning either its availability or accuracy.

    Solve a puzzle

    To keep the bots out, my server expects a “token”: the name of the French physicist who discovered the heat pump effect in the early nineteenth century. Google to find his or her full name, form a non-accented character string <token> from it in lower case without spaces and add it as a top level element to your request:

    {
      . . .
      "token": "<token>",
      . . .
    }

    To receive an e-mail when your results are ready, add your e-mail address <email> as a top level element as follows:

    {
      . . .
      "email": "<email>",
      . . .
    }

    Make a request

    POST your json request to:

    https:://renewable-visions.com/wp-json/api/projection

    You should receive a json response immediately, telling you whether your request has succeed or failed.

    Fixing errors

    If your request has an error, the server will respond with 400 Bad request and a json diagnostic, for example:

    {
        "message": "'storage_hot_water' component is missing"
    }

    Keep fixing your errors your request is accepted and you see .

    Successful request

    If your request is successful, the server will respond 201 Created and a message with the url to your results:

    {
        "message": "Get your result at <url>. Will e-mail you when ready at <email>.",
        "request": {
            ....
         }
    }

    The response also contains a copy of your request. If you omitted optional parameters, it will include assumptions made in their absence.

    Simulations can take several minutes to run, or longer if the server has a queue of requests.

  • “demands”

    The simulator needs the following annual energy demands:

      "demands": {
        "space_heating_thermal": {
          "type": "climate_heating",
          "total_annual_kwh": 17855,
          "hourly_consumption_weightings": {
            "0" : 0,
            "6" : 1,
            "8" : 0,
            "16": 1,
            "22": 0
           },
          "target_circadian_phase_lag_hours": 3
        },
        "hot_water_thermal": {
          "type": "fixed",
          "total_annual_kwh": 2333.0,
          "hourly_consumption_weightings": {
            "0": 0,
            "7": 2,
            "8": 0.1,
            "22": 0
          }
        },
        "non_heating_electric": {
          "type": "fixed",
          "total_daily_kwh": 10,
          "hourly_consumption_weightings": {
            "0": 0.5,
            "7": 2,
            "21": 1,
            "23": 0.5
          }
        }
      },

    The annual total demands are in your EPC certificate:

    • “space_heating_thermal” is for room heating: state the hours of the day when your heating starts and when it stops. For example “0” : 0, “6” : 1, “8” means start the day with no heating, switch on at 6am, then off at 8am. Set “target_circadian_phase_lag_hours” to up to 6 hours according to how well your house is insulated. Use the “climate_heating” model to estimate heating power from “total_annual_kwh” and time of day and year;
    • “hot_water_thermal” is for heating hot water: state weightings for hot water usage. For example, “0”: 0.5, “7”: 2, “21”: 1 means a 0.5 relative weighting from midnight, until 7am when weighting increases to 2 until 9pm when it reduces to 0.5. Use the “fixed” model to estimate heating power from “total_annual_kwh” and these weightings.
    • “non_heating_electric” is daily electricity consumption excluding space and water heating (e.g. cooking, fridge, lighting, TV): best obtained by deducting from your electricity bill. As for hot water, use the “fixed” model and hourly weightings to allocate relative power according to time of day. For example, “0”: 0.5, “7”: 2, “21”: 1, “23”: 0.5 means a 0.5 weighting between midnight and 7am, then a 2 weighting until 9pm, then reducing to 0.5.

  • “energy”

    List the energy tariffs for your boiler (e.g. a gas or oil tariff) and the “grid” (electricity) under their respective keys:

      "energy": {
        "boiler": {
          . . .
          . . .
        },
        "grid": {
          . . .
          . . .
          },     
        }
      },

    Add an array of tariffs inside each of “boiler” and “grid” according to the months they apply, by time of day and whether import of export.

    For “boiler”, use a single import only tariff across all months, with a single “standard” time band throughout the day.

    “grid” may contain muliple tariffs, broken in by “off_peak”, “standard”, “peak” time bands throughout the day. For example, houses with both heat pump and solar pv renewable components can benefit from heat pump friendly tariffs in the winter, and export friendly ones at during spring, summer and autumn.

    To describe each tariff:

    • add a “name” for it;
    • add an array “months” containing the month numbers (1:Jan, 2:Feb etc) for which each tariff applies. Include, without duplicating, a tariff for each month;
    • include an “import” object describing its cost where:
      • “hours”: is a list of hours using the 24 clock corresponding to when a time band commences: “off_peak”, “standard” or “peak”. Include the commencing band at the beginning of the day (“0”). In the below example, the “standard” grid import tariff is between midnight and 2am, 5am to 4pm and 7pm to midnight;
      • “bands_gbp_per_kwh”: is a list of the named tariffs and their costs per kilowatt hour;
      • “limit_kw”: the maximum power rate at which you can import this energy source, if there is one.
    • include an “export” object describing its sale price if the energy type can be exported (e.g. “grid”):
      • “hours”: same as above, except for export;
      • “bands_gbp_per_kwh”: same as above, except for export;
      • “limit_kw”: same as above, except for export.
    • “gbp_per_day” is a flat daily rate, if there is one;
    • “inflation_real_pa” forecasts for how the energy price1 will inflate2.

    For example:

      "energy": {
        "boiler": {
           "tariffs": [
              {
                "name": "Heating oil",
                "months": [1,2,3,4,5,6,7,8,9,10,11,12],
                "import": {
                  "hours": {
                    "0": "standard"
                  },
                "bands_gbp_per_kwh": {
                  "standard": 0.055
                  }
                }
              }
          ],
          "inflation_real_pa": 0.03
        },
        "grid": {
          tariffs": [
            {
            "name": "Octopus Flux Import, Export",
            "months": [3,4,5,6,7,8,9,10],
            "import": {
              "hours": {
                "0": "standard",
                "2": "off_peak",
                "5": "standard",
                "16": "peak",
                "19": "standard"
              },
              "bands_gbp_per_kwh": {
                "off_peak": 0.1634,
                "standard": 0.2724,
                "peak": 0.3814
              },
              "limit_kw": 24.0
            },
            "export": {
              "hours": {
                "0": "standard",
                "2": "off_peak",
                "5": "standard",
                "16": "peak",
                "19": "standard"
              },
              "bands_gbp_per_kwh": {
                "off_peak": 0.0474,
                "standard": 0.1332,
                "peak": 0.266
              },
              "limit_kw": 8.5
            },
            "gbp_per_day": 0.4155
            },
            {
              "name": "Octopus Cosy - SEG",
              "months": [1,2,11,12],
              "import": {
                "hours": {
                  "0": "standard",
                  "4": "off_peak",
                  "8": "standard",
                  "13": "off_peak",
                  "16": "peak",
                  "19": "standard",
                  "22": "off_peak"
                },
                "bands_gbp_per_kwh": {
                  "off_peak": 0.1272,
                  "standard": 0.2594,
                  "peak": 0.3891
                },
                "limit_kw": 24.0
              },
              "export": {
                "hours": {
                  "0": "standard"
                },
                "bands_gbp_per_kwh": {
                  "standard": 0.041
                },
                "limit_kw": 8.5
              },
              "gbp_per_day": 0.4155
            }
          ],
          "inflation_real_pa": 0.0    
        }
      },
    1. I.e. “bands_gbp_per_kwh” and “standing_gbp_per_day. ↩︎
    2. Being neither politician nor economist, your crystal ball is as good as mine. Personally, I assume that electricity inflation will lag fossil fuel inflation by 3 percent per annum based upon long range price trends in previous years, that today’s electricity prices are higher and tied more to wholesale gas prices compared to the rest of Europe and the UK Government’s professed commitment to net-zero. ↩︎

  • “panels”

    Use “panels” to describe each type of panel you use. Here’s an example of a solar pv “panel” description:

    "panel": {
       "panel": "AIKO 455W",
       "width_m": 1.134,
       "height_m": 1.722,
       "cost": {
         "per_panel_gbp": 0.0,
         "maintenance_per_panel_pa_gbp": 5.00
       },
       "efficiency": {
         "spec": 
         "percent": 23.1,
         "loss_percent_pa": 0.3,
         "loss_percent_per_celsius": 0.29,
         "temperature_reference_celsius": 25
        },
        "power_max_w": 455.0,
        "lifetime_years": 25,                 "thermal_inertia_m2_second_per_w_celsius": 1000
    },

    If more than one panel type is used, describe each type within a “panels” array using the format example below:

        "panels": [
          {
            "panel": "AIKO 455W",
            "#": "AIK-A-MAH54-445-AB Gen 2 All Black",
            "cost": {
              "gbp" : 100.0,
              "gbp_per_year" : 1.0
            },
            "width_m": 1.134,
            "height_m": 1.722,
            "power_max_w": 455.0,
            "lifetime_years": 25,
            "thermal_inertia_m2_second_per_w_celsius": 1000,
            "efficiency": {
              "percent": 23.1,
              "loss_percent_per_year": 0.3,
              "loss_percent_per_celsius": 0.29,
              "temperature_reference_celsius": 25
            }
          },
          {
            "panel": "AIKO 470W",
            "#": "Aiko Neostar 3S+ 470W N-Type ABC, Gen 3, 54 Cell, All Black",
            "cost": {
              "gbp" : 110.0,
              "gbp_per_year" : 1.0
            },
            "width_m": 1.134,
            "height_m": 1.722,
            "power_max_w": 470.0,
            "lifetime_years": 25,
            "thermal_inertia_m2_second_per_w_celsius": 1000,
            "efficiency": {
              "percent": 24.3,
              "loss_percent_per_year": 0.3,
              "loss_percent_per_celsius": 0.29,
              "temperature_reference_celsius": 25
            }
          }
        ],

    Within each collector, reference the relevant type using “panel” and the number of panels “panels_number” inside each collector description in “collectors”, for example:

    "collectors": {
       "collector A": {
          . . . 
          "panel": "AIKO 455W",
          "panels_number": 16,
          . . . 
       },
       "collector B": {
          . . . 
          "panel": "AIKO 470W",
          "panels_number": 12,
          . . . 
       },
       "collector C": {
          . . . 
          "panel": "AIKO 470W",
          "panels_number": 8,
          . . . 
       }
    },

    “gbp” and “gbp_per_year” specifies initial and ongoing per unit costs. These are multiplied by “panels_number” and summed.

    A collector can specify only a single type of panel. Create another collector if you want to include an additional panel type.

  • “collectors”

    A collector is a plane on which solar panels of a particular type are mounted. A house can have multiple collectors. For example, a collector on a south facing roof and another on a south-west facing roof. Give each collector a name, e.g. “collector A” and “collector B” in the below example.

    For multiple panel types within a same plane, create a separate collector for each type.

    For each collector:

    • name your collector using “name” (optional);
    • use “include” to include it in the simulation;
    • if the collector is shaded, express in “shading_factor” its average shading across the year as a fractional factor corresponding to the average proportion of light that reaches it1;
    • give the number of panels in “panels_number” if you know it. Alternately give in “area”:
      • “border_m”: the width of a border area where panels cannot be placed;
      • dimensions of the collector’s ground footprint along the tilt axis (“tilt_m”) and line of slope (“other_m”) to allow the simulator to use the maximum number that will fit from the panel dimensions;
    • give its “orientation” by stating its “type” as “tilted” giving the angle of tilt above the horizontal in “tilt_degrees”, and tilt direction from true north in “azimuth_degrees”;
    • specify initial and on-going costs in “costs” under “gbp” and “gbp_per_year” respectively;
    • identify the type of panel in “panel”: see also here.

    See example below:

        "collectors": {
          "collector A": {
            "include": true,
            "panel": "AIKO 455W",
            "panels_number" : 0.9,
            "shading_factor": 1.0,
            "area": {
               "dimensions_footprint_axis": {
                  "tilt_m": 6.0,
                  "other_m": 1.9
                  },
               "orientation": {
                  "type": "tilted",
                  "tilt_degrees": 35,
                  "azimuth_degrees": 185
                  }
               }
            },        
          "collector B": {
            "include": false,  
            "panel": "AIKO 470W",  
            "shading_factor": 0.7,
            "panels_number": 5
            "cost": {
              "gbp": 1500.0,
              "gbp_per_year": 0.0      
            },
            "orientation": {
              "type": "tilted",
              "tilt_degrees": 45,
              "azimuth_degrees": 270
            }
          }
        }
      },

    Costs can be itemised, for example:

            "cost": {
              "gbp": {
                 "materials" : 500.0
                 "labour" : 1000",
              "gbp_per_year": 0.0      
            },

    1. Ranging from 0 (fully obscured) to 1 (no shading). ↩︎
  • “heat_pump”

    Heat pumps move thermal energy from outside to inside, and in reverse when cooling.

    A heat pump outputs cop kilowatt hours of thermal energy for space and hot water heating for every 1 kilowatt hour of electrical energy it consumes. The great attraction of heat pumps is that cop is usually much greater than 1. In other words, they output more energy heat energy than is input as electrical energy. This much more efficient than electrical heaters (cop is 1) or oil/gas boilers (cop typically between 0.5 and 0.95).

    In theory cop can be large (see above) but is usually between 2 and 6, influenced mainly by:

    • engineering limitations;
    • the temperate and climate where your home is located;
    • the number, efficiency, size and condition of radiators in your home;
    • the diameter and length of the central heating plumbing connecting the heat pump to your radiators;
    • how well insulated your home is;
    • the flow capacity of your central heating pipes.

    To describe your heat pump:

    • use the “include” flag to include it;
    • give an accurate average for cop over a year: scop (“seasonal coefficient of performance”) in “scop”. To obtain this reliably, ask a qualified installer to conduct a heat loss survey on your home and include (and preferably guarantee) the scop figure as part of its quotation;
    • in “power” include the maximum heat power output for your heatpump “output_kw”, and its background power consumption “background_w” when not running;
    • in “cost” include in “gbp” the initial costs (including necessary preparatory works, heat pump installation, radiator resizings, buffer tank if fitted), and annual costs (e.g. maintenance) in “gbp_per_year”.
        "heat_pump": {
            "include": true,
            "scop": 4.0,        
            "power": {
               "output_kw": 10.0,
               "background_w": 20
            },
            "cost": {
              "gbp": {
                 "install": 15000.0,
                 "grant": -7500
                 },
              "gbp_per_year": {
                 "maintenance": 250.0
                 }
              },
            "design": {
               "internal_temp_max_c" : 24.0,
               "outside_temp_min_c" : -3.0,
               "cops": {
                    "0": 5.1,
                    "5": 5.0,
                   "10": 4.9,
                   "20": 4.5,
                   "30": 4.0,
                   "40": 3.0,
                   "50": 2.0,
                   "60": 1.5,
                   "70": 1.2,
                   "80": 1.1,
                   "90": 1.0,
                  "100": 0.95
               }
            }   
        },

    The optional “design” tag fine tunes heat pump performance:

    • “internal_temp_max_c” is the maximum room temperature that can be reached when the outside temperature is at its lowest, see below;
    • “outside_temp_min_c” is the lowest outside temperature at which the heat pump can maintain “internal_temp_max_c”;
    • “cops” is how cop varies with temperature expressed as an array of temperature – cop values. These are sometimes included in heat pump datasheets but accuracy is not critical and it can be omitted, especially if you know “scop”.
  • “battery”

    Batteries store energy for later use or export at a profit:

    "battery": {
        "include": true,
        "initial_raw_capacity_kwh": 13.5,
        "cost_install_gbp": 5000.0,
        "max_charge_kw": 6.4,
        "max_discharge_kw": 6.4,
        "cost_maintenance_pa_gbp": 0,
        "round_trip_efficiency_percent": 93,
        "projection": {
          "cycles_to_reduced_capacity": 7500,
          "reduced_capacity_percent": 20
        }    
      },

    “initial_raw_capacity_kwh” gives the battery’s initial capacity at the beginning of the project.

    Include your battery’s maximum charge in discharge powers in “max_charge_kw” and “max_discharge_kw” respectively. All batteries, especially those couple to AC inverters, lose some power when charging and discharging, so you need to state the round trip efficiency in “round_trip_efficiency_percent”.

    “gbp” is the intial cost including installation. If your battery requires annual maintenance (few do) put this in “gbp_per_year”.

    The simulator assumes battery capacity reduces linearly with charge-discharge cycles. For your stated “initial_raw_capacity_kwh”, state the “reduced_capacity_percent” and “cycles_to_reduced_capacity”. I.e. in the above example, capacity reduces to 0.8 * 13.5 kWh (10.8 kWh) after 7,500 cycles.

    Behaviour

    The simulator attempts to satisfy the house load:

    • from the battery, then
    • from the grid.

    The simulator assumes the battery charges as much as possible:

    • from solar generation, then
    • from the grid during off peak periods

  • “insulation”

    The insulation component achieves a percentage reduction in space heating energy demand:

    "insulation": {
    "include": true,
    "cost": {
    "gbp": 2500.0,
    "gbp_per_year": 0.0
    },
    "energy_saving_percent": 20
    }

    The above example is for adding cavity insulation to a typical 5 bedroom house: initial costs only of £2,500 and achieves a 20% reduction to its space heating energy demand.

    Insulation investments should be your first until they result in diminishing returns.

    It pays to stop at some point, and your house doesn’t have to be a passive house for adding more not to make sense. For example, after adding a little extra loft insulation to our wall cavity filled 1960s house, there was relatively little we could do to improve it further beyond paying another £30k to clad it, inside or out: far less financially attractive compared to installing solar PV with a heat pump and battery.

  • “storage_hot_water”

    Describe your renewable hot water cylinder according to the example below:

      "storage_hot_water": {
        "name": "hot water tank",
        "volume_m3": 0.19,
        "immersion_kw": 3.0,
        "target_temperature_c": 55.0,
        "half_life_days": 2.5,
        "one_way_storage_efficiency": 0.95,
        "cost_install_gbp": 0,
        "cost_maintenance_pa_gbp": 0
      },

    Set “volume_m3” to the cylinder’s capacity (1,000 litres = 1 m3) or, if you don’t have one, use a low value (e.g. 0.010).

    The simulator takes energy from the cylinder according to your hot water demand. To estimate energy loss use “half_life_days”: the time for the hot water temperature to fall from “target_temperature” to fall midway to the internal ambient temperature (e.g. 37.5oC if the ambient temperature is 20.0oC). Use “one_way_storage_efficiency” to estimate lost hot water due to long or poorly insulated pipe.

    The simulator maintains the cylinder at “target_temperature_c”. If a heating component does not have sufficient capacity, the next on the list is used to top up any deficit in the following order:

    • solar thermal panels when active (i.e. during daylight), then;
    • heat pump, if installed, then;
    • boiler, if installed, then,
    • immersion heater.

    If the cylinder is part of your project, provision for its cost “cost_install_gbp” and annual maintenance if any in “cost_maintenance_pa_gbp”.