Die E10-Preise der Tankstellen um die Ecke direkt in Home Assistant, sortiert nach Preis, mit einem Verlauf der letzten sieben Tage und einer Meldung aufs Handy, sobald es günstig wird. Das klingt nach einem Scraping-Projekt, ist es aber nicht. Die Tankerkönig-Integration steckt schon in Home Assistant drin, braucht keinen HACS-Umweg und liefert die Preise aus der amtlichen Quelle der Markttransparenzstelle für Kraftstoffe. Ich erkläre hier Schritt für Schritt, wie ich das bei mir eingerichtet habe, vom API-Key bis zum fertigen Dashboard.
Alle Beispiele nutzen E10. Wer Diesel oder E5 tankt, tauscht nur die Endung der Entity-IDs aus, alles andere bleibt gleich.
Warum der alte Scrape-Sensor schweigt
Wenn eine Entität meldet „Diese Entität wird nicht mehr von der scrape-Integration bereitgestellt", ist das kein Fehler der Tankstelle. Home Assistant zeigt diese Meldung immer dann, wenn eine Entität noch im Register steht, die zugehörige Integration sie beim Start aber nicht mehr anlegt.
Bei scrape gibt es dafür zwei Ursachen. Erstens: Seit Home Assistant 2026.6 legt sensor: mit - platform: scrape keine Entitäten mehr an. Unterstützt ist nur noch die Form mit scrape: als eigenem Schlüssel oder die Einrichtung über die Oberfläche. Zweitens: Ein CSS-Selektor, der nichts mehr findet, liefert keinen Wert, und Tankstellenseiten werden regelmäßig umgebaut.
Genau das ist das grundsätzliche Problem mit Scraping für Preise: Es funktioniert, bis jemand anderes sein HTML anfasst. Tankerkönig liefert dieselben Daten aus der amtlichen Quelle, an die über 14.000 Tankstellen melden müssen. Das ist deutlich stabiler.
Schritt 1: API-Key beantragen
Der Key ist kostenlos, kommt aber nicht sofort. Ich würde diesen Schritt deshalb als erstes angehen.
- onboarding.tankerkoenig.de öffnen
- Vorname, Nachname und Mailadresse eintragen, echte Namen, keine Abkürzungen
- Unter Kategorie das passende System auswählen
- Beide Häkchen setzen und abschicken
Der Key wird von Hand geprüft. Bei mir hat das ungefähr 10 bis 12 Stunden gedauert, bis er im Postfach war. Plan das also ein paar Tage vor dem Rest ein.
Behandle den Key wie ein Passwort. Tankerkönig schreibt ausdrücklich, dass API-Keys nicht in Foren, auf GitHub oder anderswo veröffentlicht werden dürfen. Wer seine Konfiguration teilt oder einen Screenshot postet, schwärzt ihn vorher.
Schritt 2: Integration einrichten
Einstellungen › Geräte & Dienste › Integration hinzufügen, nach Tankerkoenig suchen. Sie steckt bereits in Home Assistant drin, HACS wird nicht gebraucht. Der Dialog hat zwei Seiten.
Die erste Seite fragt vier Dinge:
| Feld | Was hineingehört |
|---|---|
| Name der Region | Ein kurzer Name, etwa der Ort oder Arbeit |
| API-Schlüssel | Der Schlüssel aus der Mail |
| Standort | Der Punkt, um den gesucht wird, voreingestellt ist dein Zuhause |
| Suchradius | Kilometer um den Standort, voreingestellt 2 |
Der Radius darf höchstens 25 km betragen, das ist eine Grenze der freien API. Weniger ist praktisch meist besser, der Grund steht im nächsten Schritt.
Schritt 3: Tankstellen auswählen
Die zweite Seite heißt „Wähle Tankstellen zum Hinzufügen aus" und nennt oben, wie viele Tankstellen im Umkreis gefunden wurden. Setz die Haken nur bei denen, an denen du wirklich tankst.
Nimm höchstens zehn. Ab der elften schreibt Home Assistant eine Warnung ins Log, weil die freie API je Preisabfrage nur zehn Stationen beantwortet und Tankerkönig einen Key sperren kann, der dauerhaft zu viel fragt. Die Integration schneidet die Abfrage zwar in Zehnerblöcke, macht daraus aber auch entsprechend viele Anfragen.
Findet der Dialog nichts, steht unter dem Radius „Keine Tankstelle im Umkreis gefunden." Dann ist der Radius schlicht zu klein.
Schritt 4: Welche Sensoren dabei entstehen
Pro Tankstelle legt die Integration ein Gerät an, benannt nach Marke, Straße und Hausnummer, zum Beispiel ARAL Detmolder Str. 12. Daran hängen bis zu vier Entitäten:
| Entität | Bedeutung |
|---|---|
Diesel | Preis in Euro |
Super | Preis für E5, im UI ohne die 5 |
Super E10 | Preis für E10 |
Status | Binärsensor, offen oder geschlossen |
Ein paar Dinge, die regelmäßig für Verwirrung sorgen:
Superist E5. Wer nachsuper_e5sucht, findet nichts.- Fehlt ein Preissensor, führt die Station den Kraftstoff nicht. Die Integration legt einen Sensor nur an, wenn die Tankstelle diesen Kraftstoff meldet.
- Mehr als diese drei gibt es nicht. Super Plus, V-Power, LPG oder HVO100 meldet die Markttransparenzstelle nicht, also kann auch Home Assistant sie nicht zeigen.
- Eine geschlossene Tankstelle hat keinen Preis. Der Preissensor verliert dann seinen Wert, der letzte Preis bleibt nicht stehen. Ob sie offen hat, sagt der
Status.
Die Preise werden alle 30 Minuten geholt. Die Entity-IDs entstehen aus dem Gerätenamen und sehen etwa so aus:
sensor.aral_detmolder_str_12_super_e10
sensor.aral_detmolder_str_12_super
sensor.aral_detmolder_str_12_diesel
binary_sensor.aral_detmolder_str_12_statusDeine eigenen IDs stehen unter Einstellungen › Werkzeuge › Zustände, Suchbegriff super_e10. Wer Diesel tankt, sucht nach _diesel und ersetzt in allen folgenden Beispielen _super_e10 durch _diesel.
Jeder Preissensor trägt die Adresse als Attribute: brand, station_name, street, house_number, postcode, city und fuel_type, dazu latitude und longitude. Die Adressdaten kommen so, wie die Tankstelle sie meldet, mal in Großbuchstaben, mal mit einem Leerzeichen am Ende der Straße. Die Templates unten glätten das mit | trim | title.
Schritt 5: Schlichte Preisliste aufs Dashboard
Für den Anfang reicht die Entitäten-Karte:
1type: entities
2title: E10 in der Nähe
3entities:
4 - entity: sensor.aral_detmolder_str_12_super_e10
5 name: ARAL Detmolder Straße
6 - entity: sensor.shell_mindener_str_84_super_e10
7 name: Shell Mindener Straße
8 - entity: sensor.jet_bahnhofstr_3_super_e10
9 name: JET BahnhofstraßeDas fertige Dashboard mit Rangliste, Verlauf und Karte kommt in Schritt 10. Die Bausteine dafür entstehen in den Schritten 6 bis 9.
Schritt 6: Nach Preis sortieren
Interessant ist nicht die Liste, sondern wer gerade am günstigsten ist. Das geht mit der eingebauten Markdown-Karte, ohne zusätzliche Karte aus HACS:
1type: markdown
2content: |-
3 {% set sensors = [
4 'sensor.aral_detmolder_str_12_super_e10',
5 'sensor.shell_mindener_str_84_super_e10',
6 'sensor.jet_bahnhofstr_3_super_e10'
7 ] %}
8 {%- set valid = sensors | select('has_value') | list %}
9 {%- set ranked = zip(valid | map('states') | map('float') | list, valid) | list | sort %}
10 {% for price, s in ranked %}
11 {%- set brand = state_attr(s, 'brand') %}
12 {%- set street = state_attr(s, 'street') | trim | title %}
13 {{ loop.index }}. **{{ '%.3f' | format(price) | replace('.', ',') }} €** {{ brand }}, {{ street }}
14 {% endfor %}Die Karte sortiert bei jedem Neuzeichnen und zeigt den günstigsten Preis oben. select('has_value') hält geschlossene Stationen draußen, die gerade keinen Preis haben, sonst bricht float die Sortierung ab. zip ist in Home Assistant eine Funktion, kein Filter, deshalb steht es vorn und nicht hinter einem Strich. replace('.', ',') macht aus 2.239 ein deutsches 2,239. Und der Inhalt steht hinter |-, nicht hinter >-: >- faltet die Zeilen zu einer zusammen, dann steht die ganze Rangliste in einer einzigen Zeile.
Den günstigsten Preis als eigenen Sensor. Für die Meldung in Schritt 8 brauche ich den günstigsten Preis als eigene Entität. Einstellungen › Geräte & Dienste › Helfer › Helfer erstellen › Template › Sensor:
| Feld | Wert |
|---|---|
| Name | E10 günstigster Preis, daraus wird sensor.e10_gunstigster_preis |
| Zustand | das Template unten |
| Maßeinheit | € |
| Geräteklasse | leer lassen |
| Zustandsklasse | Messwert |
1{%- set sensors = [
2 'sensor.aral_detmolder_str_12_super_e10',
3 'sensor.shell_mindener_str_84_super_e10',
4 'sensor.jet_bahnhofstr_3_super_e10'
5] %}
6{%- set prices = sensors | select('has_value') | map('states')
7 | select('is_number') | map('float') | list %}
8{{ prices | min if prices else none }}Geschlossene Stationen fallen dabei heraus. Haben alle zu, steht der Sensor auf unbekannt statt auf einer erfundenen Zahl.
Die Geräteklasse bleibt leer, obwohl Geldsaldo naheliegt: Home Assistant erlaubt Geldsaldo nur mit der Zustandsklasse Gesamt, und ein Preis ist kein Kontostand, der sich aufsummiert. Messwert ist richtig, damit führt Home Assistant Langzeitstatistiken für den Sensor.
Tipp für viele Stationen: Statt die Entity-IDs aufzuzählen, gib allen E10-Sensoren unter Einstellungen › Geräte & Dienste › Entitäten das Label E10. Dann ersetzt {%- set sensors = label_entities('E10') | select('match', 'sensor\.') | list %} die Liste, und eine neue Tankstelle braucht nur noch das Label.
Mit HACS geht es auch fertig: Die Tankerkoenig Card von Tim Maurice sortiert nach Preis (sort_by), zeigt nur die günstigsten (show_only_cheapest), blendet geschlossene Stationen aus (hide_unavailable_stations) und öffnet die Adresse in Google Maps, Apple Maps oder Waze (clickable_addresses, map_provider). Sie steht im HACS-Standardverzeichnis. Wer ohne HACS bleiben will, fährt mit der Markdown-Karte oben genauso gut.
Schritt 7: Meldung bei günstigem Preis
Zuerst die Schwelle als Helfer anlegen, damit sie sich ohne Eingriff in die Automation ändern lässt: Einstellungen › Geräte & Dienste › Helfer › Helfer erstellen › Zahlenwert-Eingabe.
| Feld | Wert |
|---|---|
| Name | E10 Preisschwelle |
| Minimalwert | 1 |
| Maximalwert | 3 |
| Anzeigemodus | Eingabefeld |
| Schrittweite | 0.01 |
| Maßeinheit | € |
Danach den Wert auf deine Schmerzgrenze stellen, etwa 2.20. Die Automation:
1alias: E10 ist günstig
2triggers:
3 - trigger: numeric_state
4 entity_id:
5 - sensor.aral_detmolder_str_12_super_e10
6 - sensor.shell_mindener_str_84_super_e10
7 - sensor.jet_bahnhofstr_3_super_e10
8 below: input_number.e10_preisschwelle
9conditions:
10 - condition: time
11 after: "06:00:00"
12 before: "22:00:00"
13actions:
14 - action: notify.mobile_app_dein_handy
15 data:
16 title: E10 ist günstig
17 message: >-
18 {{ state_attr(trigger.entity_id, 'brand') }} in der
19 {{ state_attr(trigger.entity_id, 'street') | trim | title }} kostet jetzt
20 {{ '%.3f' | format(states(trigger.entity_id) | float) | replace('.', ',') }} Euro.
21 data:
22 tag: spritpreis
23 url: /dashboard-tanken/e10
24 actions:
25 - action: URI
26 title: Navigation
27 uri: >-
28 https://maps.apple.com/?daddr={{ ((state_attr(trigger.entity_id, 'street') | trim)
29 ~ ' ' ~ state_attr(trigger.entity_id, 'house_number')
30 ~ ', ' ~ state_attr(trigger.entity_id, 'postcode')
31 ~ ' ' ~ (state_attr(trigger.entity_id, 'city') | title)) | urlencode }}
32mode: single
33max_exceeded: silentnotify.mobile_app_dein_handy heißt bei dir nach deinem Handy. Den richtigen Namen findest du unter Einstellungen › Werkzeuge › Aktionen, Suchbegriff mobile_app.
Was die einzelnen Teile tun:
Der numeric_state-Trigger feuert nur beim Übertreten der Schwelle, nicht bei jedem Messwert darunter. Solange der Preis unten bleibt, ist Ruhe. Die Zeitbedingung verhindert Meldungen um drei Uhr nachts. mode: single mit max_exceeded: silent hält das Log sauber, wenn zwei Stationen gleichzeitig fallen. tag sorgt dafür, dass eine neue Meldung die alte ersetzt, statt sich darunter zu stapeln. url öffnet beim Antippen der Meldung das Dashboard aus Schritt 10. Und der Knopf Navigation startet Apple Maps mit der Adresse der Tankstelle. Auf Android nimmst du https://www.google.com/maps/dir/?api=1&destination= statt https://maps.apple.com/?daddr=.
Wer statt aufs Handy an eine andere Benachrichtigungs-Entität schicken will, nimmt notify.send_message mit target: entity_id:. Die kennt allerdings nur Titel und Text, tag, url und der Knopf fallen dann weg.
Schritt 8: Das 7-Tage-Tief als Vergleich
Eine feste Zahl altert. 2,20 € ist in der einen Woche ein Schnäppchen und zwei Monate später teuer. Die bessere Frage lautet: Liegt der Preis gerade nahe am günstigsten Preis der letzten sieben Tage? Das kann Home Assistant selbst beantworten, weil der Recorder jeden Preis ohnehin mitschreibt.
Den Statistik-Helfer anlegen. Einstellungen › Geräte & Dienste › Helfer › Helfer erstellen › Statistik. Der Dialog hat drei Seiten:
| Feld | Wert |
|---|---|
| Name | E10 7-Tage-Tief |
| Entität | sensor.e10_gunstigster_preis aus Schritt 6 |
| Statistikmerkmal | Minimalwert |
| Stichprobengröße | leer lassen |
| Maximalalter | 168 Stunden, das Feld kennt keine Tage |
| Letzten Messwert behalten | an |
| Genauigkeit | 3 |
Zwei Felder sind Fallen: Die Genauigkeit steht voreingestellt auf 2. Dann wird aus 2,239 € ein 2,24 €, und der Vergleich liegt um bis zu einen halben Cent daneben. Spritpreise haben drei Nachkommastellen, also unbedingt 3 eintragen. Und Maximalalter kennt keine Tage, sieben Tage sind 168:00:00.
Letzten Messwert behalten ist eine Versicherung: Bleibt der günstigste Preis länger als sieben Tage exakt gleich, wäre der Helfer sonst leer. Nach einem Neustart liest er die letzten sieben Tage aus dem Recorder nach, fängt also nicht bei null an. Das setzt voraus, dass der Recorder mindestens sieben Tage behält, voreingestellt sind zehn.
Direkt nach dem Anlegen steht der Helfer auf nicht verfügbar. Das ist normal. Er wartet auf den nächsten Messwert, der kommt spätestens mit der nächsten Abfrage nach 30 Minuten.
Bleibt er dauerhaft nicht verfügbar, schreibt der Recorder nicht mit. Wer in der configuration.yaml unter recorder: einen include:-Filter pflegt, zeichnet nur auf, was dort steht, und dann fehlen die neuen Sensoren. So sieht die Ergänzung aus:
1recorder:
2 include:
3 entity_globs:
4 - sensor.*_super_e10
5 entities:
6 - sensor.e10_gunstigster_preis
7 - sensor.e10_7_tage_tiefDanach Home Assistant neu starten, der Recorder liest seine Filter nur beim Start. Ohne eigenen recorder:-Block zeichnet Home Assistant ohnehin alles auf, dann ist nichts zu tun.
Die erste Woche ist Anlauf. Bis sieben Tage Daten da sind, ist das „Tief" nur das Tief seit dem Einrichten, und die Automation meldet sich entsprechend oft.
Den Abstand als Helfer. Noch eine Zahlenwert-Eingabe: Name E10 Abstand zum Tief, Minimalwert 0, Maximalwert 0.1, Schrittweite 0.005, Anzeigemodus Eingabefeld, Maßeinheit €, danach auf 0.02 stellen. Zwei Cent über dem Wochentief gilt dann als günstig.
1alias: E10 nahe am 7-Tage-Tief
2triggers:
3 - trigger: template
4 value_template: |-
5 {%- set current = states('sensor.e10_gunstigster_preis') %}
6 {%- set low = states('sensor.e10_7_tage_tief') %}
7 {{ is_number(current) and is_number(low)
8 and current | float <= (low | float
9 + states('input_number.e10_abstand_zum_tief') | float(0.02)) | round(3) }}
10conditions:
11 - condition: time
12 after: "06:00:00"
13 before: "22:00:00"
14actions:
15 - variables:
16 cheapest: |-
17 {%- set sensors = [
18 'sensor.aral_detmolder_str_12_super_e10',
19 'sensor.shell_mindener_str_84_super_e10',
20 'sensor.jet_bahnhofstr_3_super_e10'
21 ] %}
22 {%- set ns = namespace(entity=none, price=99) %}
23 {%- for s in sensors if is_number(states(s)) and states(s) | float < ns.price %}
24 {%- set ns.entity = s %}{%- set ns.price = states(s) | float %}
25 {%- endfor %}
26 {{ ns.entity }}
27 - action: notify.mobile_app_dein_handy
28 data:
29 title: E10 nahe am Wochentief
30 message: >-
31 {{ state_attr(cheapest, 'brand') }} in der
32 {{ state_attr(cheapest, 'street') | trim | title }} kostet jetzt
33 {{ '%.3f' | format(states(cheapest) | float) | replace('.', ',') }} Euro.
34 Das Tief der letzten sieben Tage lag bei
35 {{ '%.3f' | format(states('sensor.e10_7_tage_tief') | float) | replace('.', ',') }} Euro.
36 data:
37 tag: spritpreis
38 url: /dashboard-tanken/e10
39 actions:
40 - action: URI
41 title: Navigation
42 uri: >-
43 https://maps.apple.com/?daddr={{ ((state_attr(cheapest, 'street') | trim)
44 ~ ' ' ~ state_attr(cheapest, 'house_number')
45 ~ ', ' ~ state_attr(cheapest, 'postcode')
46 ~ ' ' ~ (state_attr(cheapest, 'city') | title)) | urlencode }}
47mode: single
48max_exceeded: silentDer Template-Trigger feuert, wenn die Bedingung von falsch auf wahr springt, genau wie numeric_state in Schritt 7. Solange der Preis nahe am Tief bleibt, ist Ruhe. Deshalb kommt direkt nach dem Einrichten auch keine Meldung, wenn der Preis in dem Moment schon am Tief liegt: Die erste gibt es, nachdem er einmal gestiegen und wieder gefallen ist.
Die Variable cheapest sucht die Station, die den günstigsten Preis gerade liefert, damit die Meldung einen Ort nennt. Kosten mehrere Stationen gleich viel, gewinnt die, die in der Liste weiter oben steht. Setz deine Lieblingstankstelle also an den Anfang.
Fällt der Preis nachts, holt die Automation die Meldung morgens nicht nach. Wer das will, ergänzt einen Zeit-Trigger um 6 Uhr und dieselbe Prüfung als Template-Bedingung.
Wer zusätzlich wissen will, ob der Preis über dem Wochenschnitt liegt, legt einen zweiten Statistik-Helfer mit dem Merkmal Durchschnitt (Arithmetisch) an, sonst gleiche Werte.
Schritt 9: Das Dashboard „Tanken"
Alles aus den Schritten 6 bis 8 auf einer Seite: oben die Antwort auf „jetzt tanken?", darunter die Rangliste und die Einstellungen, daneben der Wochenverlauf und die Karte.
- Einstellungen › Dashboards › Dashboard hinzufügen › Neues Dashboard von Grund auf
- Titel
Tanken, Seitenleistensymbolmdi:gas-station, Erstellen - Das neue Dashboard in der Seitenleiste öffnen, oben rechts auf den Stift
- Dashboard-Menü öffnen (die drei Punkte) › Raw-Konfigurationseditor
- Alles ersetzen durch den Block unten, Speichern, Fertig
Home Assistant vergibt als Adresse /dashboard-tanken. Die Ansicht heißt e10, deshalb zeigen url in den Automationen auf /dashboard-tanken/e10.
1title: Tanken
2views:
3 - title: E10
4 path: e10
5 icon: mdi:gas-station
6 type: sections
7 max_columns: 2
8 sections:
9 - type: grid
10 cards:
11 - type: heading
12 heading: Jetzt tanken?
13 heading_style: title
14 icon: mdi:gas-station
15 - type: markdown
16 grid_options:
17 columns: full
18 content: |-
19 {%- set current = states('sensor.e10_gunstigster_preis') %}
20 {%- set low = states('sensor.e10_7_tage_tief') %}
21 {%- if is_number(current) and is_number(low) %}
22 {%- set gap = (current | float - low | float) * 100 %}
23 ## {{ '%.3f' | format(current | float) | replace('.', ',') }} €
24 {% if gap < 0.05 %}Das ist das 7-Tage-Tief.{% else %}{{ '%.1f' | format(gap) | replace('.', ',') }} ct über dem 7-Tage-Tief von {{ '%.3f' | format(low | float) | replace('.', ',') }} €{% endif %}
25 {%- else %}Noch keine Preise{% endif %}
26 - type: heading
27 heading: E10 heute
28 heading_style: subtitle
29 - type: markdown
30 grid_options:
31 columns: full
32 content: |-
33 {% set sensors = [
34 'sensor.aral_detmolder_str_12_super_e10',
35 'sensor.shell_mindener_str_84_super_e10',
36 'sensor.jet_bahnhofstr_3_super_e10'
37 ] %}
38 {%- set valid = sensors | select('has_value') | list %}
39 {%- set ranked = zip(valid | map('states') | map('float') | list, valid) | list | sort %}
40 {% for price, s in ranked %}
41 {%- set brand = state_attr(s, 'brand') %}
42 {%- set street = state_attr(s, 'street') | trim | title %}
43 {{ loop.index }}. **{{ '%.3f' | format(price) | replace('.', ',') }} €** {{ brand }}, {{ street }}
44 {% endfor %}
45 - type: heading
46 heading: Einstellungen
47 heading_style: subtitle
48 - type: entities
49 grid_options:
50 columns: full
51 entities:
52 - entity: input_number.e10_preisschwelle
53 name: Feste Schwelle
54 - entity: input_number.e10_abstand_zum_tief
55 name: Abstand zum Tief
56 - entity: automation.e10_ist_gunstig
57 name: Meldung unter Schwelle
58 - entity: automation.e10_nahe_am_7_tage_tief
59 name: Meldung nahe am Tief
60 - type: grid
61 cards:
62 - type: heading
63 heading: Die letzten sieben Tage
64 heading_style: title
65 icon: mdi:chart-line
66 - type: history-graph
67 hours_to_show: 168
68 grid_options:
69 columns: full
70 entities:
71 - entity: sensor.e10_gunstigster_preis
72 name: Günstigster Preis
73 - entity: sensor.e10_7_tage_tief
74 name: 7-Tage-Tief
75 - type: heading
76 heading: Wo
77 heading_style: subtitle
78 - type: map
79 cluster: false
80 default_zoom: 14
81 grid_options:
82 columns: full
83 rows: 8
84 entities:
85 - entity: sensor.aral_detmolder_str_12_super_e10
86 label_mode: attribute
87 attribute: brand
88 - entity: sensor.shell_mindener_str_84_super_e10
89 label_mode: attribute
90 attribute: brand
91 - entity: sensor.jet_bahnhofstr_3_super_e10
92 label_mode: attribute
93 attribute: brandDrei Stellen, an denen man leicht hängen bleibt:
Die Karte zeigt die Marke, nicht den Preis. label_mode steht bei jeder Entität einzeln, nicht an der Karte. label_mode: state ginge auch, aber „2,239 €" passt nicht in den runden Marker und bricht um. Die Preise stehen ohnehin in der Rangliste daneben. cluster: false verhindert, dass nah beieinander liegende Tankstellen zu einem Kreis mit einer Zahl verschmelzen. Und die Größe steuert rows, nicht aspect_ratio: In einer Sections-Ansicht legt das Raster die Höhe fest. Acht Reihen machen die Karte etwa so hoch wie die linke Spalte.
Die Verlaufskurve ist am ersten Tag nur ein Strich am rechten Rand, sie füllt sich mit jeder Abfrage.
Schritt 10: Den alten Scrape-Sensor aufräumen
Der verwaiste Scrape-Sensor verschwindet nicht von selbst.
- Die alte Konfiguration aus der
configuration.yamlentfernen, also den Block mitplatform: scrapeoder den ganzenscrape:-Abschnitt - Einstellungen › Werkzeuge › YAML › YAML-Konfiguration neu laden, oder Home Assistant neu starten
- Einstellungen › Geräte & Dienste › Entitäten, nach dem alten Sensor suchen und ihn löschen
- Unter Einstellungen die Reparaturmeldung abhaken, falls sie noch steht
Danach prüfen, ob irgendeine Automation oder Karte noch auf die alte Entity-ID zeigt. Einstellungen › Werkzeuge › Template eignet sich gut zum Gegenprüfen.
Tipps und häufige Probleme
„Ungültige Authentifizierung" tritt beim Einrichten auf, wenn beim Kopieren des Keys aus der Mail ein Leerzeichen am Anfang oder Ende mitgekommen ist. Ist der Key tatsächlich gesperrt, bietet Home Assistant eine erneute Authentifizierung an.
„Authentifizierung abgelaufen", obwohl nichts geändert wurde. Nicht sofort einen neuen Key beantragen. Anfang 2026 ist genau diese Meldung bei vielen aufgetaucht, obwohl der Key gültig war: Tankerkönig hatte einen Ausfall, und Home Assistant hat die Fehlermeldung des Servers als Key-Problem gelesen. Tankerkönig hat das im März auf seiner Projektseite behoben. Erst abwarten, dann dort nach einer Störung schauen. Tankerkönig bittet ausdrücklich darum, nie einen weiteren Key zu beantragen, ohne vorher Kontakt aufzunehmen.
„Rate limit erreicht" kommt, wenn mehrere Regionen mit je zehn Stationen angelegt sind. Weniger Stationen oder weniger Regionen lösen es. Das Abfrageintervall der Integration liegt fest bei 30 Minuten.
Preise stehen still. 30 Minuten sind der Normalfall, das ist kein Fehler. Die Preise an der Zapfsäule wechseln mehrmals täglich, aber selten im Minutentakt.
Keine Tankstelle gefunden. Radius erhöhen, höchstens auf 25. Wer auf dem Land wohnt, fängt besser bei 10 an.
Eine zweite Region anlegen geht, indem die Integration einfach ein weiteres Mal hinzugefügt wird, etwa für den Arbeitsweg. Jede Region bekommt einen eigenen Namen und zählt eigene Anfragen, also sparsam bleiben.
Namensnennung: Tankerkönig verlangt für die freie API einen Hinweis auf die Quelle. Die Integration setzt ihn selbst als Attribution an jeden Sensor, da ist nichts weiter zu tun.
Nutzt du Tankerkönig schon in Home Assistant, oder hast du bisher auf Scraping gesetzt? Was für Automationen hast du daraus gebaut?
