HomeGuidesAPI ReferenceChangelog
Log In
Guides

Step 4: Model Solar Production

Create a solar production profile for the proposed system before generating post-storage profiles in the Storage-in-Switch workflow.

Create a solar production profile for the proposed system before generating post-storage profiles in the Storage-in-Switch workflow.

Solar production workflow

  1. Choose a solar production input method.
  2. Create a profile with serviceTypes=SOLAR_PV.
  3. Set the profile source to PVWatts for this tutorial.
  4. Pass system properties such as systemSize, azimuth, and tilt.
  5. Confirm the response includes serviceTypes=SOLAR_PV, source.sourceId=PVWatts, and baselineMeasures.

Create a solar profile

As covered in Step 3, 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 can hold many types of energy data, including solar production. For solar, use a service type of SOLAR_PV.

You have several options for modeling your proposed solar system's production. The Arcadia API supports the following methods:

  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 Helioscope file and we'll automatically parse and load it into a profile.
  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, you will use option 1, the integrated NREL PVWatts API. More specifically, you will model a 2.65 kW PV system with a 170-degree azimuth and 17-degree tilt. Use this request:

PUT /rest/v1/profiles
{  
  "providerAccountId": "storage-switch-example",  
  "providerProfileId": "storage-switch-example-solar",  
  "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"  
    }  
  }  
}  
FieldPurpose
providerAccountIdAssociates the solar profile with the tutorial account.
providerProfileIdYour stable identifier for this solar production profile.
serviceTypesIdentifies the profile as SOLAR_PV.
source.sourceIdUses PVWatts to generate the production profile.
source.sourceVersionUses the selected PVWatts version.
properties.systemSizeSystem size used for PVWatts modeling.
properties.azimuthArray orientation.
properties.tiltArray tilt.

This is the same API route that you used to load billing usage data, but with different parameters. The serviceTypes value of SOLAR_PV tells the API that this profile is for solar, not electricity. The sourceId of PVWatts tells the API to call PVWatts.

When creating a profile sourced from the PVWatts API, you can specify parameters to model various characteristics of your system. The most important ones are shown above: systemSize, azimuth, and tilt. The request also includes optional PVWatts parameters, such as losses, inverter efficiency, bifaciality, albedo, and soiling, to show how additional modeling assumptions can be passed. These parameters have reasonable defaults that work in many cases, but you can adjust them for your system. Read the Profile API Reference documentation for details.

After you send the request, the response should look like this:

{  
    "status": "success",  
    "count": 1,  
    "type": "UsageProfile",  
    "results": [  
        {  
            "profileId": "b86e450a-f82d-4de1-b90a-d091ecaf2a33",  
            "providerProfileId": "storage-switch-example-solar",  
            "profileName": "2.7 kW | PVWatts",  
            "accountId": "066c9738-5d46-4f62-ac25-f0c3c1e6fb9b",  
            "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  
                }  
            ]  
        }  
    ]  
}  

A successful response includes status: "success", serviceTypes: "SOLAR_PV", source.sourceId: "PVWatts", and baselineMeasures.

Model multiple arrays

You can add as many solar profiles to your account as you need. For example, if you plan to include both a south-facing and a west-facing array, create two solar profiles, each with its own shading and orientation parameters. Give each profile 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. Previously, you created an account, confirmed your customer's utility and rate plan, and created a profile for historical electricity usage.

Next, generate post-storage profiles.