Benachrichtigungen
Alles löschen

Einkaufslisten-Benachrichtigung in der Nähe von Geschäften

5 Beiträge
3 Benutzer
0 Reactions
356 Ansichten
Beiträge: 736
 Olli
Admin
Themenstarter
(@olli)
Mitglied
Beigetreten: Vor 10 Jahren
wpf-cross-image

Im relativ neuen Podcast TechTumult von Stefan und Simon erzählte Stefan von einer Automation, die ich sehr interessant finde: Wann immer man in der Nähe eines Geschäftes ist und in der Bring!-Einkaufsliste für dieses Geschäft Einträge hat, soll Home Assistant eine Push-Notification senden. Diese Automation ist insbesondere dann interessant, wenn man Geschäfte immer wieder aufsucht, die etwas weiter entfernt sind. Dank der Automation wird man nämlich informiert, sofern man sich in der Nähe befindet. Im Idealfall spart man sich hierdurch Fahrten zu diesem Geschäft. An dieser Stelle noch einmal Danke an Stefan und Simon für die Idee der Automation Folge…

Antwort
Schlagwörter für Thema
4 Antworten
Beiträge: 32
 Sven
(@sven)
Trusted Member
Beigetreten: Vor 9 Monaten

Hallo Olli,

hier eine, von Thomas, von Steuer dein Leben, "geklaute" Idee.

Er erweitert die Erinnerung in der Zone, um das zusenden der personalisierten Einkaufsliste.

Das finde ich sehr interesant, hab es umgesetzt und es funktioniert tadellos.

 

https://www.youtube.com/watch?v=F0Z5ogpMh7M&t=77s

 

Liebe Grüße Sven

Antwort
Beiträge: 736
 Olli
Admin
Themenstarter
(@olli)
Mitglied
Beigetreten: Vor 10 Jahren

Unter meinem YouTube-Video gab es die Frage, ob/wie man sich die Listeneinträge ebenfalls in der Benachrichtigung anzeigen lassen kann und hierfür habe ich folgende Code-Erweiterung "gebastelt":

actions:
  - action: todo.get_items
    target:
      entity_id: todo.rewe
    data:
      status: needs_action
    response_variable: eintraege
  - metadata: {}
    data:
      message: >
        {% set shop_list = eintraege['todo.rewe']['items'] %}
        {%- for item in shop_list -%}
        - {{ item.summary ~ "\n" }}
        {%- endfor -%}
    action: notify.mobile_app_pixel_8_pro

 

Die Action wird um todo.get_items ergänzt womit wir die Listeneinträge (nur offene, da "needs_action") in die Variable "eintraege" laden. Diese Variable geben wir dann in der Push-Benachrichtigung dynamisch aus.

Der YAML-Code der kompletten Benachrichtigung sieht dann wie folgt aus und kann von dir, sofern du es auf deine Zone, Shoppingliste und dein Handy anpasst, von dir übernommen werden:

alias: Bring-Push-Notification-Obi
description: ""
triggers:
  - entity_id: device_tracker.pixel_8_pro
    zone: zone.obi
    event: enter
    trigger: zone
conditions:
  - condition: numeric_state
    entity_id: todo.rewe
    above: 0
actions:
  - action: todo.get_items
    target:
      entity_id: todo.rewe
    data:
      status: needs_action
    response_variable: eintraege
  - metadata: {}
    data:
      message: >
        {% set shop_list = eintraege['todo.rewe']['items'] %}
        {%- for item in shop_list -%}
        - {{ item.summary ~ "\n" }}
        {%- endfor -%}
    action: notify.mobile_app_pixel_8_pro
mode: single
Antwort
Beiträge: 1
(@chlmk)
New Member
Beigetreten: Vor 3 Monaten

Super! Vielen Dank! Ich habe mich mittlerweile dagegen entschieden, die Einträge in einer Notification anzuzeigen, da das ja doch recht schnell ausufern kann 😉

Stattdessen wird beim "Klick" auf die Notification nun direkt Bring geöffnet.

Bei uns ist es auch so, dass wir verschiedene Listen für verschiedene Geschäfte/Zonen haben und ich habe mir mittlerweile eine recht gute Notification gebaut, die ich teilen möchte:

alias: Einkaufsliste Erinnerung
description: ""
triggers:
  - entity_id:
      - person.christian
    for:
      hours: 0
      minutes: 1
      seconds: 0
    trigger: state
  - entity_id:
      - person.carina
    for:
      hours: 0
      minutes: 1
      seconds: 0
    trigger: state
conditions:
  - condition: and
    conditions:
      - condition: template
        value_template: >-
          {% set zone_map = {
            'Aldi München': 'todo.zuhause',
            'Aldi Koblenz': 'todo.zuhause',
            'Lidl München': 'todo.zuhause',
            'Lidl Koblenz': 'todo.zuhause',
            'Netto München': 'todo.zuhause',
            'Action': 'todo.action',
            'Toom': 'todo.baumarkt',
            'Rewe München': 'todo.rewe'
          } %}   {% set current_zone = trigger.to_state.state %}   {% set
          list_entity = zone_map.get(current_zone, none) %}   {{ list_entity is
          not none }}
      - condition: time
        after: "09:00:00"
        before: "20:00:00"
      - condition: template
        value_template: "{{ now().weekday() in [0, 1, 2, 3, 4, 5] }}"
actions:
  - variables:
      notify_service: >-
        {% set notify_map = {
          'person.christian': 'notify.mobile_app_iphone',
          'person.carina': 'notify.mobile_app_iphone_carina'
        } %}  {{ notify_map.get(trigger.entity_id, 'notify.mobile_app_iphone')
        }}  
      zone_name: "{{ trigger.to_state.state }}"
      list_entity: |
        {% set zone_map = {
          'Aldi München': 'todo.zuhause',
          'Aldi Koblenz': 'todo.zuhause',
          'Lidl München': 'todo.zuhause',
          'Lidl Koblenz': 'todo.zuhause',
          'Netto München': 'todo.zuhause',
          'Action': 'todo.action',
          'Toom': 'todo.baumarkt',
          'Rewe München': 'todo.rewe'
        } %} {{ zone_map[zone_name] }}
  - action: todo.get_items
    metadata: {}
    data:
      status: needs_action
    target:
      entity_id: "{{ list_entity }}"
    response_variable: eintraege
  - data:
      title: Hier ist dein Einkaufsberater!
      message: >
        {% set items = eintraege[list_entity]['items'] %} {% set item_count =
        items | length %} {% if item_count == 0 %}
          Die Einkaufsliste bei {{ zone_name }} ist leer.
        {% else %}
          {% set item_word = 'Ding' if item_count == 1 else 'Dinge' %}
          {% if trigger.entity_id == 'person.christian' %}
            Christian, bitte {{ item_count }} {{ item_word }} bei {{ zone_name }} einkaufen!
          {% else %}
            Carina, vielleicht kannst du bei {{ zone_name }} vorbeischauen. Da sind {{ item_count }} {{ item_word }} auf der Liste 😘
          {% endif %}
        {% endif %}
      data:
        url: bring://
        actions:
          - action: OPEN_BRING
            title: Bring öffnen
    action: "{{ notify_service }}"
mode: parallel
max: 10

 

Sobald eine der beiden Personen die Zone wechselt wird geprüft, ob für diese Zone eine dementsprechende Einkaufsliste vorhanden ist. Wenn ja und wenn dort mindestens 1 Artikel vorhanden ist, geht eine dementsprechende Benachrichtigung an den "Auslöser" der Automation. Außerhalb der Öffnungszeiten und falls die dementsprechende Liste leer ist, passiert natürlich nichts. Auch nicht, wenn man eine Zone betritt, für die gar keine Liste vorhanden ist.

Antwort
1 Antwort
 Olli
Admin
(@olli)
Beigetreten: Vor 10 Jahren

Mitglied
Beiträge: 736

@chlmk Sehr cool gelöst, danke fürs teilen mit uns allen! 👍 👍 👍

Antwort

Produktempfehlungen