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.
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.
Besteht aus drei Teilen:
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;
# 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.
# 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
- Erstellen der QR-Codes https://white.qrd.by/user/bulk/import/upload
- QR-Code Scanner https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scanner-with-zbar/
- Datenbank SQLite3 https://randomnerdtutorials.com/sqlite-database-on-a-raspberry-pi/ https://docs.python.org/3/library/sqlite3.html http://www.schwarze-schuette.de/wp-content/uploads/2011/05/SQLite-Tutorial-13.pdf
- GUI https://tutorials-raspberrypi.de/programmieren-lernen-am-raspberry-pi-teil-3-gui-erstellen/