Energie Schnee

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

Basisadressehttps://energie.schnee.co.at/api/v1
FormatJSON, UTF-8. Feldnamen ohne Umlaute, Werte und Texte mit.
AnmeldungKopfzeile 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.
DauerEin Lauf dauert etwa zehn bis neunzig Sekunden. Deshalb zwei Schritte: anlegen, dann abfragen.
GrenzenJe Konto: 20 Analysen je Stunde, 900 Statusabfragen je Stunde, 40 Aufrufe je Stunde auf dem Ein-Aufruf-Weg /analyse, dort samt Nachfragen.
Maschinenlesbaropenapi.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 Zugriffs­protokoll 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

FeldBedeutung
grundflaeche_m2Die Fläche in der Draufsicht, wie sie aus dem Luftbild gemessen wird.
dachflaeche_m2Die geneigte Fläche. Sie ist um den Kosinus der Neigung größer und das Maß, auf das Module passen.
neigung_gradDachneigung aus dem 1-Meter-Höhenmodell.
azimut_gradAusrichtung. 0 ist Süden, negative Werte drehen nach Osten, positive nach Westen.
firsthoehe_mHöhe des höchsten Punktes der Fläche über dem Gelände.
module_moeglichModule, 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_empfohlenModule aus der Auslegung nach dem gesendeten Jahresverbrauch. Belegt werden die ertragreichsten Flächen zuerst.
ertrag_kwh_pro_kwpJahresertrag je installiertem Kilowatt-Peak. Enthält bereits den Rundumhorizont dieser Stelle, den Schneeverlust nach Marion und den Systemverlust der Anlage.
ertrag_enthaelt_verschattungImmer true. Der Verlust darunter ist eine Auskunft, kein Faktor. Wer ihn noch einmal abzieht, rechnet die Verschattung doppelt.
verschattungVerlust 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.
umrissDer Flächenumriss als GeoJSON-Polygon nach RFC 7946, WGS84, Reihenfolge Länge vor Breite.
bild_urlDas 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.

AdresseWas 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/uebersichtAlle belegten Flächen in einem Bild.
/projekte/<id>/orthofotoDas gespeicherte Luftbild des Anwesens.
/projekte/<id>/modellDas 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.

KennungBezeichnungGruppe
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.

StatusCodeWas zu tun ist
401schluessel_fehltSchlüssel in der Kopfzeile X-API-Key senden.
401schluessel_ungueltigSchlüssel prüfen oder in der Anwendung einen neuen anlegen.
400lastprofil_unbekanntEine Kennung aus der Tabelle oben senden. Die erlaubten stehen im Feld erlaubt.
404adresse_nicht_gefundenSchreibweise prüfen, Straße, Hausnummer, Postleitzahl und Ort mitsenden.
404adresse_nicht_eindeutigEs 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.
403testkontingent_erschoepftDer 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.
404modell_fehlt, orthofoto_fehltDiese Datei entsteht erst beim Speichern in der Anwendung. Die Belegungsbilder gibt es trotzdem.
404projekt_unbekanntZu dieser Kennung gibt es kein Projekt dieses Schlüssels. GET /api/v1/projekte listet die eigenen.
404keine_belegten_flaechenZu diesem Projekt ist keine Fläche mit Modulen gespeichert, es gibt also kein Bild.
404flaeche_unbekanntDiese Flächennummer gibt es nicht. Die vorhandenen stehen in fehler.vorhanden.
404bild_nicht_zeichenbarZu dieser Fläche ließ sich kein Bild zeichnen. /medien sagt, welche Bilder es gibt.
500format_nicht_moeglichDas PNG ließ sich nicht erzeugen. Dieselbe Adresse ohne format=png liefert das SVG. Warten hilft nicht.
500analyse_unlesbarDie gespeicherte Analyse ist beschädigt. Keinen neuen Lauf anstoßen, er würde sie überschreiben.
409projekt_besteht_bereitsAn dieser Adresse besteht bereits ein eigenes Projekt. Kein neues anlegen, sondern das bestehende verwenden. Seine Adressen stehen in der Antwort.
202kein FehlerDie 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.
404analyse_fehltDas Ergebnis ist nach einem Tag verfallen. Kein neues Projekt anlegen, sondern die Analyse mit POST auf dieselbe Adresse erneut anstoßen.
415inhaltstyp_falschKopfzeile Content-Type: application/json setzen.
429ratengrenzeZu viele Anfragen. Die Wartezeit steht in fehler.tu und in der Kopfzeile Retry-After.
503dienst_ueberlastet, dienst_nicht_erreichbarDer Geodienst antwortet gerade nicht. Etwa eine Minute warten und die Analyse mit POST auf dieselbe Adresse erneut anstoßen.
422kein_dachAn dieser Stelle gibt es kein auswertbares Dach. Adresse prüfen.
503analyse_abgebrochenDer Lauf wurde unterbrochen, etwa durch einen Neustart des Dienstes. Einmal neu anstoßen.
500analyse_fehlgeschlagen, interner_fehlerErneut anstoßen. Bleibt es dabei, die Projektkennung melden.

Grenzen und Pflichten

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.