Skip to content

Commit

Permalink
Fix format: Azimuth and power fields
Browse files Browse the repository at this point in the history
  • Loading branch information
JoanaFigueira committed Apr 11, 2022
1 parent 80e3d7a commit f1e449c
Show file tree
Hide file tree
Showing 3 changed files with 16,973 additions and 13 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,17 @@ MONGO_URI=mongodb://localhost python run_api.py

```

Updating the

## Test data

To obtain test data:

curl 'https://api.beedataanalytics.com/v1/components?where="contractId"=="XXXXXXX" and "type"=="FV"'

curl 'https://api.beedataanalytics.com/authn/login'


## TODO

- Discovering tests from heman/ fails since the api is created twice
Expand Down
30 changes: 18 additions & 12 deletions heman/api/pvcalculator/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,17 @@ def get_last_scenario(self, contract_name):
)


def parseMongoAzimuth(azimuth):
def parseMongoAzimuth(azimuth, gabledroof):
"""
This function turns mongo representation of azimuth into a int tuple.
Currently, Mongo objects represents azimuths either as a float like 120.0
or as a string like "120#300" when it is a gabled roof.
The first azimuth is always the one towards south or 90 if W-E orientation.
TODO: change the mongo representation to be a more uniform one.
"""
if type(azimuth) is float:
if not gabledroof:
return (int(azimuth),)
return tuple(int(a) for a in azimuth.split('#'))

def parseMongoPower(peakPower):
return float(peakPower.replace(' kWp', ''))
return (int(azimuth), int((azimuth+180) % 360))

def queryPeakPower(peakPower):
if not peakPower: return None
Expand Down Expand Up @@ -81,8 +78,11 @@ def get(self, contract):
scenario
for i,scenario in enumerate(scenarios)
if scenario['settings']['tilt'] == tiltDegrees
and parseMongoAzimuth(scenario['settings']['azimuth']) == azimuthDegrees
and (parseMongoPower(scenario['settings']['power']) == peakPowerKw or not peakPowerKw)
and parseMongoAzimuth(
scenario['settings']['azimuth'],
scenario['settings']['gabledroof']
) == azimuthDegrees
and (scenario['settings']['power'] == peakPowerKw or not peakPowerKw)
]
if not selectedScenarios:
return Response(
Expand Down Expand Up @@ -112,11 +112,14 @@ def get(self, contract):
savingsEuroYear = bestScenario['generation']['savings'],
paybackYears = bestScenario['economics']['payback'],
installationCostEuro = bestScenario['settings']['cost'],
azimuthDegrees= parseMongoAzimuth(bestScenario['settings']['azimuth']),
azimuthDegrees= parseMongoAzimuth(
bestScenario['settings']['azimuth'],
bestScenario['settings']['gabledroof']
),
tiltDegrees= bestScenario['settings']['tilt'],
areaM2 = bestScenario['settings']['area'],
nModules = bestScenario['settings']['numModules'],
peakPowerKw = parseMongoPower(bestScenario['settings']['power']),
peakPowerKw = bestScenario['settings']['power'],
dailyLoadProfileKwh = scenario_report['results']['pvAutoSize']['load']['profile'],
dailyProductionProfileKwh = bestScenario['generation']['profile'],
monthlyProductionToLoadKwh = bestScenario['generation']['monthlyPVtoLoad'],
Expand Down Expand Up @@ -154,8 +157,11 @@ def get(self, contract):
tilts, azimuths, powers = zip(*[
(
scenario['settings']['tilt'],
parseMongoAzimuth(scenario['settings']['azimuth']),
parseMongoPower(scenario['settings']['power']),
parseMongoAzimuth(
scenario['settings']['azimuth'],
scenario['settings']['gabledroof']
),
scenario['settings']['power'],
)
for i,scenario in enumerate(scenarios)
])
Expand Down
16,945 changes: 16,944 additions & 1 deletion testdata/pvautosize_example.json

Large diffs are not rendered by default.

0 comments on commit f1e449c

Please sign in to comment.