def get_daylight_details(): """Get details of solar path/daylight hours at site for today (local)""" # Instantiating Astral object (for calculating position of sun and moon) a = Astral() a.solar_depression = 'civil' # Instantiating an Astral location (hard-coded here since dealing with one site only, but # easily scalable if site required login and site lat and long were tied to user profile) l = Location() l.latitude = 37.8195 l.longitude = -122.2523 l.timezone = 'US/Pacific' l.elevation = 125 sunrise = l.sunrise().strftime('%-I:%M%p') sunset = l.sunset().strftime('%-I:%M%p') day_length = str(l.sunset() - l.sunrise()) solar_noon = l.solar_noon().strftime('%-I:%M%p') solar_zenith = l.solar_elevation(l.solar_noon().replace(tzinfo=None)) solar_elevation = l.solar_elevation() daylight_data = { 'sunrise': sunrise, 'sunset': sunset, 'daylength': day_length, 'solar_noon': solar_noon, 'zenith': solar_zenith, 'elevation': solar_elevation } return jsonify(daylight_data)
def test_Location_SolarNoonUTC(): c = Location() c.solar_noon(local=False)
def test_Location_SolarNoon(): c = Location() c.solar_noon()
from astral import Location import argparse import datetime options = argparse.ArgumentParser() options.add_argument("lat", name="latitude", type=float) options.add_argument("lng", name="longitude", type=float) options.add_argument("timezone") args = options.parse_args() loc = Location(("Somewhere", None, args.lat, args.lng, args.timezone, 0)) solar_noon = loc.solar_noon() afternoon = datetime.datetime.now() > solar_noon elevation = loc.solar_elevation() if afternoon: angle = 180 - elevation else: angle = elevation print(angle)