Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
talking_pi [2018/07/12 22:39] – [Code-Ausschnitte:] student | talking_pi [2023/07/03 10:16] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Talking Pi ====== | ||
+ | {{gruppe7.jpg? | ||
+ | ==== Projekt Hintergrund (Implementierung verschiedener Peripheriegeräte): | ||
+ | |||
+ | |||
+ | Als erstes Peripheriegerät stellt das NFC Shield (Near Field Communication), | ||
+ | Dies ist besonders im Gesundheitswesen von Bedeutung und kann den Schutz der hoch sensiblen personenbezogenen Daten, sowie darüber hinaus die Dokumentationspflicht unterstützen. | ||
+ | Hinzukommend als zweites Peripheriegerät bietet die Komponente Spracherkennung zukunftsorientiert sowie ausbaubar die Chance GUI's abzulösen. Die Form des Sprachassistenten kann dabei helfen, die Erstellung von medizinischen Dokumenten zu erleichtern, | ||
+ | ==== Projektbeschreibung: | ||
+ | |||
+ | So soll für einen (fiktiven) Medikamentenschrank die Authentifizierung für 3 verschiedene Personengruppen innerhalb eines Klinikums (Chefarzt, Krankenschwester, | ||
+ | Nach erfolgreichem Access der Karte wird die Auswahlmöglichkeit eröffnet, entweder die Sprachsteuerung (automatisch) zu starten oder durch Betätigung des dritten Peripheriegeräts, | ||
+ | Darauf folgend wird anhand der anfänglichen UID Zuordnung das entsprechende Schnittstellendokument zur Übersicht sowie Kontrolle der protokollierten Entnahme | ||
+ | geöffnet. | ||
+ | |||
+ | ==== Strukturskizze: | ||
+ | |||
+ | {{strukturskizze.png}} | ||
+ | ==== Bauteile: ==== | ||
+ | |||
+ | |||
+ | {{bauteile.png? | ||
+ | |||
+ | *Hinweis: Bauteile als Fritzing nicht verfügbar, für Voicecard s. https:// | ||
+ | ==== Code-Ausschnitte: | ||
+ | |||
+ | |||
+ | <file python NFC.py> | ||
+ | |||
+ | import RPi.GPIO as GPIO | ||
+ | import MFRC522 #Import der Bibliothek MFRC readers/ | ||
+ | from subprocess import Popen #Import des Subprozessmoduls Popen, um externe Programme/ | ||
+ | import time #Import Zeitmodul z.B. für sleepmodus | ||
+ | import signal #Import um GPIOS anzusteuern | ||
+ | |||
+ | # Erfassen v. SIGINT(=Signale die den Prozess beenden) für Bereinigung, | ||
+ | def end_read(signal, | ||
+ | global continue_reading # | ||
+ | continue_reading = False | ||
+ | GPIO.cleanup() | ||
+ | |||
+ | |||
+ | GPIO.setmode (GPIO.BOARD) | ||
+ | GPIO.setup(40, | ||
+ | |||
+ | zaehler=0 # | ||
+ | |||
+ | uid=" | ||
+ | |||
+ | # Hook the SIGINT | ||
+ | signal.signal(signal.SIGINT, | ||
+ | |||
+ | MIFAREReader = MFRC522.MFRC522() | ||
+ | |||
+ | keinesprache= 0 #Button wurde gedrueck, es wird keine Spacherkennung gestartet | ||
+ | erkannt = 0 #Variable fuer die Endlosschleife fuer die Erkennung der Karte | ||
+ | fertig = 0 #Zeit wird aufgenommen und die 5 Sek. laufen | ||
+ | t0 = 0 # | ||
+ | t1 = 0 # | ||
+ | typ = 0 #Typ 1=Chefarzt, Typ 2=KSW, Typ 3=FSJler | ||
+ | |||
+ | |||
+ | |||
+ | while erkannt==0: | ||
+ | global continue_reading | ||
+ | |||
+ | #Erhalte die UID der Karte | ||
+ | (status, | ||
+ | |||
+ | print "Card read UID: %s, | ||
+ | |||
+ | #Wenn UID erkannt: | ||
+ | if status ==MIFAREReader.MI_OK: | ||
+ | | ||
+ | print "Karte erkannt" | ||
+ | (status, | ||
+ | |||
+ | print uid | ||
+ | print "uid0 ist %s " %(uid[0]) #gib die UID aus | ||
+ | |||
+ | if uid[0] == 230 and uid[1] == 209 and uid[2] == 192 and uid[3] == 50 and fertig == 0: | ||
+ | #wenn UID der 230, 209, .. entspricht dann starte oben def. Countdown | ||
+ | fertig = 1 # | ||
+ | typ = 1 # | ||
+ | t0=time.time() | ||
+ | |||
+ | elif uid[0] == 136 and uid[1] == 4 and uid [2] ==139 and uid[3] == 94 and uid[4] ==89 and fertig == 0: | ||
+ | fertig = 1 | ||
+ | typ = 2 | ||
+ | t0=time.time() | ||
+ | | ||
+ | elif uid[0] == 211 and uid[1] == 206 and uid[2] == 150 and uid[3] == 1 and uid[4] == 138 and fertig == 0: | ||
+ | fertig = 1 | ||
+ | typ = 3 | ||
+ | t0=time.time() | ||
+ | |||
+ | |||
+ | else: | ||
+ | print " | ||
+ | |||
+ | t1 = time.time() #wenn Knopf nicht gedrueckt wurde. | ||
+ | if t1-t0 > 5 and fertig == 1 and keinesprache == 0: #Countdown wird heruntergezählt | ||
+ | print "zeit abgelaufen" | ||
+ | erkannt = 1 | ||
+ | if typ == 1: | ||
+ | print " | ||
+ | Popen(["/ | ||
+ | #Funktion zum GPIO XY auf 1 setzen, somit Aktivierung der Spracherkennung | ||
+ | Popen("/ | ||
+ | # | ||
+ | if typ == 2: | ||
+ | print " | ||
+ | Popen(["/ | ||
+ | Popen("/ | ||
+ | if typ == 3: | ||
+ | print " | ||
+ | Popen(["/ | ||
+ | Popen("/ | ||
+ | |||
+ | |||
+ | typ = 0 # | ||
+ | if (GPIO.input(40)==0): | ||
+ | time.sleep(0.1) # | ||
+ | if typ == 1: | ||
+ | keinesprache = 1 | ||
+ | Popen("/ | ||
+ | #Ausfuehren Shell damit Parameter moeglich sind | ||
+ | |||
+ | if typ == 2: | ||
+ | keinesprache = 1 | ||
+ | Popen("/ | ||
+ | | ||
+ | if typ == 3: | ||
+ | keinesprache = 1 | ||
+ | Popen("/ | ||
+ | | ||
+ | print " | ||
+ | #Zeitgeber Start; aktuell; Differenz T0=Start to wird in String konvertiert und somit ausgegeben | ||
+ | |||
+ | time.sleep(0.5) # | ||
+ | |||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | <file bash Ausgabe.sh> | ||
+ | |||
+ | #!/bin/bash | ||
+ | while [ 1 ] | ||
+ | do | ||
+ | if [ -s / | ||
+ | then | ||
+ | echo "$(cat / | ||
+ | echo " | ||
+ | echo "" | ||
+ | rm -f / | ||
+ | touch / | ||
+ | |||
+ | elif [ -s / | ||
+ | then echo "$(cat / | ||
+ | echo " | ||
+ | echo "" | ||
+ | rm -f / | ||
+ | touch / | ||
+ | |||
+ | elif [ -s / | ||
+ | then echo "$(cat / | ||
+ | echo " | ||
+ | echo "" | ||
+ | rm -f / | ||
+ | touch / | ||
+ | |||
+ | else | ||
+ | sleep 10 | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Zukunftsperspektive des Projektes: ==== | ||
+ | |||
+ | Das erarbeitete Projekt stellt einen Prototyp mit viel Ausbaupotenzial dar. Der erste Schritt der Erweiterung wäre einen automatisierten Server und Client Start im selben Netzwerk zu realisieren. | ||
+ | Aufbauend auf der bestehenden Authentifikation mittels UID würde logisch die Integration von erweiterten rollen- und regelbasierten Zugriffskonzepten (RbAC), die das Workflow Management unterstützen und in bestehende Systeme integrierbar sind, folgen. | ||
+ | Dies ist durch die Erstellung des individuellen Wortschatzes für verschiedene Abteilungen / Szenarien im Gesundheitswesen implementierbar. Im Rahmen des (technologischen) Fortschrittsgedanken animiert durch den Ausbau einer digitalisierten Gesundheitsversorgung trägt es dazu bei, den digitalen Informationsfluss, | ||
+ | durch die patientenbezogene Informationshinterlegung innerhalb EPRs, zu unterstützen. |