Class: Sunnycarcharger::Agent::Fronius
- Inherits:
-
Object
- Object
- Sunnycarcharger::Agent::Fronius
- Defined in:
- lib/sunnycarcharger/agent/fronius.rb
Instance Method Summary collapse
- #client ⇒ Object
- #connected? ⇒ Boolean
- #fetch ⇒ Object
-
#initialize(ips: Config.fronius_ips) ⇒ Fronius
constructor
A new instance of Fronius.
-
#inverter_details ⇒ Object
“Model”=>“CCS WattNode WND-3D-480-MB”, “Serial”=>“123456”.
Constructor Details
#initialize(ips: Config.fronius_ips) ⇒ Fronius
Returns a new instance of Fronius.
4 5 6 7 |
# File 'lib/sunnycarcharger/agent/fronius.rb', line 4 def initialize(ips: Config.fronius_ips) raise ArgumentError, "Missing Fronius IP addresses" unless ips @ips = ips end |
Instance Method Details
#client ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/sunnycarcharger/agent/fronius.rb', line 9 def client @client ||= begin successful_client = nil @ips.find do |ip| successful_client = Faraday.new( "http://" + ip, 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..timeout = 3 end true rescue Faraday::ConnectionFailed, Errno::ECONNREFUSED false end successful_client || raise("Could not connect to any of the provided Fronius IP addresses") end end |
#connected? ⇒ Boolean
62 63 64 65 66 67 |
# File 'lib/sunnycarcharger/agent/fronius.rb', line 62 def connected? fetch true rescue Faraday::ConnectionFailed, Errno::ECONNREFUSED false end |
#fetch ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/sunnycarcharger/agent/fronius.rb', line 32 def fetch data = Sunnycarcharger::Agent::InvertorData.new response = client.get("/solar_api/v1/GetPowerFlowRealtimeData.fcgi").body body = response.dig("Body", "Data", "Site") data.power_from_grid = body.dig("P_Grid").to_i data.power_to_load = -1 * body.dig("P_Load").to_i data.power_from_solar = body.dig("P_PV").to_i data.solar_energy_today = body.dig("E_Day").to_i begin response = client.get("/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System").body body = response.dig("Body", "Data", "0") data.energy_consumed = body.dig("EnergyReal_WAC_Sum_Consumed").to_i data.energy_produced = body.dig("EnergyReal_WAC_Sum_Produced").to_i data.serial = body.dig("Details", "Serial") rescue => e puts "Error fetching energy_consumed and energy_produced: #{e}" end data end |
#inverter_details ⇒ Object
“Model”=>“CCS WattNode WND-3D-480-MB”, “Serial”=>“123456”
56 57 58 59 60 |
# File 'lib/sunnycarcharger/agent/fronius.rb', line 56 def inverter_details response = client.get("/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System").body body = response.dig("Body", "Data", "0") body.dig("Details") end |