HomeGuidesAPI ReferenceChangelog
Log In
Guides

Legacy Solar+Storage Savings Analysis

Review the legacy solar and storage savings analysis workflow for customers not using the current Storage-in-Switch product.

Use this legacy workflow to quote solar PV systems that include behind-the-meter energy storage without using the current Storage-in-Switch product.

For new implementations, use Storage-in-Switch when possible. Use this page only when you need the older manual workflow, where you model and maintain the battery charge and discharge schedule yourself.

For most tariffs, you calculate forecasted savings with solar and storage by including a storage profile with charge and discharge values. For tariffs that require dual register meters, you create a combination profile that nets electricity usage, solar production, and storage activity into a single post-solar profile.

Methods for forecasting savings with solar and storage

Choose the method that matches your implementation requirements.

MethodUse whenTradeoffsSteps
Storage-in-Switch (Recommended)You can use the current storage workflow.Models and stores optimized storage profiles in a single step, with savings and projections included in results.Follow steps 1–6 in Forecasting Savings with Storage-in-Switch.
Account Cost CalculationYou need full control over custom battery modeling, such as degradation.You must recreate the savings calculations and projections from the Savings Analysis call.Follow steps 1–6 below.
Savings AnalysisYou want Savings Analysis results and projections included.Battery degradation is not projected. For dual register meters, solar production and subsequent degradation are not calculated separately.Follow steps 1, 3–5, and 7 below.

1. Provision an account with electricity and solar profiles

The process begins with provisioning an account, just as you would when quoting only solar. This defines your customer’s tariff, pre-solar electric usage (kWh), and estimated solar production.

To do this, follow the first four steps of the Forecasting Savings tutorial when you are quoting solar PV systems with behind-the-meter energy storage.

2. Calculate the costs without solar and storage

This step is required for the Account Cost Calculation method.

Now we will calculate the customer’s pre-solar and storage costs using the electricity profile. The results from this calculation provide the pre-solar baseline costs used when calculating first-year savings with solar and storage in a later step.

Use this sample calculation:

POST /rest/v1/accounts/pid/{providerAccountId}/calculate/
{  
  "fromDateTime": "2017-01-01T00:00:00",  
  "toDateTime": "2018-01-01T00:00:00",  
  "useIntelligentBaselining": "true",  
  "includeDefaultProfile": "true",  
  "autoBaseline": "true",  
  "minimums": "false",  
  "detailLevel": "CHARGE_TYPE",  
  "groupBy": "MONTH",  
  "fields": "EXT"  
}  

The response will return the customer’s total costs per month without solar and storage. This response snippet shows the month of January:

{  
  "fromDateTime": "2017-01-01T00:00:00-10:00",  
  "toDateTime": "2017-02-01T00:00:00-10:00",  
  "quantityKey": "fixed",  
  "rateAmount": 5.135,  
  "itemQuantity": 2,  
  "cost": 10.27,  
  "chargeType": "FIXED_PRICE"  
},  
{  
  "fromDateTime": "2017-01-01T00:00:00-10:00",  
  "toDateTime": "2017-02-01T00:00:00-10:00",  
  "quantityKey": "consumption",  
  "rateAmount": 0.24747042,  
  "itemQuantity": 372.557409,  
  "cost": 92.19693848,  
  "chargeType": "CONSUMPTION_BASED"  
},  

Read the Account Cost Calculation endpoint documentation for more information.

3. Retrieve the net hourly profile

To build your storage profile, you need to understand the customer’s estimated usage and solar production hour by hour. Use this net hourly profile to align the battery charge and discharge schedule with the estimated scenario. This applies whether you charge when prices are low and discharge when prices are high, or charge from excess solar production and discharge to replace power received from the grid.

The date range you use in this calculation must match the date range in your storage profile and final savings calculations. Matching date ranges ensures that charge and discharge hours line up correctly. If the date ranges do not match, the forecasted savings calculation will not be accurate.

To retrieve the net hourly profile, run a calculation for the date range of your first-year calculation using the electricity profile and solar profile. When you created the electricity profile, you set it as the default profile on the account, so include it in the calculation with "includeDefaultProfile": "true". Then pass the solar profile under propertyInputs with "operator": "-" because you are subtracting solar production from the customer’s electricity usage.

Include these parameters in the Account Cost Calculation request to enable Intelligent Baselining. Intelligent Baselining moves the customer’s electricity data to a future date, such as the estimated interconnection date, and extrapolates annual usage if you are using less than 12 months of data:

  • "useIntelligentBaselining": "true"
  • "autoBaseline": "true"

Set "detailLevel": "CHARGE_TYPE_AND_TOU" so the response includes time-of-use periods for each hour when you are using a time-of-use tariff. Use this information to model a storage profile where the battery discharges during on-peak hours and charges during off-peak hours.

Below is a sample request to retrieve the net hourly profile using the tariff set on the account. For storage modeling, use the records with "chargeType": "CONSUMPTION_BASED".

POST /rest/v1/accounts/pid/{providerAccountId}/calculate/
{  
  "fromDateTime": "2017-01-01T00:00:00",  
  "toDateTime": "2018-01-01T00:00:00",  
  "useIntelligentBaselining": "true",  
  "includeDefaultProfile": "true",  
  "autoBaseline": "true",  
  "minimums": "false",  
  "detailLevel": "CHARGE_TYPE_AND_TOU",  
  "groupBy": "HOUR",  
  "fields": "EXT",  
  "propertyInputs": [{  
  	"keyName": "profileId",  
  	"dataValue": "{profileId of solar profile}",  
  	"operator": "-"  
  }]  
}  

Here is the snippet of the response you will receive for a time-of-use tariff:

{  
  "fromDateTime": "2017-01-01T17:00:00-10:00",  
  "toDateTime": "2017-01-01T18:00:00-10:00",  
  "quantityKey": "consumption",  
  "rateType": "COST_PER_UNIT",  
  "rateAmount": 0.44956642,  
  "itemQuantity": 0.51576,  
  "cost": 0.23190247,  
  "chargeType": "CONSUMPTION_BASED",  
  "period": "PARTIAL_PEAK",  
  "touId": 3119,  
  "touName": "Mid-Peak"  
},  
{  
  "fromDateTime": "2017-01-01T18:00:00-10:00",  
  "toDateTime": "2017-01-01T19:00:00-10:00",  
  "quantityKey": "consumption",  
  "rateType": "COST_PER_UNIT",  
  "rateAmount": 0.44956642,  
  "itemQuantity": 0.595127,  
  "cost": 0.26757248,  
  "chargeType": "CONSUMPTION_BASED",  
  "period": "PARTIAL_PEAK",  
  "touId": 3119,  
  "touName": "Mid-Peak"  
},  
{  
  "fromDateTime": "2017-01-01T19:00:00-10:00",  
  "toDateTime": "2017-01-01T20:00:00-10:00",  
  "quantityKey": "consumption",  
  "rateType": "COST_PER_UNIT",  
  "rateAmount": 0.44956642,  
  "itemQuantity": 0.581265,  
  "cost": 0.26136164,  
  "chargeType": "CONSUMPTION_BASED",  
  "period": "PARTIAL_PEAK",  
  "touId": 3119,  
  "touName": "Mid-Peak"  
},  

Here is a sample request to retrieve the net hourly profile with a tariff specified in the request:

POST /rest/v1/accounts/pid/{providerAccountId}/calculate/
{  
  "fromDateTime": "2017-01-01T00:00:00",  
  "toDateTime": "2018-01-01T00:00:00",  
  "masterTariffId": 3256713,  
  "useIntelligentBaselining": "true",  
  "includeDefaultProfile": "true",  
  "autoBaseline": "true",  
  "minimums": "false",  
  "detailLevel": "CHARGE_TYPE_AND_TOU",  
  "groupBy": "HOUR",  
  "fields": "EXT",  
  "propertyInputs": [{  
  	"keyName": "profileId",  
  	"dataValue": "{profileId of solar profile}",  
  	"operator": "-"  
  }]  
}  

Here is a snippet of the response you will receive for a non-time-of-use tariff:

{  
  "fromDateTime": "2017-01-01T00:00:00-10:00",  
  "toDateTime": "2017-01-01T01:00:00-10:00",  
  "quantityKey": "consumption",  
  "rateType": "COST_PER_UNIT",  
  "rateAmount": 0.246772,  
  "itemQuantity": 0.277411,  
  "cost": 0.06845727,  
  "chargeType": "CONSUMPTION_BASED"  
},  
{  
  "fromDateTime": "2017-01-01T01:00:00-10:00",  
  "toDateTime": "2017-01-01T02:00:00-10:00",  
  "quantityKey": "consumption",  
  "rateType": "COST_PER_UNIT",  
  "rateAmount": 0.246772,  
  "itemQuantity": 0.253721,  
  "cost": 0.06261124,  
  "chargeType": "CONSUMPTION_BASED"  
},  
{  
  "fromDateTime": "2017-01-01T02:00:00-10:00",  
  "toDateTime": "2017-01-01T03:00:00-10:00",  
  "quantityKey": "consumption",  
  "rateType": "COST_PER_UNIT",  
  "rateAmount": 0.246772,  
  "itemQuantity": 0.248678,  
  "cost": 0.06136677,  
  "chargeType": "CONSUMPTION_BASED"  
},  

Read Account Cost Calculation to learn more about this endpoint.

4. Model the storage profile

Now that you have the customer’s estimated hourly kWh and costs, use them to inform your battery profile. The two most common approaches are time-of-use arbitrage and grid independence.

Time-of-use arbitrage: For a time-of-use tariff, discharge the battery during on-peak hours and charge the battery during off-peak hours. You may also use the hourly rate instead of, or in addition to, the time-of-use period to determine the charge and discharge schedule.

Grid independence: Charge the battery when the solar system produces more energy than the customer consumes. Discharge the battery when the solar system produces less energy than the customer uses.

5. Create a storage profile or combination profile of electricity, solar, and storage

From here on out, it is important to know if you are working with a tariff that requires dual register meters or not.

If the tariff you are working with requires dual register meters (primarily Hawaiian tariffs), follow Step B. Otherwise, follow Step A.

Using the storage model, this section explains how to upload a storage profile. For tariffs with dual register meters, it also explains how to create a combination profile that includes electricity, solar, and storage.

A. Create a storage profile for tariffs

For tariffs that do not require dual register meters, upload your storage model of charge and discharge values so you can add the profile to your forecasted savings calculation. After modeling the storage profile from the net hourly profile, create a storage profile that contains 8,760 kWh values of battery usage. The storage profile must have the same date range as your first-year calculation. Set serviceTypes to ELECTRICITY.

Positive values are used when the battery is charging:

{  
  "fromDateTime" : "2017-01-01T14:00:00-10:00",  
  "quantityUnit" : "kWh",  
  "quantityValue" : "1.67291",  
  "toDateTime" : "2017-01-01T15:00:00-10:00"  
}  

Negative values are used when the battery is discharging:

{  
  "fromDateTime" : "2017-01-01T17:00:00-10:00",  
  "quantityUnit" : "kWh",  
  "quantityValue" : "-0.344736",  
  "toDateTime" : "2017-01-01T18:00:00-10:00"  
}  

Here is an example of creating a storage profile with charging and discharging values:

POST /rest/v1/profiles

Note that we have edited some of the readingData out of the following to keep the length shorter.

{  
  "providerAccountId" : "{providerAccountId}",  
  "providerProfileId" : "{providerProfileId of storage profile}",  
  "profileName" : "Example of Storage Profile",  
  "serviceTypes" : "ELECTRICITY",  
  "sourceId" : "ReadingEntry",  
  "readingData" : [  
      { "fromDateTime" : "2017-01-01T14:00:00-10:00",  
        "quantityUnit" : "kWh",  
        "quantityValue" : "1.67291",  
        "toDateTime" : "2017-01-01T15:00:00-10:00"  
      },{ "fromDateTime" : "2017-01-01T15:00:00-10:00",  
        "quantityUnit" : "kWh",  
        "quantityValue" : "0.904214",  
        "toDateTime" : "2017-01-01T16:00:00-10:00"  
      },{ "fromDateTime" : "2017-01-01T16:00:00-10:00",  
        "quantityUnit" : "kWh",  
        "quantityValue" : "0.159734",  
        "toDateTime" : "2017-01-01T17:00:00-10:00"  
      },{ "fromDateTime" : "2017-01-01T17:00:00-10:00",  
        "quantityUnit" : "kWh",  
        "quantityValue" : "-0.344736",  
        "toDateTime" : "2017-01-01T18:00:00-10:00"  
      },{ "fromDateTime" : "2017-01-01T18:00:00-10:00",  
        "quantityUnit" : "kWh",  
        "quantityValue" : "-0.595127",  
        "toDateTime" : "2017-01-01T19:00:00-10:00"  
      }  
  ]  
}  

B. Create a combination profile for electricity, solar, and storage for tariffs with dual register meters

For tariffs that require dual register meters, create a profile that represents the post-solar and storage scenario. Calculate the hourly import and export values for the combination of electricity, solar, and storage. In other words, create a profile with electricity - solar production - storage discharge + storage charge.

Let’s go through an example of how to calculate the combination profile. Let’s say the following values occur on 1/2/2017 at 10:00 AM:

  • Consumption: 0.58 kWh
  • Solar Production: 3.174 kWh
  • Storage Discharge: 0 kWh
  • Storage Charge: 2.594 kWh

Therefore, when you are calculating for the combination, it will be 0 kWh for 1/2/2017 at 10:00 AM:

0.58 kWh - 3.174 kWh - 0 kWh + 2.594 kWh = 0 kWh

Here is an example of creating a profile that is a combination of electricity, solar, and storage:

POST /rest/v1/profiles

Note that we have edited some of the readingData out of the following to keep the length shorter.

{  
  "providerAccountId" : "{providerAccountId}",  
  "providerProfileId" : "{providerProfileId of storage profile}",  
  "profileName" : "Example of Combination Profile",  
  "serviceTypes" : "ELECTRICITY",  
  "sourceId" : "ReadingEntry",  
  "readingData" : [  
      { "fromDateTime" : "2017-01-01T00:00:00-10:00",  
        "quantityUnit" : "kWh",  
        "quantityValue" : "0.346",  
        "toDateTime" : "2017-01-01T01:00:00-10:00"  
      },{ "fromDateTime" : "2017-01-01T01:00:00-10:00",  
        "quantityUnit" : "kWh",  
        "quantityValue" : "0.324",  
        "toDateTime" : "2017-01-01T02:00:00-10:00"  
      },
      { "fromDateTime" : "2017-01-10T04:00:00-10:00",
    "quantityUnit" : "kWh",
    "quantityValue" : "0.347",
    "toDateTime" : "2017-01-10T05:00:00-10:00"
  },{ "fromDateTime" : "2017-01-10T05:00:00-10:00",
    "quantityUnit" : "kWh",
    "quantityValue" : "0.428",
    "toDateTime" : "2017-01-10T06:00:00-10:00"
  },{ "fromDateTime" : "2017-01-10T06:00:00-10:00",
    "quantityUnit" : "kWh",
    "quantityValue" : "0.651",
    "toDateTime" : "2017-01-10T07:00:00"
  }
     ]  
}

6. Calculate the costs with solar and storage via Account Cost Calculation

Calculate first-year costs with solar and storage using the Account Cost Calculation endpoint. Compare the results from Step 2 and this step to calculate first-year savings with solar and storage.

If the tariff you are working with has dual register meters (primarily Hawaiian tariffs), follow Step B. Otherwise, follow Step A.

A. For tariffs without dual register meters

For tariffs that do not require dual register meters, you will calculate the first-year costs with solar and storage by including the solar and storage profiles in your calculation. This is the same calculation call as the previous call with just solar except you explicitly add in the storage profile. The date range of the battery profile must be identical to the calculation so that the storage charge and discharge hours line up correctly. Otherwise, the calculation will not be accurate.

Here is a sample request that subtracts the solar profile and adds the storage profile to the electricity profile:

POST /rest/v1/accounts/pid/{providerAccountId}/calculate/
{  
  "fromDateTime": "2017-01-01T00:00:00",  
  "toDateTime": "2018-01-01T00:00:00",  
  "useIntelligentBaselining": "true",  
  "includeDefaultProfile": "true",  
  "autoBaseline": "true",  
  "minimums": "false",  
  "detailLevel": "CHARGE_TYPE",  
  "groupBy": "MONTH",  
  "fields": "EXT",  
  "propertyInputs": [{  
  	"keyName": "profileId",  
  	"dataValue": "{profileId of solar profile}",  
  	"operator": "-"  
  },{  
  	"keyName": "profileId",  
  	"dataValue": "{profileId of storage profile}",  
  	"operator": "+"  
  }]  
}  

B. For tariffs with dual register meters

For tariffs that require dual register meters, calculate first-year costs with solar and storage using the combination profile of electricity, solar, and storage. Set "includeDefaultProfile" to "false" and do not include the solar profile as a separate propertyInput, because the combination profile already includes the electricity profile and solar profile.

Here is a sample request:

POST /rest/v1/accounts/pid/{providerAccountId}/calculate/
{  
  "fromDateTime": "2017-01-01T00:00:00",  
  "toDateTime": "2018-01-01T00:00:00",  
  "useIntelligentBaselining": "true",  
  "includeDefaultProfile": "false",  
  "autoBaseline": "true",  
  "minimums": "false",  
  "detailLevel": "CHARGE_TYPE",  
  "groupBy": "MONTH",  
  "fields": "EXT",  
  "propertyInputs": [{  
  	"keyName": "profileId",  
  	"dataValue": "{profileId of combination profile}",  
  	"operator": "+"  
  }]  
}  

7. Run a Savings Analysis with solar and storage

Run a Savings Analysis to forecast savings with solar and storage for a potential customer.

If you are using a tariff that does not require dual register meters, you will include the storage profile in the Savings Analysis request (see Step A for more information). However, if you are using a tariff with dual register meters, you will use the combination profile of electricity, solar, and storage in the after scenario (see Step B for more information).

Be aware of these caveats when you run a savings analysis with solar and storage:

  • The lifetime solar costs will reflect the behavior of the storage.
  • The first-year solar costs will not be available if you have a dual register meter and you are passing the combination profile of electricity, solar, and storage.

The standard scenarios for a solar and storage analysis are:

  • before: what the electricity bill would be in the future without solar and storage
  • solar: what the solar system being considered would produce and cost
  • after: what the electricity bill would be in the future with solar and storage
  • savings: the net savings between the before and after scenarios

However, the Savings Analysis requests are different if you are using a tariff that requires dual register meters.

A. For tariffs without dual register meters

Below is a sample Savings Analysis for solar and storage when you are using tariffs that do not require dual register meters. You will use the parameter "operator": "+" to include the storage profile’s charging and discharging values in the calculation.

POST /rest/v1/accounts/analysis
{  
  "providerAccountId" : "{providerAccountId}",  
  "fromDateTime" : "2017-01-01",  
  "fields": "ext",  
  "propertyInputs" : [ {  
    "scenarios" : "before",  
    "keyName" : "masterTariffId",  
    "dataValue" : "2415"  
  }, {  
    "scenarios" : "before,after",  
    "keyName" : "rateInflation",  
    "dataValue" : "3.5"  
  }, {  
    "scenarios" : "solar",  
    "keyName" : "rateInflation",  
    "dataValue" : "1.9"  
  }, {  
    "scenarios" : "after,solar",  
    "keyName" : "solarDegradation",  
    "dataValue" : "1.5"  
  }, {  
    "scenarios" : "before, after",  
    "keyName" : "providerProfileId",  
    "dataValue" : "{providerProfileId of electricity profile}"  
  }, {  
    "scenarios" : "after, solar",  
    "keyName" : "providerProfileId",  
    "dataValue" : "{providerProfileId of solar profile}"  
  }, {  
    "scenarios" : "after",  
    "keyName" : "providerProfileId",  
    "dataValue" : "{providerProfileId of storage profile}",  
    "operator": "+"  
  } ],  
  "rateInputs" : [ {  
    "scenarios" : "solar",  
    "chargeType" : "FIXED_PRICE",  
    "rateBands" : [ {  
      "rateAmount" : 137.05  
    } ]  
  } ]  
}  

B. For tariffs with dual register meters

For tariffs that require dual register meters, you will use the electricity profile in the "before" scenario and the combination profile of electricity, solar, and storage in the "after" scenario. Here is a sample request:

POST /rest/v1/accounts/analysis
{  
  "providerAccountId" : "{providerAccountId}",  
  "fromDateTime" : "2017-01-01",  
  "fields": "ext",  
  "propertyInputs" : [ {  
    "scenarios" : "before",  
    "keyName" : "masterTariffId",  
    "dataValue" : "2415"  
  }, {  
    "scenarios" : "before,after",  
    "keyName" : "rateInflation",  
    "dataValue" : "3.5"  
  }, {  
    "scenarios" : "before",  
    "keyName" : "providerProfileId",  
    "dataValue" : "{providerProfileId of electricity profile}"  
  }, {  
    "scenarios" : "after",  
    "keyName" : "providerProfileId",  
    "dataValue" : "{providerProfileId of combination profile}"  
  } ]  
}  

There is no solar scenario in the request above because the impact of solar is already included in your net profile. This also means that series 3, which contains first-year solar values, will not be populated because the request does not pass a separate solar profile. We recommend retrieving total solar production from the profile with the Get Profile request.

Learn more in the Savings Analysis API reference.