Dialogablauf

Zu gewissen Zeiten soll simon den Anwender daran erinnern, seine Medikamente einzunehmen.

Der Benutzer wird gefragt ob er dies bereits gemacht hat. Antwortet er darauf mit „Nein“, soll ihn das System in einem Abstand von ein paar Minuten so lange erinnern bis die Medikamente eingenommen werden.


Umsetzung in simon

Aus dem obigen, schematischen Diagramm lassen sich die Dialogzustände leicht ablesen. Es ergeben sich also:

 

  • 3 Zustände (Erinnerung, Bereits eingenommen und noch nicht eingenommen)
  • 1 zeitgesteuerter Auslöser (der den Dialog zu einer gewissen Uhrzeit startet)
  • 2 sprachliche Übergänge ("Ja", "Nein")
  • 1 zeitgesteuerter Übergang (erneute Erinnerung nach Zeitablauf)

Dieser Dialog lässt sich in dieser Form durch eine Kombination des Dialog- und Akonadi-Plugins umsetzen.


Zustände

Die drei Zustände können direkt als solche angelegt werden. Der Text wurde dabei mit Hilfe des Template-Systems variabel gehalten und mit gebundenen Werten parametrisiert.

So wurde der Name des Systems als statische Variable ($simon$) angelegt um es später leichter an passen zu können. So wäre z.B. denkbar, eigene Sprachausgabe-Texte von einem/-r PflegerIn aufnehmen zu lassen und „simon“ mit dem entsprechenden Namen zu ersetzen.


Die Zeit wurde über die QtScript Integration mittels eines Javascript-Snippets kalkuliert (z.B.: „8 Uhr und 20 Minuten“):


Den Zuständen wurden jeweils mehrere Texte zugewiesen. Beim Auslösen des Dialoges wird dann ein Text aus allen Texten des Zustandes ausgewählt und angezeigt bzw. ausgegeben um die Dialoge nicht zu eintönig erscheinen zu lassen.

Das Templating-System wurde verwendet um mittels eines Parameters die Dialoge entweder formell oder informell wirken zu lassen. Dazu muss nur der Wert des entsprechenden Templateparameters geändert werden.


Zusätzlich zum Text wird auch ein Symbolbild angezeigt das als Avatar konfiguriert wurde.


Für die Ausgabe wird das Sprachausgabesystem (in unserem Fall über den Webserviceprovider und einer lokalen OpenMARY Instanz) und das grafische Interface verwendet.


Auslöser

Der Dialog soll zu einer gewissen Zeit gestartet werden. Dazu verwenden wir eine Kalenderanbindung mit dem Akonadiplugin.

Mit Hilfe des Akonadiplugins können simon Kommandos zeitgesteuert ausgelöst werden. Mit der unteren Konfiguration kann der „Medikamente“ Dialog (simon Trigger: „Medikamente“) also mittels eines Kalendereintrags mit Titel „[simon-command] Dialog//Medikamente“ ausgelöst werden.


Wiederholende Termine werden unterstützt und können für tägliche Erinnerungen verwendet werden.


Optionen

Mittels den Optionen wird zwischen den Zuständen gewechselt.

Im ersten Zustand (der Erinnerung selbst) wird der Benutzer gefragt, ob er die Medikamente bereits eingenommen hat. Er hat daraufhin zwei Optionen:

  • Ja: Wechselt zum Zustand „Eingenommen“
  • Nein: Wechselt zum Zustand „Noch nicht eingenommen“

Im „Eingenommen“ Zustand gibt es nur eine Option („Beenden“) die nach 7 Sekunden (nachdem der Dialogtext gesprochen wurde) automatisch ausgelöst wird.

Auch im „Noch nicht eingenommen“ Zustand existiert eine ähnliche Option. Wird diese ausgelöst, wird jedoch gleichzeitig ein Akonadi-Kommando ausgelöst das den Dialog später erneut starten soll.


Das Akonadi-Kommando führt dabei den Dialog nach 10 Minuten einfach erneut aus.


Damit wurde der oben schematisch dargestellte Dialog komplett in simon umgesetzt.