Energy Site Simulation

With a single call to the SolarAnywhere API, the client can simulate the output of a single PV system or a list of PV systems under their license and retrieve:

  • AC Power and AC Energy Production
  • DC Power
  • Plane of Array Irradiance (POAI)
  • DC Snow Losses
  • DC Soiling Losses
  • Global Horizontal Irradiance (GHI), Direct Normal Irradiance (DNI) and Diffuse Horizontal Irradiance (DHI)
  • Wind Speed and Ambient Temperature
  • Solid and Liquid Precipitation
  • Snow Depth
  • Albedo
  • Particulate Matter
  • Front Surface Plane of Array Irradiance (Bifacial Systems only)
  • Back Surface Plane of Array Irradiance (Bifacial Systems only)

Energy Site Simulation methods offer a set of PV simulation operations both with and without the need to first create EnergySites using the Energy Site Management methods. The SolarAnywhere solar simulations API offers two simulation models: pvlib and CprPVForm. To learn more about these models, refer back to the Introduction.

Single Site Simulation

Simulation Options

Option 1: Simulate PV output based on an EnergySiteId. To learn how to create an EnergySiteId, see Complete Schema-EnergySiteCreateRequest. This method operates asynchronously, requiring the client to POST their simulation request, then retrieve data using a GET request. The python request payload is in JSON format and should be submitted as a string as opposed to a dictionary.

Note: If you used one of the python 3.0 examples from the Energy Site Management page to create your EnergySiteId, use the corresponding python 3.0 simulation example below. If you used the “Residential Rooftop System” energy site example to get started, use the “Residential Rooftop Simulation” example, but if you used the “Commercial System” or “Single-axis Utility-scale System with Backtracking” examples, use the “Commercial and Utility-Scale Simulation” example. This is because the examples below each use a different PowerModel. Review the introduction page for a comparison of the model capabilities and additional guidance on which to use. For examples of SimulationOptions that include snow or soiling loss output fields visit Complete Schema – CreateSimulationRequest.

import requests
import time


#POST Create Simulation Request
url = "https://service.solaranywhere.com/api/v2/Simulation"
apiKey = "your_api_key"

payload = """{
  "EnergySites": [
    {
      "EnergySiteId": "NZ3RTPHLJE"
    }
  ],
  "SimulationOptions": {
    "PowerModel": "CprPVForm",
    "ShadingModel": "ShadeSimulator",
    "SnowLossModel": "None",
    "SoilingLossModel": "None",
    "OutputFields": [
      "StartTime",
      "EndTime",
      "PowerAC_kW",
      "EnergyAC_kWh",
      "GlobalHorizontalIrradiance_WattsPerMeterSquared",
      "DirectNormalIrradiance_WattsPerMeterSquared",
      "DiffuseHorizontalIrradiance_WattsPerMeterSquared",
      "IrradianceObservationType",
      "AmbientTemperature_DegreesC",
      "AmbientTemperatureObservationType",
      "WindSpeed_MetersPerSecond",
      "WindSpeedObservationType",
      "DataVersion",
      "PlaneOfArrayIrradiance_WattsPerMeterSquared",
      "CapacitySimulatedDC_Percent",
      "CapacitySimulatedDC_kW",
      "ClearSkyPowerAC_kW",
      "ClearSkyEnergyAC_kWh",
      "RelativeHumidity_Percent",
      "SnowDepth_Meters",
      "LiquidPrecipitation_KilogramsPerMeterSquared",
      "SolidPrecipitation_KilogramsPerMeterSquared",
      "Albedo_Unitless"
    ],
    "WeatherDataOptions": {
      "SpatialResolution_Degrees": 0.01,
      "TimeResolution_Minutes": 60,
      "StartTime": "2020-01-01T00:00:00-08:00",
      "EndTime": "2020-02-01T00:00:00-08:00",
      "WeatherDataSource": "SolarAnywhereLatest",
	  "MissingDataHandling": "Omit"
    }
  }
}"""

headers = {
 'content-type': "application/json;charset=utf-8",
 'X-Api-Key': apiKey, 
 'Accept': "application/json"
 }

response = requests.post(url,data=payload,
           headers=headers)
 
root = response.json()
print(response.text)
print("-----")
 
publicId = root["SimulationId"]
print(publicId)

#GET SimulationResult
url2 = "https://service.solaranywhere.com/api/v2/SimulationResult/"

requestNumber = 0
MAX_requestNumber = 100
 
while(requestNumber < MAX_requestNumber):
 time.sleep(5)
 data = requests.get(url2 + publicId, headers=headers)
 radicle = data.json()
 status = radicle["Status"]
 print(radicle)
 if status == "Done":
  print(radicle)
  break
 else:
  requestNumber = requestNumber + 1
import requests
import time


#POST Create Simulation Request
url = "https://service.solaranywhere.com/api/v2/Simulation"
apiKey = "your_api_key"


payload = """{
  "EnergySites": [
    {
      "EnergySiteId": "D7RCV0GWVQ"
    }
  ],
  "SimulationOptions": {
    "PowerModel": "PvLib",
    "SnowLossModel": "None",
    "SoilingLossModel": "None",
    "Bifacial Model": "None",
    "OutputFields": [
      "StartTime",
      "EndTime",
      "PowerAC_kW",
      "PowerDC_kW",
      "EnergyAC_kWh",
      "PowerBeforeGridInterconnectionLimitAC_kW",
      "ClearSkyPowerBeforeGridInterconnectionLimitAC_kW",
      "GlobalHorizontalIrradiance_WattsPerMeterSquared",
      "DirectNormalIrradiance_WattsPerMeterSquared",
      "DiffuseHorizontalIrradiance_WattsPerMeterSquared",
      "IrradianceObservationType",
      "AmbientTemperature_DegreesC",
      "AmbientTemperatureObservationType",
      "WindSpeed_MetersPerSecond",
      "WindSpeedObservationType",
      "DataVersion",
      "PlaneOfArrayIrradiance_WattsPerMeterSquared",
      "ClearSkyPowerAC_kW",
      "ClearSkyEnergyAC_kWh",
      "RelativeHumidity_Percent",
      "SnowDepth_Meters",
      "LiquidPrecipitation_KilogramsPerMeterSquared",
      "SolidPrecipitation_KilogramsPerMeterSquared",
      "Albedo_Unitless"
    ],
    "WeatherDataOptions": {
      "SpatialResolution_Degrees": 0.01,
      "TimeResolution_Minutes": 60,
      "StartTime": "2020-01-01T00:00:00-08:00",
      "EndTime": "2020-02-01T00:00:00-08:00",
      "WeatherDataSource": "SolarAnywhereLatest",
      "MissingDataHandling": "Omit"
    }
  }
}"""

headers = {
 'content-type': "application/json;charset=utf-8",
 'X-Api-Key': apiKey, 
 'Accept': "application/json"
 }

response = requests.post(url,data=payload,
           headers=headers)
 
root = response.json()
print(response.text)
print("-----")
 
publicId = root["SimulationId"]
print(publicId)

#GET SimulationResult
url2 = "https://service.solaranywhere.com/api/v2/SimulationResult/"


requestNumber = 0
MAX_requestNumber = 100
 
while(requestNumber < MAX_requestNumber):
 time.sleep(5)
 data = requests.get(url2 + publicId, headers=headers)
 radicle = data.json()
 status = radicle["Status"]
 print(radicle)
 if status == "Done":
  print(radicle)
  break
 else:
  requestNumber = requestNumber + 1

import requests 
import time 


#POST Create Simulation Request 
url = "https://service.solaranywhere.com/api/v2/Simulation" 
apiKey = "your_api_key" 
 

payload = """{ 
  "EnergySites": [ 
    { 
      "EnergySiteId": "D7RCV0GWVQ" 
    } 
  ], 
  "SimulationOptions": { 
    "PowerModel": "PvLib", 
    "SnowLossModel": "None", 
    "SoilingLossModel": "None", 
    "BifacialModel" : "InfiniteSheds", 
    "OutputFields": [ 
      "StartTime", 
      "EndTime", 
      "PowerAC_kW", 
      "PowerDC_kW", 
      "EnergyAC_kWh", 
      "PowerBeforeGridInterconnectionLimitAC_kW", 
      "ClearSkyPowerBeforeGridInterconnectionLimitAC_kW", 
      "GlobalHorizontalIrradiance_WattsPerMeterSquared", 
      "DirectNormalIrradiance_WattsPerMeterSquared", 
      "DiffuseHorizontalIrradiance_WattsPerMeterSquared", 
      "IrradianceObservationType", 
      "AmbientTemperature_DegreesC", 
      "AmbientTemperatureObservationType", 
      "WindSpeed_MetersPerSecond", 
      "WindSpeedObservationType", 
      "DataVersion", 
      "PlaneOfArrayIrradiance_WattsPerMeterSquared", 
      "PlaneOfArrayIrradianceBackSurface_WattsPerMeterSquared", 
      "PlaneOfArrayIrradianceFrontSurface_WattsPerMeterSquared", 
      "ClearSkyPowerAC_kW", 
      "ClearSkyEnergyAC_kWh", 
      "RelativeHumidity_Percent", 
      "SnowDepth_Meters", 
      "LiquidPrecipitation_KilogramsPerMeterSquared", 
      "SolidPrecipitation_KilogramsPerMeterSquared", 
      "Albedo_Unitless" 
    ], 
    "WeatherDataOptions": { 
      "SpatialResolution_Degrees": 0.01, 
      "TimeResolution_Minutes": 60, 
      "StartTime": "2020-01-01T00:00:00-08:00", 
      "EndTime": "2020-02-01T00:00:00-08:00", 
      "WeatherDataSource": "SolarAnywhereLatest", 
      "MissingDataHandling": "Omit" 
    } 
  } 
}""" 

headers = { 
 &apos;content-type&apos;: "application/json;charset=utf-8", 
 &apos;X-Api-Key&apos;: apiKey,  
 &apos;Accept&apos;: "application/json" 
} 

response = requests.post(url,data=payload, 
           headers=headers) 

root = response.json() 
print(response.text) 
print("-----") 

publicId = root["SimulationId"] 
print(publicId) 


#GET SimulationResult 
url2 = "https://service.solaranywhere.com/api/v2/SimulationResult/" 

requestNumber = 0 
MAX_requestNumber = 100 

while(requestNumber < MAX_requestNumber): 
 time.sleep(5) 
 data = requests.get(url2 + publicId, headers=headers) 
 radicle = data.json() 
 status = radicle["Status"] 
 print(radicle) 
 if status == "Done": 
  print(radicle) 
  break 
 else: 
  requestNumber = requestNumber + 1 

Option 2: Simulate PV output without first creating EnergySiteIds. This method operates asynchronously, requiring the client to POST their simulation request, then retrieve data using a GET request. The python request payload is in JSON format and should be submitted as a string as opposed to a dictionary.

Note: The examples below each use one of two different PowerModels. Review the introduction page for a comparison of the model capabilities and additional guidance on which to use. For examples of SimulationOptions that include snow or soiling loss output fields visit Complete Schema – CreateSimulationRequest.


import requests
import time


#POST Create Simulation Request
url = "https://service.solaranywhere.com/api/v2/Simulation"
apiKey = "your_api_key"

payload = """{
  "EnergySites": [
    {
      "Name": "Sample Site - Lisbon",
      "Description": "Sample Site for Plane of Array Irradiance Simulation",
      "Location": {
        "Latitude": 38.725,
        "Longitude": -9.155
      },
      "PvSystems": [
        {
          "Albedo_Percent": 17,
          "Inverters": [
            {
              "Count": 1,
              "MaxPowerOutputAC_kW": 3.67000,
              "EfficiencyRating_Percent": 97.000000
            }
          ],
          "PvArrays": [
            {
              "PvModules": [
                {
                  "Count": 20,
                  "NameplateDCRating_kW": 0.22000,
                  "PtcRating_kW": 0.19760,
                  "PowerTemperatureCoefficient_PercentPerDegreeC": 0.4,
                  "NominalOperatingCellTemperature_DegreesC": 45
                }
              ],
              "ArrayConfiguration": {
                "Azimuth_Degrees": 180.000,
                "Tilt_Degrees": 34.65,
                "Tracking": "Fixed",
                "TrackingRotationLimit_Degrees": 90,
                "ModuleRowCount": 1,
                "RelativeRowSpacing": 3
              }
            }
          ]
        }
      ]
    }
  ],
  "SimulationOptions": {
    "PowerModel": "PvLib",
    "OutputFields": [
      "StartTime",
      "EndTime",
      "GlobalHorizontalIrradiance_WattsPerMeterSquared",
      "DirectNormalIrradiance_WattsPerMeterSquared",
      "DiffuseHorizontalIrradiance_WattsPerMeterSquared",
      "IrradianceObservationType",
      "PlaneOfArrayIrradiance_WattsPerMeterSquared",
      "DataVersion"
    ],
    "WeatherDataOptions": {
      "SpatialResolution_Degrees": 0.01,
      "TimeResolution_Minutes": 60,
      "StartTime": "2020-01-01T00:00:00-08:00",
      "EndTime": "2020-02-01T00:00:00-08:00",
      "WeatherDataSource": "SolarAnywhereLatest",
      "MissingDataHandling": "Omit"
    }
  }
}"""

headers = {
 'content-type': "application/json;charset=utf-8",
 'X-Api-Key': apiKey, 
 'Accept': "application/json"
 }

response = requests.post(url,data=payload,
           headers=headers)
 
root = response.json()
print(response.text)
print("-----")
 
publicId = root["SimulationId"]
print(publicId)

#GET SimulationResult
url2 = "https://service.solaranywhere.com/api/v2/SimulationResult/"

requestNumber = 0
MAX_requestNumber = 100
 
while(requestNumber < MAX_requestNumber):
 time.sleep(5)
 data = requests.get(url2 + publicId, headers=headers)
 radicle = data.json()
 status = radicle["Status"]
 print(radicle)
 if status == "Done":
  print(radicle)
  break
 else:
  requestNumber = requestNumber + 1
import requests
import time


#POST Create Simulation Request
url = "https://service.solaranywhere.com/api/v2/Simulation"
apiKey = "your_api_key"

payload = """{
  "EnergySites": [
    {
      "Name": "Sample Residential Site - Lisbon",
      "Description": "Sample Residential Site",
      "Location": {
        "Latitude": 38.725,
        "Longitude": -9.155
      },
      "PvSystems": [
        {
          "Albedo_Percent": 17,
          "GeneralDerate_Percent": 85.00,
          "Inverters": [
            {
              "Count": 1,
              "MaxPowerOutputAC_kW": 4.470000,
              "EfficiencyRating_Percent": 97.000000
            }
          ],
          "PvArrays": [
            {
              "PvModules": [
                {
                  "Count": 20,
                  "NameplateDCRating_kW": 0.22000,
                  "PtcRating_kW": 0.19760,
                  "PowerTemperatureCoefficient_PercentPerDegreeC": 0.4
                }
              ],
              "ArrayConfiguration": {
                "Azimuth_Degrees": 180.000,
                "Tilt_Degrees": 34.65,
                "Tracking": "Fixed",
                "TrackingRotationLimit_Degrees": 90,
                "ModuleRowCount": 1,
                "RelativeRowSpacing": 3
              },
              "SolarObstructions": [
                {
                  "Azimuth_Degrees": 90.000,
                  "Elevation_Degrees": 33.000,
                  "Opacity_Percent": 80.0
                },
                {
                  "Azimuth_Degrees": 120.000,
                  "Elevation_Degrees": 50.000,
                  "Opacity_Percent": 100.0
                },
                {
                  "Azimuth_Degrees": 150.000,
                  "Elevation_Degrees": 22.000,
                  "Opacity_Percent": 100.0
                },
                {
                  "Azimuth_Degrees": 180.000,
                  "Elevation_Degrees": 3.000,
                  "Opacity_Percent": 100.0
                },
                {
                  "Azimuth_Degrees": 210.000,
                  "Elevation_Degrees": 1.000,
                  "Opacity_Percent": 100.0
                },
                {
                  "Azimuth_Degrees": 240.000,
                  "Elevation_Degrees": 2.000,
                  "Opacity_Percent": 100.0
                },
                {
                  "Azimuth_Degrees": 270.000,
                  "Elevation_Degrees": 4.000,
                  "Opacity_Percent": 70.0
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "SimulationOptions": {
    "PowerModel": "CprPVForm",
    "ShadingModel": "ShadeSimulator",
    "SnowLossModel": "None",
    "SoilingLossModel": "None",
    "OutputFields": [
      "StartTime",
      "EndTime",
      "PowerAC_kW",
      "EnergyAC_kWh",
      "GlobalHorizontalIrradiance_WattsPerMeterSquared",
      "DirectNormalIrradiance_WattsPerMeterSquared",
      "DiffuseHorizontalIrradiance_WattsPerMeterSquared",
      "IrradianceObservationType",
      "AmbientTemperature_DegreesC",
      "AmbientTemperatureObservationType",
      "WindSpeed_MetersPerSecond",
      "WindSpeedObservationType",
      "DataVersion",
      "PlaneOfArrayIrradiance_WattsPerMeterSquared",
      "CapacitySimulatedDC_Percent",
      "CapacitySimulatedDC_kW",
      "ClearSkyPowerAC_kW",
      "ClearSkyEnergyAC_kWh",
      "RelativeHumidity_Percent",
      "SnowDepth_Meters",
      "LiquidPrecipitation_KilogramsPerMeterSquared",
      "SolidPrecipitation_KilogramsPerMeterSquared",
      "Albedo_Unitless"
    ],
    "WeatherDataOptions": {
      "SpatialResolution_Degrees": 0.01,
      "TimeResolution_Minutes": 60,
      "StartTime": "2020-01-01T00:00:00-08:00",
      "EndTime": "2020-02-01T00:00:00-08:00",
      "WeatherDataSource": "SolarAnywhereLatest",
      "MissingDataHandling": "Omit"
    }
  }
}"""

headers = {
 'content-type': "application/json;charset=utf-8",
 'X-Api-Key': apiKey, 
 'Accept': "application/json"
 }

response = requests.post(url,data=payload,
           headers=headers)
 
root = response.json()
print(response.text)
print("-----")
 
publicId = root["SimulationId"]
print(publicId)

#GET SimulationResult
url2 = "https://service.solaranywhere.com/api/v2/SimulationResult/"

requestNumber = 0
MAX_requestNumber = 100
 
while(requestNumber < MAX_requestNumber):
 time.sleep(5)
 data = requests.get(url2 + publicId, headers=headers)
 radicle = data.json()
 status = radicle["Status"]
 print(radicle)
 if status == "Done":
  print(radicle)
  break
 else:
  requestNumber = requestNumber + 1
import requests
import time


#POST Create Simulation Request
url = "https://service.solaranywhere.com/api/v2/Simulation"
apiKey = "your_api_key"

payload = """{
  "EnergySites": [
    {
      "Name": "Sample Commercial Site - Lisbon",
      "Description": "Sample Commercial Site",
      "Location": {
        "Latitude": 38.725,
        "Longitude": -9.155
      },
      "PvSystems": [
        {
          "Albedo_Percent": 17,
          "GeneralDerate_Percent": 86.00,
          "Inverters": [
            {
              "Count": 1,
              "MaxPowerOutputAC_kW": 416.67,
              "EfficiencyRating_Percent": 97.000000
            }
          ],
          "PvArrays": [
            {
              "PvModules": [
                {
                  "Count": 20,
                  "NameplateDCRating_kW": 25.000,
                  "PtcRating_kW": 24.200,
                  "PowerTemperatureCoefficient_PercentPerDegreeC": 0.40
                }
              ],
              "ArrayConfiguration": {
                "Azimuth_Degrees": 180.000,
                "Tilt_Degrees": 34.65,
                "Tracking": "Fixed",
                "TrackingRotationLimit_Degrees": 90,
                "ModuleRowCount": 4,
                "RelativeRowSpacing": 3
              }
            }
          ]
        }
      ]
    }
  ],
  "SimulationOptions": {
    "PowerModel": "PvLib",
    "SnowLossModel": "None",
    "SoilingLossModel": "None",
    "OutputFields": [
      "StartTime",
      "EndTime",
      "PowerAC_kW",
      "PowerDC_kW",
      "EnergyAC_kWh",
      "GlobalHorizontalIrradiance_WattsPerMeterSquared",
      "DirectNormalIrradiance_WattsPerMeterSquared",
      "DiffuseHorizontalIrradiance_WattsPerMeterSquared",
      "IrradianceObservationType",
      "AmbientTemperature_DegreesC",
      "AmbientTemperatureObservationType",
      "WindSpeed_MetersPerSecond",
      "WindSpeedObservationType",
      "DataVersion",
      "PlaneOfArrayIrradiance_WattsPerMeterSquared",
      "ClearSkyPowerAC_kW",
      "ClearSkyEnergyAC_kWh",
      "RelativeHumidity_Percent",
      "SnowDepth_Meters",
      "LiquidPrecipitation_KilogramsPerMeterSquared",
      "SolidPrecipitation_KilogramsPerMeterSquared",
      "Albedo_Unitless"
    ],
    "WeatherDataOptions": {
      "SpatialResolution_Degrees": 0.01,
      "TimeResolution_Minutes": 60,
      "StartTime": "2020-01-01T00:00:00-08:00",
      "EndTime": "2020-02-01T00:00:00-08:00",
      "WeatherDataSource": "SolarAnywhereLatest",
      "MissingDataHandling": "Omit"
    }
  }
}"""

headers = {
 'content-type': "application/json;charset=utf-8",
 'X-Api-Key': apiKey, 
 'Accept': "application/json"
 }

response = requests.post(url,data=payload,
           headers=headers)
 
root = response.json()
print(response.text)
print("-----")
 
publicId = root["SimulationId"]
print(publicId)

#GET SimulationResult
url2 = "https://service.solaranywhere.com/api/v2/SimulationResult/"

requestNumber = 0
MAX_requestNumber = 100
 
while(requestNumber < MAX_requestNumber):
 time.sleep(5)
 data = requests.get(url2 + publicId, headers=headers)
 radicle = data.json()
 status = radicle["Status"]
 print(radicle)
 if status == "Done":
  print(radicle)
  break
 else:
  requestNumber = requestNumber + 1
import requests
import time

#POST Create Simulation Request
url = "https://service.solaranywhere.com/api/v2/Simulation"
apiKey = "your_api_key"

payload = """{
  "EnergySites": [
    {
      "Name": "Sample Utility-scale site - Lisbon",
      "Description": "Sample Utility-scale site with Single Axis tracking",
      "Location": {
        "Latitude": 38.725,
        "Longitude": -9.155
      },
      "PvSystems": [
        {
          "Albedo_Percent": 17,
          "GeneralDerate_Percent": 86.00,
          "Inverters": [
            {
              "Count": 10,
              "MaxPowerOutputAC_kW": 4166.67,
              "EfficiencyRating_Percent": 97.000000
            }
          ],
          "PvArrays": [
            {
              "PvModules": [
                {
                  "Count": 100,
                  "NameplateDCRating_kW": 0.5,
                  "PtcRating_kW": 0.482,
                  "PowerTemperatureCoefficient_PercentPerDegreeC": 0.40
                }
              ],
              "ArrayConfiguration": {
                "Azimuth_Degrees": 180.000,
                "Tilt_Degrees": 0.00,
                "Tracking": "SingleAxisWithBacktracking",
                "TrackingRotationLimit_Degrees": 60,
                "ModuleRowCount": 25,
                "RelativeRowSpacing": 3
              }
            }
          ]
        }
      ]
    }
  ],
  "SimulationOptions": {
    "PowerModel": "PvLib",
    "SnowLossModel": "None",
    "SoilingLossModel": "None",
    "OutputFields": [
      "StartTime",
      "EndTime",
      "PowerAC_kW",
      "PowerDC_kW",
      "EnergyAC_kWh",
      "GlobalHorizontalIrradiance_WattsPerMeterSquared",
      "PowerBeforeGridInterconnectionLimitAC_kW",
      "ClearSkyPowerBeforeGridInterconnectionLimitAC_kW",
      "DirectNormalIrradiance_WattsPerMeterSquared",
      "DiffuseHorizontalIrradiance_WattsPerMeterSquared",
      "IrradianceObservationType",
      "AmbientTemperature_DegreesC",
      "AmbientTemperatureObservationType",
      "WindSpeed_MetersPerSecond",
      "WindSpeedObservationType",
      "DataVersion",
      "PlaneOfArrayIrradiance_WattsPerMeterSquared",
      "ClearSkyPowerAC_kW",
      "ClearSkyEnergyAC_kWh",
      "RelativeHumidity_Percent",
      "SnowDepth_Meters",
      "LiquidPrecipitation_KilogramsPerMeterSquared",
      "SolidPrecipitation_KilogramsPerMeterSquared",
      "Albedo_Unitless"
    ],
    "WeatherDataOptions": {
      "SpatialResolution_Degrees": 0.01,
      "TimeResolution_Minutes": 60,
      "StartTime": "2020-01-01T00:00:00-08:00",
      "EndTime": "2020-02-01T00:00:00-08:00",
      "WeatherDataSource": "SolarAnywhereLatest",
      "MissingDataHandling": "Omit"
    }
  }
}"""

headers = {
 'content-type': "application/json;charset=utf-8",
 'X-Api-Key': apiKey, 
 'Accept': "application/json"
 }

response = requests.post(url,data=payload,
           headers=headers)
 
root = response.json()
print(response.text)
print("-----")
 
publicId = root["SimulationId"]
print(publicId)

#GET SimulationResult
url2 = "https://service.solaranywhere.com/api/v2/SimulationResult/"

requestNumber = 0
MAX_requestNumber = 100
 
while(requestNumber < MAX_requestNumber):
 time.sleep(5)
 data = requests.get(url2 + publicId, headers=headers)
 radicle = data.json()
 status = radicle["Status"]
 print(radicle)
 if status == "Done":
  print(radicle)
  break
 else:
  requestNumber = requestNumber + 1
import requests

url = "https://service.solaranywhere.com/api/v2/EnergySites"
apiKey = "your_api_key"

payload = """{
  "EnergySite": {
    "Name": "Sample Site - Lisbon",
    "Description": "Single-Axis Backtracking Utility Scale PV System with Bifacial Modules",
    "Location": {
      "Latitude": 38.725,
      "Longitude": -9.155
    },
    "PvSystems": [
      {
        "GeneralDerate_Percent": 86.00,
        "Bifacial": true,
        "Inverters": [
        {
          "Count": 10,
          "MaxPowerOutputAC_kW": 4166.67,
          "EfficiencyRating_Percent": 97.000000
        }
      ],
        "PvArrays": [
          {
            "PvModules": [
              {
                "Count": 83333,
                "NameplateDCRating_kW": 0.50,
                "PtcRating_kW": 0.482,
                "PowerTemperatureCoefficient_PercentPerDegreeC": 0.4
              }
            ],
            "ArrayConfiguration": {
              "Azimuth_Degrees": 180.000,
              "Tilt_Degrees": 0.00,
              "Tracking": "SingleAxisWithBacktracking",
              "TrackingRotationLimit_Degrees": 60,
              "ModuleRowCount": 25,
              "RelativeRowSpacing": 3,
              "RowHeight_Meters": 1,
              "Pitch_Meters": 10,
              "BifacialityFactor_Unitless": 0.65,
              "TransmissionFactor_Unitless": -0.013,
              "ShadeFactor_Unitless": -0.02
            }
          }
        ]
      }
    ]
  }
}"""

headers = {
  &apos;content-type&apos;: "application/json;charset=utf-8",
  &apos;X-Api-Key&apos;: apiKey,
  &apos;Accept&apos;: "application/json"
}

response = requests.post(url,data=payload,headers=headers)

print(response.text)

Bulk Simulations

Within the set of SimulationOptions operations, the client can perform bulk simulation, where the simulation request contains multiple EnergySiteIds. The GetSimulationResultResponse will contain the results for each EnergySite specified. Visit the Complete Schema-EnergySiteCreateRequest to learn more about creating EnergySiteIds.

Note: Bulk request result responses are limited to 2 million lines. You can determine the number of lines that will be returned in your response by using the following equation: Number of EnergySites in Request * Number of Hours between StartTime and EndTime * (60 / TemporalResolution_Minutes).

 

Request
{
  "EnergySites": [
    {
      "EnergySiteId": "NZ3RTPHLJE"
    },
    {
      "EnergySiteId": "6N0QX6E2U9"
    },
    {
      "EnergySiteId": "NBGTY7NBK2"
    },
    {
      "EnergySiteId": "FCDVD4A2CQ"
    },
    {
      "EnergySiteId": "6FTJ1WT0PM"
    },
    {
      "EnergySiteId": "XA70N15TNW"
    }
  ],
  "SimulationOptions": {
    "PowerModel": "CprPVForm",
    "ShadingModel": "Default",
    "SnowLossModel": "None",
    "SoilingLossModel": "None",
    "OutputFields": [
      "StartTime",
      "EndTime",
      "PowerAC_kW",
      "PowerDC_kW",
      "EnergyAC_kWh",
      "GlobalHorizontalIrradiance_WattsPerMeterSquared",
      "IrradianceObservationType",
      "DataVersion"
    ],
    "WeatherDataOptions": {
      "SpatialResolution_Degrees": 0.1,
      "TimeResolution_Minutes": 60,
      "StartTime": "2020-01-01T00:00:00-08:00",
      "EndTime": "2020-01-01T15:00:00-08:00",
      "WeatherDataSource": "SolarAnywhereLatest",
      "MissingDataHandling": "Omit"
    }
  }
}
{
  "EnergySites": [
    {
      "EnergySiteId": "D7RCV0GWVQ"
    },
    {
      "EnergySiteId": "3MA0Z5H564"
    },
    {
      "EnergySiteId": "DYQX7DUVWG"
    },
    {
      "EnergySiteId": "L26ZDBF9P8"
    },
    {
      "EnergySiteId": "M8OGEJN1QI"
    }
  ],
  "SimulationOptions": {
    "PowerModel": "PvLib",
    "BifacialModel": "None",
    "SnowLossModel": "None",
    "SoilingLossModel": "None",
    "OutputFields": [
      "StartTime",
      "EndTime",
      "PowerAC_kW",
      "PowerDC_kW",
      "EnergyAC_kWh",
      "GlobalHorizontalIrradiance_WattsPerMeterSquared",
      "IrradianceObservationType",
      "DataVersion"
    ],
    "WeatherDataOptions": {
      "SpatialResolution_Degrees": 0.01,
      "TimeResolution_Minutes": 60,
      "StartTime": "2020-01-01T00:00:00-08:00",
      "EndTime": "2020-01-01T15:00:00-08:00",
      "WeatherDataSource": "SolarAnywhereLatest",
      "MissingDataHandling": "Omit",
      "ProbabilityOfExceedance": 0
    }
  }
}
<CreateSimulationRequest xmlns="http://service.solaranywhere.com/api/v2">
  <EnergySites>
    <EnergySite EnergySiteId="D7RCV0GWVQ"></EnergySite>
    <EnergySite EnergySiteId="3MA0Z5H564"></EnergySite>
    <EnergySite EnergySiteId="DYQX7DUVWG"></EnergySite>
    <EnergySite EnergySiteId="L26ZDBF9P8"></EnergySite>
    <EnergySite EnergySiteId="M8OGEJN1QI"></EnergySite>
  </EnergySites>
  <SimulationOptions
  PowerModel="PvLib"
  BifacialModel="None"
  SnowLossModel="None"
  SoilingLossModel="None"
  OutputFields="StartTime,EndTime,PowerAC_kW,PowerDC_kW,EnergyAC_kWh,GlobalHorizontalIrradiance_WattsPerMeterSquared,IrradianceObservationType">
    <WeatherDataOptions
    WeatherDataSource="SolarAnywhereLatest"
    StartTime="2020-01-01T00:00:00-08:00"
    EndTime="2020-01-01T15:00:00-08:00"
    SpatialResolution_Degrees="0.01"
    TimeResolution_Minutes="60"/>
  </SimulationOptions>
</CreateSimulationRequest>
<CreateSimulationRequest xmlns="http://service.solaranywhere.com/api/v2">
  <EnergySites>
    <EnergySite EnergySiteId="NZ3RTPHLJE"></EnergySite>
    <EnergySite EnergySiteId="6N0QX6E2U9"></EnergySite>
    <EnergySite EnergySiteId="NBGTY7NBK2"></EnergySite>
    <EnergySite EnergySiteId="FCDVD4A2CQ"></EnergySite>
    <EnergySite EnergySiteId="6FTJ1WT0PM"></EnergySite>
    <EnergySite EnergySiteId="XA70N15TNW"></EnergySite>
  </EnergySites>
  <SimulationOptions
  PowerModel="CprPVForm"
  OutputFields="StartTime,EndTime,PowerAC_kW,PowerDC_kW,EnergyAC_kWh,GlobalHorizontalIrradiance_WattsPerMeterSquared,IrradianceObservationType">
    <WeatherDataOptions
    WeatherDataSource="SolarAnywhereLatest"
    StartTime="2020-01-01T00:00:00-08:00"
    EndTime="2020-01-01T15:00:00-08:00"
    SpatialResolution_Degrees="0.1"
    TimeResolution_Minutes="60"/>
  </SimulationOptions>
</CreateSimulationRequest>

What’s Next?