Zustimmungsfluss im Detail

Nach dem Anlegen eines Zählers fließen keine Daten, bis Sie Zustimmung anfordern und der Netzbetreiber (VNB) sie erteilt. Dieser Artikel dokumentiert die status-Werte eines Zählers, das empfohlene Polling-Muster und externe Ereignisse, die eine bestehende Zustimmung beenden können.

status-Werte eines Zählers

Das status-Feld zeigt den aktuellen Stand der Zustimmung:

status Bedeutung
not_connected Es wurde keine Zustimmung angefordert oder der Zähler wurde getrennt.
pending Die Anfrage wurde an den VNB gesendet. Wir warten auf die erste Antwort.
processing Der VNB hat die Anfrage bestätigt, der Kunde muss aber noch im Portal des VNB bestätigen.
connected Zustimmung ist aktiv. Daten fließen.
failed Der VNB hat abgelehnt oder der Kunde hat nicht rechtzeitig bestätigt. Korrigieren Sie den Zähler und versuchen Sie es erneut.
disconnecting Eine Aufhebung wurde gesendet. Der VNB hat sie noch nicht bestätigt.

Nur Zähler mit connected liefern Daten. processing ist normal: je nach Netzbetreiber hat der Kunde mehrere Tage Zeit, im Portal des VNB zu bestätigen.

Zustimmung anfordern

curl
curl -X POST https://energiedaten.at/api/v1/smart-meters/«meter.id»/consent \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Energiedaten-Version: 2026-05-08" \
  -H "Idempotency-Key: $(uuidgen)"

Der Aufruf ist asynchron. Die Antwort bestätigt, dass die Zustimmungsnachricht versendet wurde. Sie bestätigt nicht, dass Zustimmung erteilt wurde. Pollen Sie den status des Zählers, um den Fortschritt zu verfolgen.

Polling-Muster

Die meisten Zustimmungen sind innerhalb weniger Stunden abgeschlossen. Manche VNBs antworten innerhalb von Minuten; Fälle, in denen der Kunde im Portal des VNB bestätigen muss, können deutlich länger dauern. Verwenden Sie ein Backoff:

Python
import time, requests

def wait_for_consent(meter_id: str, token: str, timeout_hours: int = 2):
    url = f"https://energiedaten.at/api/v1/smart-meters/{meter_id}"
    headers = {"Authorization": f"Bearer {token}"}
    terminal = {"connected", "failed"}

    elapsed = 0
    interval = 10  # erste Minute: alle 10 Sekunden

    while elapsed < timeout_hours * 3600:
        meter = requests.get(url, headers=headers).json()["data"]

        if meter["status"] in terminal:
            return meter["status"]

        time.sleep(interval)
        elapsed += interval

        if elapsed >= 60:
            interval = 60

    return "timeout"
Node.js
async function waitForConsent(meterId, token, timeoutHours = 2) {
    const url = `https://energiedaten.at/api/v1/smart-meters/${meterId}`;
    const terminal = new Set(['connected', 'failed']);
    let elapsed = 0;
    let interval = 10_000;

    while (elapsed < timeoutHours * 3_600_000) {
        const res = await fetch(url, { headers: { 'Authorization': `Bearer ${token}` } });
        const { data: meter } = await res.json();

        if (terminal.has(meter.status)) return meter.status;

        await new Promise(r => setTimeout(r, interval));
        elapsed += interval;

        if (elapsed >= 60_000) interval = 60_000;
    }
    return 'timeout';
}

Empfohlenes Backoff: alle 10 Sekunden in der ersten Minute, dann alle 60 Sekunden für eine Stunde, danach einmal pro Stunde. Schneller pollen verbraucht nur Ihr Rate-Limit und führt nicht dazu, dass der VNB schneller antwortet.

Externe Aufhebungen

Ein Zähler in connected kann ohne Zutun Ihrerseits zurück nach not_connected wechseln:

  • Der Kunde widerruft die Zustimmung direkt beim VNB.
  • Der VNB hebt die Zustimmung auf, etwa nach einem Zählerwechsel oder -ausbau.

Beobachten Sie zwischen den Polls Wechsel weg von connected. Wenn Ihre Anwendung auf den Datenstrom angewiesen ist, behandeln Sie jeden anderen Status als Unterbrechung und melden Sie ihn an die zuständige Stelle.

Webhooks (Phase 2)

Phase 2 bringt die Webhooks consent.granted, consent.rejected und consent.revoked. Sobald verfügbar, ist Polling nicht mehr nötig. Sie können sich unter Integrationen → Verbindungen anmelden.

Was als nächstes?