class SAAL::Envoy::Inverters

Constants

DEFAULT_CACHE_TIMEOUT
DEFAULT_PASSWORD
DEFAULT_PREFIX
DEFAULT_SOURCES
DEFAULT_TIMEOUT
DEFAULT_TYPES
DEFAULT_USER

Attributes

inverters[R]

Public Class Methods

new(defs, opts={}) click to toggle source
    # File lib/envoy.rb
225 def initialize(defs, opts={})
226   @host = defs[:host] || defs['host'] || DEFAULT_HOST
227   @user = defs[:user] || defs['user'] || DEFAULT_USER
228   @password = defs[:password] || defs['password'] || DEFAULT_PASSWORD
229   @timeout = opts[:timeout] || opts['timeout'] || DEFAULT_TIMEOUT
230   @cache_timeout = opts[:cache_timeout] || opts['cache_timeout'] || DEFAULT_CACHE_TIMEOUT
231   @cache = nil
232   @cachetime = nil
233   @inverters_list = {}
234   @inverters = defs[:inverters] || defs['inverters'] || DEFAULT_SOURCES
235   @types = defs[:types] || defs['types'] || DEFAULT_TYPES
236   @prefix = defs[:prefix] || defs['prefix'] || DEFAULT_PREFIX
237 end

Public Instance Methods

create_sensors() click to toggle source
    # File lib/envoy.rb
256 def create_sensors
257   sensors = {}
258   @inverters.product(@types).each do |source, type|
259     key = "#{@prefix}_#{source}_#{type}"
260     sensors[key] = InverterUnderlying.new(key, self)
261   end
262   sensors
263 end
enumerate() click to toggle source
    # File lib/envoy.rb
247 def enumerate
248   read_val("foo") # Force a read to make sure the inverter serials are stored
249   @inverters_list.keys
250 end
read_val(name) click to toggle source
    # File lib/envoy.rb
239 def read_val(name)
240   if !@cachetime or @cachetime < Time.now - @cache_timeout
241     @cache = read_all()
242     @cachetime = Time.now
243   end
244   return @cache ? @cache[name] : nil
245 end
set_all_inverters!() click to toggle source
    # File lib/envoy.rb
252 def set_all_inverters!
253   @inverters = self.enumerate
254 end

Private Instance Methods

read_all() click to toggle source
    # File lib/envoy.rb
266 def read_all
267   response = SAAL::do_http_get_digest(@host, 80, "/api/v1/production/inverters", @user, @password, @timeout)
268   return nil if !response
269 
270   values = JSON.parse(response.body)
271   inverters = {}
272   values.each do |inverter|
273     serial = inverter["serialNumber"]
274     @inverters_list[serial] = true
275     {"lastReportDate" => "last_report_date",
276      "lastReportWatts" => "w_now",
277      "maxReportWatts" => "w_max",
278     }.each do |type, label|
279       inverters["#{@prefix}_#{serial}_#{label}"] = inverter[type]
280     end
281   end
282 
283   inverters
284 end