Hinweis: Wer mich unterstützen möchte, darf gerne eine kleine Schenkung machen: Spenden Vielen Dank.

API - Application Program Interface Description

Diese Solarprognosen API basiert auf HTTP-Anfragen. Die Antworten erfolgen in JSON (JavaScript Object Notation) oder XML.
Wichtig: Um den Datenverkehr und die Serverlast zu reduzieren benützen Sie bitte einen lokalen Zwischenspeicher. Ich empfehle, das Ergebnis mindestens eine Stunde lang zwischenzuspeichern (das Wetter ändert sich ja nicht so schnell).
Da in manchen Sekunden extrem viele API-Abfragen ankommen bitte ich Sie, preferredNextApiRequestAt zu nutzen!
Minor deviations from the target query time are no problem.
Here you can find a php function you can use to request the solarprognose API (you can simply translate this to other programming languages):

Solarprognose API

Die HTTP-Anfragen für tägliche oder stündliche Prognose der Erzeugung müssen im folgenden Format erfolgen:
http://www.solarprognose.de/web/solarprediction/api/v1
?access-token=ACCESS-TOKEN (Enter here your API Key, click here to find it.)
&project=Bitte fügen Sie hier Ihre Projekt-Website oder Ihre Kontakt-E-Mail ein, damit ich mich bei Bedarf mit Ihnen in Verbindung setzen kann.
&item=ITEM&id=ID
Alternativ: &item=ITEM&token=TOKEN
Alternativ: Wenn Sie nur einen Standort haben, brauchen Sie item/id/token nicht zu senden, die API gibt dann automatisch Daten für den ersten Standort zurück
&type=hourly|daily &_format=json|xml &algorithm=mosmix|own-v1|clearsky
Optional parameter:
&day=DAY
&start_epoch_time=START_EPOCH_TIME&end_epoch_time=END_EPOCH_TIME
&start_day=START_DAY&end_day=END_DAY
&snomminixml=true # für snom VoIP Telefone

ACCESS-TOKEN

Ihr API Zugriffsschlüssel
Enter here your API Key, click here to find it.

ITEM und ID

Tipp: Wenn Sie item und id/token nicht senden, gibt die API die Daten für den ersten Standort zurück. Wenn Sie nur einen Standort haben, macht dies die Sache einfacher.
ITEM
location oder plant oder inverter oder module_field
ID
Die ID ist die eindeutige Nummer von diesem Element.

ITEM und TOKEN

ITEM und TOKEN wird benötigt um auf Elemente zuzugreifen welche nicht öffentlich sind: &item=inverter&token=
Wenn Sie per access-token zugreifen können Sie auf ihre privaten (nicht öffentliche) Elemente zugreifen.

Datums und Intervalle

DAY

Erlaubte Werte: von -2 bis 6
Dann erhalten Sie die Daten vom Tag relativ zu heute. Achtung: Dies kann durch ihren Tarif eingeschränkt sein! Der Fehler "STATUS_ERROR_INVALID_END_DAY" kann auftreten wenn der Wert größer ist als in ihrem Tarif enthalten.

START_DAY

Erlaubte Werte: von -2 bis 6
Zur Abfrage von Daten einer bestimmten Periode. Dies definiert den Start-Tag relativ zu heute. Achtung: Dies kann durch ihren Tarif eingeschränkt sein! Der Fehler "STATUS_ERROR_INVALID_END_DAY" kann auftreten wenn der Wert größer ist als in ihrem Tarif enthalten.

END_DAY

Erlaubte Werte: von -2 bis 6
Zur Abfrage von Daten einer bestimmten Periode. Dies definiert den End-Tag relativ zu heute. Achtung: Dies kann durch ihren Tarif eingeschränkt sein! Der Fehler "STATUS_ERROR_INVALID_END_DAY" kann auftreten wenn der Wert größer ist als in ihrem Tarif enthalten.

START_EPOCH_TIME

zum Beispiel: 1439650241 Zur Abfrage von Daten einer bestimmten Periode. Dies definiert den Start mit der Unixtimestamp. Achtung: Dies kann durch ihren Tarif eingeschränkt sein! Der Fehler "STATUS_ERROR_INVALID_END_DAY" kann auftreten wenn der Wert größer ist als in ihrem Tarif enthalten.

END_EPOCH_TIME

zum Beispiel: 1439650241 Zur Abfrage von Daten einer bestimmten Periode. Dies definiert das Ende mit der Unixtimestamp. Achtung: Dies kann durch ihren Tarif eingeschränkt sein! Der Fehler "STATUS_ERROR_INVALID_END_DAY" kann auftreten wenn der Wert größer ist als in ihrem Tarif enthalten.

Status Codes

Bei Verwendung eines ungültigen API-Schlüssels erscheint der HTTP Status Code 401 Unauthorized.
STATUS_OK = 0;
STATUS_ERROR_INVALID_ACCESS_TOKEN = -2;
STATUS_ERROR_MISSING_PARAMETER_ACCESS_TOKEN = -3;
STATUS_ERROR_EMPTY_PARAMETER_ACCESS_TOKEN = -4;
STATUS_ERROR_INVALID_TYPE = -5;
STATUS_ERROR_MISSING_TYPE = -6;
STATUS_ERROR_INVALID_ID = -7;
STATUS_ERROR_ACCESS_DENIED = -8;
STATUS_ERROR_INVALID_ITEM = -9;
STATUS_ERROR_INVALID_TOKEN = -10;
STATUS_ERROR_NO_SOLAR_DATA_AVAILABLE = -11;
STATUS_ERROR_NO_DATA = -12;
STATUS_ERROR_INTERNAL_ERROR = -13;
STATUS_ERROR_UNKNOWN_ERROR = -14;
STATUS_ERROR_INVALID_START_DAY = -15;
STATUS_ERROR_INVALID_END_DAY = -16;
STATUS_ERROR_INVALID_DAY = -17;
STATUS_ERROR_INVALID_WEATHER_SERVICE_ID = -18;
STATUS_ERROR_DAILY_QUOTA_EXCEEDED = -19;
STATUS_ERROR_INVALID_OR_MISSING_ELEMENT_ITEM = -20;
STATUS_ERROR_NO_PARAMETER = -21;
STATUS_ERROR_INVALID_PERIOD = -22;
STATUS_ERROR_INVALID_START_EPOCH_TIME = -23;
STATUS_ERROR_INVALID_END_EPOCH_TIME = -24;
STATUS_ERROR_ACCESS_DENIED_TO_ITEM_DUE_TO_LIMIT = -25;
STATUS_ERROR_NO_CLEARSKY_VALUES = -26;
STATUS_ERROR_MISSING_INPUT_ID_AND_TOKEN = -27;
STATUS_ERROR_INVALID_ALGORITHM = -28;
STATUS_ERROR_FAILED_TO_LOAD_WEATHER_LOCATION_ITEM = -29;

preferredNextApiRequestAt

Bitte verwenden Sie das mit der API-Anfrage zurückgegebene "preferredNextApiRequestAt". Sie gibt die Sekunde der Stunde zurück, in der Sie die API abfragen sollten. Jedem Benutzer wird eine Zeit zugewiesen, so dass sich die Anfragen gleichmäßig auf die Stunde verteilen. Sie enthält auch "epochTimeUtc", die Sie direkt für die Zeit der Ausführung Ihrer API-Anfrage verwenden können.
...
"preferredNextApiRequestAt":{
    "secondOfHour":120, # (Führen Sie die API-Anfrage in der 120. Sekunde der Stunde aus.)
    "epochTimeUtc":1626796920 # (Führen Sie die nächste Api-Anfrage zu dieser Epochenzeit aus.)
}

Beispiele

Anfrage:
http://www.solarprognose.de/web/solarprediction/api/v1?access-token=454jelfd&item=inverter&id=2&type=hourly

Ergebnis:
{
    "status":0,
    "iLastPredictionGenerationEpochTime":1576681137,
    "datalinename":"Süd",
    "data":{
        "1576735200":[0,0], // timestamp: kilowatt/kw, accumulated kwh
        "1576738800":[0.064,0.064],
        "1576742400":[0.606,0.67],
        "1576746000":[1.148,1.818],
        "1576749600":[1.647,3.465],
        "1576753200":[0.295,3.76],
        "1576756800":[0.273,4.033],
        "1576760400":[1.3,5.333],
        "1576764000":[0.305,5.638],
        "1576767600":[0.014,5.652],
        "1576771200":[0,5.652],
        ... the other days follow
    }
}

Anfrage:
http://www.solarprognose.de/web/solarprediction/api/v1?access-token=454jelfd&item=inverter&id=2&type=daily

Ergebnis:
{
    "iLastPredictionGenerationEpochTime":1576686390,
    "status": 0,
    "datalinename": "SMASB2000TL"
    "data": {
        "20151212": 1.978, // yyymmdd: kwh per day
        "20151213": 1.999,
        "20151214": 4.049,
        "20151215": 5.567,
        "20151216": 1.948,
        "20151217": 1.925
    },
}

Anfrage:
http://www.solarprognose.de/web/solarprediction/api/v1?_format=json&access-token=454jelfd&item=inverter&id=2&type=hourly&day=1

Ergebnis:
{
    "status":0,
    "iLastPredictionGenerationEpochTime":1576681137,
    "datalinename":"Süd",
    "data":{
        "1576735200":[0,0],
        "1576738800":[0.064,0.064],
        "1576742400":[0.606,0.67],
        "1576746000":[1.148,1.818],
        "1576749600":[1.647,3.465],
        "1576753200":[0.295,3.76],
        "1576756800":[0.273,4.033],
        "1576760400":[1.3,5.333],
        "1576764000":[0.305,5.638],
        "1576767600":[0.014,5.652],
        "1576771200":[0,5.652]
    }
}
http://www.solarprognose.de/web/solarprediction/api/v1?access-token=454jelfd&item=inverter&token=DEF&type=hourly
http://www.solarprognose.de/web/solarprediction/api/v1?access-token=454jelfd&item=inverter&token=DEF&type=daily
http://www.solarprognose.de/web/solarprediction/api/v1?access-token=454jelfd&item=inverter&token=DEF&type=hourly&day=-1