
Meine Energiedaten automatisiert auslesen
Hinweis Die Nutzung der aWATTar tado° App API erfolgt auf eigene Verantwortung. Das API ist nicht offiziell dokumentiert, kann sich jederzeit ändern und wird vom aWATTar und tado° Support nicht betreut.
Wie ich meine Smart-Meter-Daten über das tado° API auslese
Ich bin aWATTar-Kunde mit dem Tarif HOURLY. Häufig mache ich Auswertungen über meinen Stromverbrauch, hierfür ist es wichtig, die Daten einfach und automatisiert zu erhalten. In diesem Blogartikel erkläre ich kurz, wie ich über das aWATTar tado° App API meine Daten automatisch auslesen kann.
Voraussetzungen
- aWATTar-Kunde mit aktivem Smart Meter
- tado°-Account mit verknüpftem Stromvertrag in der aWATTar tado° App
In diesem Beispiel zeige ich die grundsätzliche Abfolge mit Bash-Tools wie curl und jq.
Schritt 1: Authentifizierung – Device Code anfordern
tado° veröffentlicht eine Client-ID für den REST-API-Zugriff und dokumentiert den Authentifizierungs-Flow hier.
Client-ID: 1bb50063-6b0c-4d11-bd99-387f4a91cc46
Der Ablauf startet damit, beim Authorization Server einen Device Code anzufordern.
Entscheidend ist der Scope offline_access: Ohne ihn bekommt man zwar ein Access
Token, aber kein Refresh Token. Und da Access Tokens nur rund 10 Minuten
gültig sind, müsste man den Ablauf danach jedes Mal von vorne starten.
CLIENT_ID=1bb50063-6b0c-4d11-bd99-387f4a91cc46
curl -s -X POST https://login.tado.com/oauth2/device_authorize \
-d "client_id=$CLIENT_ID" \
-d "scope=offline_access" | tee device.json | jq
Die Antwort sieht so aus:
{
"device_code": "IYSxSNyPr...",
"user_code": "ABCD-1234",
"verification_uri": "https://login.tado.com/oauth2/device",
"verification_uri_complete": "https://login.tado.com/oauth2/device?user_code=ABCD-1234",
"expires_in": 300,
"interval": 5
}
Hier besonders relevant für den nächsten Schritt:
verification_uri_completedie vollständige URL für die Freigabe.device_codewird im nächsten Schritt benötigt.
Nun die URL aus verification_uri_complete im Browser öffnen und die Anmeldung bzw. Freigabe bestätigen. Dafür wird der tado°-Login benötigt.
Schritt 2: Authentifizierung – Token
CLIENT_ID=1bb50063-6b0c-4d11-bd99-387f4a91cc46
DEVICE_CODE=$(jq -r .device_code device.json)
curl -s -X POST https://login.tado.com/oauth2/token \
-d "client_id=$CLIENT_ID" \
-d "device_code=$DEVICE_CODE" \
-d "grant_type=urn:ietf:params:oauth:grant-type:device_code" | tee tokens.json | jq
Im Erfolgsfall wird folgende Antwort zurückgegeben:
{
"access_token": "eyJhbGciOi...",
"refresh_token": "abc123...",
"expires_in": 600,
"token_type": "bearer",
"scope": "offline_access",
"userId": "..."
}
Mit dem access_token lässt sich nun das aWATTar tado° App API abfragen. Wie man sich mit dem refresh_token ein neues Access Token holt, dieser Schritt benötigt keinen Browser mehr, ist am Ende des Artikels beschrieben.
Viele Anfragen an das App API benötigen die Home-ID, die bereits im Access Token steckt. Sie lässt sich mit folgendem Befehl auslesen:
ACCESS_TOKEN=$(jq -r .access_token tokens.json)
HOME_ID=$(echo "$ACCESS_TOKEN" | cut -d. -f2 | base64 -d 2>/dev/null | jq -r '.tado_homes[0].id')
echo "$HOME_ID"
Schritt 3: Energiedaten abfragen
Die Energiedaten sind nicht über die klassische REST-API unter
my.tado.com verfügbar, sondern hinter dem GraphQL-Endpoint, welchen die Web-App selbst
verwendet:
https://ext.api.tado.com/apps/graphql
Tageswerte für den laufenden Monat abfragen
ACCESS_TOKEN=$(jq -r .access_token tokens.json)
HOME_ID=$(echo "$ACCESS_TOKEN" | cut -d. -f2 | base64 -d 2>/dev/null | jq -r '.tado_homes[0].id')
FROM=$(date +%Y-%m-01)
TO=$(date -d "$(date +%Y-%m-01) +1 month -1 day" +%Y-%m-%d)
curl -s https://ext.api.tado.com/apps/graphql \
-H "authorization: Bearer $ACCESS_TOKEN" \
-H "content-type: application/json" \
-d @- <<EOF | jq
{
"query": "query EnergyReadings(\$homeId: ID!, \$granularity: TariffEnergyMeasurementGranularity!, \$from: LocalDate, \$to: LocalDate) { home(id: \$homeId) { tariff { energyMeteringPoints(from: \$from, to: \$to, granularity: \$granularity) { designation flowType pricingModel summary { averagePrice { value unit } totalEnergy { amount unit } } readingIntervals { from to price { value unit } quantity { amount unit } } } } } }",
"variables": {
"homeId": "$HOME_ID",
"granularity": "DAILY",
"from": "$FROM",
"to": "$TO"
}
}
EOF
Über die Variable granularity wird die Auflösung bestimmt. Als Werte stehen DAILY und HOURLY zur Verfügung.
Hinweis:
- Abfragen mit Auflösung DAILY müssen immer einen vollständigen Kalendermonat abdecken.
- Abfragen mit Auflösung HOURLY dürfen nur einen einzlenen Tag abfragen.
Antwort des APIs
Im Erfolgsfall erhält man folgende Antwort vom API zurück:
{
"data": {
"home": {
"tariff": {
"energyMeteringPoints": [
{
"designation": "AT00000000000000000000000000001",
"flowType": "CONSUMPTION",
"pricingModel": "DYNAMIC",
"summary": {
"averagePrice": { "value": 12.43, "unit": "CENT_PER_KWH" },
"totalEnergy": { "amount": 184.221, "unit": "KWH" }
},
"readingIntervals": [
{
"from": "2026-08-18T00:00:00+02:00",
"to": "2026-08-18T01:00:00+02:00",
"price": { "value": 9.87, "unit": "CENT_PER_KWH" },
"quantity": { "amount": 0.412, "unit": "KWH" }
}
]
}
]
}
}
}
}
Refresh Token (optional)
Das Access Token verfällt nach rund 600 Sekunden (10 Minuten). Mit dem Refresh Token kann ein neues Access Token geholt werden, ohne dass eine Nutzereingabe notwendig ist.
Hierfür sendet man folgende Anfrage an das tado° App API:
CLIENT_ID=1bb50063-6b0c-4d11-bd99-387f4a91cc46
REFRESH_TOKEN=$(jq -r .refresh_token tokens.json)
curl -s -X POST https://login.tado.com/oauth2/token \
-d "client_id=$CLIENT_ID" \
-d "grant_type=refresh_token" \
-d "refresh_token=$REFRESH_TOKEN" | jq > tokens.json