Push Notification inkl. Navigation / Tanken Video von @olli

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

ich mag es nur informiert zu werden, wenn es wirklich notwendig ist und daher bin ich mit meiner Lösung zusammen mit Tankerkönig sehr happy :slightly_smiling_face:

Meine Tanken-Ansicht:

Ich habe hier die Preise für meine nächsten Tankstellen in der Übersicht und für mich ist folgendes sehr wichtig:

  1. ich werde informiert, wenn der Tank in Richtung leer geht (Tank ist leer) und es sinnvoll wäre zu Tanken (= der aktuelle Benzinpreis liegt unter dem Durchschnitt der letzten Tage)
  2. wenn der Benzinpreis sehr günstig ist (Benzin Wunschpreis) und somit Tanken sinnvoll wäre

Hier zuhause sollte es ohne Dashboard gehen daher für uns diese Lösung hier. Auch wenn meine Frau nur das Auto nutzt :slight_smile:

Wobei das mit Helfer „Tank bald leer“ ja dann eigentlich perfekt automatisiert werden könnte. Also dann ohne Dashboard-Anzeige des Preises und nur mit Benachrichtigung, wenn man zu Hause ist.

gute idee :slight_smile: ne Mischung zwischen Micha und mir :slight_smile:

der Wunschpreis ist eher statisch (meistens zieht der Durchschnittspreis) und der Helfer „Tank ist leer“ kann ggf. auch via Voice Assistant gesetzt werden.

@olli die Frage hatte ich direkt beim lesen und wollte erstmal noch eine Nacht drüber schlafen… warum erst Zuhause… macht es nicht eher Sinn, sich auf dem Handy benachrichtigen zu lassen, wenn man sich in der Nähe von der Zone der entsprechenden Tankstelle befindet?

Ich werde mal nachsehen, ob es möglich ist, für Home Assistant Benachrichtigungen einen bestimmen Ton abspielen zu lassen

…Push-Benachrichtigungen beim „Betreten“ von Zonen waren mein allererstes Video… :face_with_peeking_eye: :rofl:

da bist Du der Zeit wohl schon lange voraus gewesen sein :smiling_face_with_sunglasses:

Entweder Zonen in HA nutzen oder wenn man eine bestimmte Entfernung hat zum Zuhause oder Tankstellen aufm dem Heimweg (hier wäre WAZE eine mögliche Integration)