343max / grocery-scanner

0 stars 0 forks source link

how i do it (in german) #1

Open diplix opened 6 months ago

diplix commented 6 months ago

ich habe schon seit ner ganzen weile nen barcode scanner am kühlschrank hängen, der wiederum an nem pi-zero hängt der die barcodes bisher immer zu meinem „barcode-buddy“ geschickt hat. der schaut die barcodes entweder in grocy nach oder in einer der grossen barcode datenbanken.

was für mich nie wirklich funktioniert hat war der „intended use“, nämlich die bestandsverwaltung von lebensmitteln mit grocy. das funktioniert einfach nicht auf dauer. auch der „intended use“ von barcode buddy mit verschiedenen modi, mit denen man gescannte artikel als verbraucht, gekauft, geöffnet oderverdorben an grocy weitergeben konnte, hat nie funktioniert.

einzig und allein die verwaltung meines (kuh) milch-bestands hat funktioniert, hab ich hier mal beschrieben: https://mstdn.io/@ix/111398037387314478

vorgestern hatte ich eine idee, wie der scanner sich doch nützlich machen kann und die liess sich mit den vorhandenen mitteln (home assistant mit konfigurierter bring-integration, barcode buddy, grocy) auch schnell umsetzen.

  1. ab jetzt meldet der barcode-scanner die barcodes per webhook an home assistant
  2. der prüft über eine rest-abfrage bei grocy den barcode
  3. wenn der gescannte barcode ein milch-barcode ist, wird der alte ablauf ausgelöst (barcode an barcode buddy, der den bestand in grocy um eine tüte milch reduziert)
  4. wenn der gescannte barcode grocy unbekannt ist, wird der barcode auch an barcode buddy (BCB) weitergegeben. BCB macht das nachschlagen und eintragen des barcodes in grocy sehr einfach, BCB dient damit quasi als datenbank-frontend für die barcode-datenbank grocy.
  5. wenn der gescannte barcoe bekannt ist, wird der produktname aus der rest-query genommen und an bring weitergegeben und landet damit auf der einkaufsliste.

tl;dr: mit einer einzigen automation und zwei hilfsprogrammen (BCB und grocy) landen alle produkte die ich scanne auf der bring einkaufsliste. grocy ist dabei eine hervorragende und leicht abzufragende barcode datenbank

alias: barcode scan verarbeiten
description: ""
trigger:
  - platform: webhook
    allowed_methods:
      - POST
      - PUT
    local_only: true
    webhook_id: barcode-scan-verarbeiten-ANsgKiwzP7iVbWxiEC1SWgJq
condition: []
action:
  - service: rest_command.grocy_get_product_by_barcode
    metadata: {}
    data:
      barcode: "{{trigger.data.barcode}}"
    response_variable: grocy_response
    alias: Barcode → Grocy Produkt
  - if:
      - condition: template
        value_template: "{{ grocy_response['status'] == 200 }}"
        alias: Barcode gefunden?
    then:
      - alias: Parse data
        variables:
          product_name: "{{ grocy_response.content.product.name }}"
      - if:
          - condition: template
            value_template: "{{ grocy_response.content.product.name == 'Milch' }}"
            alias: Wenn Milch, dann Barcodebuddy
        then:
          - service: shell_command.curl
            data:
              url: http://192.168.1.232:8085/index.php?add={{trigger.data.barcode}}
              method: get
            alias: Barcode weiter zu Barcodebudy
        else:
          - service: todo.add_item
            metadata: {}
            data:
              item: "{{ grocy_response.content.product.name }}"
            target:
              entity_id: todo.zuhause
          - service: snips.say
            metadata: {}
            data:
              site_id: ivanka
              text: "{{ grocy_response.content.product.name }} hinzugefügt."
            alias: snips .say [Produkt] hinzugefügt
        alias: Milch zu Barcodebuddy, alles andere zur Einkaufsliste
    else:
      - service: shell_command.curl
        data:
          url: http://192.168.1.232:8085/index.php?add={{trigger.data.barcode}}
          method: get
        alias: Barcode weiter zu Barcodebudy
mode: single
343max commented 6 months ago

Ach toll, kaum packt man sein obskures Home Automation Projekt auf Github, schon kommt @diplix vorbei und blogt einem in die Issues. Toll!

Ich habe mir grocy kurz angesehen, und beschlossen, dass das bei mir nichts wird. Bring geht leider auch nicht gut, weil man das Produkte nicht umbenennen kann, was für meinen Workflow aber zwingend notwendig ist. Jetzt hat mich vorhin jemand auf Grocery aufmerksam gemacht, dass ist eine App, die sehr hübsch ist und Apples Reminder nutzt. Ich dachte, da käme ich nicht ran, aber Reminder und Calender kann man auch mit belieibigen IMAP Diensten wie Google oder Fastmail betreiben: darüber sollte es hoffentlich möglich sein, irgendwie in diese Listen zu schreiben. Ansonsten experimentiere ich damit rum die API von AnyList reverse zu engeeneren, was ein ziemlich schmerzhafter Prozess ist, weil die Protobuf Objekte in Formdate von HTTP Post Requests packen.

diplix commented 6 months ago

ja, dass bring beim produkt-editieren so unflexibel ist schmerzt, aber ich kann damit leben: löschen und neuanlegen zum „umbenennen“ geht (in der web version kann man allerdings nicht mal löschen) — die bring-home-assistant-integration macht das hinter den kulissen beim umbenennen auch so.

auch wenn die anzahl dienste die ich nutze wie overkill wirkt und wohl auch ist, was ich immer wieder neu lerne: alles was zu viele manuelle schritte erfordert funktioniert nicht, alles was zu > 90% automatisiert ist und in der anwendung einfach und logisch ist läuft und läuft und integriert sich in den alltag.

vicegold commented 6 months ago

Jetzt hat mich vorhin jemand auf Grocery aufmerksam gemacht, dass ist eine App, die sehr hübsch ist und Apples Reminder nutzt. Ich dachte, da käme ich nicht ran, aber Reminder und Calender kann man auch mit belieibigen IMAP Diensten wie Google oder Fastmail betreiben: darüber sollte es hoffentlich möglich sein, irgendwie in diese Listen zu schreiben.

Falls der Weg über Grocery via IMAP nicht klappt: Grocery unterstützt Shortcuts. Falls du deinen Bring-Scanner über macOS laufen lässt, könntest du das gleiche auch mit Shortcuts über Grocery laufen lassen indem du die Shortcuts programmatisch ausführst und die die Barcode/Produkt-Daten übergibst: https://support.apple.com/en-ph/guide/shortcuts-mac/apd455c82f02/mac

Das ganze geht theoretisch auch mit https://www.pushcut.io und deren webhooks, aber Pushcut muss dazu während des Scannens auf deinem iPhone aktiv im Vordergrund sein.

Habe das Ganze nie mit Grocery getestet, weiß also nicht wie zuverlässig es funktionieren würde.