mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
Updated checking if solar pv valid
This commit is contained in:
parent
c3fd22825a
commit
c72bd8a5ed
3 changed files with 28 additions and 3 deletions
|
|
@ -62,6 +62,9 @@ class Property:
|
||||||
n_bedrooms = None
|
n_bedrooms = None
|
||||||
building_id = None # Used to group properties together into a single building
|
building_id = None # Used to group properties together into a single building
|
||||||
|
|
||||||
|
# Contains the solar panel optimisation results from the Google Solar API
|
||||||
|
solar_panel_configuration = None
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
id,
|
id,
|
||||||
|
|
@ -604,6 +607,12 @@ class Property:
|
||||||
self.find_energy_sources()
|
self.find_energy_sources()
|
||||||
self.set_current_energy_bill(energy_consumption_client)
|
self.set_current_energy_bill(energy_consumption_client)
|
||||||
|
|
||||||
|
def set_solar_panel_configuration(self, solar_panel_configuration):
|
||||||
|
"""
|
||||||
|
This funtion inserts the solar panel configuration into the property object
|
||||||
|
"""
|
||||||
|
self.solar_panel_configuration = solar_panel_configuration
|
||||||
|
|
||||||
def set_current_energy_bill(self, energy_consumption_client):
|
def set_current_energy_bill(self, energy_consumption_client):
|
||||||
"""
|
"""
|
||||||
Given what we know about the property now, estimates the current energy consumption using the UCL paper
|
Given what we know about the property now, estimates the current energy consumption using the UCL paper
|
||||||
|
|
|
||||||
|
|
@ -368,12 +368,12 @@ async def trigger_plan(body: PlanTriggerRequest):
|
||||||
p.get_spatial_data(uprn_filenames)
|
p.get_spatial_data(uprn_filenames)
|
||||||
|
|
||||||
# TODO: Handle the case of modelling some units as buildings and some as properties individually
|
# TODO: Handle the case of modelling some units as buildings and some as properties individually
|
||||||
# TODO: We should adjust the energy consumtpion to account for post-retrofit energy consumption
|
|
||||||
building_ids = [
|
building_ids = [
|
||||||
{
|
{
|
||||||
"building_id": p.building_id,
|
"building_id": p.building_id,
|
||||||
"longitude": p.spatial["longitude"],
|
"longitude": p.spatial["longitude"],
|
||||||
"latitude": p.spatial["latitude"],
|
"latitude": p.spatial["latitude"],
|
||||||
|
# Energy consumption is adjusted for the property's expected post retrofit state
|
||||||
"energy_consumption": energy_consumption_client.estimate_new_consumption(
|
"energy_consumption": energy_consumption_client.estimate_new_consumption(
|
||||||
current_rating=p.data["current-energy-rating"],
|
current_rating=p.data["current-energy-rating"],
|
||||||
target_rating=body.goal_value,
|
target_rating=body.goal_value,
|
||||||
|
|
@ -394,6 +394,7 @@ async def trigger_plan(body: PlanTriggerRequest):
|
||||||
if coordinate_pair not in unique_coordinates[building_id]:
|
if coordinate_pair not in unique_coordinates[building_id]:
|
||||||
unique_coordinates[building_id].append(coordinate_pair)
|
unique_coordinates[building_id].append(coordinate_pair)
|
||||||
|
|
||||||
|
solar_panel_configuration = {}
|
||||||
for building_id, coordinates in unique_coordinates.items():
|
for building_id, coordinates in unique_coordinates.items():
|
||||||
if len(coordinates) > 1:
|
if len(coordinates) > 1:
|
||||||
raise NotImplementedError("more than one coordinate for a building - handle me")
|
raise NotImplementedError("more than one coordinate for a building - handle me")
|
||||||
|
|
@ -402,17 +403,27 @@ async def trigger_plan(body: PlanTriggerRequest):
|
||||||
energy_consumption = sum(
|
energy_consumption = sum(
|
||||||
[entry['energy_consumption'] for entry in building_ids if entry['building_id'] == building_id]
|
[entry['energy_consumption'] for entry in building_ids if entry['building_id'] == building_id]
|
||||||
)
|
)
|
||||||
solar_performance = solar_api_client.get(
|
solar_api_client.get(
|
||||||
longitude=coordinates["longitude"],
|
longitude=coordinates["longitude"],
|
||||||
latitude=coordinates["latitude"],
|
latitude=coordinates["latitude"],
|
||||||
energy_consumption=energy_consumption,
|
energy_consumption=energy_consumption,
|
||||||
is_building=True,
|
is_building=True,
|
||||||
)
|
)
|
||||||
|
solar_panel_configuration[building_id] = {
|
||||||
|
"insights_data": solar_api_client.insights_data,
|
||||||
|
"panel_performance": solar_api_client.panel_performance,
|
||||||
|
"n_units": len([entry for entry in building_ids if entry['building_id'] == building_id])
|
||||||
|
}
|
||||||
|
|
||||||
|
# Insert this into the properties that have this building id
|
||||||
|
for p in input_properties:
|
||||||
|
if p.building_id == building_id:
|
||||||
|
p.set_solar_panel_configuration(solar_panel_configuration[building_id])
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Model the solar potential at the property level
|
# Model the solar potential at the property level
|
||||||
for p in input_properties:
|
for p in input_properties:
|
||||||
# TODO: Complete me!
|
# TODO: Complete me! - we probably won't do this for individual flats
|
||||||
solar_performance = solar_api_client.get(
|
solar_performance = solar_api_client.get(
|
||||||
longitude=p.spatial["longitude"], latitude=p.spatial["latitude"]
|
longitude=p.spatial["longitude"], latitude=p.spatial["latitude"]
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,11 @@ class SolarPvRecommendations:
|
||||||
]
|
]
|
||||||
|
|
||||||
def is_solar_pv_valid(self):
|
def is_solar_pv_valid(self):
|
||||||
|
|
||||||
|
# If the property is a flat but we are looking at building solar potential, we can include this
|
||||||
|
if (self.property.building_id is not None) and (self.property.solar_panel_configuration is not None):
|
||||||
|
return True
|
||||||
|
|
||||||
is_valid_property_type = self.property.data["property-type"] in ["House", "Bungalow", "Maisonette"]
|
is_valid_property_type = self.property.data["property-type"] in ["House", "Bungalow", "Maisonette"]
|
||||||
is_valid_roof_type = (
|
is_valid_roof_type = (
|
||||||
self.property.roof["is_flat"] or self.property.roof["is_pitched"] or self.property.roof["is_roof_room"]
|
self.property.roof["is_flat"] or self.property.roof["is_pitched"] or self.property.roof["is_roof_room"]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue