Text anhand von Vergleichsliste in Einkaufsliste umbenennen

folgendes Szenario, angefixt hierdurch ….

ein ESP32 Barcodescanner liefert eine Textnachricht

zB.

Würze flüssig 250 gr Flasche – MAGGI – 202ml

dieser Text soll anhand einer Vergleichstabelle/Datenbank in “MAGGI” umbenannt werden um danach auf die Einkaufsliste zu kommen.
Ist sowas mit HA eigenen Mitteln möglich?

Ich vermute, daß hängt davon ab ob und wie die andere Datenbank abfragbar ist. Per rest commands vielleicht? Dann könnte man den Artikel abfragen und die Antwort automatisieren.

das mit der Datenbank war nur eine erste Idee von mir, bisher gibt es keine Datenbank.
Der Barcodescanner liefert sein Ergebnis (wenn er dann funktioniert) per MQTT, eine Vergleichstabelle gibt es bisher nicht.

Ich habe eine alternative Idee zu einer Datenbank: Einen Key-Value Sensor

über die configuration.yaml (oder später als !include Datei)

template:
  - sensor:
      - name: "Barcode 2 Einkaufsliste"
        unique_id: "barcode2einkaufsliste"
        state: "initialized"
        attributes:
          "Würze flüssig 250 gr Flasche – MAGGI – 202ml": "Maggi"
          "Mandarinen Klasse 1; Peru, Republik Südafrika": "Mandarinen"
          "Dinkelmehl Type 630 Hell und Vielseitig": "Dinkelmehl"
          "Dein Barcode Beispiel: Dein Einkaufslisten Artikelname"

Abfragen tut man die Wertepaare über

{% set barcode = "Dinkelmehl Type 630 Hell und Vielseitig" %}
{{ state_attr('sensor.barcode2einkaufsliste', barcode) }}

Nachteilig, Artikelname muß exakt dem im Wertepaar entsprechen.
Zumindestens, Groß/Kleinschreibung könnte man abfangen:

{% set barcode = "Dinkelmehl Type 630 Hell und Vielseitig" %}
{% set suche = barcode | lower %}
{% set attrs = states.sensor.barcode2einkaufsliste.attributes %}

{% set treffer = namespace(wert="Unbekannt") %}
{% for key, value in attrs.items() %}
  {% if key | lower == suche %}
    {% set treffer.wert = value %}
  {% endif %}
{% endfor %}
{{ treffer.wert }}

Ich könnte mir das auch alles in einem Macro vorstellen, sowohl die Wertepaare als auch die Suchlogik

{% macro barcode_lookup(text) %}
    {% set lookup = {
      "Würze flüssig 250 gr Flasche – MAGGI – 202ml" | lower: "Maggi",
      "Mandarinen Klasse 1; Peru, Republik Südafrika" | lower: "Mandarinen",
      "Dinkelmehl Type 630 Hell und Vielseitig" | lower: "Dinkelmehl",
      "Dein Barcode Beispiel" | lower: "Dein Einkaufslisten Artikelname"
    } %}
    {{ lookup.get(text | lower, "Unbekannt") }}
{% endmacro %}

Die Abfrage wäre denn

{%- from 'macros.jinja' import barcode_lookup as test -%}
{{ test("DINKELMEHL TYPE 630 HELL UND VIELSEITIG") }}

Ich hätte leichte Tendenz für das Macro weil Daten und gleichbleibende Logik zusammen.

EDIT:
Habe den Macro Code nachgebessert und getestet.

Danke für Deinen Beitrag, das scheint ein guter Ansatz zu sein.
Frage: Wie leicht kann man diese “Wertepaare” denn updaten/ergänzen?
wenn es in der config.yaml passiert müsste man wohl nach jeder Anpassung einen Neustart machen, was am Anfang wohl recht mühsam wäre.
Aber man kann ja auch Einträge erstmal “sammeln” und es dann in die config eintragen

wie auch immer, ich muß jetzt erstmal den Barcode-scanner basteln, bevor es hier richtig losgehen kann.

Was verwendest Du denn als Frontend am Handy? Mir gefällt die Bring! App da bisher noch am besten.

Das ist leider etwas nervig.

  • configuration.yaml → hier reicht unter Entwicklerwerkzeuge → YAML → Template-Entitäten erneuern
  • Macros fand ich nichts besseres als den Durchstart

Habe auch viel Gutes über die Bring App gelesen aber meine Frau und ich bleiben bei der einfachen Einkaufsliste Pro von shopping-app.net. Ich bin froh, daß meine Frau das endlich richtig angenommen hat (und auch einfordert :slight_smile: ). Dein Vorhaben finde ich aus technischer Sicht interessant :+1: