Škoda har lanceret et officielt, offentligt API til MyŠkoda: Man laver en API-nøgle, vælger sin bil, og så kan man hente bilens data med et helt almindeligt REST-kald. Indtil nu har vores Elroq været koblet på Home Assistant med HACS-integrationen MySkoda, der bruger den samme bagvej som app’en. Jeg har flyttet så meget som muligt over på det officielle API – og undervejs lært, hvor grænserne går.
Det korte svar
| Behov | Officielt API |
|---|---|
| Batteri, rækkevidde, kilometertæller | ✅ læses |
| Ladekabel, ladetilstand, ladeeffekt, resttid, ladegrænse | ✅ læses |
| Døre låst, vinduer, motorhjelm, klima | ✅ læses |
| Parkeringsposition og ladeprofiler | ✅ læses |
| Start/stop opladning og klima, ladegrænse | ✅ kommandoer |
| Lås døre op/i | ❌ findes ikke |
| Sædevarme, “vågn op”, udetemperatur, billeder af bilen | ❌ findes ikke |
| Lås stik op efter opladning | ⚠️ kun ved at overskrive hele ladeprofilen |
Den store mangel er oplåsning. Vi har en automation, der låser bilen op hverdagsmorgener, når den har ladet – den kan ikke flyttes. Så MySkoda bliver ved med at køre side om side med API’et, men kun til de ting, API’et ikke kan.
Grænsen: 20 kald i timen
API’et tillader 20 kald i timen pr. bil, og fejlede kald tæller med. Det former hele opsætningen: Bilens data hentes med ét kald hvert 5. minut (12 i timen), og alle sensorer læser fra det samme svar. Det giver luft til et par kommandoer – men også en lille forsinkelse: Sætter man ladekablet i, går der op til 5 minutter, før Home Assistant ved det.
Tip: Hver genindlæsning af REST-integrationen henter også data. Retter man filen mange gange i samme time, kan man løbe ind i fejl 429.
Opsætningen
Alt ligger i én pakkefil med den indbyggede rest-integration – ingen HACS. API-nøglen ligger i secrets.yaml. Her er et uddrag med et par af sensorerne:
rest:
- resource: "https://public.api.connect.skoda-auto.cz/api/v1/vehicles/DIT_VIN"
scan_interval: 300 # 12 af de 20 kald i timen
timeout: 20
headers:
X-API-Key: !secret skoda_public_api_key
sensor:
- name: "Škoda Elroq API Batteri"
unique_id: skoda_api_battery_soc
unit_of_measurement: "%"
device_class: battery
state_class: measurement
availability: >-
{{ value_json is mapping
and value_json.get('vehicle', {}).get('charging', {}).get('status', {})
.get('battery', {}).get('stateOfChargeInPercent') is number }}
value_template: "{{ value_json.vehicle.charging.status.battery.stateOfChargeInPercent }}"
# Ladetilstand på dansk – ukendte værdier vises som API'ets egen tekst
- name: "Škoda Elroq API Ladetilstand"
unique_id: skoda_api_charging_state
value_template: >-
{%- set raa = value_json.vehicle.charging.status.state | upper -%}
{{ {'CHARGING': 'Lader', 'CONNECT_CABLE': 'Sæt kablet i',
'READY_FOR_CHARGING': 'Klar til opladning',
'CONSERVING': 'Opladet – holder niveau'}.get(raa, raa) }}
# Position til kortkort: latitude/longitude som attributter
- name: "Škoda Elroq API Position"
unique_id: skoda_api_position
value_template: >-
{{ value_json.vehicle.chargingProfiles.currentVehiclePositionProfile.name
if value_json.vehicle.get('chargingProfiles', {}).get('currentVehiclePositionProfile') is mapping
else 'Ude' }}
json_attributes_path: "$.vehicle.parkingPosition.gpsCoordinates"
json_attributes:
- latitude
- longitude
binary_sensor:
- name: "Škoda Elroq API Ladekabel"
unique_id: skoda_api_plug_connected
device_class: plug
value_template: >-
{{ value_json.vehicle.charging.status.plugConnectionState | upper == 'CONNECTED' }}I alt laver det ene kald 20 sensorer: batteri, rækkevidde, kilometertæller, ladetilstand, ladeeffekt, resttid, ladegrænse, klima, sidst opdateret, position, låse- og dørstatus, ladeprofil, ladevindue og nummerplade.
Et smart trick: “hjemme” uden device tracker
API’et har ingen “home/not_home”, men det fortæller, hvilken ladeprofil der gælder på bilens nuværende position. Vores profil hedder “Hjem”, så positionssensoren viser “Hjem”, når bilen holder i indkørslen, og “Ude” ellers. Det er alt, lade-påmindelsen behøver.
Tre ting jeg lærte på den hårde måde
- En binær REST-sensor må ikke have attributter. Jeg gav “døre låst” et par attributter, og så afviste Home Assistant hele REST-blokken – ingen af de nye sensorer blev oprettet. Fejlen står i loggen, ikke i brugerfladen. Attributterne endte på en almindelig sensor i stedet.
- Læs specifikationen, ikke kun dokumentationen. Dokumentationssiden nævner kun ét endpoint, men den fulde OpenAPI-specifikation ligger offentligt og viser alle felter og alle 12 endpoints. Det var her, det stod klart, at der ingen låsekommando er.
- Sammenlign med det gamle, før du skifter. Før dashboards og automationer blev flyttet, tjekkede jeg, at batteri, rækkevidde, kilometertal, ladegrænse og alle dør-/vinduesstatusser var identiske mellem API’et og MySkoda.
Skiftet
Bilen optræder på fem dashboards. Her blev 13 MySkoda-sensorer udskiftet med API-sensorerne – også inde i kortenes skabeloner, f.eks. ikonet for ladestikket. Det, API’et ikke kan, peger stadig på MySkoda: knapperne, udetemperaturen og billederne af bilen. Lade-påmindelsen kl. 19:15 kører nu udelukkende på API’et.
Er det værd at skifte?
Til at læse data: ja. Det er officielt, stabilt og dokumenteret, og det kører med Home Assistants egen REST-integration. Til at styre bilen er det endnu for begrænset – så længe der ikke er en låsekommando, kan man ikke helt undvære den uofficielle integration. Jeg håber, Škoda udvider API’et; indtil da kører de to side om side.
