mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
modifying recommendation classes
This commit is contained in:
parent
84d4263d9a
commit
e92b70f9ec
3 changed files with 42 additions and 41 deletions
|
|
@ -28,7 +28,7 @@ class FireplaceRecommendations(Definitions):
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
number_open_fireplaces = int(self.property.data["number-open-fireplaces"])
|
number_open_fireplaces = self.property.epc_record.number_open_fireplaces
|
||||||
|
|
||||||
if number_open_fireplaces == 0:
|
if number_open_fireplaces == 0:
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class HeatingControlRecommender:
|
||||||
We can then consider the heating system itself
|
We can then consider the heating system itself
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
if (self.property.data["mainheatc-energy-eff"] in ["Poor", "Very Poor", "Average"]) or (
|
if (self.property.epc_record.mainheatc_energy_eff in ["Poor", "Very Poor", "Average"]) or (
|
||||||
self.property.main_heating_controls["clean_description"] in ["Programmer and room thermostat"]
|
self.property.main_heating_controls["clean_description"] in ["Programmer and room thermostat"]
|
||||||
):
|
):
|
||||||
# We recommend Programmer and appliance thermostats as the heating control. This has an average energy
|
# We recommend Programmer and appliance thermostats as the heating control. This has an average energy
|
||||||
|
|
@ -125,10 +125,10 @@ class HeatingControlRecommender:
|
||||||
new_config=ending_config, old_config=self.property.main_heating_controls
|
new_config=ending_config, old_config=self.property.main_heating_controls
|
||||||
)
|
)
|
||||||
# This upgrade will only take the heating system to average energy efficiency
|
# This upgrade will only take the heating system to average energy efficiency
|
||||||
if self.property.data["mainheatc-energy-eff"] in ["Poor", "Very Poor", "Average"]:
|
if self.property.epc_record.mainheatc_energy_eff in ["Poor", "Very Poor", "Average"]:
|
||||||
simulation_config["mainheatc_energy_eff_ending"] = "Good"
|
simulation_config["mainheatc_energy_eff_ending"] = "Good"
|
||||||
else:
|
else:
|
||||||
simulation_config["mainheatc_energy_eff_ending"] = self.property.data["mainheatc-energy-eff"]
|
simulation_config["mainheatc_energy_eff_ending"] = self.property.epc_record.mainheatc_energy_eff
|
||||||
|
|
||||||
description_simulation = {
|
description_simulation = {
|
||||||
"mainheatcont-description": new_description,
|
"mainheatcont-description": new_description,
|
||||||
|
|
@ -193,10 +193,10 @@ class HeatingControlRecommender:
|
||||||
)
|
)
|
||||||
# This upgrade will only take the heating system to average energy efficiency
|
# This upgrade will only take the heating system to average energy efficiency
|
||||||
# If the current system is below good, we make it good
|
# If the current system is below good, we make it good
|
||||||
if self.property.data["mainheatc-energy-eff"] in ["Poor", "Very Poor", "Average"]:
|
if self.property.epc_record.mainheatc_energy_eff in ["Poor", "Very Poor", "Average"]:
|
||||||
simulation_config["mainheatc_energy_eff_ending"] = "Good"
|
simulation_config["mainheatc_energy_eff_ending"] = "Good"
|
||||||
else:
|
else:
|
||||||
simulation_config["mainheatc_energy_eff_ending"] = self.property.data["mainheatc-energy-eff"]
|
simulation_config["mainheatc_energy_eff_ending"] = self.property.epc_record.mainheatc_energy_eff
|
||||||
|
|
||||||
description_simulation = {
|
description_simulation = {
|
||||||
"mainheatcont-description": new_controls_description,
|
"mainheatcont-description": new_controls_description,
|
||||||
|
|
@ -208,7 +208,7 @@ class HeatingControlRecommender:
|
||||||
has_trvs = not needs_trvs
|
has_trvs = not needs_trvs
|
||||||
|
|
||||||
cost_result = self.costs.roomstat_programmer_trvs(
|
cost_result = self.costs.roomstat_programmer_trvs(
|
||||||
number_heated_rooms=int(self.property.data["number-heated-rooms"]),
|
number_heated_rooms=self.property.epc_record.number_heated_rooms,
|
||||||
has_programmer=has_programmer,
|
has_programmer=has_programmer,
|
||||||
has_room_thermostat=has_room_thermostat,
|
has_room_thermostat=has_room_thermostat,
|
||||||
has_trvs=has_trvs
|
has_trvs=has_trvs
|
||||||
|
|
@ -257,7 +257,7 @@ class HeatingControlRecommender:
|
||||||
|
|
||||||
if (
|
if (
|
||||||
(self.property.main_heating_controls["thermostatic_control"] == "time and temperature zone control") or
|
(self.property.main_heating_controls["thermostatic_control"] == "time and temperature zone control") or
|
||||||
(self.property.data["mainheatc-energy-eff"] in ["Very Good"])
|
(self.property.epc_record.mainheatc_energy_eff in ["Very Good"])
|
||||||
):
|
):
|
||||||
# No recommendation needed
|
# No recommendation needed
|
||||||
return
|
return
|
||||||
|
|
@ -274,17 +274,17 @@ class HeatingControlRecommender:
|
||||||
)
|
)
|
||||||
|
|
||||||
# If the current system is below very good, we make it very good
|
# If the current system is below very good, we make it very good
|
||||||
if self.property.data["mainheatc-energy-eff"] in ["Poor", "Very Poor", "Average", "Good"]:
|
if self.property.epc_record.mainheatc_energy_eff in ["Poor", "Very Poor", "Average", "Good"]:
|
||||||
simulation_config["mainheatc_energy_eff_ending"] = "Very Good"
|
simulation_config["mainheatc_energy_eff_ending"] = "Very Good"
|
||||||
else:
|
else:
|
||||||
simulation_config["mainheatc_energy_eff_ending"] = self.property.data["mainheatc-energy-eff"]
|
simulation_config["mainheatc_energy_eff_ending"] = self.property.epc_record.mainheatc_energy_eff
|
||||||
|
|
||||||
description_simulation = {
|
description_simulation = {
|
||||||
"mainheatcont-description": new_controls_description,
|
"mainheatcont-description": new_controls_description,
|
||||||
"mainheatc-energy-eff": simulation_config["mainheatc_energy_eff_ending"]
|
"mainheatc-energy-eff": simulation_config["mainheatc_energy_eff_ending"]
|
||||||
}
|
}
|
||||||
cost_result = self.costs.time_and_temperature_zone_control(
|
cost_result = self.costs.time_and_temperature_zone_control(
|
||||||
number_heated_rooms=int(self.property.data["number-heated-rooms"])
|
number_heated_rooms=self.property.epc_record.number_heated_rooms
|
||||||
)
|
)
|
||||||
|
|
||||||
description = (
|
description = (
|
||||||
|
|
@ -324,10 +324,10 @@ class HeatingControlRecommender:
|
||||||
new_config=ending_config, old_config=self.property.main_heating_controls
|
new_config=ending_config, old_config=self.property.main_heating_controls
|
||||||
)
|
)
|
||||||
# Only adjust if the current system is below good
|
# Only adjust if the current system is below good
|
||||||
if self.property.data["mainheatc-energy-eff"] in ["Poor", "Very Poor"]:
|
if self.property.epc_record.mainheatc_energy_eff in ["Poor", "Very Poor"]:
|
||||||
simulation_config["mainheatc_energy_eff_ending"] = "Average"
|
simulation_config["mainheatc_energy_eff_ending"] = "Average"
|
||||||
else:
|
else:
|
||||||
simulation_config["mainheatc_energy_eff_ending"] = self.property.data["mainheatc-energy-eff"]
|
simulation_config["mainheatc_energy_eff_ending"] = self.property.epc_record.mainheatc_energy_eff
|
||||||
|
|
||||||
description_simulation = {
|
description_simulation = {
|
||||||
"mainheatcont-description": new_controls_description,
|
"mainheatcont-description": new_controls_description,
|
||||||
|
|
@ -339,7 +339,7 @@ class HeatingControlRecommender:
|
||||||
has_bypass = self.property.main_heating_controls["auxiliary_systems"] == "bypass"
|
has_bypass = self.property.main_heating_controls["auxiliary_systems"] == "bypass"
|
||||||
|
|
||||||
cost_result = self.costs.programmer_trvs_bypass(
|
cost_result = self.costs.programmer_trvs_bypass(
|
||||||
number_heated_rooms=int(self.property.data["number-heated-rooms"]),
|
number_heated_rooms=self.property.epc_record.number_heated_rooms,
|
||||||
has_trvs=has_trvs,
|
has_trvs=has_trvs,
|
||||||
has_programmer=has_programmer,
|
has_programmer=has_programmer,
|
||||||
has_bypass=has_bypass
|
has_bypass=has_bypass
|
||||||
|
|
|
||||||
|
|
@ -160,7 +160,7 @@ class HeatingRecommender:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# We can also recommend hhr if the property doesn't have a mains has connection
|
# We can also recommend hhr if the property doesn't have a mains has connection
|
||||||
no_mains = not self.property.data["mains-gas-flag"]
|
no_mains = not self.property.epc_record.mains_gas_flag
|
||||||
|
|
||||||
# If the property already has room heaters then we recommend HHR as an option since the home already has
|
# If the property already has room heaters then we recommend HHR as an option since the home already has
|
||||||
# a variation of room heaters
|
# a variation of room heaters
|
||||||
|
|
@ -199,28 +199,28 @@ class HeatingRecommender:
|
||||||
# 2) If the property doesn't have a heating system, but it has access to the mains gas
|
# 2) If the property doesn't have a heating system, but it has access to the mains gas
|
||||||
no_heating_has_mains = self.property.main_heating["clean_description"] in [
|
no_heating_has_mains = self.property.main_heating["clean_description"] in [
|
||||||
'No system present, electric heaters assumed'
|
'No system present, electric heaters assumed'
|
||||||
] and self.property.data["mains-gas-flag"]
|
] and self.property.epc_record.mains_gas_flag
|
||||||
|
|
||||||
# The property is using portable heaters and has access to gas mains
|
# The property is using portable heaters and has access to gas mains
|
||||||
has_room_heaters = self.has_room_heaters and self.property.data["mains-gas-flag"]
|
has_room_heaters = self.has_room_heaters and self.property.epc_record.mains_gas_flag
|
||||||
|
|
||||||
# We also check if the property has electric heating, but it has access to the mains gas
|
# We also check if the property has electric heating, but it has access to the mains gas
|
||||||
electic_heating_has_mains = self.has_electric_heating_description and self.property.data["mains-gas-flag"]
|
electic_heating_has_mains = self.has_electric_heating_description and self.property.epc_record.mains_gas_flag
|
||||||
|
|
||||||
portable_heaters_has_mains = (
|
portable_heaters_has_mains = (
|
||||||
self.property.main_heating["has_portable_electric_heaters"] and self.property.data["mains-gas-flag"]
|
self.property.main_heating["has_portable_electric_heaters"] and self.property.epc_record.mains_gas_flag
|
||||||
)
|
)
|
||||||
|
|
||||||
# The next condition is if the home has a non-gas boiler, such as an oil boiler, with a mains gas connection
|
# The next condition is if the home has a non-gas boiler, such as an oil boiler, with a mains gas connection
|
||||||
non_gas_boiler = (
|
non_gas_boiler = (
|
||||||
self.property.main_heating["has_boiler"] and
|
self.property.main_heating["has_boiler"] and
|
||||||
not self.property.main_heating["has_mains_gas"] and
|
not self.property.main_heating["has_mains_gas"] and
|
||||||
self.property.data["mains-gas-flag"]
|
self.property.epc_record.mains_gas_flag
|
||||||
)
|
)
|
||||||
# Additionally, if the property has a gas connection, is using gas heating but doesn't have a boiler,
|
# Additionally, if the property has a gas connection, is using gas heating but doesn't have a boiler,
|
||||||
# we recommend a boiler
|
# we recommend a boiler
|
||||||
non_boiler_gas_heating = (
|
non_boiler_gas_heating = (
|
||||||
self.property.data["mains-gas-flag"] and
|
self.property.epc_record.mains_gas_flag and
|
||||||
self.property.main_heating["has_mains_gas"] and
|
self.property.main_heating["has_mains_gas"] and
|
||||||
not self.property.main_heating["has_boiler"]
|
not self.property.main_heating["has_boiler"]
|
||||||
)
|
)
|
||||||
|
|
@ -386,7 +386,7 @@ class HeatingRecommender:
|
||||||
|
|
||||||
recommendation_phase = phase
|
recommendation_phase = phase
|
||||||
|
|
||||||
if self.property.data["mainheat-energy-eff"] not in ["Poor", "Very Poor"]:
|
if self.property.epc_record.mainheat_energy_eff not in ["Poor", "Very Poor"]:
|
||||||
return
|
return
|
||||||
|
|
||||||
hotwater_from_mains = self.property.hotwater["clean_description"] in ["From main system"]
|
hotwater_from_mains = self.property.hotwater["clean_description"] in ["From main system"]
|
||||||
|
|
@ -407,7 +407,7 @@ class HeatingRecommender:
|
||||||
size=None,
|
size=None,
|
||||||
exising_room_heaters=False,
|
exising_room_heaters=False,
|
||||||
system_change=False,
|
system_change=False,
|
||||||
n_heated_rooms=self.property.data["number-heated-rooms"],
|
n_heated_rooms=self.property.epc_record.number_heated_rooms,
|
||||||
n_rooms=self.property.number_of_rooms,
|
n_rooms=self.property.number_of_rooms,
|
||||||
is_electric=True
|
is_electric=True
|
||||||
)
|
)
|
||||||
|
|
@ -581,7 +581,7 @@ class HeatingRecommender:
|
||||||
# New functions to estimate size of ASHP
|
# New functions to estimate size of ASHP
|
||||||
estimated_load = self.estimate_peak_kw(
|
estimated_load = self.estimate_peak_kw(
|
||||||
floor_area_m2=self.property.floor_area,
|
floor_area_m2=self.property.floor_area,
|
||||||
epc_primary_kwh_per_m2_yr=self.property.data["energy-consumption-current"],
|
epc_primary_kwh_per_m2_yr=self.property.epc_record.energy_consumption_current,
|
||||||
primary_to_delivered_factor=1.55, # use 1.13 if heating fuel is gas
|
primary_to_delivered_factor=1.55, # use 1.13 if heating fuel is gas
|
||||||
space_heat_fraction_range=(0.35, 0.60),
|
space_heat_fraction_range=(0.35, 0.60),
|
||||||
hdd_base_dd=2000.0, # set from location
|
hdd_base_dd=2000.0, # set from location
|
||||||
|
|
@ -670,7 +670,7 @@ class HeatingRecommender:
|
||||||
# If the property does not have existing cavity and loft insulation, we include a note that the cost
|
# If the property does not have existing cavity and loft insulation, we include a note that the cost
|
||||||
# includes the boiler upgrade scheme and that the cavity and loft need to be treated, to ensure access
|
# includes the boiler upgrade scheme and that the cavity and loft need to be treated, to ensure access
|
||||||
# to the funding
|
# to the funding
|
||||||
if not non_intrusive_recommendation and self.property.data["tenure"] not in assumptions.SOCIAL_TENURES:
|
if not non_intrusive_recommendation and self.property.epc_record.tenure not in assumptions.SOCIAL_TENURES:
|
||||||
if has_cavity_or_loft_recommendations:
|
if has_cavity_or_loft_recommendations:
|
||||||
description = description + (
|
description = description + (
|
||||||
f" You must ensure that the property has an insulated cavity and "
|
f" You must ensure that the property has an insulated cavity and "
|
||||||
|
|
@ -923,7 +923,7 @@ class HeatingRecommender:
|
||||||
# If the property is off-gas and has no heating system in place, the number of heated rooms will actually
|
# If the property is off-gas and has no heating system in place, the number of heated rooms will actually
|
||||||
# be 0, so we use the number of rooms as the figure
|
# be 0, so we use the number of rooms as the figure
|
||||||
number_heated_rooms = (
|
number_heated_rooms = (
|
||||||
self.property.data["number-heated-rooms"] if self.property.data["number-heated-rooms"] > 0
|
self.property.epc_record.number_heated_rooms if self.property.epc_record.number_heated_rooms > 0
|
||||||
else (
|
else (
|
||||||
self.property.number_of_rooms - 1 if self.property.number_of_rooms > 1 else
|
self.property.number_of_rooms - 1 if self.property.number_of_rooms > 1 else
|
||||||
self.property.number_of_rooms
|
self.property.number_of_rooms
|
||||||
|
|
@ -949,20 +949,20 @@ class HeatingRecommender:
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fallback if property type unknown
|
# Fallback if property type unknown
|
||||||
base = base_by_type.get(self.property.data["property-type"], 1)
|
base = base_by_type.get(self.property.epc_record.property_type, 1)
|
||||||
|
|
||||||
# Area-based adjustments
|
# Area-based adjustments
|
||||||
if self.property.data["property-type"] in ("Flat", "Maisonette"):
|
if self.property.epc_record.property_type in ("Flat", "Maisonette"):
|
||||||
if self.property.floor_area > 90:
|
if self.property.floor_area > 90:
|
||||||
return base + 1 # duplex or very large flat
|
return base + 1 # duplex or very large flat
|
||||||
return base
|
return base
|
||||||
|
|
||||||
if self.property.data["property-type"] == "Bungalow":
|
if self.property.epc_record.property_type == "Bungalow":
|
||||||
if self.property.floor_area > 100:
|
if self.property.floor_area > 100:
|
||||||
return base + 1 # secondary corridor
|
return base + 1 # secondary corridor
|
||||||
return base
|
return base
|
||||||
|
|
||||||
if self.property.data["property-type"] == "House":
|
if self.property.epc_record.property_type == "House":
|
||||||
if self.property.floor_area > 140:
|
if self.property.floor_area > 140:
|
||||||
return base + 1 # extra landing / circulation
|
return base + 1 # extra landing / circulation
|
||||||
return base
|
return base
|
||||||
|
|
@ -1060,17 +1060,17 @@ class HeatingRecommender:
|
||||||
**hot_water_simulation_config
|
**hot_water_simulation_config
|
||||||
}
|
}
|
||||||
# This upgrade will only take the heating system to average energy efficiency
|
# This upgrade will only take the heating system to average energy efficiency
|
||||||
if self.property.data["mainheat-energy-eff"] in ["Very Poor", "Poor"] and not self.dual_heating:
|
if self.property.epc_record.mainheat_energy_eff in ["Very Poor", "Poor"] and not self.dual_heating:
|
||||||
heating_simulation_config["mainheat_energy_eff_ending"] = "Average"
|
heating_simulation_config["mainheat_energy_eff_ending"] = "Average"
|
||||||
else:
|
else:
|
||||||
heating_simulation_config["mainheat_energy_eff_ending"] = self.property.data["mainheat-energy-eff"]
|
heating_simulation_config["mainheat_energy_eff_ending"] = self.property.epc_record.mainheat_energy_eff
|
||||||
|
|
||||||
# TODO:We possibly shouldn't touch the hot water energy efficiency if we aren't recommending dual immersion
|
# TODO:We possibly shouldn't touch the hot water energy efficiency if we aren't recommending dual immersion
|
||||||
# we'll keep this for the moment though
|
# we'll keep this for the moment though
|
||||||
if self.property.data["hot-water-energy-eff"] in ["Very Poor", "Poor"]:
|
if self.property.epc_record.hot_water_energy_eff in ["Very Poor", "Poor"]:
|
||||||
heating_simulation_config["hot_water_energy_eff_ending"] = "Average"
|
heating_simulation_config["hot_water_energy_eff_ending"] = "Average"
|
||||||
else:
|
else:
|
||||||
heating_simulation_config["hot_water_energy_eff_ending"] = self.property.data["hot-water-energy-eff"]
|
heating_simulation_config["hot_water_energy_eff_ending"] = self.property.epc_record.hot_water_energy_eff
|
||||||
|
|
||||||
number_heated_rooms = self._estimate_n_heated_rooms()
|
number_heated_rooms = self._estimate_n_heated_rooms()
|
||||||
|
|
||||||
|
|
@ -1261,11 +1261,12 @@ class HeatingRecommender:
|
||||||
boiler_recommendation = {}
|
boiler_recommendation = {}
|
||||||
description_simulation = {}
|
description_simulation = {}
|
||||||
|
|
||||||
has_inefficient_space_heating = self.property.data["mainheat-energy-eff"] in ["Very Poor", "Poor", "Average"]
|
has_inefficient_space_heating = self.property.epc_record.mainheat_energy_eff in ["Very Poor", "Poor", "Average"]
|
||||||
|
|
||||||
# We check if there's a mains connection and the hot water is inefficient, as this will improve with a boiler
|
# We check if there's a mains connection and the hot water is inefficient, as this will improve with a boiler
|
||||||
has_inefficient_water = (
|
has_inefficient_water = (
|
||||||
self.property.data["mains-gas-flag"] and self.property.data["hot-water-energy-eff"] in ["Very Poor", "Poor"]
|
self.property.epc_record.mains_gas_flag and self.property.epc_record.hot_water_energy_eff in ["Very Poor",
|
||||||
|
"Poor"]
|
||||||
)
|
)
|
||||||
|
|
||||||
non_invasive_recommendation = next((
|
non_invasive_recommendation = next((
|
||||||
|
|
@ -1281,13 +1282,13 @@ class HeatingRecommender:
|
||||||
)
|
)
|
||||||
|
|
||||||
new_heating_eff = (
|
new_heating_eff = (
|
||||||
"Good" if self.property.data["mainheat-energy-eff"] in ["Very Poor", "Poor", "Average"]
|
"Good" if self.property.epc_record.mainheat_energy_eff in ["Very Poor", "Poor", "Average"]
|
||||||
else self.property.data["mainheat-energy-eff"]
|
else self.property.epc_record.mainheat_energy_eff
|
||||||
)
|
)
|
||||||
|
|
||||||
new_hotwater_eff = (
|
new_hotwater_eff = (
|
||||||
"Good" if self.property.data["hot-water-energy-eff"] in ["Very Poor", "Poor", "Average"]
|
"Good" if self.property.epc_record.hot_water_energy_eff in ["Very Poor", "Poor", "Average"]
|
||||||
else self.property.data["hot-water-energy-eff"]
|
else self.property.epc_record.hot_water_energy_eff
|
||||||
)
|
)
|
||||||
|
|
||||||
simulation_config = {
|
simulation_config = {
|
||||||
|
|
@ -1343,7 +1344,7 @@ class HeatingRecommender:
|
||||||
boiler_costs = self.costs.boiler(
|
boiler_costs = self.costs.boiler(
|
||||||
exising_room_heaters=exising_room_heaters,
|
exising_room_heaters=exising_room_heaters,
|
||||||
system_change=system_change,
|
system_change=system_change,
|
||||||
n_heated_rooms=self.property.data["number-heated-rooms"],
|
n_heated_rooms=self.property.epc_record.number_heated_rooms,
|
||||||
n_rooms=self.property.number_of_rooms
|
n_rooms=self.property.number_of_rooms
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue