class Enphase::Client

Attributes

api_key[R]
datetime_format[R]
user_id[R]

Public Class Methods

new(api_key:, user_id:, datetime_format: 'iso8601') click to toggle source

datetime format can be ‘iso8601’ or ‘epoch’, defaults to ‘iso8601’

# File lib/enphase/client.rb, line 15
def initialize(api_key:, user_id:, datetime_format: 'iso8601')
  @api_key = api_key
  @user_id = user_id
  @datetime_format = datetime_format
end

Public Instance Methods

inverters(site_id:) click to toggle source

Inverters Summary Endpoint

# File lib/enphase/client.rb, line 32
def inverters(site_id:)
  get_json(url: 'systems/inverters_summary_by_envoy_or_site', params: {site_id: site_id})
end
stats(system_id:, **params) click to toggle source

Stats Endpoint

# File lib/enphase/client.rb, line 22
def stats(system_id:, **params)
  get_json(url: "systems/#{system_id}/stats", params: params)
end
summary(system_id:, **params) click to toggle source

Summary Endpoint

# File lib/enphase/client.rb, line 27
def summary(system_id:, **params)
  get_json(url: "systems/#{system_id}/summary", params: params)
end
systems(**params) click to toggle source

Index Endpoint

# File lib/enphase/client.rb, line 37
def systems(**params)
  get_json(url: 'systems', params: params)
end

Private Instance Methods

base_url() click to toggle source
# File lib/enphase/client.rb, line 59
def base_url
  'https://api.enphaseenergy.com/api/v2'
end
get_json(url:, params: {}) click to toggle source
# File lib/enphase/client.rb, line 42
def get_json(url:, params: {})
  conn = Faraday.new(
      url: "#{base_url}/#{url}",
      params: params.merge({key: api_key, user_id: user_id, datetime_format: datetime_format})
      ) do |f|
        f.request :json # encode req bodies as JSON and automatically set the Content-Type header
        f.response :json # decode response bodies as JSON
        f.adapter :net_http # adds the adapter to the connection
  end
  response = conn.get
  if response.success?
    response.body
  else
    raise Enphase::ClientError.new("API returned status #{response.status}: #{response.reason_phrase}")
  end
end