Current section

Files

Jump to
flower_power lib flower_power.ex
Raw

lib/flower_power.ex

defmodule FlowerPower.Api do
@moduledoc"""
This module is used to get the raw data graph from parrots web service
"""
alias Poison.Parser
alias FlowerPower.Extractor
use Timex
@url_base_path "https://apiflowerpower.parrot.com"
@doc """
Calls the flower power api to get the garden data based on the parameters.
"""
def get_garden_data(credentials, begin_date, end_date) do
url = @url_base_path <> "/user/v1/authenticate"
{:ok, response} = HTTPoison.get url, [], params: credentials
access_token = get_access_token_from(response)
get_sensor_info( access_token )
|> get_location_params
|> get_garden_by_location(access_token, begin_date, end_date)
|> parse_body
end
defp parse_body({:ok, garden_response}), do: Parser.parse!(garden_response.body)
defp get_garden_by_location(location, access_token, from_date_format, end_date_format )
when is_binary(from_date_format) == false and is_binary(end_date_format) == false
do
{:ok, from_date} = from_date_format |> DateFormat.format("{ISOz}")
{:ok, end_date} = end_date_format |> DateFormat.format("{ISOz}")
get_garden_by_location(location, access_token, from_date, end_date )
end
defp get_garden_by_location(location, access_token, from_date, end_date) do
date_range = %{"from_datetime_utc": from_date, "to_datetime_utc": end_date}
@url_base_path <> "/sensor_data/v2/sample/location/#{location}"
|> HTTPoison.get([{:Authorization, "Bearer #{access_token}"}], params: date_range)
end
defp get_access_token_from(response) do
Parser.parse!(response.body) |> Dict.get("access_token")
end
defp get_location_params({:ok, response}) do
# If we had more that one sensor, the service would have returned more in
# the array
location_list = Parser.parse!(response.body)
List.first(location_list["locations"]) |> Dict.get("location_identifier")
end
defp get_sensor_info(access_token) do
@url_base_path <> "/sensor_data/v3/sync"
|> HTTPoison.get([{:Authorization, "Bearer #{access_token}"}])
end
end