Škoda Elroq + Home Assistant — Sechs Monate später

Was die MyŠkoda-Integration wirklich in Home Assistant bietet, was fehlt und wie ich ein nützliches EV-Dashboard mit Batteriefortschritt und kalenderbasierter Vorwärmung gebaut habe.

#ev #skoda-elroq #myskoda #home-assistant #testbericht
13. April 2026
Škoda Elroq + Home Assistant — Sechs Monate später

API-Einschränkungen — Mai 2026

VW Group hat App-Attestierungsanforderungen eingeführt, die den Drittanbieterzugang schrittweise einschränken. Die Integration funktioniert teilweise, aber nicht vollständig:

  • Datenabruf (Batterie, Reichweite, Ladestatus) — funktioniert noch via Polling
  • Echtzeit-Befehle (Vorkonditionierung, Laden starten/stoppen) — seit ~7. Mai über MQTT defekt
  • Push-Updates vom Fahrzeug — defekt

Automationen, die auf Befehlen basieren — z. B. kalenderbasierte Vorkonditionierung — sind unzuverlässig. VW hat angekündigt, dass Apps ohne formelle Vereinbarung mit VW Group Info Services künftig keinen Zugang mehr erhalten. Der EU Data Act (12. Sept. 2026) könnte dies rechtlich ändern.

Aktueller Stand: GitHub-Issues.

Das Škoda ist das einzige im Haus, das nicht automatisch mit Home Assistant spricht. Alle anderen Geräte sind entweder nativ oder über HACS eingebunden. Das Auto lebte in seiner eigenen App — und das nagte an mir. Nicht dramatisch. Nur ein konstantes kleines Unbehagen.

Die MySkoda-Integration löst das. HACS, mit dem Škoda Connect-Konto authentifizieren, und das Auto taucht als Gerät auf. API-Polling mit 15-60 Sekunden Latenz bei Befehlen — das ist eine Cloud-Einschränkung, nicht HA.

Was die MySkoda-Integration in Home Assistant bietet

sensor.skoda_elroq_battery_percentage  — Ladezustand (%)
sensor.skoda_elroq_charging_power      — aktuelle Ladeleistung (kW)
sensor.skoda_elroq_range               — geschätzte Reichweite (km)
number.skoda_elroq_charge_limit          — Ladelimit im Auto eingestellt (%)
binary_sensor.skoda_elroq_charger_connected
sensor.skoda_elroq_charging_state
binary_sensor.skoda_elroq_doors_locked
climate.skoda_elroq_air_conditioning   — Fernklimatisierung
switch.skoda_elroq_charging            — starten/stoppen

Die climate-Entität nutze ich am meisten. Temperatur einstellen, climate.turn_on aufrufen, und das Auto beginnt zu heizen oder zu kühlen — je nach verfügbarer Stromquelle. Ist es angeschlossen, läuft es über das Netz. Wenn nicht, über den Akku. Deshalb überspringe ich die Vorwärmung, wenn der Akku unter 30% liegt.

Das EV-Dashboard aufbauen

Ich wollte den Ladestand sofort sichtbar haben ohne viel Platz einzunehmen. Die Lösung ist ein grüner Verlauf hinter dem Karteninhalt über ha-card::after — er füllt die Karte proportional zum Ladestand. Die Karte verwendet custom:stack-in-card und custom:mushroom-template-card (beide HACS, Mushroom-Suite), mit card_mod (HACS) für das CSS:

type: custom:stack-in-card
card_mod:
  style: |
    ha-card {
      background: rgba(255,255,255,0.05) !important;
      backdrop-filter: blur(15px) !important;
      border: 1px solid rgba(255,255,255,0.10) !important;
      box-shadow: 0 8px 32px rgba(0,0,0,0.3) !important;
      border-radius: 28px !important;
      overflow: hidden !important;
      position: relative !important;
    }
    ha-card::before { display: none !important; }
    ha-card::after {
      content: '' !important;
      position: absolute !important;
      left: 0; top: 0;
      width: {{ states('sensor.skoda_elroq_battery_percentage') | int(0) }}% !important;
      height: 100% !important;
      background: linear-gradient(90deg, rgba(76,175,80,0.18), rgba(129,199,132,0.05)) !important;
      pointer-events: none !important;
    }
cards:
  - type: custom:mushroom-template-card
    primary: "{{ states('sensor.skoda_elroq_battery_percentage') }}%  ·  {{ states('sensor.skoda_elroq_range') }} km"
    secondary: Škoda Elroq
    icon: mdi:car-electric
    icon_color: >
      {% set soc = states('sensor.skoda_elroq_battery_percentage') | int(0) %}
      {% if soc > 60 %}green{% elif soc > 30 %}orange{% else %}red{% endif %}

Der Verlauf ist subtil — man nimmt ihn nicht als Fortschrittsbalken wahr, die Karte fühlt sich bei 20% einfach anders an als bei 80%. Es dauerte ein paar Iterationen, die Deckkraft richtig hinzubekommen.

Das Auto-Icon bekommt eine weitere Ebene, wenn sensor.skoda_elroq_charging_state charging ist: ein leuchtender Ring, der durch Cyan und Grün pulsiert — dieselben Farben wie der LED-Ring am Stoßfänger des Elroq während des Ladens. card_mod-Block direkt auf der Mushroom-Karte innerhalb des Stacks hinzufügen:

    card_mod:
      style: |
        mushroom-shape-icon {
          {% if is_state('sensor.skoda_elroq_charging_state', 'charging') %}
          animation: charge-ring 2s linear infinite;
          {% endif %}
        }
        @keyframes charge-ring {
          0%   { box-shadow: 0 0 8px 3px rgba(0,212,255,0.85); }
          33%  { box-shadow: 0 0 8px 3px rgba(0,255,140,0.85); }
          66%  { box-shadow: 0 0 8px 3px rgba(100,220,255,0.85); }
          100% { box-shadow: 0 0 8px 3px rgba(0,212,255,0.85); }
        }

Das Jinja im CSS wird serverseitig ausgewertet, sodass die Animation nur dann im DOM existiert, wenn das Auto tatsächlich lädt. Wenn nicht, hat der Selektor überhaupt keine Eigenschaften.

Vorwärmung aus dem Kalender

Ich habe einen wiederkehrenden Termin mit fester Startzeit. Die Automatisierung feuert 30 Minuten vorher:

alias: Elroq — Vorwärmen aus Kalender
trigger:
  - platform: calendar
    event: start
    offset: "-0:30:0"
    entity_id: calendar.persoenlich
condition:
  - condition: template
    value_template: "{{ 'Fahrt ins Büro' in trigger.calendar_event.summary }}"
  - condition: numeric_state
    entity_id: sensor.skoda_elroq_battery_percentage
    above: 30
action:
  - service: climate.turn_on
    target:
      entity_id: climate.skoda_elroq_air_conditioning
  - service: climate.set_temperature
    target:
      entity_id: climate.skoda_elroq_air_conditioning
    data:
      temperature: 21

Im Winter funktioniert das gut. Ein warmes Auto am Morgen ist ein unterschätzter Luxus.

Ein Problem: der Terminname muss exakt übereinstimmen. Ich habe den Termin zweimal umbenannt und jedes Mal erst gemerkt, als das Auto kalt war. Es ist ein zerbrechlicher Zeichenkettenvergleich und ich habe noch keine bessere Lösung gefunden.

Automatisierung zur Ladekabel-Warnung

Das Ladekabel nicht einzustecken ist der einzige Fehler der wirklich etwas kostet. Das Auto steht über Nacht, zieht nichts aus dem Netz, und man fährt morgens mit dem Ladestand vom Vortag los.

Die AlertTicker-Karte übernimmt das. Zwischen 21:00 und 06:00 Uhr, wenn binary_sensor.skoda_elroq_charger_connected aus ist, erscheint ein Warnbanner in jeder Dashboard-Ansicht:

type: custom:alert-ticker-card
alerts:
  - entity: binary_sensor.skoda_elroq_charger_connected
    state: "off"
    message: "Elroq is not plugged in"
    theme: warning
    priority: 1
    time_from: "21:00"
    time_to: "06:00"

Das Zeitfenster ist wichtig — tagsüber ist das Auto ständig vom Ladegerät getrennt. Die Warnung ist nur nachts relevant wenn es laden sollte. Außerhalb dieses Fensters ist sie still unabhängig vom Kabelstatus.

Was der MySkoda-Integration noch fehlt

Die Integration zeigt keine Ladesitzungsdaten — keine kWh in der aktuellen Sitzung, keine Ladehistorie. Man sieht die aktuelle Leistungsaufnahme, aber nicht wie lange sie läuft oder was es kostet. Für die Smart-Charging-Automatisierung ist das in Ordnung; um die tatsächlichen Ladekosten zu überwachen, fehlt das.

Für das Latenz-Problem konkret: steht man neben dem Auto und drückt “Laden starten” im HA-Dashboard, muss man eine Minute warten bis der Schalter seinen Zustand aktualisiert. Für alles Interaktive lieber die App verwenden.

Batterie und Reichweite über Zeit verfolgen

Nach einer Weile wollte ich nicht den aktuellen Zustand sehen — sondern den Trend. Verliert der Akku über Nacht Ladung? Wie verändert sich die Reichweite wenn die Temperatur fällt?

custom:apexcharts-card (HACS) beantwortet beides. Batteriestand in Prozent über 5 Tage — Ladevorgänge zeigen sich als steile Aufwärtsspitzen, nächtlicher Drain als sanfte Steigung:

type: custom:apexcharts-card
graph_span: 5d
header:
  show: true
  title: Batterie
  show_states: true
  colorize_states: true
apex_config:
  chart:
    background: transparent
    toolbar:
      show: false
  theme:
    mode: dark
  yaxis:
    min: 0
    max: 100
series:
  - entity: sensor.skoda_elroq_battery_percentage
    name: Batterie %
    color: "#4CAF50"
    stroke_width: 2
    fill_raw: last
    type: line
    unit: "%"

Reichweite und Außentemperatur auf einem Zwei-Achsen-Diagramm. Im Sommer bewegen sich die beiden Linien fast unabhängig voneinander. Es ist eine Wintergeschichte: auf der MEB-Plattform ist unter dem Gefrierpunkt mit 20–30% Reichweitenverlust zu rechnen:

type: custom:apexcharts-card
graph_span: 5d
header:
  show: true
  title: Reichweite & Temperatur
  show_states: true
  colorize_states: true
yaxis:
  - id: range_axis
    min: 0
    max: 600
    apex_config:
      title:
        text: km
  - id: temp_axis
    opposite: true
    min: -10
    max: 40
    apex_config:
      title:
        text: °C
apex_config:
  chart:
    background: transparent
    toolbar:
      show: false
  theme:
    mode: dark
series:
  - entity: sensor.skoda_elroq_range
    name: Reichweite (km)
    yaxis_id: range_axis
    color: "#2196F3"
    stroke_width: 2
    fill_raw: last
    unit: km
  - entity: sensor.skoda_elroq_outside_temperature
    name: Temp (°C)
    yaxis_id: temp_axis
    color: "#FF9800"
    stroke_width: 2
    fill_raw: last
    unit: °C

Etwas zu beachten: die MySkoda-Integration erstellt 56 Entitäten. Alles aufzuzeichnen summiert sich schnell — Fensterzustände, Türzustände, Softwareversion, Inspektionstermine. Die meisten ändern sich selten und haben keinen Diagrammwert. Den Großteil ausschließen und nur behalten was man historisch verfolgen möchte:

recorder:
  exclude:
    entity_globs:
      - sensor.skoda_elroq_*
  include:
    entities:
      - sensor.skoda_elroq_battery_percentage
      - sensor.skoda_elroq_range
      - sensor.skoda_elroq_outside_temperature
      - sensor.skoda_elroq_charging_state