removed electric boiler rec

This commit is contained in:
Khalim Conn-Kowlessar 2024-07-10 01:10:19 +01:00
parent 36718ab3be
commit c112d23c67
3 changed files with 91 additions and 4 deletions

View file

@ -92,6 +92,12 @@ CONDENSING_BOILER_COSTS = {
"40kw": 1625
}
# Electric boiler prices base on
# https://www.greenmatch.co.uk/boilers/combi-boilers/electric-combi-boilers
# https://www.tlc-direct.co.uk/Products/ERMAC15.html
# The unit is a 15kw boiler, capable of outputting between 3kw and 15kw. Costs seem to be around £1800
ELECTRIC_BOILER_COSTS = 1800
# Assumes 3 hours to remove each heater (including re-decorating)
ROOM_HEATER_REMOVAL_COST = 120
ROOM_HEATER_REMOVAL_LABOUR_HOURS = 3
@ -1285,7 +1291,7 @@ class Costs:
estimated_radiators = max(total_radiators_based_on_power, base_radiators + additional_radiators)
return round(estimated_radiators)
def boiler(self, size, exising_room_heaters, system_change, n_heated_rooms, n_rooms):
def boiler(self, size, exising_room_heaters, system_change, n_heated_rooms, n_rooms, is_electric=False):
"""
Based on a basic estimate of median value £2600 to install a low carbon combi boiler
First time central heating vosts can als be found here:
@ -1293,7 +1299,10 @@ class Costs:
:return:
"""
unit_cost = CONDENSING_BOILER_COSTS[size]
if not is_electric:
unit_cost = CONDENSING_BOILER_COSTS[size]
else:
unit_cost = ELECTRIC_BOILER_COSTS
# The unit cost is the cost without VAT
# We now need to estimate the cost of the works
labour_days = 2
@ -1307,8 +1316,6 @@ class Costs:
# Add contingency and preliminaries
labour_cost = labour_cost * (1 + self.CONTINGENCY + self.PRELIMINARIES)
# labour_days = labour_days + (removal_labour_hours / 8)
vat = labour_cost * self.VAT_RATE
subtotal_before_vat = unit_cost + labour_cost

View file

@ -35,6 +35,10 @@ class HeatingControlRecommender:
return
if heating_description in ["Boiler and radiators, electric"]:
self.recommend_roomstat_programmer_trvs()
return
if heating_description in ["Air source heat pump, radiators, electric"]:
self.recommend_time_temperature_zone_controls()

View file

@ -119,6 +119,69 @@ class HeatingRecommender:
return
def recommend_electric_boiler_upgrade(self, phase):
# Small initial scope, just handles the case of properties that have electric boilers where the efficiency
# is poor or very poor
# We recommend upgrading to a new electric boiler
recommendation_phase = phase
if self.property.data["mainheat-energy-eff"] not in ["Poor", "Very Poor"]:
return
hotwater_from_mains = self.property.hotwater["clean_description"] in ["From main system"]
hotwater_from_cylinder = self.property.hotwater["clean_description"] in [
"From main system, no cylinder thermostat"
]
# if the hotwater is from the mains, we probably have a combi boiler so we recommend a new electric boiler
if hotwater_from_mains:
description = f"Upgrade to a higher efficiency electric boiler"
simulation_config = {
"mainheat_energy_eff_ending": "Average",
"hot_water_energy_eff_ending": "Average"
}
boiler_costs = self.costs.boiler(
size=None,
exising_room_heaters=False,
system_change=False,
n_heated_rooms=self.property.data["number-heated-rooms"],
n_rooms=self.property.number_of_rooms,
is_electric=True
)
already_installed = "heating" in self.property.already_installed
if already_installed:
boiler_costs = override_costs(boiler_costs)
description = "Heating system has already been upgraded, no further action needed."
boiler_recommendation = {
"phase": recommendation_phase,
"parts": [],
"type": "heating",
"description": description,
"starting_u_value": None,
"new_u_value": None,
"sap_points": None,
"already_installed": already_installed,
"simulation_config": simulation_config,
**boiler_costs
}
controls_recommender = HeatingControlRecommender(self.property)
controls_recommender.recommend(heating_description="Boiler and radiators, electric")
self.heating_recommendations.extend([boiler_recommendation] + controls_recommender.recommendation)
return
if hotwater_from_cylinder:
# We recommend a change from a system boiler, with a cylinder to a combi boiler
description = ("Replace the existing boiler and cylinder without a thermostat with a new electric combi "
"boiler")
def is_ashp_valid(self):
suitable_property_type = self.property.data["property-type"] in ["House", "Bungalow"]
has_air_source_heat_pump = self.property.main_heating["has_air_source_heat_pump"]
@ -458,6 +521,19 @@ class HeatingRecommender:
return closest_size
@staticmethod
def estimate_electric_boiler_size(num_heated_rooms):
"""
We use the approach similar to as defined in
https://www.greenmatch.co.uk/boilers/combi-boilers/electric-combi-boilers
Instead of radiators as a proxy, we do the number of heated rooms
:param num_heated_rooms: The number of heated rooms in the property
:return:
"""
return max(num_heated_rooms * 1.5, 6)
def recommend_boiler_upgrades(self, phase, system_change, exising_room_heaters):
"""
This boiler recommendation will only recommend a like-for-like upgrade, since changing the system