Skip to content

Solar-PV power forecasting locations

Welcome to the alitiq Solar Power Forecasting API! This guide explains how to create a location for a PV power plant, including subsystems for each unique combination of azimuth and tilt.


Key Concepts 📚

In the alitiq Solar API, a PV power plant is represented as a location with one or more subsystems. Each subsystem corresponds to a unique configuration of azimuth and tilt of the PV modules. By defining these subsystems, the API ensures precise forecasting for the entire power plant.

Subsystems

  • A subsystem is defined by:
  • Azimuth: Orientation of the module relative to true north (in degrees, South 180°).
  • Tilt: Angle of the module from the horizontal plane (in degrees).
  • Power Capacity: Installed capacity of the modules in the subsystem (in kW).
  • installed_power: The capacity of all modules per subsystem in the power plant.
  • inverter_power: The capacity of the inverters per subsystem in the power plant.

  • Each unique combination of azimuth and tilt requires a separate subsystem for accurate forecasting.


Add a new PV systems to your portfolio 🚀

To add a new location to your portfolio, you have to use the pv_systems/add endpoint.

import requests

url = "https://solar.alitiq.com/pv_systems/add"

payload = [
    {
        "location_id": 12,
        "site_name": "test_2",
        "latitude": 48.9,
        "longitude": 10.3,
        "installed_power": 320,
        "installed_power_inverter": 300,
        "orientation": 180,
        "tilt": 13,
        "temp_factor": 0.033,
        "mover": 1
    },
    {
        "location_id": 12,
        "site_name": "test_2",
        "latitude": 48.9,
        "longitude": 10.3,
        "power": 320,
        "installed_power_inverter": 300,
        "azimuth": 180,
        "tilt": 15,
        "temp_factor": 0.033,
        "mover": 1
    }
]
headers = {"Content-Type": "application/json", "x-api-key": {api-key}}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
from alitiq import alitiqSolarAPI, SolarPowerPlantModel

# Initialize the API client
solar_api = alitiqSolarAPI(api_key="your-api-key")

# Define the PV power plant with subsystems
plant = SolarPowerPlantModel(
    site_name="My Solar Plant",
    location_id="SP123",
    latitude=48.160170,
    longitude=10.55907,
    installed_power=1000.0,
    installed_power_inverter=950.0,
    azimuth=180.0,
    tilt=25.0,
)

# Create the location
response = solar_api.create_location(plant)
print("Location created:", response)
curl --request POST \
  --url https://solar.alitiq.com/pv_systems/add \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: {api-key}' \
  --data '[
    {
        "site_name": "test_2",
        "latitude": 48.9,
        "installed_power": 10.3,
        "power": 320,
        "installed_power_inverter": 300,
        "azimuth": 180,
        "tilt": 13,
        "temp_factor": 0.033,
        "mover": 0
    },
    {
        "site_name": "test_2",
        "latitude": 48.9,
        "longitude": 10.3,
        "installed_power": 320,
        "installed_power_inverter": 300,
        "azimuth": 180,
        "tilt": 15,
        "temp_factor": 0.033,
        "mover": 0
    }
]'

Inspect your portfolio

After setting up your portfolio or to check out existing locations, you can use the pv_systems/list endpoint.

import requests

url = "https://solar.alitiq.com/pv_systems/list"

querystring = {"response_format":"html"}

payload = ""
headers = {"x-api-key": {api-key}}
response = requests.request("GET", url, data=payload, params=querystring, headers=headers)

print(response.text)
from alitiq import alitiqSolarAPI

# Initialize the API client
solar_api = alitiqSolarAPI(api_key="your-api-key")

# return the location as a pd.DataFrame
response = solar_api.list_locations()
print("Locations:", response)
curl --request GET \
  --url 'https://solar.alitiq.com/pv_systems/list?response_format=json' \
  --header 'x-api-key: api-key'

Example response json:

{
  "columns": [
    "location_id",
    "altitude",
    "latitude",
    "longitude",
    "site_name",
    "zip_code",
    "country",
    "do_backtracking",
    "row_distance",
    "tso_area",
    "subsystem_id",
    "installed_power",
    "installed_power_inverter",
    "temp_factor",
    "azimuth",
    "tilt",
    "mover",
    "height",
    "table_length",
    "max_rotation_angle"
  ],
  "index": [
    0,
    1,
    2,
    3
  ],
  "data": [
    [
      "1",
      126.95,
      50.06,
      8.83,
      "Obertshausen",
      "63179",
      "DE",
      false,
      null,
      "Amprion",
      5599,
      709.3,
      636.0,
      0.0,
      195.0,
      10.0,
      1,
      null,
      null,
      null
    ],
    [
      "1",
      126.95,
      50.06,
      8.83,
      "Obertshausen",
      "63179",
      "DE",
      false,
      null,
      "Amprion",
      5759,
      999.38,
      480.0,
      0.0,
      180.0,
      15.0,
      1,
      null,
      null,
      null
    ],
    [
      "4507",
      557.75,
      48.9,
      10.3,
      "test_2",
      null,
      null,
      null,
      null,
      null,
      5796,
      320.0,
      300.0,
      0.0,
      50.0,
      15.0,
      1,
      null,
      null,
      null
    ]
  ]
}

In the response of your portfolio you might find additional information that you have not defined e.g. the TSO-Area or a ZIP Code. These information are defined by alitiq.

In case you use the html- Response of the API the systems will be shown in a table like this:

html-overview API


Delete system from your portfolio

In case you want to delete a pv-system from your portfolio, you can simply use a POST request to the endpoint pv_systems/delete it. Please use your individually defined location_id to delete the system:

import requests

url = "https://solar.alitiq.com/pv_systems/delete"

querystring = {"location_id": "your-location-id-to-delete"}

payload = ""
headers = {"x-api-key": {api-key}}
response = requests.request("POST", url, data=payload, params=querystring, headers=headers)

print(response.text)
from alitiq import alitiqSolarAPI

# Initialize the API client
solar_api = alitiqSolarAPI(api_key="your-api-key")

# delete location 
response = solar_api.delete_location("your-location-id-to_delete")
print(response.text)
curl --request POST \
  --url 'https://solar.alitiq.com/pv_systems/delete?location_id=your-location-id-to_delete' \
  --header 'x-api-key: api-key'

FAQs ❓

Which temp_factor should I use?

The temperature factor (temp_factor) accounts for the temperature-related efficiency loss of PV systems. Use the appropriate value based on the type of mounting for accurate forecasting.

System Type Description Temp Factor (temp_factor)
Free-Mounted Systems Modules mounted on open frames with good ventilation 0.0033
Roof-Mounted Systems Modules mounted on roofs with moderate ventilation 0.004
Roof-Integrated Systems Modules integrated into the roof with limited ventilation 0.005

What if my power plant has only one subsystem?

You can omit the subsystems field and define the azimuth, tilt, and installed_power at the plant level.

Can I update the location later?

Yes, you can use the update_location method to modify the configuration of an existing location.


Support & Feedback 💬

🌟 Start forecasting smarter with alitiq today! 🌟