===== 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: =====
{{:img-0910.jpg?400|}}
**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;
# 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
===== Quellen =====
- 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/]]