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,
"bild_url": "https://energie.schnee.co.at/api/v1/projekte/42/bilder/flaeche/3",
"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
},
"medien": {
"uebersicht_url": "https://energie.schnee.co.at/api/v1/projekte/42/medien",
"bild_uebersicht_url": "https://energie.schnee.co.at/api/v1/projekte/42/bilder/uebersicht"
}
}
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. |
bild_url | Das Belegungsbild dieser Fläche, siehe unten. |
Bilder und 3D-Modell
Zu jedem gerechneten Projekt zeichnet der Server das Luftbild der Dachflächen mit den
eingezeichneten Modulraster, samt Nordpfeil und Maßstab. Gezeichnet ist, was
geometrisch daraufpasst (module_moeglich), nicht die kleinere
Auslegung nach Jahresverbrauch. Was zu einem Projekt
vorliegt, sagt GET /api/v1/projekte/<id>/medien; in der Antwort der
Dachanalyse steht derselbe Weg unter medien.uebersicht_url.
| Adresse | Was kommt |
|---|---|
/projekte/<id>/bilder/flaeche/<nummer> | Eine Dachfläche mit ihrer Modulbelegung. Die Nummer ist dieselbe wie das Feld id der Fläche. |
/projekte/<id>/bilder/uebersicht | Alle belegten Flächen in einem Bild. |
/projekte/<id>/orthofoto | Das gespeicherte Luftbild des Anwesens. |
/projekte/<id>/modell | Das 3D-Modell als GLB-Datei. |
Bilder kommen als SVG, mit ?format=png als PNG. Die Bildbreite steuert
?breite= zwischen 200 und 2000 Pixeln. Für Medien gilt eine eigene
Ratengrenze von 120 Abrufen je Stunde und Konto.
Orthofoto und 3D-Modell entstehen beim Speichern in der Anwendung. Zu einem Projekt, das nur über die Schnittstelle gerechnet wurde, gibt es keines, und die Abfrage antwortet mit 404 samt Begründung. Die Belegungsbilder gibt es immer.
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. |
| 403 | testkontingent_erschoepft | Der Testzugang für die Schnittstelle erlaubt eine Adresse, sie ist verbraucht. Kein weiteres Projekt anlegen, sondern mit dem bestehenden weiterrechnen. Für mehr Adressen braucht es ein reguläres Konto. |
| 404 | modell_fehlt, orthofoto_fehlt | Diese Datei entsteht erst beim Speichern in der Anwendung. Die Belegungsbilder gibt es trotzdem. |
| 404 | projekt_unbekannt | Zu dieser Kennung gibt es kein Projekt dieses Schlüssels. GET /api/v1/projekte listet die eigenen. |
| 404 | keine_belegten_flaechen | Zu diesem Projekt ist keine Fläche mit Modulen gespeichert, es gibt also kein Bild. |
| 404 | flaeche_unbekannt | Diese Flächennummer gibt es nicht. Die vorhandenen stehen in fehler.vorhanden. |
| 404 | bild_nicht_zeichenbar | Zu dieser Fläche ließ sich kein Bild zeichnen. /medien sagt, welche Bilder es gibt. |
| 500 | format_nicht_moeglich | Das PNG ließ sich nicht erzeugen. Dieselbe Adresse ohne format=png liefert das SVG. Warten hilft nicht. |
| 500 | analyse_unlesbar | Die gespeicherte Analyse ist beschädigt. Keinen neuen Lauf anstoßen, er würde sie überschreiben. |
| 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 allein für die Schnittstelle gibt es unter
https://energie.schnee.co.at/api-testzugang. Von den
Modulen der Anwendung schaltet es allein die Schnittstelle frei, erlaubt eine Adresse,
also ein Projekt, und läuft nach dreißig Tagen ab. Gezählt wird jedes Projekt des Kontos,
auch ein in der Anwendung selbst angelegtes. Ist die Adresse verbraucht, antwortet das
Anlegen mit 403 und testkontingent_erschoepft. Wer die ganze Anwendung testen will, nimmt den
Testzugang auf der Startseite, dort schaltet der Betreiber
von Hand frei.