Let’s recap. So far, you’ve created an account for your prospective customer, confirmed their utility and electricity tariff, as well as load some historical bills to baseline their usage. It’s time to model a solar system!

Creating a Solar profile

As we covered in the last step, an Account object can have several profiles, and historical bill usage data can be loaded into a Profile with a service type of ELECTRICITY. Profiles are versatile and can hold lots of different types of energy data in them, including solar production numbers. For solar, you use a service type of SOLAR_PV.

We have a lot of flexibility and options around how you can model your proposed solar systems production. The Genability API offers the following methods to provide this data:

  1. You can use the integrated NREL PVWatts tool by passing in system size and other properties. This is the most commonly-used option with our residential customers.
  2. If you have your own solar model, you can use our API to pass in your own estimated hourly production for a typical year.
  3. Alternatively, you can use our File Uploader to pass in a CSV, a PVSyst file, or a PVSIM file and we’ll automatically parse and load it.
  4. You can use our Typical Solar Production data, which is a first pass easy approximation and suitable for market assessments and marketing.

For this tutorial, we will will use #1, our integration of NREL PVWatts API. More specifically, we will model a 3 kW PV system facing south with a 20 degree tilt. Here’s how you request it.

PUT /rest/v1/profiles
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
  "providerAccountId" : "api-eg-01",
  "providerProfileId" : "PVWATTS_RESIDENTIAL_CA_V8_TESTING",
  "groupBy" : "YEAR",
  "serviceTypes" : "SOLAR_PV",
  "source": {
    "sourceId":"PVWatts",
    "sourceVersion":"8"
  },
  "properties" : {
    "systemSize" : {
      "keyName" : "systemSize",
      "dataValue" : "2.65"
    },
    "azimuth" : {
      "keyName" : "azimuth",
      "dataValue" : "170"
    },
    "losses" : {
      "keyName" : "losses",
      "dataValue" : "15"
    },
    "inverterEfficiency" : {
      "keyName" : "inverterEfficiency",
      "dataValue" : "96"
    },
    "tilt" : {
      "keyName" : "tilt",
      "dataValue" : "17"
    },
    "bifaciality" : {
        "keyName" : "bifaciality",
        "dataValue" : "0.5"
    },
    "albedo" : {
        "keyName" : "albedo",
        "dataValue" : "0.5"
    },
    "useWeatherFileAlbedo" : {
        "keyName" : "useWeatherFileAlbedo",
        "dataValue" : "0"
    },
    "soiling" : {
        "keyName" : "soiling",
        "dataValue" : "12.0, 4.0, 45.0, 23.0, 9.0, 99.0, 67.0, 12.54, 54.0, 9.0, 0.0, 7.6"
    }
  }
}

As you can see above, this is the same API route that you used to load billing usage data. But we passed in a number of different parameters. The first ones to notice is serviceType of SOLAR_PV which lets us know it is solar and not electricity. The sourceId of PVWatts is what tells us to call PVWatts. When creating a profile sourced from the PVWatts API, there are a number of different parameters that you can specify to model various characteristics of your system. The most important ones are the ones shown above: systemSize, azimuth, and tilt. Other parameters can be used to denote loss, etc., and these parameters have reasonable defaults that should work in many cases, but you can adjust them any way you like. Read the Profile API Reference documentation for details of these.

Once you’ve made your request, the response should look like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
{
    "status": "success",
    "count": 1,
    "type": "UsageProfile",
    "results": [
        {
            "profileId": "b86e450a-f82d-4de1-b90a-d091ecaf2a33",
            "providerProfileId": "PVWATTS_RESIDENTIAL_CA_V8_TESTING",
            "profileName": "2.7 kW | PVWatts",
            "accountId": "d900ee72-2f12-4854-bc34-5ca5f6a22bd4",
            "serviceTypes": "SOLAR_PV",
            "source": {
                "sourceId": "PVWatts",
                "name": "PVWatts",
                "type": "Reading",
                "sourceVersion": "8"
            },
            "dataStatus": 2,
            "properties": {
                "systemSize": {
                    "keyName": "systemSize",
                    "dataValue": "2.65",
                    "accuracy": 100
                },
                "inverterEfficiency": {
                    "keyName": "inverterEfficiency",
                    "dataValue": "96",
                    "accuracy": 100
                },
                "useWeatherFileAlbedo": {
                    "keyName": "useWeatherFileAlbedo",
                    "dataValue": "0",
                    "accuracy": 100
                },
                "moduleType": {
                    "keyName": "moduleType",
                    "dataType": "INTEGER",
                    "dataValue": "0",
                    "accuracy": 50
                },
                "derate": {
                    "keyName": "derate",
                    "dataType": "DECIMAL",
                    "dataValue": "0.816"
                },
                "azimuth": {
                    "keyName": "azimuth",
                    "dataValue": "170",
                    "accuracy": 100
                },
                "tilt": {
                    "keyName": "tilt",
                    "dataValue": "17",
                    "accuracy": 100
                },
                "losses": {
                    "keyName": "losses",
                    "dataValue": "15",
                    "accuracy": 100
                },
                "climateDataFileName": {
                    "keyName": "climateDataFileName",
                    "dataType": "STRING",
                    "dataValue": "84361.csv"
                },
                "soiling": {
                    "keyName": "soiling",
                    "dataValue": "12.0, 4.0, 45.0, 23.0, 9.0, 99.0, 67.0, 12.54, 54.0, 9.0, 0.0, 7.6",
                    "accuracy": 100
                },
                "trackMode": {
                    "keyName": "trackMode",
                    "dataType": "INTEGER",
                    "dataValue": "0",
                    "accuracy": 50
                },
                "systemYield": {
                    "keyName": "systemYield",
                    "dataType": "DECIMAL",
                    "dataValue": "1123.74"
                },
                "bifaciality": {
                    "keyName": "bifaciality",
                    "dataValue": "0.5",
                    "accuracy": 100
                },
                "albedo": {
                    "keyName": "albedo",
                    "dataValue": "0.5",
                    "accuracy": 100
                }
            },
            "baselineMeasures": [
                {
                    "i": 1,
                    "v": 2977.898016000000
                }
            ]
        }
    ]
}

Modeling multiple arrays

You can add as many solar profiles to your Account as you need. For example, if you plan on having both a south and a west facing array in your system, you can create two solar profiles, each with individual shading and orientation parameters. Give each a different providerProfileId to keep track of them.

Summary

You now have a model of the hourly solar production for your proposed system in our database. And previously you created an account, confirmed your customer’s utility and rate plan, and created a profile denoting historical electricity usage.

Next let’s analyze your customer’s savings.


Previous: Step 3 - Baseline Electricity Usage

Next: Step 5 - Savings Analysis