Tagebuch [Tagebuch] Warenwirtschaftssystem für Zuhause

taks

PCGH-Community-Veteran(in)
#Vorwort

Willkommen zu meinem ersten Raspi Projekt :-)
Das Projekt ist in meinem Kopf schon länger in Planung und wird nun endlich umgesetzt. Das Ganze will ich hier in schriftlicher Form festhalten da ich zum einen gerne hier durch die Tagebücher stöbere und nun etwas zurückgeben will. Zum Anderen hoffe ich selbst die Übersicht über das Projekt ein bisschen besser behalten zu können. Da ich von Berufswegen mit Softwareentwicklung zu tun habe und als Hobby gerne an Sachen herumbastle sollte das Projekt eigentlich ohne grössere Probleme umsetzbar sein. Ob es wirklich so ist wird sich hier im Tagebuch mit der Zeit zeigen ^^

Ich wünsche euch viel Spass beim Lesen und immer her mit euren Meinungen, Ideen und Einwänden.


#Projektvorstellung

Problem & Lösung
Der Grund für das Projekt ist die momentane, unübersichtliche Verwaltung unseren Vorräte im Keller. Da wir viele Dinge auf Vorrat kaufen wenn diese reduzierte Preise haben hat unser Vorrat doch eine gewisse Grösse erreicht welche wir ohne Hilfsmittel nicht mehr übersehen. Dazu kommt, dass wir nächstes Jahr umziehen und einen grösseren Keller haben werden :ugly:
Deshalb ist mein Ziel ein Warenwirtschaftssystem zu entwickeln mit welchem wir unsere Vorräte im Überblick haben. Dazu werden die Vorräte per Strichcode eingescannt und dann auf einem Raspi mit Display verwaltet. Dazu kommen dann eventuell Erweiterungen wie das Ablaufdatum überwachen, etc. Das Projekt soll bis Weihnachten fertig, oder zumindest Einsatzfähig sein da es das Weihnachtsgeschenk für meine Freundin wird. Sie schwärmt schon längere Zeit davon einen eigenen "Laden" im Keller zu haben ^^


Hardware
Das System basiert auf einem Raspberry PI 4 als Rechner, einem 7" Touchscreen als Benutzerschnittstelle und einem Barcodescanner zum Erfassen bzw. Austragen der Produkte.

Raspberry Pi 4 4G Model B
Raspberry Pi 7" Touch Screen
Raspberry Pi Official Raspberry Pi 4 Power
Sandisk Ultra microSD A1 (microSDHC, 16GB, U1, UHS-I)
Datalogic Quickscan Lite Imager Kit

Um die Benutzung ergonomischer zu gestalten wird alles in einem Holzgehäuse untergebracht welches auch einen Halter für den Barcodescanner integriert hat. Eine ungefähre Idee dazu ist schon vorhanden, jedoch muss ich dann erstmal ein bisschen mit dem System arbeiten um zu sehen ob meine Idee auch in der Praxis besteht. Die Konstruktion soll aber möglichst simpel sein und wird aus einem angewinkelten Brett bestehen in welchen das Display eingelassen ist, sowie zwei Seitenwänden und noch ein paar Blenden um das Netzteil etc. zu Kaschieren. Dazu wird das Gehäuse am Schluss noch ansprechend lackiert.


Software (Projektname: Candy Shop)
Die Software wird durch mich in Python programmiert. Soweit zumindest der Plan. Ein paar Scripts habe ich schon mit Python geschrieben aber mit GUI und Datenbankanbindung hab ich zumindest mit Python noch keine Erfahrung. Ich bin dennoch zuversichtlich, da man für ziemlich alles ein Tutorial findet.

Die Software wird in folgende Punkte unterteilt:
- Grundfunktion: Programm Skeleton, die Grundfunktionalität zum Scannen von Strichcodes und die Datenbank-Anbindung sowie Datenbankstrukturen
- GUI: Die Benutzeroberfläche für die Vorratsverwaltung mit Steuerung über das Touchdisplay.
- Online Produktabgleich: Der gescannt Strichcode wiederspiegelt ja nur einen GS1-Code. So ist die Idee, damit wir nicht alle Produkte von Hand erfassen müssen, dass die Produktdaten via GS1-Code übers Internet gesucht werden um, falls noch nicht im System vorhanden, die Informationen ins System zu laden. (Hersteller, Produktname, Gewicht/Menge, etc.)
- Webserver mit Statistik: Um nicht jedesmal in den Keller laufen zu müssen um zu sehen welche Produkte auslaufen oder ablaufen kommt ein Webserver zum Einsatz, damit man vom Smartphone aus den Lagerbestand überprüfen kann.

Ich hab mir mittlerweile schon einige Python IDEs angeschaut und muss mich noch zwischen "Visual Studio Code" und "PyCharm" entscheiden. Wobei mir VS Code irgendwie besser gefällt. Habt ihr sonst noch Empfehlungen?


Herausforderungen
Die grösste Herausforderung wird sein, am Projekt zu Arbeiten ohne das die Freundin etwas mitbekommt :-D
Daneben das vertiefte Auseinandersetzen mit Python sowie Angewöhnung an Raspi mit Rasbian.


#Projektphasen

Das Projekt habe ich in verschiedene Phasen strukturiert welche für mich Sinn ergeben und das Projekt in kleinere Häppchen unterteilt. Ob die Phasen im Verlauf des Projekts angepasst werden kann ich noch nicht sagen. aber es ist gut möglich da ich mit Sicherheit etwas übersehen habe ^^

1. Raspi in Betrieb nehmen -> Abgeschlossen
2. Python Skeleton erstellen -> Abgeschlossen
3. Scanfunktion implementieren -> Abgeschlossen
4. Datenbank einrichten -> Abgeschlossen
5. Datenbankstruktur aufbauen -> Abgeschlossen
6. Scan in Datenbank ablegen -> Abgeschlossen
7. Benutzeroberfläche für Python -> Abgeschlossen
8. Online Produktabgleich/-vorschlag -> Abgeschlossen

9. Gehäuse anfertigen -> In Arbeit
10. Webserver einrichten
11. Webseite Skeleton erstellen
12. Datenbankanbindung für Webseite
13. Webseite erweitern


#Inhaltsverzeichnis

1. Lieferung & Auspacken
2. IDE Auswahl (Kurz Update)
3. Run Raspi Run
4. Code & Scan
5. Erster GUI Entwurf (Kurz Update)
6. Programm-Skeleton (TNotebook)
7. Programm-Skeleton - Progress Incoming
8. Datenbank: Die Erste
9. GUI Refactoring: !#%?-ç(@!!
10. Gehäuse Teil 1
11. Webabfrage & weitere Funktionen
12. Gehäuse Teil 2
 
Zuletzt bearbeitet:
1. Lieferung & Auspacken

Dann mal los mit dem ersten Beitrag :bier:

Nachdem das Paket nach einer Rundreise durch die Schweiz (schon mal ein guter Start wenn die Post nicht einmal die Postleitzahl richtig lesen kann ^^) endlich angekommen ist gehts ans auspacken =)
Paketverfolgung.png


Hier mal eine kleine Übersicht des Pakets:
IMG_20200925_115528.jpg


IMG_20200925_115751.jpg


IMG_20200925_132038.jpg


IMG_20200925_132442.jpg


IMG_20200925_132538.jpg


IMG_20200925_120616.jpg

Dann hab ich mal zu Testzwecken den Strichcodescanner am PC angeschlossen. Ich bin wirklich überrascht wie gut und schnell er Strichcodes erkennt. Hab da glaub einen guten Kauf getätigt. Jetzt muss er nur noch mit dem Raspi zusammenarbeiten ^^

Der Zusammenbau von Raspi und Display ging fix und ohne Probleme, womit ich mich direkt dem Betriebsystem widmen kann.

IMG_20200925_173229.jpg


IMG_20200925_174331.jpg


Da setze ich wie schon geschrieben auf Rasbian (oder wie es neu heisst: "Raspberry Pi OS") in der aktuellsten Version. Ich hoffe das Display wird auch direkt erkannt (was eigentlich so sein sollte). Hier gibt es jedoch schon den ersten Stolperstein. Der **** Cardreader des Laptops macht keine Anstalten die SD-Karte zu erkennen. Auch ein Treiberupdate bringt keine Besserung. Darum muss mein alter USB-Cardreader herhalten welcher jedoch nicht im Büro sondern Zuhause ist... Darum erstmal nach Hause fahren und mit dem USB-Cardreader versuchen.

Ein paar Stunden und eine Mahlzeit später:
Einstecken und die SD-Karte wird erkannt. Was will man mehr :-)
IMG_20200925_212316.jpg


Der Raspberry Pi Imager verrichtet nun fleissig seinen Dienst.
Raspi_Imager.png


Und dann wars das glaub auch schon bis am Montag. Eigentlich wollte ich den Raspi soweit haben das ich Remote auf ihn zugreifen kann um von Zuhause aus daran zu arbeiten. Aber ohne Betriebssystem geht das nicht so recht -.-
Dafür hab ich jetzt übers Wochenende Zeit mich der IDE zu widmen. Vielleicht fange ich auch schon mit den ersten Schritten der Software an. Ich halte euch auf alle Fälle auf dem Laufenden :-)
 
Zuletzt bearbeitet:
2. IDE Auswahl (Kurz Update)


Abend zusammen

Hatte übers Wochenende doch nicht soviel Zeit wie ich dachte. Ist irgendwie auf einmal Sonntag Abend -.-

Aber ich hab mich jetzt für VS Code entschieden. Da ich sonst schon mit Visual Studio arbeite liegt es mir glaub eher als PyCharm. Und es gibt ein hübsches Dark-Theme :-)

VSCode.png


Das wars eigentlich auch schon. Ich hab mir noch ein paar Tutorials mit tkinter als GUI angeschaut, was einen recht guten Eindruck macht. Dann starte ich Morgen mit der Inbetriebnahme des Raspi und hoffe das da alles glatt läuft.

Schönen Abend
 
Zuletzt bearbeitet:
3. Run Raspi Run

Heute gings wie versprochen an die Inbetriebnahme des Raspi. SD-Karte rein, booten, er Läuft! :-)
Leider auf dem Kopf -.-
IMG_20200928_170502.jpg


Also den Bildschirm über die Anzeigensteuerung 180° gedreht.
IMG_20200928_171002.jpg


Sieht korrekt aus, ist es aber nicht. Die Touchsteuerung ist nicht gedreht -.- Aber mit einer kurzen Recherche ist das Problem auch gelöst. "lcd_rotate=2" in die config.txt eingeben, neustarten und alles klappt wie es soll :bier:
IMG_20200928_171059.jpg


Als Nächstes ist der Fernzugriff dran. Da ich von Zuhause aus daran Arbeiten will versuch ich es mit RDP. Dazu muss man nur einen kurzen Befehl in die Concole eingeben, installieren lassen und voila, RDP läuft. Auch der Zugriff von Zuhause über das VPN klappt problemlos.
IMG_20200928_171332.jpg


prntscrn.png


Das coole an der Geschichte, wenn ich mit RDP verbunden bin, kann ich unabhängig davon am Raspi arbeiten. Bin mir von Windows gewohnt, dass es mich abmeldet sobald ich mit RDP drauf zugreife ^^

Als letztes kommt noch die Hintergrundbeleuchtung des Displays dran. Da der Raspi über Nacht durchläuft will ich nicht, dass das Display die ganze Zeit leuchtet. Darum kurz nach dem richtigen Befehl gesucht, eingegeben und das Display wird dunkel :-)
backlight.png


Es ist fast beängstigend wenn alles so einfach klappt ^^ Aber man solls ja nicht verschreien *AufHolzKlopft* Das wars auch schon für Heute. Phase 1 ist erfolgreich abgeschlossen und ich bin zufrieden. Dann kann schon der Spass mit dem Programmieren beginnen ?

Schönen Abend euch allen
 
Zuletzt bearbeitet:
Joar ... das schien schon einfach ... die Knüppel kommen vermutlich noch.
Habe mir mal deine Einkaufsliste angeschaut da ich noch an einer Möglichkeit zum Termin"Sharing" arbeite (MagicMirror war da mal eine Idee) .
Zum Hintergrund ... ich vergesse immer Termine und Aufgaben die innerhalb der Famile aufschlagen. Da wollte ich im Korridor mit einem Infoscreen Abhilfe schaffen welcher mir alle Aufgaben und Anforderungen interaktiv darstellt und Eingaben innerhalb der Domäne verarbeitet und mit Alarmen oder Ähnlichem erinnert ... bin halt vergesslich ^^
 
Vermutlich kommen die noch ^^

Das mit dem Vergesslich sein ist eben ab einem gewissen Alter :-D
Aber MagicMirror hab ich mir auch schon angeschaut, habe nicht wirklich eine Verwendung dafür.
Aber ich würde nicht das 7" Display nehmen sondern einen gebrauchten ~17" Monitor über HDMI.
 
Aber ich würde nicht das 7" Display nehmen sondern einen gebrauchten ~17" Monitor über HDMI.

Ich hatte auch eher an etwas noch größeres gedacht. So >=24"
Wollte eben alle Informationen des Tages anzeigen und bestimmte Services anbieten die das Leben vereinfachen. Termine vom Kindergarten und der Schule vom Großen inkl. Reminder, Arbeitszeiten der Frau, Einkaufsliste die man über die Woche befüllt und am Samstag automatisch aufs Mobiltelefon schickt, Beleuchtung und Musikwiedergabe planen ... naja, der Ganze fancy Kram eben :-]
 
Dann ran an den Spass! :-)
Hier hats ein Tagebuch/Tutorial verlinkt welches ich recht gut fand:
 
4. Code & Scan

Abend zusammen

Heute hab ich den Strichcodescanner am Raspi in Betrieb genommen. Nach dem Einstecken wurde er sofort erkannt und ich konnte direkt in eine Textdatei "schreiben" :-) Komischerweise funktioniert es nicht wenn ich den Scanner am Windows-PC anschliesse und per RDP am Windows-PC versuche in die Textdatei zu "schreiben". Das ist aber auch ned so tragisch da ich es später ned brauchen werde.
IMG_20200929_165936.jpg


IMG_20200929_165953.jpg


Daneben hab ich mich mit Python auseinander gesetzt und versucht den Scanner in eine Applikation ein zu binden. Gesagt getan, die Ausgabe am Bildschirm und das Schreiben in eine Datei funktioniert :hail: Ich bin sehr erleichtert das alles so klappt wie ich mir das vorgestellt habe. Hatte wirklich die Befürchtung, dass der Scanner am Raspi ned läuft und ich was anderes suchen muss.

PythonScanBarcode.png


PythonScanBarcodeTXT.png


Dazu hab ich mir noch ein paar Tutorials betreffend tkinter angesehen (zumindest Teile davon) und ich werf meine Phasenplanung glaub schonmal ein bisschen über den Haufen ^^ Anstelle getrennt eines nach dem Anderen ab zu arbeiten mach ich zuerst einen Quick&Dirty Entwurf und taste mich dann über Refactoring ans Ziel. Da ich Python noch zu wenig kenne scheint mir dieses Vorgehen irgendwie zielführender. Aber am grundlegenden Inhalt und Ablauf der Phasen ändert sich nichts. Ich widme mich zuerst dem Scanning damit ich die entsprechenden Klassen & Objekte erstellen kann, dann die Datenbank dazu um die Objekte ab zu legen und nebenläufig entsteht das GUI.

Hier noch das tkinter Tutorial was ich grad anschaue:
Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.


Gruss & einen schönen Abend
 
Zuletzt bearbeitet:
Hast du denn schon eine frei per Web-API ansprechbar Produktdatenbank gefunden? Da sehe ich das größte Schlagloch. Ansonsten wünsche ich viel Spaß und Erfolg.
 
Hast du denn schon eine frei per Web-API ansprechbar Produktdatenbank gefunden? Da sehe ich das größte Schlagloch. Ansonsten wünsche ich viel Spaß und Erfolg.
Dankeschön, ich hoffe der Spass daran vergeht mir nicht ^^

Mit Vorbehalt, Ja.
Und zwar wäre das https://www.gtinsuche.de/ . Da kann man einfach in der URL die GTIN hinten Anhängen und es kommt die "Produkt-Seite" bei welcher man via HTML-Tags den Produktnamen auslesen können sollte.
Also z.B. https://www.gtinsuche.de/detail?ean=7617014129882
Ein Python-Skript um Daten aus einer Webseite aus zu lesen hab ich schon früher mal geschrieben. Darum denke ich, dass das eigentlich klappen sollte. Auch hab ich auf der Seite keine Nutzungsbeschränkung oder etwas in die Richtung gefunden.

Aber wenn jemand eine andere Idee oder einen Tipp hat bin ich gerne offen dafür :-)
 
5. Erster GUI Entwurf (Kurz Update)

Abend zusammen

Heute hatte ich kaum Zeit für das Projekt, darum gibt es nur ein kurzes Update.

Ich habe einen ersten Entwurf (Wireframe) für die Programmoberfläche zusammengestellt. Und zwar für das "Artikel erfassen" Form. Die Oberfläche ist in 4 Panels unterteilt:
1. Panel: Sind drei Buttons am linken Rand mit welchen ich zwischen den drei Main-Forms umschalten kann. Das sind "Artikel erfassen", "Artikel austragen" und "Übersicht"
2. Panel: Ist ein Grid welches die letzten erfassten Artikel zeigt, damit man nicht die Übersicht verliert, oder schnell den letzten Eintrag korrigieren kann.
3. Panel: Beinhaltet die Eingabefelder für den Artikel.
4. Panel: Besteht aus 4 Buttons für die Steuerung des Artikels. Oben sind "Eingabe speichern" und "Eingabe verwerfen", darunter sind ein + & - Button um die Menge der erfassten Artikel zu verändern, damit man nicht 10 gleiche Artikel scannen muss.

Artikel-Erfassen-Screen.png


Wer ein gutes Programm für Wireframes sucht, ich kann euch folgendes ans Herz legen: https://balsamiq.com/wireframes/

Das wars auch schon. Wünsche einen schönen Abend
 
Zuletzt bearbeitet:
Das sieht doch schon mal gut aus, der Thread bleibt im Abo, interessantes Projekt :daumen:
Nur den Wechsel der Biersorte empfehle ich dringend :fresse: :P
Freut mich zu hören.
Normalerweise gibts ja auch Quöllfrisch, aber von den Feldschlösschen hatte ich die GTIN im Internet gefunden ;-)

edit: grad gesehen, dass es in Deutschland auch eine Feldschlösschen Brauerei gibt. Ich mein aber die hier :-D
 
Zuletzt bearbeitet:
6. Programm-Skeleton (TNotebook)

Hallo zusammen

Ich hatte die letzte Zeit viel um die Ohren, darum gings mit dem Projekt nicht wirklich vorwärts. Aber sollte jetzt wieder besser werden :-)

Ich hab mich die letzten Tage vor allem mit der Benutzeroberfläche (tkinter) auseinander gesetzt. Im Speziellen mit der Fenstersteuerung für meine Verwaltungsapplikation.

Die Applikation soll links drei Buttons um zwischen den einzelnen Fenster umschalten zu können besitzen. Dafür bin ich nun beim "Notebook" gelandet. Ist eigentlich nur eine simple Tab-Steuerung welche meine Bedürfnisse glaub ziemlich erfüllt. Nur kann man weder Breite noch Höhe für die Tab-Buttons festlegen, nur Padding und Margin :motz:Aber ich denke ich find schon noch eine Lösung. Oder hat einer von euch ne Idee dazu?

GUI_Beispiel.png


GUI_Beispiel2.png


Das wars eigentlich auch schon. Im Moment bin ich hauptsächlich am lesen und Tutorials anschauen weil ich mich mit Python nicht auskenne und in den Tutorials erstmal schauen muss wie man Funktionen umsetzen kann. Z.B. mit C# oder Java wäre eine Tab-Steuerung keine grosse Sache, bei Python erscheint es mir schon komplizierter ^^
Aber ich will für den Moment bei Python bleiben ?

Gruss
 
Zuletzt bearbeitet:
7. Programm-Skeleton - Progress Incoming

Geht doch langsam Vorwärts. Bin heute Abend nochmals 2 Stunden dran gesessen und es nimmt doch schon die geplanten Formen an. In den TreeView hab ich mich auch langsam eingearbeitet.

GUI_Beispiel3.png


Jetzt kommt als nächstes noch die restlichen Felder und Buttons für das Form und dann wage ich mich mal an die Datenbank.

Gruss & einen schönen Abend


edit: Ich wollte eigentlich nur nochmal was zu dem Youtube-Kanal sagen welchen ich gefunden habe und ihn super finde. Und zwar ist der Kanal Codemy.com und da find ich das Zeug von John recht unterhaltsam und lehrreich. Wenn jemand ein gutes Tutorial für tkinter braucht, ich kanns nur empfehlen.

 
Zuletzt bearbeitet:
Zurück