Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| talking_pi [2018/07/12 22:16] – [Bauteile:] 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. | ||