Provides sunrise and sunset times for a provided location and date.
The algorithms/math used are from:
https://github.com/mikereedell/sunrisesunsetlib-java
Code has been completely rewritten to take advantage of the Elixir language.
The event function takes a minimum of two parameters, the event of interest which can be either :rise or :set and the latitude and longitude. Additionally a list of options can be provided as follows:
date:
allows a value of either:today
or an Elixir date. The default if this option is not provided is the current day.
zenith:
can be set to define the sunrise or sunset. See theZeniths
module for a set of standard zeniths that are used. The default if a zenith is not provided is:official
most commonly used for sunrise and sunset.timezone:
can be provided and should be a standard timezone identifier such as "America/Chicago". If the option is not provided, the timezone is taken from the system and used.
The following, with out any options and run on December 25:
iex> Solar.event (:rise, {39.1371, -88.65})
{:ok,~T[07:12:26]}
iex> Solar.event (:set, {39.1371, -88.65})
{:ok,~T[16:38:01]}
The coordinates are for Lake Sara, IL where sunrise on this day will be at 7:12:26AM and sunset will be at 4:38:01PM.
The latlong
library can be used to convert various latitude and longitude
formats to the signed numeric decimal format needed for position in the event
call.
- Have an optional GenServer that can emit calls based on parameters:
- :rise, +0, :repeat, fn spawns a process to run the function at sunrise_for_date each day.
- :set, -20, fn runs function 20 minutes before sunset.
- Add other events such as :equal where daylight and night are equal.
- Add winter and summer solstice.
- Add earliest sunrise and latest sunset.
If available in Hex, the package can be installed as:
- Add
solar
to your list of dependencies inmix.exs
:
```elixir
def deps do
[{:solar, "~> 0.1.0"}]
end
```