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:

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

HauptGui.py
#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!")
scannen.sh
#!/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