Medikamenten-Stell-System

Wir haben ein System entwickelt, welches die Aufgabe des „Medikamenten Stellens“ übernehmen kann. Das Einscannen der einzelnen Medikamente ermöglicht dem Benutzer sich Gewissheit zu verschaffen, ob er das Medikament schon gestellt hat oder nicht. Dabei hat man die Möglichkeit über den Button „neues Medikament einpflegen“ ein neues Medikament, mittels scannen des QR-Codes, welcher sich auf der Verpackung des Medikaments befindet, in die Datenbank einzupflegen und über den Button „Medikament stellen“ ein Medikament für die Tageseinnahme vorzubereiten. Dieses geschieht wieder durch das Scannen des QR-Codes, da so die Informationen über das jeweilige Medikament aus der Datenbank abgefragt und ausgegeben werden.

Aufbau:

Bauteile:

Als Bauteile wurden ein Raspberry Pi Touch-LCD-Screen, ein Raspi-Cam Kameramodul und ein Raspberry PI 3 verwendet. Der Raspberry Pi Touch-LCD-Screen und das Raspi-Cam Kameramodul sind über ein Flachbandkabel mit dem Raspberry PI 3 verbunden.

Code-Ausschnitte:

Besteht aus drei Teilen:

  • Graphische Oberfläche
  • Medikament stellen
  • neues Medikament einpflegen

Import von ,,tkinter“ Bibliothek erforderlich

Python als Programmiersprache

Exportieren der Daten aus der SQLite Datenbank in eine CSV-Datei um den QR-Code zu erstellen:

1) Eingabe: .mode csv

2) Eingabe: .separator ,

3) Eingabe: .once Dateiname.csv

4) Eingabe: SELECT * FROM Tabellenname;

medistellen.py
# Code des ersten Buttons mit der Funktion "stellen"
def stellen ():
 
	#Verbindung zur DB
	conn = sqlite3.connect('medis.db')
	curs = conn.cursor() # erzeugen eines Objekts um Datensaetze aus einer DB auszulesen
 
	# sende SQL-Befehl an DB um alle Zeilen der Spalte "gestellt" auf Null zu setzen
	curs.execute("UPDATE stellliste SET gestellt= 0")
 
	conn.commit() # Änderung in der DB speichern
	curs.close  # schliesst den Cursor
	conn.close # Verbindung zur DB schliessen
 
 
	print(" Bitte Medikament einscannen")
	# Startet den VideoStream und warm laufen der Kamera
	vs = VideoStream(usePiCamera=True).start()
	time.sleep(2.0)
 
 
	while True:
        	# Liest das Muster des QR-Codes ein und setzt ein Maximum der Breite von 400 Pixel
        	frame = vs.read()
        	frame = imutils.resize(frame, width=400)
 
        	# Dekodieren des  eingescannten QR-Code
        	barcodes = pyzbar.decode(frame)
 
        	for barcode in barcodes:
                	# wandelt die QR-Code Daten in einen utf-8 string
                	barcodeData = barcode.data.decode("utf-8")
			a,b,c,d,e,f,g,h = barcodeData.split(",") #splittet den qr-code
                	print(barcodeData)
 
                	# Zuweisung der Variablen
                	neumed = b
                	gestellt = 0
 
			#Verbindung zur DB
                	conn = sqlite3.connect('medis.db')
                	cur = conn.cursor()
                	curv = conn.cursor()
 
                	# Abfrage an die DB ob das eingescannte Medikament schon gestellt wurde
                	cur.execute("select * from stellliste WHERE medikament= ? AND gestellt=?",(neumed, gestellt,))
                	# Abfrage an die DB ob das eingescannte Medikament in der DB ist
                	curv.execute("select * from stellliste WHERE medikament= ?",(neumed,))
 
                	# wenn Medikament nicht in der DB ist, gibt es eine Meldung aus
                	if len(list(curv)) == 0: 
                        	print("Medikament nicht gefunden")
 
 			# falls ja, pruefe ob Medikament schon gestellt wurde
                	else:
                        	if len(list(cur)) == 0:         # wenn ja, gebe Meldung/Hinweis
                                	print("Medikament wurde schon gestellt.")
                        	# wenn nicht,setze den Wert fuer gestellt auf 1 in der DB
                        	else:
                                	cur.execute(" UPDATE stellliste SET gestellt=1 WHERE medikament=?",(neumed,))
 
                        	conn.commit()
                	cur.close
                	conn.close
        	time.sleep(3.0)
 
	vs.stop()

Code-Ausschnitt um ein neues Medikament in die Datenbank hinzuzufügen.

hinzufuegen.py
# dekodiert den eingescannten QR-Code
barcodes = pyzbar.decode(frame)
 
   for barcode in barcodes:
   # wandelt die QR-Code Daten bzw. cvs-Datei in einen utf-8 string um
         barcodeData = barcode.data.decode("utf-8")
         a,b,c,d,e,f,g,h = barcodeData.split(",") #splittet den qr-code
         print(barcodeData)
 
         # Zuweisung der Variablen
         neumed = b
         neudos = c
         neumorg = d
	 neumittags = e
         neuabends = f
         neunachts = g
         neuhinweise = h
	 # Verbindung zur DB
         conn = sqlite3.connect('medis.db')
         cur = conn.cursor()
         cur.execute("select * from stellliste where Medikament=? ",(neumed,))
 
	 # überprüfe ob das Medikament schon in der DB ist, falls ja, beende die Schleife
         if len(list(cur)) != 0:
                print("Medikament schon vorhanden")
	 # wenn nicht,speicher Daten aus dem QR-Code in die DB
	 else:
                print("Medikament neu eingetragen")
                cur1 = conn.cursor()
                cur1.execute("insert into stellliste (medikament, dosierung,morgens, mittags, abends, nachts, hinweise) 
                values(?, ?, ?, ?, ?, ?, ?)", (neumed, neudos, neumorg, neumittags, neuabends, neunachts, neuhinweise))
                conn.commit()
         cur.close
         conn.close # schließt die Verbinung zur DB

Quellen