-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathget_avg_solar_energy.py
executable file
·93 lines (62 loc) · 2.48 KB
/
get_avg_solar_energy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python3
from astral import Location
from datetime import datetime, timedelta
import math
import time as tm
import os.path
import json
from urllib.request import urlopen
from pysolar import radiation
from pysolar import solar
import numpy as np
def get_solar_radiation(lat, lon, date):
solarAlt = solar.get_altitude(lat, lon, date)
solarPower = 0
if solarAlt <= 0:
return 0
return radiation.get_radiation_direct(date, solarAlt)
def get_solar_radiation_data(date, days, lat, lon):
radiation = []
for i in range(days):
daily_radiation = 0.0
counted_hrs = 0.0
for i in range(3600 * 24):
r = get_solar_radiation(lat, lon, date)
if r:
radiation.append(r)
date += timedelta(seconds = 1)
return radiation
if __name__ == "__main__":
import argparse
def valid_date(s):
try:
return datetime.strptime(s, "%Y-%m-%d")
except ValueError:
msg = "Not a valid date: '{}'".format(s)
raise argparse.ArgumentTypeError(msg)
parser = argparse.ArgumentParser()
parser.add_argument("--greenhouse", help="greenhouse characteristics file", default=None, type=str)
parser.add_argument("--lat", help="latitude", default=None, type=float)
parser.add_argument("--lon", help="longitude", default=None, type=float)
parser.add_argument("--start", help="starting date in format YYYY-MM-DD", default=datetime.now(), type=valid_date)
parser.add_argument("--days", help="number of days", default=30, type=int)
args = parser.parse_args()
greenhouse = {}
if args.greenhouse:
with open(args.greenhouse, "r") as configFile:
greenhouse = json.loads(configFile.read())
if not args.lat and "latitude" in greenhouse:
args.lat = greenhouse["latitude"]
if not args.lon and "longitude" in greenhouse:
args.lon = greenhouse['longitude']
radiation = get_solar_radiation_data(args.start, args.days, args.lat, args.lon)
print("avg radiation: {}W/m^2".format(np.average(radiation)))
print("max radiation: {}W/m^2".format(np.max(radiation)))
print("min radiation: {}W/m^2".format(np.min(radiation)))
if args.greenhouse and "greenhouse_dimensions" in greenhouse:
dimensions = greenhouse["greenhouse_dimensions"]
area = dimensions[0] * dimensions[1]
print("using greenhouse surface area: {}m^2".format(round(area, 1)))
print("greenhouse avg radiation: {}W".format(np.average(radiation) * area))
print("greenhouse max radiation: {}W".format(np.max(radiation) * area))
print("greenhouse min radiation: {}W".format(np.min(radiation) * area))