Class: Sunnycarcharger::Agent::Web

Inherits:
Object
  • Object
show all
Defined in:
lib/sunnycarcharger/agent/web.rb

Instance Method Summary collapse

Constructor Details

#initialize(url: Config.web_url, token: Config.web_token) ⇒ Web

Returns a new instance of Web.

Raises:

  • (ArgumentError)


4
5
6
7
8
# File 'lib/sunnycarcharger/agent/web.rb', line 4

def initialize(url: Config.web_url, token: Config.web_token)
  raise ArgumentError, "Missing web token" unless token
  @url = url
  @token = token
end

Instance Method Details

#clientObject



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/sunnycarcharger/agent/web.rb', line 10

def client
  @client ||= Faraday.new(
    @url,
    headers: {"User-Agent" => "sunnycarcharger-agent"}
  ) do |conn|
    conn.request :json
    conn.response :json
    conn.response :raise_error
    # conn.request :retry, retry_options if retry_options # Must be registered after :raise_error
    conn.adapter Faraday.default_adapter
    conn.options.timeout = 2
  end
end

#connected?Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
# File 'lib/sunnycarcharger/agent/web.rb', line 34

def connected?
  url = File.join(@url, "/api/v1/ping")
  response = client.get(url)
  response.status == 200
rescue Faraday::ConnectionFailed, Errno::ECONNREFUSED
  false
end

#publish(invertor_data) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/sunnycarcharger/agent/web.rb', line 24

def publish(invertor_data)
  url = File.join(@url, "/api/v1/solar_charge_events")
  data = {solar_charge_event: invertor_data}
  client.post do |req|
    req.url url
    req.headers["Authorization"] = "token #{@token}"
    req.body = data.to_json
  end
end