Am 14.01.2025 hatte der gute @olli ein Video gemacht Spritkosten senken mit der Integration Tankerkönig für Home Assistant.
Ich hatte darauf hin mal folgendes gebaut.
Ein Hinweis noch: In die Beschreibung habe ich zuerst manuell (später mit ner lokalen LLM mir diese nach einem bestimmten Muster ergänzen lassen; das wenn ich nicht erklären könnte was die Automation macht ist diese dokumentiert). Die Beschreibung hatte ich zu Anfang wo der Sprit teuer wurde aktualisiert (auch weil ich was geändert hatte).
alias: "Sprit-Alarm: E10 Schnäppchen"
description: >-
## ⛽ Sprit-Alarm – E10 Schnäppchen
Überwacht alle 5 Minuten alle E10-Sensoren und benachrichtigt
wenn der günstigste Preis unter `2.10`€ fällt oder ein neues Tagestief
erreicht wird – maximal einmal pro Stunde.
### Benötigte Helfer + Integration
- `input_number.letzter_gemeldeter_spritpreis` – Helfer (Number) – Speichert
den zuletzt gemeldeten Preis für den Tagestief-Vergleich
- die Integration Tankerkönig
### Ablauf
1. **Günstigste Tankstelle ermitteln:**
- Alle Sensoren mit `^sensor\..*_super_e10$` werden gefiltert
- Unavailable/unknown/none-Zustände werden ausgeschlossen
- Sensor mit dem niedrigsten Preis wird als `cheapest_entity` gesetzt
2. **Benachrichtigung senden (an `notify.mobile_app_gerät1` und
`notify.mobile_app_gerät2`):**
- Titel: aktueller Preis + Markenname
- Nachricht: Stadt, Straße und Hausnummer der Tankstelle
- Aktions-Buttons: Navigation per Google Maps oder Apple Maps
- Tankstellen-Logo aus `/local/tankstellen/{{ brand_name }}.png`
- Tap öffnet `/lovelace/sprit-dashboard`
3. **Letzten gemeldeten Preis speichern:**
- `input_number.letzter_gemeldeter_spritpreis` wird auf `cheapest_price`
gesetzt
### Besonderheiten
- 🕐 **Zeitfenster:** Nur zwischen `07:00` und `21:00` Uhr aktiv
- 💰 **Preisgrenze:** Benachrichtigung nur wenn Preis unter `2.10`€
- 🔕 **Anti-Spam:** Erneute Meldung nur wenn letzte Benachrichtigung
mehr als `60` Minuten zurückliegt ODER ein neues Preistief erreicht wurde
- 🏷️ **Notification-Tag:** `sprit-notification` – ersetzt vorherige
Benachrichtigung auf dem Gerät
- ❌ **Abbruchbedingung:** Keine Ausführung wenn `cheapest_entity = none`
(kein gültiger Sensor verfügbar)
### Technische Details
- `mode: single` – neue Auslösungen werden ignoriert solange die Automation
läuft; verhindert parallele Benachrichtigungen beim 5-Minuten-Takt
- **Trigger:** Zeitgesteuert alle `5` Minuten (`time_pattern: /5`)
triggers:
- trigger: time_pattern
minutes: /5
conditions:
- condition: template
value_template: "{{ cheapest_entity != 'none' }}"
- condition: time
after: "07:00:00"
before: "21:00:00"
- condition: template
value_template: "{{ cheapest_price < 2.10 }}"
- condition: template
value_template: "{{ (minutes_since_last > 60) or (cheapest_price < last_notified_price) }}"
actions:
- repeat:
for_each:
- notify.mobile_app_gerät1
- notify.mobile_app_gerät2
sequence:
- action: "{{ repeat.item }}"
data:
title: >-
⛽ {{ cheapest_price }}€ | {{ state_attr(cheapest_entity, 'brand')
| default('Tankstelle') }}
message: Günstig tanken in {{ city }}! {{ street }} {{ house_number }}
data:
clickAction: /lovelace/sprit-dashboard
tag: sprit-notification
image: /local/tankstellen/{{ brand_name }}.png
actions:
- action: URI
title: Navigieren mit Google
uri: >-
https://www.google.com/maps/dir/?api=1&destination={{ street
| urlencode }}+{{ house_number | urlencode }}+{{ city |
urlencode }}
- action: URI
title: Navigieren mit Apple
uri: >-
http://maps.apple.com/?daddr={{ street | urlencode }}+{{
house_number | urlencode }}+{{ city | urlencode }}
- action: input_number.set_value
target:
entity_id: input_number.letzter_gemeldeter_spritpreis
data:
value: "{{ cheapest_price }}"
mode: single
variables:
cheapest_entity: |-
{{ (states.sensor
| selectattr('entity_id', 'match', '^sensor\..*_super_e10$')
| rejectattr('state', 'eq', 'unavailable')
| rejectattr('state', 'eq', 'unknown')
| rejectattr('state', 'eq', 'none')
| min(attribute='state')).entity_id
| default('none') }}
cheapest_price: "{{ states(cheapest_entity) | float(99.9) }}"
brand_name: |-
{{ state_attr(cheapest_entity, 'brand')
| default('unbekannt') | lower | replace(' ', '') }}
street: "{{ state_attr(cheapest_entity, 'street') | default('') }}"
city: "{{ state_attr(cheapest_entity, 'city') | default('') }}"
house_number: "{{ state_attr(cheapest_entity, 'house_number') | default('') }}"
last_notified_price: "{{ states('input_number.letzter_gemeldeter_spritpreis') | float(99.9) }}"
minutes_since_last: |-
{% set last = state_attr(
'automation.sprit_alarm_e10_schnappchen',
'last_triggered') %}
{{ ((as_timestamp(now()) - as_timestamp(last)) / 60) | int
if last else 9999 }}
Ich überlege wie bei dem Update-Blueprint zu machen (dort war es anfangs auch nur ne automation) das als Blueprint umzusetzen.
Denke Spritart was Tankstellen so haben und über Tankerkönig abzurufen sind + Geräte die informiert werden sollen kann man dann auswählen. Sonst noch ideen?
LG,
Arnaud
