Dachflächen und Potenzial über eine Schnittstelle
Eine Adresse hineingeben, alle Dachflächen des Anwesens herausbekommen: Modulmenge, Leistung, Ausrichtung, Neigung und die Verschattung im 5-Punkt-Verfahren. Gedacht für Agenten und Chatbots, die für einen Benutzer eine erste Einschätzung brauchen.
Steckbrief
| Basisadresse | https://energie.schnee.co.at/api/v1 |
|---|---|
| Format | JSON, UTF-8. Feldnamen ohne Umlaute, Werte und Texte mit. |
| Anmeldung | Kopfzeile X-API-Key. Doku und Lastprofile brauchen keinen Schlüssel. |
| Abdeckung | Österreich, Deutschland, Schweiz. Die Dachanalyse braucht ein amtliches Höhenmodell, das nicht überall vorliegt. |
| Dauer | Ein Lauf dauert etwa zehn bis neunzig Sekunden. Deshalb zwei Schritte: anlegen, dann abfragen. |
| Grenzen | Je Konto: 20 Analysen je Stunde, 900 Statusabfragen je Stunde, 40 Aufrufe je Stunde auf dem Ein-Aufruf-Weg /analyse, dort samt Nachfragen. |
| Maschinenlesbar | openapi.json und AGENT.md |
Der kurze Weg für Chatbots
Viele Chatbots können ausschließlich eine Adresse aufrufen, also weder POST
senden noch eine eigene Kopfzeile setzen. Für sie erledigt ein einziger Aufruf alles:
https://energie.schnee.co.at/api/v1/analyse
?schluessel=es_...
&name=Testprojekt
&adresse=Musterweg 1, 4840 Musterort
&jahresverbrauch_kwh=6000
&lastprofil=H0
Der erste Aufruf legt das Projekt an und startet die Analyse, Antwort 202 mit
zustand: läuft. Derselbe Aufruf nach der Zahl von Sekunden aus dem Feld
erneut_in_s liefert das Ergebnis mit zustand: fertig. Auf
diesem Weg zählt jede Abfrage gegen die Grenze von 40 Aufrufen je Stunde. Es wird kein zweites Projekt angelegt, egal wie
oft aufgerufen wird. Der Schlüssel steht dabei in der Adresse und damit im Zugriffsprotokoll
jedes Rechners dazwischen. Wer Kopfzeilen setzen kann, nimmt den Weg darunter.
Der reguläre Ablauf in zwei Schritten
Zuerst wird ein Projekt angelegt. Das startet die Analyse und antwortet sofort. Danach wird
der Stand abgefragt, bis er auf fertig steht. Wie lange zwischen zwei Abfragen
zu warten ist, steht in der Antwort selbst, im Feld erneut_in_s und in der
Kopfzeile Retry-After.
1. Projekt anlegen
curl -X POST https://energie.schnee.co.at/api/v1/projekte \
-H "X-API-Key: es_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Beispielhof",
"adresse": "Musterweg 1, 4840 Vöcklabruck",
"jahresverbrauch_kwh": 4500,
"lastprofil": "H0"
}'
Antwort 202:
{
"projekt_id": 42,
"name": "Beispielhof",
"zustand": "läuft",
"analyse_url": "https://energie.schnee.co.at/api/v1/projekte/42/dachanalyse",
"hinweis": "Die Dachanalyse läuft. Frage \"analyse_url\" ab, bis \"zustand\" auf \"fertig\" steht."
}
2. Ergebnis abholen
curl https://energie.schnee.co.at/api/v1/projekte/42/dachanalyse -H "X-API-Key: es_..."
Solange gerechnet wird, kommt 202 mit Fortschritt. Am Ende 200 mit allen Flächen:
Scheitert der Lauf, weil der Geodienst nicht antwortet, wird er mit
POST auf dieselbe Adresse erneut angestoßen. Ein zweites Projekt an derselben
Adresse ist ja nicht möglich, das bestehende bleibt.
{
"projekt_id": 42,
"jahresverbrauch_kwh": 4500,
"lastprofil": "H0",
"flaechen": [
{
"id": 1,
"name": "Dachfläche 1",
"gebaeude": 0,
"grundflaeche_m2": 73.3,
"dachflaeche_m2": 89.5,
"neigung_grad": 35.0,
"azimut_grad": -38.5,
"firsthoehe_m": 7.63,
"module_moeglich": 18,
"leistung_moeglich_kwp": 7.2,
"module_empfohlen": 12,
"leistung_empfohlen_kwp": 4.8,
"ertrag_kwh_pro_kwp": 1142,
"ertrag_enthaelt_verschattung": true,
"empfohlen": true,
"verschattung": {
"verfahren": "5-Punkt",
"verlust_mittel_pct": 3.4,
"messpunkte": [
{"punkt": "center", "lat": 48.05986, "lon": 13.60314, "verlust_pct": 2.9}
]
},
"umriss": {"type": "Polygon", "coordinates": [[[13.6031, 48.0598]]]}
}
],
"zusammenfassung": {
"flaechen_anzahl": 20,
"grundflaeche_m2": 1491,
"dachflaeche_m2": 1830.4,
"module_moeglich": 333,
"leistung_moeglich_kwp": 133.2,
"empfehlung_kwp": 10.3,
"auslegung_kwp": 10.4,
"spez_ertrag_kwh_kwp": 1084
},
"wirtschaftlichkeit": {
"verfuegbar": false,
"url": "https://energie.schnee.co.at/module/photovoltaik?project_id=42",
"anmeldung_noetig": true
}
}
Die Felder einer Dachfläche
| Feld | Bedeutung |
|---|---|
grundflaeche_m2 | Die Fläche in der Draufsicht, wie sie aus dem Luftbild gemessen wird. |
dachflaeche_m2 | Die geneigte Fläche. Sie ist um den Kosinus der Neigung größer und das Maß, auf das Module passen. |
neigung_grad | Dachneigung aus dem 1-Meter-Höhenmodell. |
azimut_grad | Ausrichtung. 0 ist Süden, negative Werte drehen nach Osten, positive nach Westen. |
firsthoehe_m | Höhe des höchsten Punktes der Fläche über dem Gelände. |
module_moeglich | Module, die geometrisch daraufpassen. Gerechnet wird in der gemessenen Dachebene, mit Randabstand und ohne Aufbauten. Beide Ausrichtungen werden probiert, je Gebäude gewinnt die vollere. |
module_empfohlen | Module aus der Auslegung nach dem gesendeten Jahresverbrauch. Belegt werden die ertragreichsten Flächen zuerst. |
ertrag_kwh_pro_kwp | Jahresertrag je installiertem Kilowatt-Peak. Enthält bereits den Rundumhorizont dieser Stelle, den Schneeverlust nach Marion und den Systemverlust der Anlage. |
ertrag_enthaelt_verschattung | Immer true. Der Verlust darunter ist eine Auskunft, kein Faktor. Wer ihn noch einmal abzieht, rechnet die Verschattung doppelt. |
verschattung | Verlust in Prozent an fünf Messpunkten: die vier Ecken und die Mitte der Fläche. Dasselbe Verfahren, das die Anwendung intern detail nennt. Kann null sein, wenn keine Messpunkte vorliegen. |
umriss | Der Flächenumriss als GeoJSON-Polygon nach RFC 7946, WGS84, Reihenfolge Länge vor Breite. |
Standardlastprofile
Das Lastprofil wird geprüft und zum Projekt gespeichert. Gerechnet wird damit heute in der Anwendung, nicht in der Schnittstelle. Für die Flächenauswahl zählt vorerst allein der Jahresverbrauch. Abrufbar auch unter /api/v1/lastprofile.
| Kennung | Bezeichnung | Gruppe |
|---|---|---|
L0 |
Landwirtschaft allgemein | Landwirtschaft |
L1 |
Landwirtschaft mit Milchwirtschaft | Landwirtschaft |
L2 |
Sonstige Landwirtschaft | Landwirtschaft |
H0 Vorgabe |
Haushalt | Haushalt |
G0 |
Gewerbe allgemein | Gewerbe |
G1 |
Werktags 8-18 Uhr | Gewerbe |
G2 |
Abends mit Ladenbeleuchtung | Gewerbe |
G3 |
Durchlaufend | Gewerbe |
G4 |
Laden/Friseur | Gewerbe |
G5 |
Bäckerei mit Backstube | Gewerbe |
G6 |
Wochenendbetrieb | Gewerbe |
Fehler und was zu tun ist
Jede Fehlerantwort trägt einen unveränderlichen code zum Verzweigen, eine
meldung für den Menschen davor und unter tu den nächsten Schritt.
| Status | Code | Was zu tun ist |
|---|---|---|
| 401 | schluessel_fehlt | Schlüssel in der Kopfzeile X-API-Key senden. |
| 401 | schluessel_ungueltig | Schlüssel prüfen oder in der Anwendung einen neuen anlegen. |
| 400 | lastprofil_unbekannt | Eine Kennung aus der Tabelle oben senden. Die erlaubten stehen im Feld erlaubt. |
| 404 | adresse_nicht_gefunden | Schreibweise prüfen, Straße, Hausnummer, Postleitzahl und Ort mitsenden. |
| 404 | adresse_nicht_eindeutig | Es wurde etwas gefunden, aber an einem anderen Ort oder mit anderer Postleitzahl. Die Fundstellen stehen in fehler.gefunden. Nachfragen, welche gemeint ist, und keine auf gut Glück nehmen. |
| 409 | projekt_besteht_bereits | An dieser Adresse besteht bereits ein eigenes Projekt. Kein neues anlegen, sondern das bestehende verwenden. Seine Adressen stehen in der Antwort. |
| 202 | kein Fehler | Die Analyse läuft noch. Der Abstand bis zur nächsten Abfrage steht im Feld erneut_in_s und in der Kopfzeile Retry-After. Steht wartet auf true, hat die Rechnung noch nicht begonnen. |
| 404 | analyse_fehlt | Das Ergebnis ist nach einem Tag verfallen. Kein neues Projekt anlegen, sondern die Analyse mit POST auf dieselbe Adresse erneut anstoßen. |
| 415 | inhaltstyp_falsch | Kopfzeile Content-Type: application/json setzen. |
| 429 | ratengrenze | Zu viele Anfragen. Die Wartezeit steht in fehler.tu und in der Kopfzeile Retry-After. |
| 503 | dienst_ueberlastet, dienst_nicht_erreichbar | Der Geodienst antwortet gerade nicht. Etwa eine Minute warten und die Analyse mit POST auf dieselbe Adresse erneut anstoßen. |
| 422 | kein_dach | An dieser Stelle gibt es kein auswertbares Dach. Adresse prüfen. |
| 503 | analyse_abgebrochen | Der Lauf wurde unterbrochen, etwa durch einen Neustart des Dienstes. Einmal neu anstoßen. |
| 500 | analyse_fehlgeschlagen, interner_fehler | Erneut anstoßen. Bleibt es dabei, die Projektkennung melden. |
Grenzen und Pflichten
- Ein Projekt je Adresse und Mandant. Legt ein anderer Mandant an derselben Adresse an, ist das zulässig.
- Die Wirtschaftlichkeitsrechnung läuft vorerst in der Anwendung. Die Antwort trägt den Link dorthin unter
wirtschaftlichkeit.url, er verlangt eine Anmeldung des Mandanten. Ein späterer Endpunkt für die vollständige Rechnung ist vorgesehen, das Feldwirtschaftlichkeit.verfuegbarzeigt an, ob es ihn schon gibt. - Ergebnisse werden einen Tag lang vorgehalten. Danach ist das Projekt weiter da, die Analyse muss mit
POSTauf dieanalyse_urlneu angestoßen werden. Ein zweites Projekt anzulegen scheitert an der Dublettenregel. - Es rechnen höchstens zwei Analysen gleichzeitig, für alle Nutzer zusammen. Wer wartet, erkennt das an
wartet: true. - Die Adresse wird zur Geokodierung an Nominatim des OpenStreetMap-Vereins gesendet und im angelegten Projekt gespeichert.
- Die Schnittstelle ist für Server und Agenten gedacht, nicht für Klienten im Browser. Es werden bewusst keine CORS-Kopfzeilen gesendet, ein Schlüssel gehört nicht in eine Webseite.
- Die Daten stammen aus amtlichen Quellen. Bei Weitergabe ist die Namensnennung mitzuführen, sie steht in jeder Antwort im Feld
quellen. - Ergebnisse sind eine Vorplanung aus Fernerkundungsdaten, keine Ausführungsplanung. Vor dem Bau gehört jedes Dach besichtigt.
Schlüssel bekommen
Nach der Anmeldung im Modul Schnittstelle unter
https://energie.schnee.co.at/module/api lässt sich ein
Schlüssel anlegen. Er wird genau einmal angezeigt und danach nur noch als Abdruck
gespeichert. Ein verlorener Schlüssel lässt sich nicht wiederherstellen, wohl aber
widerrufen und neu anlegen. Gezählt wird je Konto, mehrere Schlüssel erhöhen die Grenzen
also nicht.
Ein Konto gibt es über den kostenlosen Testzugang auf der Startseite, der Betreiber schaltet frei.