mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
allowing optional ashp cop parameter
This commit is contained in:
parent
61544d01db
commit
959d29b675
4 changed files with 28 additions and 9 deletions
|
|
@ -370,7 +370,7 @@ def extract_property_request_data(
|
|||
property_non_invasive_recommendations["recommendations"] = str(transformed)
|
||||
|
||||
# Check if the valuation data has uprn
|
||||
valuation_has_uprn = "uprn" in valuation_data[0] if valuation_data else True
|
||||
valuation_has_uprn = "uprn" in valuation_data[0] if valuation_data else False
|
||||
if valuation_has_uprn:
|
||||
valuation_has_uprn = valuation_data[0]["uprn"] not in ["", None]
|
||||
|
||||
|
|
@ -692,7 +692,8 @@ async def trigger_plan(body: PlanTriggerRequest):
|
|||
Recommendations.calculate_recommendation_tenant_savings(
|
||||
property_instance=property_instance,
|
||||
kwh_simulation_predictions=kwh_simulation_predictions,
|
||||
property_recommendations=property_recommendations
|
||||
property_recommendations=property_recommendations,
|
||||
ashp_cop=body.ashp_cop
|
||||
)
|
||||
)
|
||||
property_instance.current_energy_bill = property_current_energy_bill
|
||||
|
|
|
|||
|
|
@ -80,3 +80,5 @@ class PlanTriggerRequest(BaseModel):
|
|||
multi_plan: Optional[bool] = False
|
||||
optimise: Optional[bool] = True
|
||||
default_u_values: Optional[bool] = True
|
||||
|
||||
ashp_cop: Optional[float] = 2.8
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ def get_data(portfolio_id, scenario_ids):
|
|||
return properties_data, plans_data, recommendations_data
|
||||
|
||||
|
||||
properties_data, plans_data, recommendations_data = get_data(portfolio_id=124, scenario_ids=[199])
|
||||
properties_data, plans_data, recommendations_data = get_data(portfolio_id=124, scenario_ids=[205])
|
||||
|
||||
properties_df = pd.DataFrame(properties_data)
|
||||
plans_df = pd.DataFrame(plans_data)
|
||||
|
|
@ -240,4 +240,7 @@ df["Predicted Post Works SAP"] = df["Current SAP Points"] + df["sap_points"]
|
|||
df["Predicted Post Works SAP"] = df["Predicted Post Works SAP"].round()
|
||||
df["Predicted Post Works EPC"] = df["Predicted Post Works SAP"].apply(lambda x: sap_to_epc(x))
|
||||
|
||||
df["Recommendation: Air Source Heat Pump"].sum()
|
||||
df["Cost: Air Source Heat Pump"].sum()
|
||||
|
||||
df.to_csv("/Users/khalimconn-kowlessar/Documents/hestia/Customers/L&G/Basildon Data Export - 2.csv", index=False)
|
||||
|
|
|
|||
|
|
@ -649,7 +649,9 @@ class Recommendations:
|
|||
return property_recommendations, impact_summary
|
||||
|
||||
@staticmethod
|
||||
def map_descriptions_to_fuel(heating_description, hotwater_description, main_fuel_description):
|
||||
def map_descriptions_to_fuel(
|
||||
heating_description, hotwater_description, main_fuel_description, descriptions_to_fuel_types
|
||||
):
|
||||
|
||||
# Handle the case of community schemes
|
||||
if (heating_description == "Community scheme") or (hotwater_description == "Community scheme"):
|
||||
|
|
@ -662,7 +664,7 @@ class Recommendations:
|
|||
}
|
||||
raise NotImplementedError("Handle this case")
|
||||
|
||||
mapped = assumptions.DESCRIPTIONS_TO_FUEL_TYPES[heating_description]
|
||||
mapped = descriptions_to_fuel_types[heating_description]
|
||||
heating_fuel = mapped["fuel"]
|
||||
|
||||
if hotwater_description in [
|
||||
|
|
@ -682,7 +684,7 @@ class Recommendations:
|
|||
"heating_cop": mapped["cop"], "hotwater_cop": 1
|
||||
}
|
||||
|
||||
mapped_hotwater = assumptions.DESCRIPTIONS_TO_FUEL_TYPES[hotwater_description]
|
||||
mapped_hotwater = descriptions_to_fuel_types[hotwater_description]
|
||||
|
||||
return {
|
||||
"heating_fuel_type": heating_fuel, "hotwater_fuel_type": mapped_hotwater["fuel"],
|
||||
|
|
@ -691,7 +693,7 @@ class Recommendations:
|
|||
|
||||
@classmethod
|
||||
def calculate_recommendation_tenant_savings(
|
||||
cls, property_instance, kwh_simulation_predictions, property_recommendations
|
||||
cls, property_instance, kwh_simulation_predictions, property_recommendations, ashp_cop=None
|
||||
):
|
||||
"""
|
||||
This method inserts the kwh savings and the bill savings that the customer will make from the recommendations
|
||||
|
|
@ -703,9 +705,12 @@ class Recommendations:
|
|||
:param property_instance: Instance of the Property class, for the home associated to property_id
|
||||
:param kwh_simulation_predictions: dictionary of predictions from the model apis
|
||||
:param property_recommendations: dictionary of recommendations for the property
|
||||
:param ashp_cop: The coefficient of performance for the air source heat pump.
|
||||
:return:
|
||||
"""
|
||||
|
||||
ashp_cop = ashp_cop if ashp_cop else assumptions.AVERAGE_ASHP_EFFICIENCY
|
||||
|
||||
kwh_impact_table = kwh_simulation_predictions["heating_kwh_predictions"][
|
||||
kwh_simulation_predictions["heating_kwh_predictions"]["property_id"] == str(property_instance.id)
|
||||
].merge(
|
||||
|
|
@ -774,12 +779,19 @@ class Recommendations:
|
|||
if kwh_impact_table.loc[i, col] > previous_phase[col].max():
|
||||
kwh_impact_table.loc[i, col] = previous_phase[col].max()
|
||||
|
||||
descriptions_to_fuel_types = assumptions.DESCRIPTIONS_TO_FUEL_TYPES
|
||||
# We will the air source heat pump efficiencies
|
||||
ashp_keys = [k for k in descriptions_to_fuel_types.keys() if "air source heat pump" in k.lower()]
|
||||
for k in ashp_keys:
|
||||
descriptions_to_fuel_types[k]["cop"] = ashp_cop
|
||||
|
||||
# For heating system recommendations, this could result in a fuel type change so we reflect that
|
||||
fuel_mapping = pd.DataFrame([
|
||||
{
|
||||
"id": epc["id"],
|
||||
**cls.map_descriptions_to_fuel(
|
||||
epc["mainheat-description"], epc["hotwater-description"], epc["main-fuel"]
|
||||
epc["mainheat-description"], epc["hotwater-description"], epc["main-fuel"],
|
||||
descriptions_to_fuel_types
|
||||
)
|
||||
} for epc in property_instance.updated_simulation_epcs
|
||||
])
|
||||
|
|
@ -793,7 +805,8 @@ class Recommendations:
|
|||
**cls.map_descriptions_to_fuel(
|
||||
property_instance.data["mainheat-description"],
|
||||
property_instance.data["hotwater-description"],
|
||||
property_instance.data["main-fuel"]
|
||||
property_instance.data["main-fuel"],
|
||||
descriptions_to_fuel_types
|
||||
)
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue