google-apis-solar_v1 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.yardopts +13 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE.md +202 -0
- data/OVERVIEW.md +96 -0
- data/lib/google/apis/solar_v1/classes.rb +1104 -0
- data/lib/google/apis/solar_v1/gem_version.rb +28 -0
- data/lib/google/apis/solar_v1/representations.rb +404 -0
- data/lib/google/apis/solar_v1/service.rb +191 -0
- data/lib/google/apis/solar_v1.rb +36 -0
- data/lib/google-apis-solar_v1.rb +15 -0
- metadata +82 -0
@@ -0,0 +1,1104 @@
|
|
1
|
+
# Copyright 2020 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'date'
|
16
|
+
require 'google/apis/core/base_service'
|
17
|
+
require 'google/apis/core/json_representation'
|
18
|
+
require 'google/apis/core/hashable'
|
19
|
+
require 'google/apis/errors'
|
20
|
+
|
21
|
+
module Google
|
22
|
+
module Apis
|
23
|
+
module SolarV1
|
24
|
+
|
25
|
+
# Response message for `Solar.FindClosestBuildingInsights`. Information about
|
26
|
+
# the location, dimensions, and solar potential of a building.
|
27
|
+
class BuildingInsights
|
28
|
+
include Google::Apis::Core::Hashable
|
29
|
+
|
30
|
+
# Administrative area 1 (e.g., in the US, the state) that contains this building.
|
31
|
+
# For example, in the US, the abbreviation might be "MA" or "CA."
|
32
|
+
# Corresponds to the JSON property `administrativeArea`
|
33
|
+
# @return [String]
|
34
|
+
attr_accessor :administrative_area
|
35
|
+
|
36
|
+
# A bounding box in lat/lng coordinates.
|
37
|
+
# Corresponds to the JSON property `boundingBox`
|
38
|
+
# @return [Google::Apis::SolarV1::LatLngBox]
|
39
|
+
attr_accessor :bounding_box
|
40
|
+
|
41
|
+
# An object that represents a latitude/longitude pair. This is expressed as a
|
42
|
+
# pair of doubles to represent degrees latitude and degrees longitude. Unless
|
43
|
+
# specified otherwise, this object must conform to the WGS84 standard. Values
|
44
|
+
# must be within normalized ranges.
|
45
|
+
# Corresponds to the JSON property `center`
|
46
|
+
# @return [Google::Apis::SolarV1::LatLng]
|
47
|
+
attr_accessor :center
|
48
|
+
|
49
|
+
# Represents a whole or partial calendar date, such as a birthday. The time of
|
50
|
+
# day and time zone are either specified elsewhere or are insignificant. The
|
51
|
+
# date is relative to the Gregorian Calendar. This can represent one of the
|
52
|
+
# following: * A full date, with non-zero year, month, and day values. * A month
|
53
|
+
# and day, with a zero year (for example, an anniversary). * A year on its own,
|
54
|
+
# with a zero month and a zero day. * A year and month, with a zero day (for
|
55
|
+
# example, a credit card expiration date). Related types: * google.type.
|
56
|
+
# TimeOfDay * google.type.DateTime * google.protobuf.Timestamp
|
57
|
+
# Corresponds to the JSON property `imageryDate`
|
58
|
+
# @return [Google::Apis::SolarV1::Date]
|
59
|
+
attr_accessor :imagery_date
|
60
|
+
|
61
|
+
# Represents a whole or partial calendar date, such as a birthday. The time of
|
62
|
+
# day and time zone are either specified elsewhere or are insignificant. The
|
63
|
+
# date is relative to the Gregorian Calendar. This can represent one of the
|
64
|
+
# following: * A full date, with non-zero year, month, and day values. * A month
|
65
|
+
# and day, with a zero year (for example, an anniversary). * A year on its own,
|
66
|
+
# with a zero month and a zero day. * A year and month, with a zero day (for
|
67
|
+
# example, a credit card expiration date). Related types: * google.type.
|
68
|
+
# TimeOfDay * google.type.DateTime * google.protobuf.Timestamp
|
69
|
+
# Corresponds to the JSON property `imageryProcessedDate`
|
70
|
+
# @return [Google::Apis::SolarV1::Date]
|
71
|
+
attr_accessor :imagery_processed_date
|
72
|
+
|
73
|
+
# The quality of the imagery used to compute the data for this building.
|
74
|
+
# Corresponds to the JSON property `imageryQuality`
|
75
|
+
# @return [String]
|
76
|
+
attr_accessor :imagery_quality
|
77
|
+
|
78
|
+
# The resource name for the building, of the format `building/`.
|
79
|
+
# Corresponds to the JSON property `name`
|
80
|
+
# @return [String]
|
81
|
+
attr_accessor :name
|
82
|
+
|
83
|
+
# Postal code (e.g., US zip code) this building is contained by.
|
84
|
+
# Corresponds to the JSON property `postalCode`
|
85
|
+
# @return [String]
|
86
|
+
attr_accessor :postal_code
|
87
|
+
|
88
|
+
# Region code for the country (or region) this building is in.
|
89
|
+
# Corresponds to the JSON property `regionCode`
|
90
|
+
# @return [String]
|
91
|
+
attr_accessor :region_code
|
92
|
+
|
93
|
+
# Information about the solar potential of a building. A number of fields in
|
94
|
+
# this are defined in terms of "panels". The fields panel_capacity_watts,
|
95
|
+
# panel_height_meters, and panel_width_meters describe the parameters of the
|
96
|
+
# model of panel used in these calculations.
|
97
|
+
# Corresponds to the JSON property `solarPotential`
|
98
|
+
# @return [Google::Apis::SolarV1::SolarPotential]
|
99
|
+
attr_accessor :solar_potential
|
100
|
+
|
101
|
+
# Statistical area (e.g., US census tract) this building is in.
|
102
|
+
# Corresponds to the JSON property `statisticalArea`
|
103
|
+
# @return [String]
|
104
|
+
attr_accessor :statistical_area
|
105
|
+
|
106
|
+
def initialize(**args)
|
107
|
+
update!(**args)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Update properties of this object
|
111
|
+
def update!(**args)
|
112
|
+
@administrative_area = args[:administrative_area] if args.key?(:administrative_area)
|
113
|
+
@bounding_box = args[:bounding_box] if args.key?(:bounding_box)
|
114
|
+
@center = args[:center] if args.key?(:center)
|
115
|
+
@imagery_date = args[:imagery_date] if args.key?(:imagery_date)
|
116
|
+
@imagery_processed_date = args[:imagery_processed_date] if args.key?(:imagery_processed_date)
|
117
|
+
@imagery_quality = args[:imagery_quality] if args.key?(:imagery_quality)
|
118
|
+
@name = args[:name] if args.key?(:name)
|
119
|
+
@postal_code = args[:postal_code] if args.key?(:postal_code)
|
120
|
+
@region_code = args[:region_code] if args.key?(:region_code)
|
121
|
+
@solar_potential = args[:solar_potential] if args.key?(:solar_potential)
|
122
|
+
@statistical_area = args[:statistical_area] if args.key?(:statistical_area)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# Cost and benefit of an outright purchase of a particular configuration of
|
127
|
+
# solar panels with a particular electricity usage.
|
128
|
+
class CashPurchaseSavings
|
129
|
+
include Google::Apis::Core::Hashable
|
130
|
+
|
131
|
+
# Represents an amount of money with its currency type.
|
132
|
+
# Corresponds to the JSON property `outOfPocketCost`
|
133
|
+
# @return [Google::Apis::SolarV1::Money]
|
134
|
+
attr_accessor :out_of_pocket_cost
|
135
|
+
|
136
|
+
# Number of years until payback occurs. A negative value means payback never
|
137
|
+
# occurs within the lifetime period.
|
138
|
+
# Corresponds to the JSON property `paybackYears`
|
139
|
+
# @return [Float]
|
140
|
+
attr_accessor :payback_years
|
141
|
+
|
142
|
+
# Represents an amount of money with its currency type.
|
143
|
+
# Corresponds to the JSON property `rebateValue`
|
144
|
+
# @return [Google::Apis::SolarV1::Money]
|
145
|
+
attr_accessor :rebate_value
|
146
|
+
|
147
|
+
# Financial information that's shared between different financing methods.
|
148
|
+
# Corresponds to the JSON property `savings`
|
149
|
+
# @return [Google::Apis::SolarV1::SavingsOverTime]
|
150
|
+
attr_accessor :savings
|
151
|
+
|
152
|
+
# Represents an amount of money with its currency type.
|
153
|
+
# Corresponds to the JSON property `upfrontCost`
|
154
|
+
# @return [Google::Apis::SolarV1::Money]
|
155
|
+
attr_accessor :upfront_cost
|
156
|
+
|
157
|
+
def initialize(**args)
|
158
|
+
update!(**args)
|
159
|
+
end
|
160
|
+
|
161
|
+
# Update properties of this object
|
162
|
+
def update!(**args)
|
163
|
+
@out_of_pocket_cost = args[:out_of_pocket_cost] if args.key?(:out_of_pocket_cost)
|
164
|
+
@payback_years = args[:payback_years] if args.key?(:payback_years)
|
165
|
+
@rebate_value = args[:rebate_value] if args.key?(:rebate_value)
|
166
|
+
@savings = args[:savings] if args.key?(:savings)
|
167
|
+
@upfront_cost = args[:upfront_cost] if args.key?(:upfront_cost)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
# Information about the solar potential of a region. The actual data are
|
172
|
+
# contained in a number of GeoTIFF files covering the requested region, for
|
173
|
+
# which this message contains URLs: Each string in the `DataLayers` message
|
174
|
+
# contains a URL from which the corresponding GeoTIFF can be fetched. These URLs
|
175
|
+
# are valid for a few hours after they've been generated. Most of the GeoTIFF
|
176
|
+
# files are at a resolution of 0.1m/pixel, but the monthly flux file is at 0.5m/
|
177
|
+
# pixel, and the hourly shade files are at 1m/pixel. If a `pixel_size_meters`
|
178
|
+
# value was specified in the `GetDataLayersRequest`, then the minimum resolution
|
179
|
+
# in the GeoTIFF files will be that value.
|
180
|
+
class DataLayers
|
181
|
+
include Google::Apis::Core::Hashable
|
182
|
+
|
183
|
+
# The URL for the annual flux map (annual sunlight on roofs) of the region.
|
184
|
+
# Values are kWh/kW/year. This is *unmasked flux*: flux is computed for every
|
185
|
+
# location, not just building rooftops. Invalid locations are stored as -9999:
|
186
|
+
# locations outside our coverage area will be invalid, and a few locations
|
187
|
+
# inside the coverage area, where we were unable to calculate flux, will also be
|
188
|
+
# invalid.
|
189
|
+
# Corresponds to the JSON property `annualFluxUrl`
|
190
|
+
# @return [String]
|
191
|
+
attr_accessor :annual_flux_url
|
192
|
+
|
193
|
+
# The URL for an image of the DSM (Digital Surface Model) of the region. Values
|
194
|
+
# are in meters above EGM96 geoid (i.e., sea level). Invalid locations (where we
|
195
|
+
# don't have data) are stored as -9999.
|
196
|
+
# Corresponds to the JSON property `dsmUrl`
|
197
|
+
# @return [String]
|
198
|
+
attr_accessor :dsm_url
|
199
|
+
|
200
|
+
# Twelve URLs for hourly shade, corresponding to January...December, in order.
|
201
|
+
# Each GeoTIFF will contain 24 bands, corresponding to the 24 hours of the day.
|
202
|
+
# Each pixel is a 32 bit integer, corresponding to the (up to) 31 days of that
|
203
|
+
# month; a 1 bit means that the corresponding location is able to see the sun at
|
204
|
+
# that day, of that hour, of that month. Invalid locations are stored as -9999 (
|
205
|
+
# since this is negative, it has bit 31 set, and no valid value could have bit
|
206
|
+
# 31 set as that would correspond to the 32nd day of the month). An example may
|
207
|
+
# be useful. If you want to know whether a point (at pixel location (x, y)) saw
|
208
|
+
# sun at 4pm on the 22nd of June you would: 1. fetch the sixth URL in this list (
|
209
|
+
# corresponding to June). 1. look up the 17th channel (corresponding to 4pm). 1.
|
210
|
+
# read the 32-bit value at (x, y). 1. read bit 21 of the value (corresponding to
|
211
|
+
# the 22nd of the month). 1. if that bit is a 1, then that spot saw the sun at
|
212
|
+
# 4pm 22 June. More formally: Given `month` (1-12), `day` (1...month max;
|
213
|
+
# February has 28 days) and `hour` (0-23), the shade/sun for that month/day/hour
|
214
|
+
# at a position `(x, y)` is the bit ``` (hourly_shade[month - 1])(x, y)[hour] & (
|
215
|
+
# 1 << (day - 1)) ``` where `(x, y)` is spatial indexing, `[month - 1]` refers
|
216
|
+
# to fetching the `month - 1`st URL (indexing from zero), `[hour]` is indexing
|
217
|
+
# into the channels, and a final non-zero result means "sunny". There are no
|
218
|
+
# leap days, and DST doesn't exist (all days are 24 hours long; noon is always "
|
219
|
+
# standard time" noon).
|
220
|
+
# Corresponds to the JSON property `hourlyShadeUrls`
|
221
|
+
# @return [Array<String>]
|
222
|
+
attr_accessor :hourly_shade_urls
|
223
|
+
|
224
|
+
# Represents a whole or partial calendar date, such as a birthday. The time of
|
225
|
+
# day and time zone are either specified elsewhere or are insignificant. The
|
226
|
+
# date is relative to the Gregorian Calendar. This can represent one of the
|
227
|
+
# following: * A full date, with non-zero year, month, and day values. * A month
|
228
|
+
# and day, with a zero year (for example, an anniversary). * A year on its own,
|
229
|
+
# with a zero month and a zero day. * A year and month, with a zero day (for
|
230
|
+
# example, a credit card expiration date). Related types: * google.type.
|
231
|
+
# TimeOfDay * google.type.DateTime * google.protobuf.Timestamp
|
232
|
+
# Corresponds to the JSON property `imageryDate`
|
233
|
+
# @return [Google::Apis::SolarV1::Date]
|
234
|
+
attr_accessor :imagery_date
|
235
|
+
|
236
|
+
# Represents a whole or partial calendar date, such as a birthday. The time of
|
237
|
+
# day and time zone are either specified elsewhere or are insignificant. The
|
238
|
+
# date is relative to the Gregorian Calendar. This can represent one of the
|
239
|
+
# following: * A full date, with non-zero year, month, and day values. * A month
|
240
|
+
# and day, with a zero year (for example, an anniversary). * A year on its own,
|
241
|
+
# with a zero month and a zero day. * A year and month, with a zero day (for
|
242
|
+
# example, a credit card expiration date). Related types: * google.type.
|
243
|
+
# TimeOfDay * google.type.DateTime * google.protobuf.Timestamp
|
244
|
+
# Corresponds to the JSON property `imageryProcessedDate`
|
245
|
+
# @return [Google::Apis::SolarV1::Date]
|
246
|
+
attr_accessor :imagery_processed_date
|
247
|
+
|
248
|
+
# The quality of the result's imagery.
|
249
|
+
# Corresponds to the JSON property `imageryQuality`
|
250
|
+
# @return [String]
|
251
|
+
attr_accessor :imagery_quality
|
252
|
+
|
253
|
+
# The URL for the building mask image: one bit per pixel saying whether that
|
254
|
+
# pixel is considered to be part of a rooftop or not.
|
255
|
+
# Corresponds to the JSON property `maskUrl`
|
256
|
+
# @return [String]
|
257
|
+
attr_accessor :mask_url
|
258
|
+
|
259
|
+
# The URL for the monthly flux map (sunlight on roofs, broken down by month) of
|
260
|
+
# the region. Values are kWh/kW/year. The GeoTIFF pointed to by this URL will
|
261
|
+
# contain twelve bands, corresponding to January...December, in order.
|
262
|
+
# Corresponds to the JSON property `monthlyFluxUrl`
|
263
|
+
# @return [String]
|
264
|
+
attr_accessor :monthly_flux_url
|
265
|
+
|
266
|
+
# The URL for an image of RGB data (aerial photo) of the region.
|
267
|
+
# Corresponds to the JSON property `rgbUrl`
|
268
|
+
# @return [String]
|
269
|
+
attr_accessor :rgb_url
|
270
|
+
|
271
|
+
def initialize(**args)
|
272
|
+
update!(**args)
|
273
|
+
end
|
274
|
+
|
275
|
+
# Update properties of this object
|
276
|
+
def update!(**args)
|
277
|
+
@annual_flux_url = args[:annual_flux_url] if args.key?(:annual_flux_url)
|
278
|
+
@dsm_url = args[:dsm_url] if args.key?(:dsm_url)
|
279
|
+
@hourly_shade_urls = args[:hourly_shade_urls] if args.key?(:hourly_shade_urls)
|
280
|
+
@imagery_date = args[:imagery_date] if args.key?(:imagery_date)
|
281
|
+
@imagery_processed_date = args[:imagery_processed_date] if args.key?(:imagery_processed_date)
|
282
|
+
@imagery_quality = args[:imagery_quality] if args.key?(:imagery_quality)
|
283
|
+
@mask_url = args[:mask_url] if args.key?(:mask_url)
|
284
|
+
@monthly_flux_url = args[:monthly_flux_url] if args.key?(:monthly_flux_url)
|
285
|
+
@rgb_url = args[:rgb_url] if args.key?(:rgb_url)
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
# Represents a whole or partial calendar date, such as a birthday. The time of
|
290
|
+
# day and time zone are either specified elsewhere or are insignificant. The
|
291
|
+
# date is relative to the Gregorian Calendar. This can represent one of the
|
292
|
+
# following: * A full date, with non-zero year, month, and day values. * A month
|
293
|
+
# and day, with a zero year (for example, an anniversary). * A year on its own,
|
294
|
+
# with a zero month and a zero day. * A year and month, with a zero day (for
|
295
|
+
# example, a credit card expiration date). Related types: * google.type.
|
296
|
+
# TimeOfDay * google.type.DateTime * google.protobuf.Timestamp
|
297
|
+
class Date
|
298
|
+
include Google::Apis::Core::Hashable
|
299
|
+
|
300
|
+
# Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to
|
301
|
+
# specify a year by itself or a year and month where the day isn't significant.
|
302
|
+
# Corresponds to the JSON property `day`
|
303
|
+
# @return [Fixnum]
|
304
|
+
attr_accessor :day
|
305
|
+
|
306
|
+
# Month of a year. Must be from 1 to 12, or 0 to specify a year without a month
|
307
|
+
# and day.
|
308
|
+
# Corresponds to the JSON property `month`
|
309
|
+
# @return [Fixnum]
|
310
|
+
attr_accessor :month
|
311
|
+
|
312
|
+
# Year of the date. Must be from 1 to 9999, or 0 to specify a date without a
|
313
|
+
# year.
|
314
|
+
# Corresponds to the JSON property `year`
|
315
|
+
# @return [Fixnum]
|
316
|
+
attr_accessor :year
|
317
|
+
|
318
|
+
def initialize(**args)
|
319
|
+
update!(**args)
|
320
|
+
end
|
321
|
+
|
322
|
+
# Update properties of this object
|
323
|
+
def update!(**args)
|
324
|
+
@day = args[:day] if args.key?(:day)
|
325
|
+
@month = args[:month] if args.key?(:month)
|
326
|
+
@year = args[:year] if args.key?(:year)
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
# Cost and benefit of using a loan to buy a particular configuration of solar
|
331
|
+
# panels with a particular electricity usage.
|
332
|
+
class FinancedPurchaseSavings
|
333
|
+
include Google::Apis::Core::Hashable
|
334
|
+
|
335
|
+
# Represents an amount of money with its currency type.
|
336
|
+
# Corresponds to the JSON property `annualLoanPayment`
|
337
|
+
# @return [Google::Apis::SolarV1::Money]
|
338
|
+
attr_accessor :annual_loan_payment
|
339
|
+
|
340
|
+
# The interest rate on loans assumed in this set of calculations.
|
341
|
+
# Corresponds to the JSON property `loanInterestRate`
|
342
|
+
# @return [Float]
|
343
|
+
attr_accessor :loan_interest_rate
|
344
|
+
|
345
|
+
# Represents an amount of money with its currency type.
|
346
|
+
# Corresponds to the JSON property `rebateValue`
|
347
|
+
# @return [Google::Apis::SolarV1::Money]
|
348
|
+
attr_accessor :rebate_value
|
349
|
+
|
350
|
+
# Financial information that's shared between different financing methods.
|
351
|
+
# Corresponds to the JSON property `savings`
|
352
|
+
# @return [Google::Apis::SolarV1::SavingsOverTime]
|
353
|
+
attr_accessor :savings
|
354
|
+
|
355
|
+
def initialize(**args)
|
356
|
+
update!(**args)
|
357
|
+
end
|
358
|
+
|
359
|
+
# Update properties of this object
|
360
|
+
def update!(**args)
|
361
|
+
@annual_loan_payment = args[:annual_loan_payment] if args.key?(:annual_loan_payment)
|
362
|
+
@loan_interest_rate = args[:loan_interest_rate] if args.key?(:loan_interest_rate)
|
363
|
+
@rebate_value = args[:rebate_value] if args.key?(:rebate_value)
|
364
|
+
@savings = args[:savings] if args.key?(:savings)
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
# Analysis of the cost and benefits of the optimum solar layout for a particular
|
369
|
+
# electric bill size.
|
370
|
+
class FinancialAnalysis
|
371
|
+
include Google::Apis::Core::Hashable
|
372
|
+
|
373
|
+
# How much electricity the house uses in an average month, based on the bill
|
374
|
+
# size and the local electricity rates.
|
375
|
+
# Corresponds to the JSON property `averageKwhPerMonth`
|
376
|
+
# @return [Float]
|
377
|
+
attr_accessor :average_kwh_per_month
|
378
|
+
|
379
|
+
# Cost and benefit of an outright purchase of a particular configuration of
|
380
|
+
# solar panels with a particular electricity usage.
|
381
|
+
# Corresponds to the JSON property `cashPurchaseSavings`
|
382
|
+
# @return [Google::Apis::SolarV1::CashPurchaseSavings]
|
383
|
+
attr_accessor :cash_purchase_savings
|
384
|
+
|
385
|
+
# Whether this is the bill size selected to be the default bill for the area
|
386
|
+
# this building is in. Exactly one `FinancialAnalysis` in `
|
387
|
+
# BuildingSolarPotential` should have `default_bill` set.
|
388
|
+
# Corresponds to the JSON property `defaultBill`
|
389
|
+
# @return [Boolean]
|
390
|
+
attr_accessor :default_bill
|
391
|
+
alias_method :default_bill?, :default_bill
|
392
|
+
|
393
|
+
# Cost and benefit of using a loan to buy a particular configuration of solar
|
394
|
+
# panels with a particular electricity usage.
|
395
|
+
# Corresponds to the JSON property `financedPurchaseSavings`
|
396
|
+
# @return [Google::Apis::SolarV1::FinancedPurchaseSavings]
|
397
|
+
attr_accessor :financed_purchase_savings
|
398
|
+
|
399
|
+
# Details of a financial analysis. Some of these details are already stored at
|
400
|
+
# higher levels (e.g., out of pocket cost). Total money amounts are over a
|
401
|
+
# lifetime period defined by the panel_lifetime_years field in SolarPotential.
|
402
|
+
# Note: The out of pocket cost of purchasing the panels is given in the
|
403
|
+
# out_of_pocket_cost field in CashPurchaseSavings.
|
404
|
+
# Corresponds to the JSON property `financialDetails`
|
405
|
+
# @return [Google::Apis::SolarV1::FinancialDetails]
|
406
|
+
attr_accessor :financial_details
|
407
|
+
|
408
|
+
# Cost and benefit of leasing a particular configuration of solar panels with a
|
409
|
+
# particular electricity usage.
|
410
|
+
# Corresponds to the JSON property `leasingSavings`
|
411
|
+
# @return [Google::Apis::SolarV1::LeasingSavings]
|
412
|
+
attr_accessor :leasing_savings
|
413
|
+
|
414
|
+
# Represents an amount of money with its currency type.
|
415
|
+
# Corresponds to the JSON property `monthlyBill`
|
416
|
+
# @return [Google::Apis::SolarV1::Money]
|
417
|
+
attr_accessor :monthly_bill
|
418
|
+
|
419
|
+
# Index in solar_panel_configs of the optimum solar layout for this bill size.
|
420
|
+
# This can be -1 indicating that there is no layout. In this case, the remaining
|
421
|
+
# submessages will be omitted.
|
422
|
+
# Corresponds to the JSON property `panelConfigIndex`
|
423
|
+
# @return [Fixnum]
|
424
|
+
attr_accessor :panel_config_index
|
425
|
+
|
426
|
+
def initialize(**args)
|
427
|
+
update!(**args)
|
428
|
+
end
|
429
|
+
|
430
|
+
# Update properties of this object
|
431
|
+
def update!(**args)
|
432
|
+
@average_kwh_per_month = args[:average_kwh_per_month] if args.key?(:average_kwh_per_month)
|
433
|
+
@cash_purchase_savings = args[:cash_purchase_savings] if args.key?(:cash_purchase_savings)
|
434
|
+
@default_bill = args[:default_bill] if args.key?(:default_bill)
|
435
|
+
@financed_purchase_savings = args[:financed_purchase_savings] if args.key?(:financed_purchase_savings)
|
436
|
+
@financial_details = args[:financial_details] if args.key?(:financial_details)
|
437
|
+
@leasing_savings = args[:leasing_savings] if args.key?(:leasing_savings)
|
438
|
+
@monthly_bill = args[:monthly_bill] if args.key?(:monthly_bill)
|
439
|
+
@panel_config_index = args[:panel_config_index] if args.key?(:panel_config_index)
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
# Details of a financial analysis. Some of these details are already stored at
|
444
|
+
# higher levels (e.g., out of pocket cost). Total money amounts are over a
|
445
|
+
# lifetime period defined by the panel_lifetime_years field in SolarPotential.
|
446
|
+
# Note: The out of pocket cost of purchasing the panels is given in the
|
447
|
+
# out_of_pocket_cost field in CashPurchaseSavings.
|
448
|
+
class FinancialDetails
|
449
|
+
include Google::Apis::Core::Hashable
|
450
|
+
|
451
|
+
# Represents an amount of money with its currency type.
|
452
|
+
# Corresponds to the JSON property `costOfElectricityWithoutSolar`
|
453
|
+
# @return [Google::Apis::SolarV1::Money]
|
454
|
+
attr_accessor :cost_of_electricity_without_solar
|
455
|
+
|
456
|
+
# Represents an amount of money with its currency type.
|
457
|
+
# Corresponds to the JSON property `federalIncentive`
|
458
|
+
# @return [Google::Apis::SolarV1::Money]
|
459
|
+
attr_accessor :federal_incentive
|
460
|
+
|
461
|
+
# How many AC kWh we think the solar panels will generate in their first year.
|
462
|
+
# Corresponds to the JSON property `initialAcKwhPerYear`
|
463
|
+
# @return [Float]
|
464
|
+
attr_accessor :initial_ac_kwh_per_year
|
465
|
+
|
466
|
+
# Represents an amount of money with its currency type.
|
467
|
+
# Corresponds to the JSON property `lifetimeSrecTotal`
|
468
|
+
# @return [Google::Apis::SolarV1::Money]
|
469
|
+
attr_accessor :lifetime_srec_total
|
470
|
+
|
471
|
+
# Whether net metering is allowed.
|
472
|
+
# Corresponds to the JSON property `netMeteringAllowed`
|
473
|
+
# @return [Boolean]
|
474
|
+
attr_accessor :net_metering_allowed
|
475
|
+
alias_method :net_metering_allowed?, :net_metering_allowed
|
476
|
+
|
477
|
+
# The percentage (0-100) of solar electricity production we assumed was exported
|
478
|
+
# to the grid, based on the first quarter of production. This affects the
|
479
|
+
# calculations if net metering is not allowed.
|
480
|
+
# Corresponds to the JSON property `percentageExportedToGrid`
|
481
|
+
# @return [Float]
|
482
|
+
attr_accessor :percentage_exported_to_grid
|
483
|
+
|
484
|
+
# Represents an amount of money with its currency type.
|
485
|
+
# Corresponds to the JSON property `remainingLifetimeUtilityBill`
|
486
|
+
# @return [Google::Apis::SolarV1::Money]
|
487
|
+
attr_accessor :remaining_lifetime_utility_bill
|
488
|
+
|
489
|
+
# Percentage (0-100) of the user's power supplied by solar. Valid for the first
|
490
|
+
# year but approximately correct for future years.
|
491
|
+
# Corresponds to the JSON property `solarPercentage`
|
492
|
+
# @return [Float]
|
493
|
+
attr_accessor :solar_percentage
|
494
|
+
|
495
|
+
# Represents an amount of money with its currency type.
|
496
|
+
# Corresponds to the JSON property `stateIncentive`
|
497
|
+
# @return [Google::Apis::SolarV1::Money]
|
498
|
+
attr_accessor :state_incentive
|
499
|
+
|
500
|
+
# Represents an amount of money with its currency type.
|
501
|
+
# Corresponds to the JSON property `utilityIncentive`
|
502
|
+
# @return [Google::Apis::SolarV1::Money]
|
503
|
+
attr_accessor :utility_incentive
|
504
|
+
|
505
|
+
def initialize(**args)
|
506
|
+
update!(**args)
|
507
|
+
end
|
508
|
+
|
509
|
+
# Update properties of this object
|
510
|
+
def update!(**args)
|
511
|
+
@cost_of_electricity_without_solar = args[:cost_of_electricity_without_solar] if args.key?(:cost_of_electricity_without_solar)
|
512
|
+
@federal_incentive = args[:federal_incentive] if args.key?(:federal_incentive)
|
513
|
+
@initial_ac_kwh_per_year = args[:initial_ac_kwh_per_year] if args.key?(:initial_ac_kwh_per_year)
|
514
|
+
@lifetime_srec_total = args[:lifetime_srec_total] if args.key?(:lifetime_srec_total)
|
515
|
+
@net_metering_allowed = args[:net_metering_allowed] if args.key?(:net_metering_allowed)
|
516
|
+
@percentage_exported_to_grid = args[:percentage_exported_to_grid] if args.key?(:percentage_exported_to_grid)
|
517
|
+
@remaining_lifetime_utility_bill = args[:remaining_lifetime_utility_bill] if args.key?(:remaining_lifetime_utility_bill)
|
518
|
+
@solar_percentage = args[:solar_percentage] if args.key?(:solar_percentage)
|
519
|
+
@state_incentive = args[:state_incentive] if args.key?(:state_incentive)
|
520
|
+
@utility_incentive = args[:utility_incentive] if args.key?(:utility_incentive)
|
521
|
+
end
|
522
|
+
end
|
523
|
+
|
524
|
+
# Message that represents an arbitrary HTTP body. It should only be used for
|
525
|
+
# payload formats that can't be represented as JSON, such as raw binary or an
|
526
|
+
# HTML page. This message can be used both in streaming and non-streaming API
|
527
|
+
# methods in the request as well as the response. It can be used as a top-level
|
528
|
+
# request field, which is convenient if one wants to extract parameters from
|
529
|
+
# either the URL or HTTP template into the request fields and also want access
|
530
|
+
# to the raw HTTP body. Example: message GetResourceRequest ` // A unique
|
531
|
+
# request id. string request_id = 1; // The raw HTTP body is bound to this field.
|
532
|
+
# google.api.HttpBody http_body = 2; ` service ResourceService ` rpc
|
533
|
+
# GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc
|
534
|
+
# UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); ` Example
|
535
|
+
# with streaming methods: service CaldavService ` rpc GetCalendar(stream google.
|
536
|
+
# api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream
|
537
|
+
# google.api.HttpBody) returns (stream google.api.HttpBody); ` Use of this type
|
538
|
+
# only changes how the request and response bodies are handled, all other
|
539
|
+
# features will continue to work unchanged.
|
540
|
+
class HttpBody
|
541
|
+
include Google::Apis::Core::Hashable
|
542
|
+
|
543
|
+
# The HTTP Content-Type header value specifying the content type of the body.
|
544
|
+
# Corresponds to the JSON property `contentType`
|
545
|
+
# @return [String]
|
546
|
+
attr_accessor :content_type
|
547
|
+
|
548
|
+
# The HTTP request/response body as raw binary.
|
549
|
+
# Corresponds to the JSON property `data`
|
550
|
+
# NOTE: Values are automatically base64 encoded/decoded in the client library.
|
551
|
+
# @return [String]
|
552
|
+
attr_accessor :data
|
553
|
+
|
554
|
+
# Application specific response metadata. Must be set in the first response for
|
555
|
+
# streaming APIs.
|
556
|
+
# Corresponds to the JSON property `extensions`
|
557
|
+
# @return [Array<Hash<String,Object>>]
|
558
|
+
attr_accessor :extensions
|
559
|
+
|
560
|
+
def initialize(**args)
|
561
|
+
update!(**args)
|
562
|
+
end
|
563
|
+
|
564
|
+
# Update properties of this object
|
565
|
+
def update!(**args)
|
566
|
+
@content_type = args[:content_type] if args.key?(:content_type)
|
567
|
+
@data = args[:data] if args.key?(:data)
|
568
|
+
@extensions = args[:extensions] if args.key?(:extensions)
|
569
|
+
end
|
570
|
+
end
|
571
|
+
|
572
|
+
# An object that represents a latitude/longitude pair. This is expressed as a
|
573
|
+
# pair of doubles to represent degrees latitude and degrees longitude. Unless
|
574
|
+
# specified otherwise, this object must conform to the WGS84 standard. Values
|
575
|
+
# must be within normalized ranges.
|
576
|
+
class LatLng
|
577
|
+
include Google::Apis::Core::Hashable
|
578
|
+
|
579
|
+
# The latitude in degrees. It must be in the range [-90.0, +90.0].
|
580
|
+
# Corresponds to the JSON property `latitude`
|
581
|
+
# @return [Float]
|
582
|
+
attr_accessor :latitude
|
583
|
+
|
584
|
+
# The longitude in degrees. It must be in the range [-180.0, +180.0].
|
585
|
+
# Corresponds to the JSON property `longitude`
|
586
|
+
# @return [Float]
|
587
|
+
attr_accessor :longitude
|
588
|
+
|
589
|
+
def initialize(**args)
|
590
|
+
update!(**args)
|
591
|
+
end
|
592
|
+
|
593
|
+
# Update properties of this object
|
594
|
+
def update!(**args)
|
595
|
+
@latitude = args[:latitude] if args.key?(:latitude)
|
596
|
+
@longitude = args[:longitude] if args.key?(:longitude)
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
600
|
+
# A bounding box in lat/lng coordinates.
|
601
|
+
class LatLngBox
|
602
|
+
include Google::Apis::Core::Hashable
|
603
|
+
|
604
|
+
# An object that represents a latitude/longitude pair. This is expressed as a
|
605
|
+
# pair of doubles to represent degrees latitude and degrees longitude. Unless
|
606
|
+
# specified otherwise, this object must conform to the WGS84 standard. Values
|
607
|
+
# must be within normalized ranges.
|
608
|
+
# Corresponds to the JSON property `ne`
|
609
|
+
# @return [Google::Apis::SolarV1::LatLng]
|
610
|
+
attr_accessor :ne
|
611
|
+
|
612
|
+
# An object that represents a latitude/longitude pair. This is expressed as a
|
613
|
+
# pair of doubles to represent degrees latitude and degrees longitude. Unless
|
614
|
+
# specified otherwise, this object must conform to the WGS84 standard. Values
|
615
|
+
# must be within normalized ranges.
|
616
|
+
# Corresponds to the JSON property `sw`
|
617
|
+
# @return [Google::Apis::SolarV1::LatLng]
|
618
|
+
attr_accessor :sw
|
619
|
+
|
620
|
+
def initialize(**args)
|
621
|
+
update!(**args)
|
622
|
+
end
|
623
|
+
|
624
|
+
# Update properties of this object
|
625
|
+
def update!(**args)
|
626
|
+
@ne = args[:ne] if args.key?(:ne)
|
627
|
+
@sw = args[:sw] if args.key?(:sw)
|
628
|
+
end
|
629
|
+
end
|
630
|
+
|
631
|
+
# Cost and benefit of leasing a particular configuration of solar panels with a
|
632
|
+
# particular electricity usage.
|
633
|
+
class LeasingSavings
|
634
|
+
include Google::Apis::Core::Hashable
|
635
|
+
|
636
|
+
# Represents an amount of money with its currency type.
|
637
|
+
# Corresponds to the JSON property `annualLeasingCost`
|
638
|
+
# @return [Google::Apis::SolarV1::Money]
|
639
|
+
attr_accessor :annual_leasing_cost
|
640
|
+
|
641
|
+
# Whether leases are allowed in this juristiction (leases are not allowed in
|
642
|
+
# some states). If this field is false, then the values in this message should
|
643
|
+
# probably be ignored.
|
644
|
+
# Corresponds to the JSON property `leasesAllowed`
|
645
|
+
# @return [Boolean]
|
646
|
+
attr_accessor :leases_allowed
|
647
|
+
alias_method :leases_allowed?, :leases_allowed
|
648
|
+
|
649
|
+
# Whether leases are supported in this juristiction by the financial calculation
|
650
|
+
# engine. If this field is false, then the values in this message should
|
651
|
+
# probably be ignored. This is independent of `leases_allowed`: in some areas
|
652
|
+
# leases are allowed, but under conditions that aren't handled by the financial
|
653
|
+
# models.
|
654
|
+
# Corresponds to the JSON property `leasesSupported`
|
655
|
+
# @return [Boolean]
|
656
|
+
attr_accessor :leases_supported
|
657
|
+
alias_method :leases_supported?, :leases_supported
|
658
|
+
|
659
|
+
# Financial information that's shared between different financing methods.
|
660
|
+
# Corresponds to the JSON property `savings`
|
661
|
+
# @return [Google::Apis::SolarV1::SavingsOverTime]
|
662
|
+
attr_accessor :savings
|
663
|
+
|
664
|
+
def initialize(**args)
|
665
|
+
update!(**args)
|
666
|
+
end
|
667
|
+
|
668
|
+
# Update properties of this object
|
669
|
+
def update!(**args)
|
670
|
+
@annual_leasing_cost = args[:annual_leasing_cost] if args.key?(:annual_leasing_cost)
|
671
|
+
@leases_allowed = args[:leases_allowed] if args.key?(:leases_allowed)
|
672
|
+
@leases_supported = args[:leases_supported] if args.key?(:leases_supported)
|
673
|
+
@savings = args[:savings] if args.key?(:savings)
|
674
|
+
end
|
675
|
+
end
|
676
|
+
|
677
|
+
# Represents an amount of money with its currency type.
|
678
|
+
class Money
|
679
|
+
include Google::Apis::Core::Hashable
|
680
|
+
|
681
|
+
# The three-letter currency code defined in ISO 4217.
|
682
|
+
# Corresponds to the JSON property `currencyCode`
|
683
|
+
# @return [String]
|
684
|
+
attr_accessor :currency_code
|
685
|
+
|
686
|
+
# Number of nano (10^-9) units of the amount. The value must be between -999,999,
|
687
|
+
# 999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be
|
688
|
+
# positive or zero. If `units` is zero, `nanos` can be positive, zero, or
|
689
|
+
# negative. If `units` is negative, `nanos` must be negative or zero. For
|
690
|
+
# example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
|
691
|
+
# Corresponds to the JSON property `nanos`
|
692
|
+
# @return [Fixnum]
|
693
|
+
attr_accessor :nanos
|
694
|
+
|
695
|
+
# The whole units of the amount. For example if `currencyCode` is `"USD"`, then
|
696
|
+
# 1 unit is one US dollar.
|
697
|
+
# Corresponds to the JSON property `units`
|
698
|
+
# @return [Fixnum]
|
699
|
+
attr_accessor :units
|
700
|
+
|
701
|
+
def initialize(**args)
|
702
|
+
update!(**args)
|
703
|
+
end
|
704
|
+
|
705
|
+
# Update properties of this object
|
706
|
+
def update!(**args)
|
707
|
+
@currency_code = args[:currency_code] if args.key?(:currency_code)
|
708
|
+
@nanos = args[:nanos] if args.key?(:nanos)
|
709
|
+
@units = args[:units] if args.key?(:units)
|
710
|
+
end
|
711
|
+
end
|
712
|
+
|
713
|
+
# Information about the size and sunniness quantiles of a roof segment.
|
714
|
+
class RoofSegmentSizeAndSunshineStats
|
715
|
+
include Google::Apis::Core::Hashable
|
716
|
+
|
717
|
+
# Compass direction the roof segment is pointing in. 0 = North, 90 = East, 180 =
|
718
|
+
# South. For a "flat" roof segment (`pitch_degrees` very near 0), azimuth is not
|
719
|
+
# well defined, so for consistency, we define it arbitrarily to be 0 (North).
|
720
|
+
# Corresponds to the JSON property `azimuthDegrees`
|
721
|
+
# @return [Float]
|
722
|
+
attr_accessor :azimuth_degrees
|
723
|
+
|
724
|
+
# A bounding box in lat/lng coordinates.
|
725
|
+
# Corresponds to the JSON property `boundingBox`
|
726
|
+
# @return [Google::Apis::SolarV1::LatLngBox]
|
727
|
+
attr_accessor :bounding_box
|
728
|
+
|
729
|
+
# An object that represents a latitude/longitude pair. This is expressed as a
|
730
|
+
# pair of doubles to represent degrees latitude and degrees longitude. Unless
|
731
|
+
# specified otherwise, this object must conform to the WGS84 standard. Values
|
732
|
+
# must be within normalized ranges.
|
733
|
+
# Corresponds to the JSON property `center`
|
734
|
+
# @return [Google::Apis::SolarV1::LatLng]
|
735
|
+
attr_accessor :center
|
736
|
+
|
737
|
+
# Angle of the roof segment relative to the theoretical ground plane. 0 =
|
738
|
+
# parallel to the ground, 90 = perpendicular to the ground.
|
739
|
+
# Corresponds to the JSON property `pitchDegrees`
|
740
|
+
# @return [Float]
|
741
|
+
attr_accessor :pitch_degrees
|
742
|
+
|
743
|
+
# The height of the roof segment plane, in meters above sea level, at the point
|
744
|
+
# designated by `center`. Together with the pitch, azimuth, and center location,
|
745
|
+
# this fully defines the roof segment plane.
|
746
|
+
# Corresponds to the JSON property `planeHeightAtCenterMeters`
|
747
|
+
# @return [Float]
|
748
|
+
attr_accessor :plane_height_at_center_meters
|
749
|
+
|
750
|
+
# Size and sunniness quantiles of a roof, or part of a roof.
|
751
|
+
# Corresponds to the JSON property `stats`
|
752
|
+
# @return [Google::Apis::SolarV1::SizeAndSunshineStats]
|
753
|
+
attr_accessor :stats
|
754
|
+
|
755
|
+
def initialize(**args)
|
756
|
+
update!(**args)
|
757
|
+
end
|
758
|
+
|
759
|
+
# Update properties of this object
|
760
|
+
def update!(**args)
|
761
|
+
@azimuth_degrees = args[:azimuth_degrees] if args.key?(:azimuth_degrees)
|
762
|
+
@bounding_box = args[:bounding_box] if args.key?(:bounding_box)
|
763
|
+
@center = args[:center] if args.key?(:center)
|
764
|
+
@pitch_degrees = args[:pitch_degrees] if args.key?(:pitch_degrees)
|
765
|
+
@plane_height_at_center_meters = args[:plane_height_at_center_meters] if args.key?(:plane_height_at_center_meters)
|
766
|
+
@stats = args[:stats] if args.key?(:stats)
|
767
|
+
end
|
768
|
+
end
|
769
|
+
|
770
|
+
# Information about a roof segment on the building, with some number of panels
|
771
|
+
# placed on it.
|
772
|
+
class RoofSegmentSummary
|
773
|
+
include Google::Apis::Core::Hashable
|
774
|
+
|
775
|
+
# Compass direction the roof segment is pointing in. 0 = North, 90 = East, 180 =
|
776
|
+
# South. For a "flat" roof segment (`pitch_degrees` very near 0), azimuth is not
|
777
|
+
# well defined, so for consistency, we define it arbitrarily to be 0 (North).
|
778
|
+
# Corresponds to the JSON property `azimuthDegrees`
|
779
|
+
# @return [Float]
|
780
|
+
attr_accessor :azimuth_degrees
|
781
|
+
|
782
|
+
# The total number of panels on this segment.
|
783
|
+
# Corresponds to the JSON property `panelsCount`
|
784
|
+
# @return [Fixnum]
|
785
|
+
attr_accessor :panels_count
|
786
|
+
|
787
|
+
# Angle of the roof segment relative to the theoretical ground plane. 0 =
|
788
|
+
# parallel to the ground, 90 = perpendicular to the ground.
|
789
|
+
# Corresponds to the JSON property `pitchDegrees`
|
790
|
+
# @return [Float]
|
791
|
+
attr_accessor :pitch_degrees
|
792
|
+
|
793
|
+
# Index in roof_segment_stats of the corresponding `
|
794
|
+
# RoofSegmentSizeAndSunshineStats`.
|
795
|
+
# Corresponds to the JSON property `segmentIndex`
|
796
|
+
# @return [Fixnum]
|
797
|
+
attr_accessor :segment_index
|
798
|
+
|
799
|
+
# How much sunlight energy this part of the layout captures over the course of a
|
800
|
+
# year, in DC kWh, assuming the panels described above.
|
801
|
+
# Corresponds to the JSON property `yearlyEnergyDcKwh`
|
802
|
+
# @return [Float]
|
803
|
+
attr_accessor :yearly_energy_dc_kwh
|
804
|
+
|
805
|
+
def initialize(**args)
|
806
|
+
update!(**args)
|
807
|
+
end
|
808
|
+
|
809
|
+
# Update properties of this object
|
810
|
+
def update!(**args)
|
811
|
+
@azimuth_degrees = args[:azimuth_degrees] if args.key?(:azimuth_degrees)
|
812
|
+
@panels_count = args[:panels_count] if args.key?(:panels_count)
|
813
|
+
@pitch_degrees = args[:pitch_degrees] if args.key?(:pitch_degrees)
|
814
|
+
@segment_index = args[:segment_index] if args.key?(:segment_index)
|
815
|
+
@yearly_energy_dc_kwh = args[:yearly_energy_dc_kwh] if args.key?(:yearly_energy_dc_kwh)
|
816
|
+
end
|
817
|
+
end
|
818
|
+
|
819
|
+
# Financial information that's shared between different financing methods.
|
820
|
+
class SavingsOverTime
|
821
|
+
include Google::Apis::Core::Hashable
|
822
|
+
|
823
|
+
# Indicates whether this scenario is financially viable. Will be false for
|
824
|
+
# scenarios with poor financial viability (e.g., money-losing).
|
825
|
+
# Corresponds to the JSON property `financiallyViable`
|
826
|
+
# @return [Boolean]
|
827
|
+
attr_accessor :financially_viable
|
828
|
+
alias_method :financially_viable?, :financially_viable
|
829
|
+
|
830
|
+
# Represents an amount of money with its currency type.
|
831
|
+
# Corresponds to the JSON property `presentValueOfSavingsLifetime`
|
832
|
+
# @return [Google::Apis::SolarV1::Money]
|
833
|
+
attr_accessor :present_value_of_savings_lifetime
|
834
|
+
|
835
|
+
# Represents an amount of money with its currency type.
|
836
|
+
# Corresponds to the JSON property `presentValueOfSavingsYear20`
|
837
|
+
# @return [Google::Apis::SolarV1::Money]
|
838
|
+
attr_accessor :present_value_of_savings_year20
|
839
|
+
|
840
|
+
# Represents an amount of money with its currency type.
|
841
|
+
# Corresponds to the JSON property `savingsLifetime`
|
842
|
+
# @return [Google::Apis::SolarV1::Money]
|
843
|
+
attr_accessor :savings_lifetime
|
844
|
+
|
845
|
+
# Represents an amount of money with its currency type.
|
846
|
+
# Corresponds to the JSON property `savingsYear1`
|
847
|
+
# @return [Google::Apis::SolarV1::Money]
|
848
|
+
attr_accessor :savings_year1
|
849
|
+
|
850
|
+
# Represents an amount of money with its currency type.
|
851
|
+
# Corresponds to the JSON property `savingsYear20`
|
852
|
+
# @return [Google::Apis::SolarV1::Money]
|
853
|
+
attr_accessor :savings_year20
|
854
|
+
|
855
|
+
def initialize(**args)
|
856
|
+
update!(**args)
|
857
|
+
end
|
858
|
+
|
859
|
+
# Update properties of this object
|
860
|
+
def update!(**args)
|
861
|
+
@financially_viable = args[:financially_viable] if args.key?(:financially_viable)
|
862
|
+
@present_value_of_savings_lifetime = args[:present_value_of_savings_lifetime] if args.key?(:present_value_of_savings_lifetime)
|
863
|
+
@present_value_of_savings_year20 = args[:present_value_of_savings_year20] if args.key?(:present_value_of_savings_year20)
|
864
|
+
@savings_lifetime = args[:savings_lifetime] if args.key?(:savings_lifetime)
|
865
|
+
@savings_year1 = args[:savings_year1] if args.key?(:savings_year1)
|
866
|
+
@savings_year20 = args[:savings_year20] if args.key?(:savings_year20)
|
867
|
+
end
|
868
|
+
end
|
869
|
+
|
870
|
+
# Size and sunniness quantiles of a roof, or part of a roof.
|
871
|
+
class SizeAndSunshineStats
|
872
|
+
include Google::Apis::Core::Hashable
|
873
|
+
|
874
|
+
# The area of the roof or roof segment, in m^2. This is the roof area (
|
875
|
+
# accounting for tilt), not the ground footprint area.
|
876
|
+
# Corresponds to the JSON property `areaMeters2`
|
877
|
+
# @return [Float]
|
878
|
+
attr_accessor :area_meters2
|
879
|
+
|
880
|
+
# The ground footprint area covered by the roof or roof segment, in m^2.
|
881
|
+
# Corresponds to the JSON property `groundAreaMeters2`
|
882
|
+
# @return [Float]
|
883
|
+
attr_accessor :ground_area_meters2
|
884
|
+
|
885
|
+
# Quantiles of the pointwise sunniness across the area. If there are N values
|
886
|
+
# here, this represents the (N-1)-iles. For example, if there are 5 values, then
|
887
|
+
# they would be the quartiles (min, 25%, 50%, 75%, max). Values are in annual
|
888
|
+
# kWh/kW like max_sunshine_hours_per_year.
|
889
|
+
# Corresponds to the JSON property `sunshineQuantiles`
|
890
|
+
# @return [Array<Float>]
|
891
|
+
attr_accessor :sunshine_quantiles
|
892
|
+
|
893
|
+
def initialize(**args)
|
894
|
+
update!(**args)
|
895
|
+
end
|
896
|
+
|
897
|
+
# Update properties of this object
|
898
|
+
def update!(**args)
|
899
|
+
@area_meters2 = args[:area_meters2] if args.key?(:area_meters2)
|
900
|
+
@ground_area_meters2 = args[:ground_area_meters2] if args.key?(:ground_area_meters2)
|
901
|
+
@sunshine_quantiles = args[:sunshine_quantiles] if args.key?(:sunshine_quantiles)
|
902
|
+
end
|
903
|
+
end
|
904
|
+
|
905
|
+
# SolarPanel describes the position, orientation, and production of a single
|
906
|
+
# solar panel. See the panel_height_meters, panel_width_meters, and
|
907
|
+
# panel_capacity_watts fields in SolarPotential for information on the
|
908
|
+
# parameters of the panel.
|
909
|
+
class SolarPanel
|
910
|
+
include Google::Apis::Core::Hashable
|
911
|
+
|
912
|
+
# An object that represents a latitude/longitude pair. This is expressed as a
|
913
|
+
# pair of doubles to represent degrees latitude and degrees longitude. Unless
|
914
|
+
# specified otherwise, this object must conform to the WGS84 standard. Values
|
915
|
+
# must be within normalized ranges.
|
916
|
+
# Corresponds to the JSON property `center`
|
917
|
+
# @return [Google::Apis::SolarV1::LatLng]
|
918
|
+
attr_accessor :center
|
919
|
+
|
920
|
+
# The orientation of the panel.
|
921
|
+
# Corresponds to the JSON property `orientation`
|
922
|
+
# @return [String]
|
923
|
+
attr_accessor :orientation
|
924
|
+
|
925
|
+
# Index in roof_segment_stats of the `RoofSegmentSizeAndSunshineStats` which
|
926
|
+
# corresponds to the roof segment that this panel is placed on.
|
927
|
+
# Corresponds to the JSON property `segmentIndex`
|
928
|
+
# @return [Fixnum]
|
929
|
+
attr_accessor :segment_index
|
930
|
+
|
931
|
+
# How much sunlight energy this layout captures over the course of a year, in DC
|
932
|
+
# kWh.
|
933
|
+
# Corresponds to the JSON property `yearlyEnergyDcKwh`
|
934
|
+
# @return [Float]
|
935
|
+
attr_accessor :yearly_energy_dc_kwh
|
936
|
+
|
937
|
+
def initialize(**args)
|
938
|
+
update!(**args)
|
939
|
+
end
|
940
|
+
|
941
|
+
# Update properties of this object
|
942
|
+
def update!(**args)
|
943
|
+
@center = args[:center] if args.key?(:center)
|
944
|
+
@orientation = args[:orientation] if args.key?(:orientation)
|
945
|
+
@segment_index = args[:segment_index] if args.key?(:segment_index)
|
946
|
+
@yearly_energy_dc_kwh = args[:yearly_energy_dc_kwh] if args.key?(:yearly_energy_dc_kwh)
|
947
|
+
end
|
948
|
+
end
|
949
|
+
|
950
|
+
# SolarPanelConfig describes a particular placement of solar panels on the roof.
|
951
|
+
class SolarPanelConfig
|
952
|
+
include Google::Apis::Core::Hashable
|
953
|
+
|
954
|
+
# Total number of panels. Note that this is redundant to (the sum of) the
|
955
|
+
# corresponding fields in roof_segment_summaries.
|
956
|
+
# Corresponds to the JSON property `panelsCount`
|
957
|
+
# @return [Fixnum]
|
958
|
+
attr_accessor :panels_count
|
959
|
+
|
960
|
+
# Information about the production of each roof segment that is carrying at
|
961
|
+
# least one panel in this layout. `roof_segment_summaries[i]` describes the i-th
|
962
|
+
# roof segment, including its size, expected production and orientation.
|
963
|
+
# Corresponds to the JSON property `roofSegmentSummaries`
|
964
|
+
# @return [Array<Google::Apis::SolarV1::RoofSegmentSummary>]
|
965
|
+
attr_accessor :roof_segment_summaries
|
966
|
+
|
967
|
+
# How much sunlight energy this layout captures over the course of a year, in DC
|
968
|
+
# kWh, assuming the panels described above.
|
969
|
+
# Corresponds to the JSON property `yearlyEnergyDcKwh`
|
970
|
+
# @return [Float]
|
971
|
+
attr_accessor :yearly_energy_dc_kwh
|
972
|
+
|
973
|
+
def initialize(**args)
|
974
|
+
update!(**args)
|
975
|
+
end
|
976
|
+
|
977
|
+
# Update properties of this object
|
978
|
+
def update!(**args)
|
979
|
+
@panels_count = args[:panels_count] if args.key?(:panels_count)
|
980
|
+
@roof_segment_summaries = args[:roof_segment_summaries] if args.key?(:roof_segment_summaries)
|
981
|
+
@yearly_energy_dc_kwh = args[:yearly_energy_dc_kwh] if args.key?(:yearly_energy_dc_kwh)
|
982
|
+
end
|
983
|
+
end
|
984
|
+
|
985
|
+
# Information about the solar potential of a building. A number of fields in
|
986
|
+
# this are defined in terms of "panels". The fields panel_capacity_watts,
|
987
|
+
# panel_height_meters, and panel_width_meters describe the parameters of the
|
988
|
+
# model of panel used in these calculations.
|
989
|
+
class SolarPotential
|
990
|
+
include Google::Apis::Core::Hashable
|
991
|
+
|
992
|
+
# Size and sunniness quantiles of a roof, or part of a roof.
|
993
|
+
# Corresponds to the JSON property `buildingStats`
|
994
|
+
# @return [Google::Apis::SolarV1::SizeAndSunshineStats]
|
995
|
+
attr_accessor :building_stats
|
996
|
+
|
997
|
+
# Equivalent amount of CO2 produced per MWh of grid electricity. This is a
|
998
|
+
# measure of the carbon intensity of grid electricity displaced by solar
|
999
|
+
# electricity.
|
1000
|
+
# Corresponds to the JSON property `carbonOffsetFactorKgPerMwh`
|
1001
|
+
# @return [Float]
|
1002
|
+
attr_accessor :carbon_offset_factor_kg_per_mwh
|
1003
|
+
|
1004
|
+
# A FinancialAnalysis gives the savings from going solar assuming a given
|
1005
|
+
# monthly bill and a given electricity provider. They are in order of increasing
|
1006
|
+
# order of monthly bill amount. This field will be empty for buildings in areas
|
1007
|
+
# for which the Solar API does not have enough information to perform financial
|
1008
|
+
# computations.
|
1009
|
+
# Corresponds to the JSON property `financialAnalyses`
|
1010
|
+
# @return [Array<Google::Apis::SolarV1::FinancialAnalysis>]
|
1011
|
+
attr_accessor :financial_analyses
|
1012
|
+
|
1013
|
+
# Size, in square meters, of the maximum array.
|
1014
|
+
# Corresponds to the JSON property `maxArrayAreaMeters2`
|
1015
|
+
# @return [Float]
|
1016
|
+
attr_accessor :max_array_area_meters2
|
1017
|
+
|
1018
|
+
# Size of the maximum array - that is, the maximum number of panels that can fit
|
1019
|
+
# on the roof.
|
1020
|
+
# Corresponds to the JSON property `maxArrayPanelsCount`
|
1021
|
+
# @return [Fixnum]
|
1022
|
+
attr_accessor :max_array_panels_count
|
1023
|
+
|
1024
|
+
# Maximum number of sunshine hours received per year, by any point on the roof.
|
1025
|
+
# Sunshine hours are a measure of the total amount of insolation (energy)
|
1026
|
+
# received per year. 1 sunshine hour = 1 kWh per kW (where kW refers to kW of
|
1027
|
+
# capacity under Standard Testing Conditions).
|
1028
|
+
# Corresponds to the JSON property `maxSunshineHoursPerYear`
|
1029
|
+
# @return [Float]
|
1030
|
+
attr_accessor :max_sunshine_hours_per_year
|
1031
|
+
|
1032
|
+
# Capacity, in watts, of the panel used in the calculations.
|
1033
|
+
# Corresponds to the JSON property `panelCapacityWatts`
|
1034
|
+
# @return [Float]
|
1035
|
+
attr_accessor :panel_capacity_watts
|
1036
|
+
|
1037
|
+
# Height, in meters in portrait orientation, of the panel used in the
|
1038
|
+
# calculations.
|
1039
|
+
# Corresponds to the JSON property `panelHeightMeters`
|
1040
|
+
# @return [Float]
|
1041
|
+
attr_accessor :panel_height_meters
|
1042
|
+
|
1043
|
+
# The expected lifetime, in years, of the solar panels. This is used in the
|
1044
|
+
# financial calculations.
|
1045
|
+
# Corresponds to the JSON property `panelLifetimeYears`
|
1046
|
+
# @return [Fixnum]
|
1047
|
+
attr_accessor :panel_lifetime_years
|
1048
|
+
|
1049
|
+
# Width, in meters in portrait orientation, of the panel used in the
|
1050
|
+
# calculations.
|
1051
|
+
# Corresponds to the JSON property `panelWidthMeters`
|
1052
|
+
# @return [Float]
|
1053
|
+
attr_accessor :panel_width_meters
|
1054
|
+
|
1055
|
+
# Size and sunlight quantiles for each roof segment.
|
1056
|
+
# Corresponds to the JSON property `roofSegmentStats`
|
1057
|
+
# @return [Array<Google::Apis::SolarV1::RoofSegmentSizeAndSunshineStats>]
|
1058
|
+
attr_accessor :roof_segment_stats
|
1059
|
+
|
1060
|
+
# Each SolarPanelConfig describes a different arrangement of solar panels on the
|
1061
|
+
# roof. They are in order of increasing number of panels. The `SolarPanelConfig`
|
1062
|
+
# with panels_count=N is based on the first N panels in the `solar_panels` list.
|
1063
|
+
# This field is only populated if at least 4 panels can fit on a roof.
|
1064
|
+
# Corresponds to the JSON property `solarPanelConfigs`
|
1065
|
+
# @return [Array<Google::Apis::SolarV1::SolarPanelConfig>]
|
1066
|
+
attr_accessor :solar_panel_configs
|
1067
|
+
|
1068
|
+
# Each SolarPanel describes a single solar panel. They are listed in the order
|
1069
|
+
# that the panel layout algorithm placed this. This is usually, though not
|
1070
|
+
# always, in decreasing order of annual energy production.
|
1071
|
+
# Corresponds to the JSON property `solarPanels`
|
1072
|
+
# @return [Array<Google::Apis::SolarV1::SolarPanel>]
|
1073
|
+
attr_accessor :solar_panels
|
1074
|
+
|
1075
|
+
# Size and sunniness quantiles of a roof, or part of a roof.
|
1076
|
+
# Corresponds to the JSON property `wholeRoofStats`
|
1077
|
+
# @return [Google::Apis::SolarV1::SizeAndSunshineStats]
|
1078
|
+
attr_accessor :whole_roof_stats
|
1079
|
+
|
1080
|
+
def initialize(**args)
|
1081
|
+
update!(**args)
|
1082
|
+
end
|
1083
|
+
|
1084
|
+
# Update properties of this object
|
1085
|
+
def update!(**args)
|
1086
|
+
@building_stats = args[:building_stats] if args.key?(:building_stats)
|
1087
|
+
@carbon_offset_factor_kg_per_mwh = args[:carbon_offset_factor_kg_per_mwh] if args.key?(:carbon_offset_factor_kg_per_mwh)
|
1088
|
+
@financial_analyses = args[:financial_analyses] if args.key?(:financial_analyses)
|
1089
|
+
@max_array_area_meters2 = args[:max_array_area_meters2] if args.key?(:max_array_area_meters2)
|
1090
|
+
@max_array_panels_count = args[:max_array_panels_count] if args.key?(:max_array_panels_count)
|
1091
|
+
@max_sunshine_hours_per_year = args[:max_sunshine_hours_per_year] if args.key?(:max_sunshine_hours_per_year)
|
1092
|
+
@panel_capacity_watts = args[:panel_capacity_watts] if args.key?(:panel_capacity_watts)
|
1093
|
+
@panel_height_meters = args[:panel_height_meters] if args.key?(:panel_height_meters)
|
1094
|
+
@panel_lifetime_years = args[:panel_lifetime_years] if args.key?(:panel_lifetime_years)
|
1095
|
+
@panel_width_meters = args[:panel_width_meters] if args.key?(:panel_width_meters)
|
1096
|
+
@roof_segment_stats = args[:roof_segment_stats] if args.key?(:roof_segment_stats)
|
1097
|
+
@solar_panel_configs = args[:solar_panel_configs] if args.key?(:solar_panel_configs)
|
1098
|
+
@solar_panels = args[:solar_panels] if args.key?(:solar_panels)
|
1099
|
+
@whole_roof_stats = args[:whole_roof_stats] if args.key?(:whole_roof_stats)
|
1100
|
+
end
|
1101
|
+
end
|
1102
|
+
end
|
1103
|
+
end
|
1104
|
+
end
|