Elektronische Kassenbons – Teil 1

Vor zwei/drei Wochen veröffentlichte Daniel vom Hack the Plant Podcast und Schrankmonster Blog, eine Nachricht, dass er an einem Projekt arbeitet um die eBons auszulesen und die Informationen wegzuschreiben. Das hat er vor Kurzem in diesem Blog Post veröffentlicht.

Davon inspiriert und mit der Kaufland App ausgestattet, habe ich mich hingesetzt und das Ganze in Python nachgebaut. Und es war der Horror.

Angefangen mit dem Problem, dass es keine Möglichkeit in der App gibt die Bons per Email automatisch zu verschicken. Also kann man diese nur herunterladen und abspeichern. Oder ich hätte irgendwie die Netzwerkkommunikation der App abgefangen. Aber das habe ich mir für später aufgehoben. Beim Abspeichern wird dann auch das aktuelle Datum und Uhrzeit als Dateiname verwendet. D.h. man kann nicht erkennen, welchen Bon man schon gespeichert hat und welchen nicht. Ich habe jetzt viele doppelte PDFs im Ordner.

Das nächste Problem war die PDFs einzulesen und die Daten zu extrahieren, denn die PDFs sind nicht lesbar es sind Bilder. Was mich zu einer Testorgie mit OCR Software Paketen gebracht hat. An Ende bin ich bei pytesseract gelandet. Leider muss dafür auf dem Linux Tesseract installiert sein. Aber das ist ja auch kein Problem, nur fällt jetzt Windows als OS erstmal aus. Nach diversen Einstellungen haben ich dann doch eine Lösung gefunden. Und so kann das Skript jetzt auch die Bons einlesen und sogar kleine Scanfehler erkennen.

Der Rest sollte Makulatur sein. Aus den Summen, wenn man z.B. mehrere Packungen gekauft hat, wieder Einzelpreise berechnen. Und dann alles in die Influx schieben. Jedoch ist mir dann aufgefallen, dass durch die OCR manche Produkte doppelt vorkommen, wenn z.B. ein Leerzeichen nicht sauber erkannt wird. Und so sind das wieder Kleinigkeiten die ich noch ausbessern muss.

Als alles lief, wollte ich das Skript auf meinem Raspi 3 zum laufen bringen, denn auf dem läuft ja auch die Influx und mein PiHole. Der läuft eh immer und ich muss ja deswegen nicht mein Rechner dafür anwerfen. Aber da habe ich die Rechnung nicht mit dem Prozessor des Raspi gemacht. Leider geht dieser komplett in die Knie, wenn pytesseract die Arbeit aufnimmt. Und zwar so arg, dass ich sogar kein Internet mehr habe, weil für PiHole zu wenig Ressourcen übrig bleiben. Ich habe dafür noch keine Lösung, und werde das Auslesen wohl weiterhin auf meinem Rechner durchführen.

Im Augenblick arbeite ich daran die Skripte sauber zu machen (also alle hardgecodeten Logins zu entfernen) damit ich alles nach Github werfen kann. Das stelle ich dann euch zur Verfügung. Und als nächstes sind dann die Lidl Bons dran.

Bei Fragen könnt ihr mich gerne kontaktieren. Hier in den Kommentare oder einfach auf Mastodon, Twitter oder auf dem Telegram Kanal.