NREL(https://developer.nrel.gov/) Api client for Elixir
You can install it from hex as below:
-
Add
ex_nrel
to your list of dependencies inmix.exs
:def deps do [{:ex_nrel, "~> 0.2.0"}] end
-
Ensure
ex_nrel
is started before your application:def application do [applications: [:ex_nrel]] end
In your configuration, add the following block:
config :ex_nrel,
api_key: System.get_env("NREL_API_KEY"),
format: "json"
Output can be either json
or xml
. You can also specify format
as part of your queries in any of the API calls to get the data of specific format. For example, ExNrel.Electricity.UtilityRate.get(lat: 39.323, lon: -94.23, format: "json")
explicitly returns json
overriding the default configuration.
ExNrel supports following APIs offered by NREL.
Commerial Building Resources (resources, events and vocabularies)
iex> ExNrel.Buildings.CBR.get(portal: "Energy")
iex> ExNrel.Buildings.CBR.events(portal: 5)
iex> ExNrel.Buildings.CBR.vocabularies(name: "audience-types")
iex> ExNrel.Electricity.EnergyIncentives.get(lat: 39.323, lon: -94.23)
iex> ExNrel.Electricity.EnergyIncentives.get(lat: 39.323, lon: -94.23, category: "hvac")
iex> ExNrel.Electricity.EnergyIncentives.get(lat: 39.323, lon: -94.23, category: "hvac", technology: "air_conditioners")
iex> ExNrel.Electricity.EnergyIncentives.get(address: "1712 Main Street, Kansas City")
iex> ExNrel.Electricity.UtilityRate.get(lat: 39.323, lon: -94.23)
iex> ExNrel.Electricity.UtilityRate.get(address: "1712 Main Street, Kansas City")
iex> ExNrel.Electricity.CensusRate.get(id: 101, lat: 39.323, lon: -94.23)
iex> ExNrel.Electricity.CensusRate.get(id: 101, address: "1712 Main Street, Kansas City")
iex> ExNrel.Solar.PVWatts.get(lat: 39.323, lon: -94.23)
iex> ExNrel.Solar.PVWatts.get(address: "1712 Main Street, Kansas City")
iex> ExNrel.Solar.PVWatts.get(lat: 39.323, lon: -94.23, timeframe: "hourly")
iex> ExNrel.Solar.Dataset.get(lat: 39.323, lon: -94.23, radius: 20)
iex> ExNrel.Solar.Dataset.get(address: "1712 Main Street, Kansas City")
iex> ExNrel.Solar.Dataset.get(lat: 39.323, lon: -94.23, all: 1)
iex> ExNrel.Solar.Resources.get(lat: 39.323, lon: -94.23)
iex> ExNrel.Solar.Resources.get(address: "1712 Main Street, Kansas City")
The response from the API is parsed through a simple parser. For JSON, the poison
package does the job and for XML, currently ExNrel returns the body as string.
The response can be one of:
{:ok, body, [total_limit: api_rate_limit, remaining_limit: api_remaining_limit]}
{:error, %{reason: "failure_reason"}}
- You can add support for remaining APIs or fix the bug in existing ones.
The XML parsing is not in-place.Rate limiting headers might be useful to handle rate limiting issues.(Part of response in ExNrel >= 0.2.0)