.. _`kognihome/mirror/mirrorgui`:

KogniMirror-GUI
===============

:Kontakt: Alexander Neumann <alneuman@techfak.uni-bielefeld.de>
:CITK: `kognimirror-gui <https://opensource.cit-ec.de/projects/citk/repository/revisions/master/entry/projects/kognimirror-gui.project>`_
:Vorbedingung:

    :ref:`tools/kogniserver` ist installiert, sowie die für dessen Betrieb notwendige :ref:`tools/kogniconfig`.
    Außerdem wurde das Frontend installiert und im Zuge dessen, alle Dateien nach `prefix/var/www/kogniserver`
    kopiert.

:Quickstart:

    Das Frontend wird durch :ref:`tools/kogniserver` bereitgestellt. Es muss keinerlei eigenständige Komponente laufen.


RSB-Schnittstellen
------------------

.. rsbpubsub:: IN /io/display/mirror/pointing rst.math.Vec2DFloat DESC
.. rsbpubsub:: IN /io/display/mirror/model/video/show string URL zu einer Videodatei auf dem Server
.. rsbpubsub:: IN /io/display/mirror/model/icl/correctionEnabled bool An/Aus Kontrastverstärkung
.. rsbpubsub:: IN /io/display/mirror/model/icl/zoomEnabled bool An/Aus Gesichtszoom
.. rsbpubsub:: IN /io/display/mirror/model/icl/shiftEnabled string An/Aus Farbrotation
.. rsbpubsub:: IN /io/display/mirror/model/icl/recordingEnabled bool An/Aus Videoaufzeichnung
.. rsbpubsub:: IN /io/display/mirror/face string Detektierte Person vor dem Spiegel
.. rsbpubsub:: IN /io/display/mirror/model/icl/mode string Modus der ICL-Komponenten
.. rsbpubsub:: IN /io/display/mirror/model/icl/heartrate int Puls der erkannten Person
.. rsbpubsub:: IN /io/display/mirror/model/widgets/calendar/enabled bool (De-)Aktiviert Kalendar-Widget (true=An)
.. rsbpubsub:: IN /io/display/mirror/model/widgets/clock/enabled bool (De-)Aktiviert Uhr-Widgets (true=An)
.. rsbpubsub:: IN /io/display/mirror/model/widgets/mobiel/enabled bool (De-)Aktiviert Mobiel-Widgets (true=An)
.. rsbpubsub:: IN /io/display/mirror/model/widgets/weather/enabled bool (De-)Aktiviert Wetter-Widgets (true=An)
.. rsbpubsub:: IN /io/display/mirror/model/mode string Setzt den aktuellen Anzeigemodus des Spieges
.. rsbpubsub:: IN /io/display/mirror/model/speechEnabled boolean Signalisiert ob Spracherkennung aktiv
.. rsbpubsub:: IN /io/display/mirror/model/speechDetected string Zeigt erkannte Phrase an

.. rsbpubsub:: IN /service/wardrobe/storage/status rst.kognihome.WardrobeStatus Überwacht den Zustand der Garderobe, um Aktionen durchzuführen
.. rsbpubsub:: IN /service/wardrobe/drawer/status/1 bool Bindet Status der ersten Schublade and das ViewModel
.. rsbpubsub:: IN /service/wardrobe/drawer/status/2 bool Bindet Status der zweiten Schublade and das ViewModel
.. rsbpubsub:: IN /service/wardrobe/drawer/status/2 bool Bindet Status der dritten Schublade and das ViewModel

.. rsbpubsublist::
    :type: IN

.. rsbpubsub:: OUT-Intern /io/display/mirror/model/icl/correctionEnabled bool An/Aus Kontrastverstärkung
.. rsbpubsub:: OUT-Intern /io/display/mirror/model/icl/zoomEnabled bool An/Aus Gesichtszoom
.. rsbpubsub:: OUT-Intern /io/display/mirror/model/icl/shiftEnabled string An/Aus Farbrotation
.. rsbpubsub:: OUT-Intern /io/display/mirror/model/icl/recordingEnabled bool aktiviert Videoaufzeichnung
.. rsbpubsub:: OUT-Intern /io/display/mirror/model/icl/mode string Modus der ICL-Komponenten
.. rsbpubsub:: OUT-Intern /service/pointing/updaterate int maximaler Intervall von Zeigegesten in ms
.. rsbpubsub:: OUT-Intern /io/display/mirror/model/widgets/calendar/enabled bool Status des Kalendar-Widgets
.. rsbpubsub:: OUT-Intern /io/display/mirror/model/widgets/clock/enabled bool Status des Uhr-Widgets
.. rsbpubsub:: OUT-Intern /io/display/mirror/model/widgets/mobiel/enabled bool Status des Mobiel-Widgets
.. rsbpubsub:: OUT-Intern /io/display/mirror/model/widgets/weather/enabled bool Status des Wetter-Widgets
.. rsbpubsub:: OUT-Intern /io/display/mirror/faceMode string (De-)Aktiviert bei Bedarf die Gesichtserkennung

.. rsbpubsub:: OUT-Pub-1 /service/wardrobe/drawer/set/1 bool Öffnet Schublade 1
.. rsbpubsub:: OUT-Pub-1 /service/wardrobe/drawer/status/2 bool Öffnet Schublade 2
.. rsbpubsub:: OUT-Pub-1 /service/wardrobe/drawer/status/3 bool Öffnet Schublade 3
.. rsbpubsub:: OUT-Pub-1 /service/wardrobe/storage/put int Lagert Kleidungsstück auf Bügel <int>
.. rsbpubsub:: OUT-Pub-1 /service/wardrobe/storage/get int Fragt Kleidungsstück auf Bügel <int> an
.. rsbpubsub:: OUT-Pub-1 /service/door/checkout int Übermittelt die ID des Bewohners, der das Haus verlassen möchte


.. rsbpubsublist::
    :type: OUT

.. rsbrpc:: CALLS /service/kognidb/ register_app string string Registriert Anwendung 'mirror'
.. rsbrpc:: CALLS /service/kognidb/mirror get_empty_hanger string int Stellt leeren Bügel bei checkin bereit
.. rsbrpc:: CALLS /service/kognidb/mirror get_clothing rst.kognihome.db.ClothingQuery rst.kognihome.db.ClothingResult Erfragt Kleidungsstücke
    für erkannten Benutzer beim Checkout
.. rsbrpc:: CALLS /service/kognidb/mirror get_token_config string rst.kognihome.db.Configuration Lädt Konfiguration für identifizierten Benutzer
.. rsbrpc:: CALLS /service/kognidb/mirror get_user_config int rst.kognihome.db.Configuration Lädt Standardkonfiguration, wenn kein Nutzer erkannt wurde

.. rsbrpclist::
    :type: CALLS

Eigenschaften
-------------

Anzeigemodi
^^^^^^^^^^^

Die Funktionalität des Spiegels ist auf verschiedene Modi aufgeteilt:

* *dashboard* -- zeigt die konfigurierten Widgets ab
* *settings* -- wird aktiviert sobald eine Zeigegeste detektiert wird. Erlaubt
    dem Nutzer die Auswahl aus weiteren Einstellungsmöglichkeiten
* *widgets* -- erlaubt das Konfigurieren von Widgets bzw. dem Dashboard
* *checkout* -- Aktiviert die Prozedur zum Verlassen des Hauses
* *checkin* -- Aktiviert die Akunftprozedur zur Verstauung von Jacke/Mantel und
    persönlichen Gegenständen
* *video* -- zeigt mögliche Einstellungen für das :term:`ICL`-Backend
* *detection* -- Erlaubt das (Nach-)Trainieren der Gesichtserkennung

Webservices
^^^^^^^^^^^

Standardmäßig wird die GUI über ``localhost:8080`` im Offline-Modus gestartet.
Das heißt, dass Mobiel- und Wetterinformationen aus dem Projektordner ``app/data`` geladen werden.
Alternativ kann der Online-Modus mit ``localhost:8080?offline=false`` aktiviert werden.
Im Online-Modus wird das Wetter immer abhängig von den Positionsdaten des Browsers bestimmt.
Es ist deshalb wichtig, dass die Nachfrage des Browsers zum Teilen der Positionsdaten bejaht wird, wenn
der Online-Modus genutzt werden soll. Mobiel-Daten werden über die Station-ID ermittelt.
Diese ist standardmäßig ``23005594``, was der Station *Wellensiek* entspricht. Eine andere Station kann mit
``http://localhost:8181?offline=false&station=23005083`` eingestellt werden. In diesem Beispiel wird
die Station *Bethel* ausgewählt.