Author: Jonathan

  • “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.

  • “solar_pv”

    Photovoltaic (pv) panels convert solar energy to electrical energy for consumption, export or storage.

    Here’s a sample description of a pv installation:

    "solar_pv": {
      "include": true,
      "cost": {
         "install_gbp": {
            "install": 19000.0,
            "plant_room": 2000.0
            },
            "maintenance_pa_gbp": 200.0
            },
       "area": {
          "shading_factor": 0.85,
          "border_m": 0.2
        },
        "panels": [{
           "panel": "AIKO 455W",
           "width_m": 1.134,
           "height_m": 1.722,
           "cost": {
              "per_panel_gbp": 0.0,
              "maintenance_per_panel_pa_gbp": 5.0
           },
           "efficiency": {
              "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
           }],
           "inverter": {
              "cost_install_gbp": 0,
              "power_threshold_kw": 11.5,
              "power_efficiency": 0.96
           },
            "collectors": {
               "south": {
                    "include": true,
                    "area": {
                        "dimensions_footprint_axis": {
                            "tilt_m": 11.5,
                            "other_m": 3.6
                        },
                        "orientation": {
                            "type": "tilted",
                            "tilt_degrees": 35,
                            "azimuth_degrees": 185
                        }
                    },
                    "panel": "AIKO 455W",
                    "panels_number": 16,
                    "cost": {
                        "install_gbp": 0.0,
                        "maintenance_pa_gbp": 0.0
                    }
                },
                "west": {
                    "include": true,
                    "area": {
                        "dimensions_footprint_axis": {
                            "tilt_m": 5.9,
                            "other_m": 3.9
                        },
                        "orientation": {
                            "type": "tilted",
                            "tilt_degrees": 10,
                            "azimuth_degrees": 184
                        }
                    },
                    "panel": "AIKO 455W",
                    "panels_number": 10,
                    "cost": {
                        "install_gbp": 0.0,
                        "maintenance_pa_gbp": 0.0
                    }
                }
            }
        },

    To describe your pv panels:

    • use the “include” flag to include a collector;
    • insert your install and annual maintainance costs, “install_gbp” and “maintenance_pa_gbp” respectively, in “costs”. These will be summed with any costs you declare in “collectors”;
    • describe each of your pv collector areas using “collectors”;
    • include a “panel” or “panels” description. In either case, for each panel, give:
      • “width_m” and “height_m”: panel dimensions;
      • “cost”:
        • “per_panel_gbp”: cost per panel to be summed by number of panels;
        • “maintenance_per_panel_pa_gbp”: maintenance per panel per annum to be summed;
      • “efficiency”:
        • “percent”: power efficiency when panel is new at the reference temperature (see below);
        • “temperature_reference_celsius”: nominal reference temperature in celsius;
        • loss_percent_pa”: loss of power efficiency in percent per annum;
        • “loss_percent_per_celsius”: loss of power efficiency in percent per degree celsius above the reference temperature (see above);
      • “power_max_w”: maximum output power in watts;
      • “lifetime_years”: maximum operating lifetime in calendar years;
      • “thermal_inertia_m2_second_per_w_celsius”: panel thermal inertial, or how long it takes to heat up when illuminated.
    • “inverter”: the collectors are all assumed to feed their generated power through an inverter, so you must include its properties:
      • “cost_install_gbp”: total installation cost;
      • “power_threshold_kw”: maximum power in kilowatts;
      • “power_efficiency”: overall power efficiency.
  • “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). ↩︎
  • “solar_thermal”

    Thermal panels use solar energy to heat water in a buffer tank to satisfy hot water and space heating energy demands. Here’s an example:

    "solar_thermal": {
        "include": true,
        "cost": {
          "install_gbp": 2000.0,
          "maintenance_pa_gbp": 0.0      
        },
        "panel": {
          "width_m": 1,
          "height_m": 1.6,
          "efficiency": {
            "percent": 70
          }
        },
        "collectors": {
          "primary": {
            "include": true,
            "cost": {
              "install_gbp": 1500.0,
              "maintenance_pa_gbp": 0.0      
            },
            "area": {
              "orientation": {
                "type": "tilted",
                "tilt_degrees": 45,
                "azimuth_degrees": 185
              },
              "dimensions_footprint_axis": {
                "tilt_m": 6.0,
                "other_m": 1.9
              },
              "shading_factor": 0.9          
            }
          },
          "secondary": {
            "include": true,
            "cost": {
              "install_gbp": 1500.0,
              "maintenance_pa_gbp": 0.0      
            },
            "orientation": {
              "type": "tilted",
              "tilt_degrees": 45,
              "azimuth_degrees": 270
            },        
            "shading_factor": 0.7,
            "panels_number": 5
            }
          }
        }
      },

    To describe your thermal panels:

    • use the “include” flag to include a collector;
    • put your install and annual maintainance costs, “install_gbp” and “maintenance_pa_gbp” respectively, in “costs”;
    • describe each of your thermal collector areas using “collectors”;
    • state your panel dimensions and their energy efficiency in “panel”, as in the above example;
    • include a “panel” or “panels” description. In either case, for each panel, give the panel dimensions “width_m” and “height_m”, and efficiency in “percent”.

  • “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”.

  • “location”

    If you are including solar panels, give your location to allow estimation of solar intensity. Follow the format in the example below:

    "location": {
      "coordinates": {
         "latitude_degrees": 51.5,
         "longitude_degrees": -1.24
      },
     "cloud_cover_months": {
       "#": "Cloud cover insolution factors by year fraction",
       "fractions": [0.0425, 0.123, 0.204, 0.288, 0.371, 0.455, 0.538, 0.623, 0.707, 0.79, 0.874, 0.958],
       "factors": [0.544, 0.554, 0.534, 0.58, 0.608, 0.585, 0.607, 0.608, 0.57, 0.533, 0.561, 0.57]
        },
       "time_correction_fraction": 0,
    "internal": {
          "temperature_target_celsius": 21.0,
          "temperature_half_life_days": 1.5,
          "target_hours": [8,9,10,11,12,13,14,15,16,17,18,19,20,21],
          "intolerance_gbp_per_deg_c_per_hour": 0.1,
          "thermal_compliance_factor": 2.0,
        }
      },

    Because of cloud cover only a proportion, the “insolation factor”, of usable solar radiation reaches your panels. Insolation varies according to your location. Get insolation factors here using these steps:

    • select your location on the map;
    • select MONTHLY DATA;
    • tick the “Global irradiation at angle” box and enter your panels’ average elevation angle in degrees;
    • tick “Diffuse global ratio”;
    • select “json” download icon;
    • look up the “Kd” value for each month.

    For each factor, give its time fractions into the year. In the example below the fractions are the midpoints of each month, i.e. January’s midpoint is 0.0425 = (31/2)/365, February’s is 0.123 = (31+14)/365 etc.

    Add a cloud cover coefficient to the “factors” array for each respective year fraction in “fractions”. For example, if January’s cloud cover is 54.4% and February’s is 55.4%, add “0.544, 0.554,” and so on.

    Otherwise, just use the “factors” values from the above example.

    Finally, a number of optional thermal parameters, especially useful for heat pumps, allow the simulator to run more accurately and recommend optimum heating set back temperatures:

    • “temperature_target_celsius”: target room temperature;
    • “target_hours” array: hours of the day (0 to 23) during which room temperature needs to be maintained at the target temperature;
    • “temperature_half_life_days”: time in days from switching heating off for room temperature to fall to midway between initial room temperature and outside temperature;
    • “intolerance_gbp_per_deg_c_per_hour”: degree of intolerance to room temperature deviation from target temperature during target hours, measured in cost per degree celsius per hour;
    • “thermal_compliance_factor” improves calculation of optimum setback setting. On heating houses after setbacks, houses heat at a greater rate than indicated by their heat capacity, due mainly to heating of air. For calculation purposes, it increases the rate of heating after setback periods.