README.md

# ExNrel

> NREL(https://developer.nrel.gov/) Api client for Elixir

## Installation

You can install it from hex as below:

  1. Add `ex_nrel` to your list of dependencies in `mix.exs`:

    ```elixir
    def deps do
      [{:ex_nrel, "~> 0.1.0"}]
    end
    ```

  2. Ensure `ex_nrel` is started before your application:

    ```elixir
    def application do
      [applications: [:ex_nrel]]
    end
    ```

## Usage

### Configuration

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`. Currently, the `xml` output returns the string itself so necessary parsing must be done by the SDK user. 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.

### [Buildings](http://developer.nrel.gov/docs/buildings/)

#### [Commerial Building Resources](http://developer.nrel.gov/docs/buildings/commercial-building-resource-database-v1/) (resources, events and vocabularies)

```elixir
iex> ExNrel.Buildings.CBR.get(portal: "Energy")

iex> ExNrel.Buildings.CBR.events(portal: 5)

iex> ExNrel.Buildings.CBR.vocabularies(name: "audience-types")
```

### [Electricity](http://developer.nrel.gov/docs/electricity/)

#### [Energy Incentives (Version 2)](http://developer.nrel.gov/docs/electricity/energy-incentives-v2/)

```elixir
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")
```

#### [Utility Rates](http://developer.nrel.gov/docs/electricity/utility-rates-v3/)

```elixir
iex> ExNrel.Electricity.UtilityRate.get(lat: 39.323, lon: -94.23)

iex> ExNrel.Electricity.UtilityRate.get(address: "1712 Main Street, Kansas City")
```

#### [Utility Rates by Census Region](http://developer.nrel.gov/docs/electricity/census-rate-v3/)

```elixir
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")
```

### [Solar](http://developer.nrel.gov/docs/solar/)

#### [PVWatts (Version 5)](https://developer.nrel.gov/docs/solar/pvwatts-v5/)

```elixir
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")
```

#### [Solar Dataset Query](http://developer.nrel.gov/docs/solar/data-query-v1/)

```elixir
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)
```

#### [Solar Resource Data](http://developer.nrel.gov/docs/solar/solar-resource-v1/)

```elixir
iex> ExNrel.Solar.Resources.get(lat: 39.323, lon: -94.23)

iex> ExNrel.Solar.Resources.get(address: "1712 Main Street, Kansas City")
```

## Contribution

- 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.

## Author

- [techgaun](https://github.com/techgaun)