mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
minor change to mds api
This commit is contained in:
parent
acc45eae64
commit
9217ef67f4
2 changed files with 117 additions and 88 deletions
|
|
@ -841,6 +841,11 @@ async def build_mds(body: MdsRequest):
|
|||
epc_before = p.data["current-energy-rating"]
|
||||
heat_demand_before = p.data["energy-consumption-current"]
|
||||
carbon_before = p.data["co2-emissions-current"]
|
||||
current_adjusted_energy = AnnualBillSavings.adjust_energy_to_metered(
|
||||
epc_energy_consumption=heat_demand_before * p.floor_area,
|
||||
current_epc_rating=epc_before,
|
||||
)
|
||||
current_energy_bill = AnnualBillSavings.calculate_annual_bill(current_adjusted_energy)
|
||||
|
||||
package_comparison = []
|
||||
for _id in recommendations[p.id].keys():
|
||||
|
|
@ -904,17 +909,11 @@ async def build_mds(body: MdsRequest):
|
|||
heat_demand_after = heat_demand_prediction["predictions"].values[-1]
|
||||
carbon_after = carbon_prediction["predictions"].values[-1]
|
||||
|
||||
current_adjusted_energy = AnnualBillSavings.adjust_energy_to_metered(
|
||||
epc_energy_consumption=heat_demand_before * p.floor_area,
|
||||
current_epc_rating=epc_before,
|
||||
)
|
||||
|
||||
expected_adjusted_energy = AnnualBillSavings.adjust_energy_to_metered(
|
||||
epc_energy_consumption=heat_demand_after * p.floor_area,
|
||||
current_epc_rating=epc_before,
|
||||
)
|
||||
|
||||
current_energy_bill = AnnualBillSavings.calculate_annual_bill(current_adjusted_energy)
|
||||
expected_energy_bill = AnnualBillSavings.calculate_annual_bill(expected_adjusted_energy)
|
||||
|
||||
bill_savings = current_energy_bill - expected_energy_bill
|
||||
|
|
@ -935,6 +934,7 @@ async def build_mds(body: MdsRequest):
|
|||
"carbon_after": carbon_after,
|
||||
"bill_savings": bill_savings,
|
||||
"energy_savings": energy_savings,
|
||||
"current_energy_bill": current_energy_bill,
|
||||
"meets_threshold": meets_threshold
|
||||
}
|
||||
)
|
||||
|
|
@ -965,6 +965,7 @@ async def build_mds(body: MdsRequest):
|
|||
"carbon_after": carbon_before,
|
||||
"bill_savings": 0,
|
||||
"energy_savings": 0,
|
||||
"current_energy_bill": current_energy_bill,
|
||||
"meets_threshold": False
|
||||
}
|
||||
|
||||
|
|
@ -990,81 +991,27 @@ async def build_mds(body: MdsRequest):
|
|||
"heat_demand_after": package_comparison["heat_demand_after"],
|
||||
"carbon_before": package_comparison["carbon_before"],
|
||||
"carbon_after": package_comparison["carbon_after"],
|
||||
"bill_savings": package_comparison["bill_savings"],
|
||||
"energy_savings": package_comparison["energy_savings"],
|
||||
"bill_savings": round(package_comparison["bill_savings"], 2),
|
||||
"energy_savings": round(package_comparison["energy_savings"], 2),
|
||||
"current_energy_bill": round(package_comparison["current_energy_bill"], 2),
|
||||
"EWI": "EWI" if "external_wall_insulation" in package_comparison["measures"] else None,
|
||||
"CWI": "CWI" if "cavity_wall_insulation" in package_comparison["measures"] else None,
|
||||
"LI": "LI" if "loft_insulation" in package_comparison["measures"] else None,
|
||||
"ASHP Htg": "ASHP Htg" if "air_source_heat_pump" in package_comparison["measures"] else None,
|
||||
"Elec Storage": (
|
||||
"Elec Storage Htrs (Out of scope -Prov sum only)" if "high_heat_retention_storage_heaters" in
|
||||
package_comparison["measures"] else None
|
||||
),
|
||||
"Solar PV": "Solar PV" if "solar_pv" in package_comparison["measures"] else None,
|
||||
})
|
||||
|
||||
results = pd.DataFrame(results)
|
||||
|
||||
# For the different measures, we check the impact with a few debugging functions
|
||||
|
||||
def check_mds(results, input_properties, recommendations):
|
||||
import ast
|
||||
walls_check = []
|
||||
hhr_check = []
|
||||
for p in input_properties:
|
||||
res = results[results["uprn"] == p.uprn]
|
||||
wall = p.walls
|
||||
heating = p.main_heating
|
||||
heating_controls = p.main_heating_controls
|
||||
wall_recommendation = [
|
||||
x for x in res["measures"].values[0] if
|
||||
x in ["internal_wall_insulation", "external_wall_insulation", "cavity_wall_insulation"]
|
||||
]
|
||||
walls_check, hhr_check = check_mds(results, input_properties, recommendations, optimise_measures)
|
||||
|
||||
hhr_recommendation = [
|
||||
x for x in res["measures"].values[0] if
|
||||
x in ["high_heat_retention_storage_heaters"]
|
||||
]
|
||||
|
||||
possible_measures = [ast.literal_eval(x) for x in list(recommendations[p.id].keys())]
|
||||
# Unlist them
|
||||
possible_measures = [x for sublist in possible_measures for x in sublist]
|
||||
possible_measures = list(set(possible_measures))
|
||||
|
||||
if wall_recommendation:
|
||||
if len(wall_recommendation) > 1:
|
||||
raise Exception("something went wrong")
|
||||
wall_recommendation = wall_recommendation[0]
|
||||
else:
|
||||
wall_recommendation = None
|
||||
|
||||
hhr_recommendation = hhr_recommendation[0] if hhr_recommendation else None
|
||||
|
||||
walls_check.append(
|
||||
{
|
||||
"uprn": p.uprn,
|
||||
"address": p.address,
|
||||
"postcode": p.postcode,
|
||||
"conservation_status": p.spatial["conservation_status"],
|
||||
"is_listed_building": p.spatial["is_listed_building"],
|
||||
"is_heritage_building": p.spatial["is_heritage_building"],
|
||||
"wall": wall["clean_description"],
|
||||
"recommendation": wall_recommendation,
|
||||
"possible_measures": possible_measures,
|
||||
"selected_measures": res["measures"].values[0],
|
||||
}
|
||||
)
|
||||
|
||||
hhr_check.append(
|
||||
{
|
||||
"uprn": p.uprn,
|
||||
"address": p.address,
|
||||
"postcode": p.postcode,
|
||||
"heating": heating["clean_description"],
|
||||
"heating_controls": heating_controls["clean_description"],
|
||||
"recommendation": hhr_recommendation,
|
||||
"possible_measures": possible_measures,
|
||||
"selected_measures": res["measures"].values[0],
|
||||
}
|
||||
)
|
||||
|
||||
walls_check = pd.DataFrame(walls_check)
|
||||
hhr_check = pd.DataFrame(hhr_check)
|
||||
|
||||
return walls_check, hhr_check
|
||||
|
||||
walls_check, hhr_check = check_mds(results, input_properties, recommendations)
|
||||
results.to_excel("optimised mds_results 5th June.xlsx")
|
||||
|
||||
results = []
|
||||
for p in input_properties:
|
||||
|
|
@ -1114,11 +1061,14 @@ async def build_mds(body: MdsRequest):
|
|||
)
|
||||
|
||||
# TODO: We should determine if the home is gas & electricity or just electricity
|
||||
|
||||
# Determine if the heating and hotwater was previously electric only or both
|
||||
|
||||
current_energy_bill = AnnualBillSavings.calculate_annual_bill(
|
||||
current_adjusted_energy,
|
||||
kwh=current_adjusted_energy,
|
||||
)
|
||||
expected_energy_bill = AnnualBillSavings.calculate_annual_bill(
|
||||
expected_adjusted_energy,
|
||||
kwh=expected_adjusted_energy,
|
||||
)
|
||||
|
||||
bill_savings = current_energy_bill - expected_energy_bill
|
||||
|
|
@ -1133,6 +1083,7 @@ async def build_mds(body: MdsRequest):
|
|||
to_append = {
|
||||
"config_address": config["address"],
|
||||
"config_postcode": config["postcode"],
|
||||
"uprn": p.uprn,
|
||||
"address": p.address,
|
||||
"postcode": p.postcode,
|
||||
"measures": measures,
|
||||
|
|
@ -1146,15 +1097,19 @@ async def build_mds(body: MdsRequest):
|
|||
"heat_demand_after": heat_demand_after,
|
||||
"carbon_before": carbon_before,
|
||||
"carbon_after": carbon_after,
|
||||
"bill_savings": bill_savings,
|
||||
"energy_savings": energy_savings,
|
||||
"bill_savings": round(bill_savings, 2),
|
||||
"energy_savings": round(energy_savings, 2),
|
||||
"current_energy_bill": round(current_energy_bill, 2),
|
||||
"fuel_type": p.main_fuel["fuel_type"],
|
||||
}
|
||||
results.append(to_append)
|
||||
|
||||
results = pd.DataFrame(results)
|
||||
results["sap_uplift"] = results["sap_after"] - results["sap_before"]
|
||||
|
||||
# results.to_excel("mds_results 30th May.xlsx")
|
||||
# results.to_excel("mds_results 5th June.xlsx")
|
||||
|
||||
walls_check, hhr_check = check_mds(results, input_properties, recommendations, optimise_measures)
|
||||
|
||||
except IntegrityError:
|
||||
logger.error("Database integrity error occurred", exc_info=True)
|
||||
|
|
@ -1174,3 +1129,80 @@ async def build_mds(body: MdsRequest):
|
|||
return Response(status_code=500, content="An unexpected error occurred.")
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
|
||||
def check_mds(results, input_properties, recommendations, optimise_measures):
|
||||
import ast
|
||||
walls_check = []
|
||||
hhr_check = []
|
||||
for p in input_properties:
|
||||
res = results[results["uprn"] == p.uprn]
|
||||
wall = p.walls
|
||||
heating = p.main_heating
|
||||
heating_controls = p.main_heating_controls
|
||||
|
||||
if optimise_measures:
|
||||
measures = res["measures"].values[0]
|
||||
else:
|
||||
measures = [list(z.keys())[0] for z in res["measures"].values[0]]
|
||||
|
||||
wall_recommendation = [
|
||||
x for x in measures if
|
||||
x in ["internal_wall_insulation", "external_wall_insulation", "cavity_wall_insulation"]
|
||||
]
|
||||
|
||||
hhr_recommendation = [
|
||||
x for x in measures if
|
||||
x in ["high_heat_retention_storage_heaters"]
|
||||
]
|
||||
|
||||
if optimise_measures:
|
||||
possible_measures = [ast.literal_eval(x) for x in list(recommendations[p.id].keys())]
|
||||
# Unlist them
|
||||
possible_measures = [x for sublist in possible_measures for x in sublist]
|
||||
possible_measures = list(set(possible_measures))
|
||||
else:
|
||||
possible_measures = p.measures
|
||||
|
||||
if wall_recommendation:
|
||||
if len(wall_recommendation) > 1:
|
||||
raise Exception("something went wrong")
|
||||
wall_recommendation = wall_recommendation[0]
|
||||
else:
|
||||
wall_recommendation = None
|
||||
|
||||
hhr_recommendation = hhr_recommendation[0] if hhr_recommendation else None
|
||||
|
||||
walls_check.append(
|
||||
{
|
||||
"uprn": p.uprn,
|
||||
"address": p.address,
|
||||
"postcode": p.postcode,
|
||||
"property_type": p.data['property-type'],
|
||||
"conservation_status": p.spatial["conservation_status"],
|
||||
"is_listed_building": p.spatial["is_listed_building"],
|
||||
"is_heritage_building": p.spatial["is_heritage_building"],
|
||||
"wall": wall["clean_description"],
|
||||
"recommendation": wall_recommendation,
|
||||
"possible_measures": possible_measures,
|
||||
"selected_measures": res["measures"].values[0],
|
||||
}
|
||||
)
|
||||
|
||||
hhr_check.append(
|
||||
{
|
||||
"uprn": p.uprn,
|
||||
"address": p.address,
|
||||
"postcode": p.postcode,
|
||||
"heating": heating["clean_description"],
|
||||
"heating_controls": heating_controls["clean_description"],
|
||||
"recommendation": hhr_recommendation,
|
||||
"possible_measures": possible_measures,
|
||||
"selected_measures": res["measures"].values[0],
|
||||
}
|
||||
)
|
||||
|
||||
walls_check = pd.DataFrame(walls_check)
|
||||
hhr_check = pd.DataFrame(hhr_check)
|
||||
|
||||
return walls_check, hhr_check
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ load_dotenv(dotenv_path="backend/.env")
|
|||
EPC_AUTH_TOKEN = os.getenv("EPC_AUTH_TOKEN")
|
||||
|
||||
searcher = SearchEpc(
|
||||
address1="Flat above 7 Malling Road",
|
||||
postcode="ME6 5AA",
|
||||
address1="108 Blacklands",
|
||||
postcode="ME19 6DP",
|
||||
auth_token=EPC_AUTH_TOKEN,
|
||||
os_api_key="",
|
||||
property_type=None,
|
||||
|
|
@ -20,11 +20,8 @@ searcher = SearchEpc(
|
|||
)
|
||||
|
||||
res = searcher.estimate_epc(
|
||||
property_type="Flat",
|
||||
built_form="Mid-Terrace",
|
||||
lmks_to_drop=[
|
||||
"4c3714a59744ab2c6e60441f0fa0eb903f283c6c62d0691e108cadbc7b5a8caa",
|
||||
"363197839762013013017062127708717",
|
||||
"363197811132009091518041845968302"
|
||||
]
|
||||
property_type="Bungalow",
|
||||
built_form="Detached",
|
||||
lmks_to_drop=["849273656952012102323315196229804"],
|
||||
exclude_old=True
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue