====== PUTNIK ======
----
==== Beschreibung: ====
Ein Medikamentenschrank, der es dank eines intelligenten Bestellsystems, den Nutzern ermöglicht, notwendige Medizinprodukte und Medikamente anhand eines QR-Code ein zu scannen.\\ Vor jedem Benutzen des Systems wird eine Authentifizierung des Anwenders verlangt. Wenn die Login Daten richtig sind entriegelt das System den Schrank, wenn nicht bleibt er verriegelt.\\ Nach dem erfolgreichen Scanvorgang kann der Bestellauftrag direkt an die Apotheke oder an eine Logistik-Einheit des Krankenhauses geschickt werden.
Dabei führt Putnik eine Datenbank darüber, welcher Bestand noch zur Verfügung steht und ob zu viele oder zu wenige Produkte vorhanden sind.
----
==== Aufbau: ====
{{ :putnikprojektfritzing.jpg?nolink&600 |}}
==== Bauteile: ====
unten links: Touch-LCD-Screen,\\ unten rechts: Raspberry Pi 3,\\ oben rechts: Raspi-cam Kameramodul\\ oben links: Servomotor, um Schrank abschließen zu können.\\ Alles wird verbunden mittels Flachbandkabel bzw. Verbinderkabel.
----
==== Code-Ausschnitte: ====
Import von ,,tkinter“ Bibliothek erforderlich
Python als Programmiersprache
#Die Buttons
#Der Code des ersten Buttons der GUI mit der Funktion Auffüllen
def callback1():
os.system("./scannen.sh") #ruft das bash-skript auf, das den scan ausfuehrt und das Ergebnis ins logfile schreibt
#liest den Medikamenten namen aus dem logfile aus
f = open("logfile")#öffnet die datei "logfile"
medikament = f.read()#liest die datei "logfile" und speichert in variabler medikament
medikament = medikament.strip()#entfernt zeilenumbrüche + leerzeichen
#falls nichts gescannt wurde wird eine fehlermeldung ausgegeben
if medikament == "Barcode konnte nicht gescannt werden, bitte versuchen Sie es erneut." :
box.showwarning("Fehler","Barcode konnte nicht gescannt werden, bitte versuchen Sie es erneut.")
else :
#liest Medikamentenbestand aus dem File "bestand" aus
filename = 'bestand'
medi_bestand = {}#legt ein dictionary an
with open(filename) as fh:#öffnet bestand und schließt es nach gebrauch wieder
for line in fh:
praeparat, bestand = line.strip().split(' ')#jede zeile in bestand enthält 2 parameter mit trennzeichen (split),
medi_bestand[praeparat] = int(bestand.strip())#weist im dictionary jedem praeparat einen wert als int zu
#Medikamente einfuellen
medi_bestand[medikament]+=Slider.get()#erhöht die Anzahl des gescanneten Medikaments um den Wert des Sliders
#speichere die aenderung in datei bestand ab
with open('bestand','w') as file: # w = write
for medikament in medi_bestand:
file.write(medikament + " " + str(medi_bestand[medikament]) + "\n" )#schreibt den bestand wieder als string und fügt zeilenumbruch ein
#zeigt den Erfolgsmeldung auf dem Bildschirm an
box.showinfo('Auffüllen',"Erfolgreicher Scan!")
#!/bin/bash
for ((versuche=0; versuche<10; versuche++))
do
#schieße Foto
scan=$( raspistill -o /home/pi/Projekt/scan.png --width 800 --height 800 --sharpness 100 --contrast 100 )
echo $scan
#bearbeite das Foto, damit das Schwarz besser heraussticht
convert /home/pi/Projekt/scan.png -black-threshold 20% /home/pi/Projekt/bearbeitet.png
#Scanne Barcode
qrcode=$(zbarimg -q /home/pi/Projekt/bearbeitet.png)
#überprüfe ob scannen erfolgreich war, falls ja beende die schleife
if [ $? -eq 0 ]
then
command=$(echo $qrcode | awk -F: '{print $2}')
echo $command > /home/pi/Projekt/logfile
break
fi
#falls nein geht es weiter bis genug versuche gemacht wurden
if [ $versuche -eq 9 ] #nach dem letzten Versuch schreibt er eine Fehlermeldung ins logfile
then
echo "Barcode konnte nicht gescannt werden, bitte versuchen Sie es erneut." > /home/pi/Projekt/logfile
fi
done