pvwatts-ee 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -63,7 +63,41 @@ class Pvwatts
63
63
  end
64
64
  @production_data
65
65
  end
66
-
66
+ # Get information based on passed options.
67
+ #
68
+ # @param [Hash] opts
69
+ # @option opts [String, Float] :latitude Latitude coordinate of the location.
70
+ # @option opts [String, Float] :longitude Longitude coordinate of the location.
71
+ # @option opts [String, Float] :dc_rating kW rating values 0.5 to 10000.0
72
+ # @option opts [String, Float] :tilt PV Array Lattitude tilt value 0 - 90
73
+ # @option opts [String, Integer] :azimuth azimuth value 0 - 360 (180 for Northern Hemisphere).
74
+ # @option opts [String, Float] :derate overall DC to AC derate factor values 0.10 - 0.96
75
+ # @option opts [String, Float] :cost electricity cost per kWh (US ¢/kWh)
76
+ # @options opts [String, Integer] :array_type 0=fixed tilt, 1=1-axis tracking, 2=2-axis tracking
77
+ # @return [Hash] A hash with the yearly production with a key for each month and a 'year' key to represent the yearly value.
78
+ #
79
+ def get_stats(opts={})
80
+ Rails.logger.debug("pvwatts get_stats called") if Object.const_defined?(:Rails)
81
+ keys = opts.keys
82
+ client = Savon::Client.new("http://pvwatts.nrel.gov/PVWATTS.asmx?WSDL")
83
+ @latitude, @longitude = [opts[:latitude], opts[:longitude]]
84
+ @dc_rating, @tilt, @azimuth, @derate, @cost, @array_type = opts[:dc_rating], opts[:tilt], opts[:azimuth], opts[:derate], opts[:cost], opts[:array_type]
85
+ unless @latitude && @longitude && @dc_rating && @tilt && @azimuth && @derate && @cost && @array_type
86
+ raise ArgumentError, "passed -> latitude: #{@latitude}, longitude: #{@longitude}, dc_rating: #{@dc_rating}, tilt: #{@tilt}, azimuth: #{@azimuth}, derate: #{@derate}, cost: #{@cost}, array_type: #{@array_type}"
87
+ end
88
+ req = prep_request(@latitude, @longitude, @dc_rating, @tilt, @azimuth, @derate, @array_type, @cost)
89
+
90
+ response = client.get_pvwatts{|soap| soap.input = "GetPVWATTS"; soap.body = req }
91
+ rdata = response.to_hash
92
+ if rdata[:get_pvwatts_response] && rdata[:get_pvwatts_response][:get_pvwatts_result] && rdata[:get_pvwatts_response][:get_pvwatts_result][:pvwatt_sinfo]
93
+ @production_data = []
94
+ @pvwatt_info = rdata[:get_pvwatts_response][:get_pvwatts_result][:pvwatt_sinfo].compact
95
+ @production_data = @pvwatt_info
96
+ else
97
+ raise 'Problem with the pvwatts response'
98
+ end
99
+ @production_data
100
+ end
67
101
  private
68
102
 
69
103
  def prep_request(latitude, longitude, dc_rating, tilt, azimuth, derate, array_type, cost)
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{pvwatts-ee}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Aimonetti", "Brenda Strech"]
@@ -1,32 +1,58 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
2
  describe Pvwatts do
4
-
5
- before(:all) do
6
- @pdata = Pvwatts.new(PVWATTS_SPEC_KEY).yearly_production(:latitude => 32.95850,
7
- :longitude => -117.12206,
8
- :dc_rating => 4.0,
9
- :tilt => 45,
10
- :azimuth => 180,
11
- :derate => 0.82,
12
- :array_type=>0,
13
- :cost=>0.1)
3
+ describe "#yearly_production" do
4
+ it "should fetch the yearly production data" do
5
+ @pdata = Pvwatts.new(PVWATTS_SPEC_KEY).yearly_production(:latitude => 32.95850,
6
+ :longitude => -117.12206,
7
+ :dc_rating => 4.0,
8
+ :tilt => 45,
9
+ :azimuth => 180,
10
+ :derate => 0.82,
11
+ :array_type=>0,
12
+ :cost=>0.1)
13
+ @pdata['jan'].should == 496
14
+ @pdata['feb'].should == 469
15
+ @pdata['mar'].should == 539
16
+ @pdata['apr'].should == 525
17
+ @pdata['may'].should == 539
18
+ @pdata['jun'].should == 498
19
+ @pdata['jul'].should == 526
20
+ @pdata['aug'].should == 554
21
+ @pdata['sep'].should == 540
22
+ @pdata['oct'].should == 536
23
+ @pdata['nov'].should == 508
24
+ @pdata['dec'].should == 471
25
+ @pdata['year'].should == 6203
26
+ end
14
27
  end
15
-
16
- it "should fetch the yearly production data" do
17
- @pdata['jan'].should == 496
18
- @pdata['feb'].should == 469
19
- @pdata['mar'].should == 539
20
- @pdata['apr'].should == 525
21
- @pdata['may'].should == 539
22
- @pdata['jun'].should == 498
23
- @pdata['jul'].should == 526
24
- @pdata['aug'].should == 554
25
- @pdata['sep'].should == 540
26
- @pdata['oct'].should == 536
27
- @pdata['nov'].should == 508
28
- @pdata['dec'].should == 471
29
- @pdata['year'].should == 6203
28
+ describe "#get_stats" do
29
+ it "should fetch the stats data" do
30
+ @pdata = Pvwatts.new(PVWATTS_SPEC_KEY).get_stats(:latitude => 32.95850,
31
+ :longitude => -117.12206,
32
+ :dc_rating => 4.0,
33
+ :tilt => 45,
34
+ :azimuth => 180,
35
+ :derate => 0.82,
36
+ :array_type=>0,
37
+ :cost=>0.1)
38
+ @pdata.is_a?(Array).should be_true
39
+ @pdata.size.should == 13
40
+ @pdata.each_with_index do |data, i|
41
+ @pdata.is_a?(Hash).should be_true
42
+ if i == 0
43
+ ["array_type","array_tilt","location_id","a_crating","power_degredataion","inoct","latitude","d_crating","longitude","currency","electric_cost","array_azimuth","message","a_ctod_cderate"].each do |key|
44
+ @pdata.has_key?(key).should be_true
45
+ end
46
+ end
47
+ @pdata["month"].should == month_to_string(i+1)
48
+ (@pdata["a_cenergy"] > 0).should be_true
49
+ (@pdata["cost_saved"] > 0).should be_true
50
+ (@pdata["solar"] > 0).should be_true
51
+ end
52
+ end
30
53
  end
31
-
54
+ def month_to_string(integer)
55
+ month_keys={1=>"Jan", 2=>"Feb", 3=>"Mar", 4=>"Apr", 5=>"May", 6=>"Jun", 7=>"Jul", 8=>"Aug", 9=>"Sep", 10=>"Oct", 11=>"Nov", 12=>"Dec", 13=>"Year"}
56
+ month_keys[integer]
57
+ end
32
58
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: pvwatts-ee
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.3
5
+ version: 0.1.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Matt Aimonetti