1.30.1.1.3.6. KogniDoor-Controller

Kontakt:

Alexander Neumann <alneuman@techfak.uni-bielefeld.de>

CITK:

kognihome-doorcontroller

Vorbedingung:

Die KogniHome-Variane von Robotic Service Types wird benötigt, sowie die Python-Pakete rsbhsm, welches jedoch bei der Installation mit setuptools bei Bedarf nachinstalliert wird. Diese Pakete müssen über den PYTHONOPATH verfügbar sein.

Quickstart:

doorcontroller benötigt keine weiteren Parameter:

$ doorcontroller

1.30.1.1.3.6.1. RSB-Schnittstellen

Scope Type Description
/io/actor/lock/status rst.door.LockStatus Status des Türschlosses
/io/actor/motor/status rst.door.MotorStatus überwacht Motorfahrt
/io/emr/bluetooth/inside rst.door.BluetoothInfo Authentifiziert BLE-Advertising
/io/emr/bluetooth/outside rst.door.BluetoothInfo Authentifiziert BLE-Advertising
/io/emr/radar rst.door.RadarStatus reagiert auf Personen in der Nähe der Tür
/io/emr/reed rst.door.ContactStatus Überwacht Öffnungszustand der Tür
/service/detection/closingobstacle bool stoppt Motor bei erkanntem Hindernis
/service/detection/knock rst.door.KnockStatus Klopfen an der Tür
/service/detection/openingobstacle bool stoppt Motor bei erkanntem Hindernis
/service/door/checkout int Zeigt Erinnerung, falls beim Verlassen des Hauses kein Beacon des Nutzers mit ID <int> detektiert wird. Öffnet die Tür automatisch, wenn das Beacon in Reichweite kommt.
/service/door/response rst.kognihome.UserNotification reagiert auf Nutzereingaben wenn Nachrichten angezeigt worden sind.
Scope Type Description
/io/actor/lock/get bool Fragt Schlossstatus ab
/io/actor/lock/set rst.door.LockStatus Öffnet Schloss
/io/actor/motor/set rst.door.MotorStatus Fährt Motor auf und zu
/io/control/bluetooth/inside bool Aktiviert/Deaktiviert den Ble-Grabber
/io/control/bluetooth/outside bool Aktiviert/Deaktiviert den Ble-Grabber
/io/vision/eink/backlight/set rst.door.LEDStrip setzt eInk-Beleuchtung
/io/vision/eink/file string Pfad zu einer monochromen Bilddatei
/io/vision/eink/file/1 string .. konkret für Buffer 1
/io/vision/eink/file/2 string .. konkret für Buffer 2
/io/vision/eink/file/3 string .. konkret für Buffer 3
/io/vision/eink/html string HTML-Inhalt zur Anzeige an der Tür
/io/vision/eink/html/1 string .. konkret für Buffer 1
/io/vision/eink/html/2 string .. konkret für Buffer 1
/io/vision/eink/html/3 string .. konkret für Buffer 1
/io/vision/eink/refresh bool zeigt nächsten Buffer an
/io/vision/eink/refresh/1 bool zeigt Buffer 1 an
/io/vision/eink/refresh/2 bool zeigt Buffer 2 an
/io/vision/eink/refresh/3 bool zeigt Buffer 3 an
/io/vision/led/ir int setzt IR-LED-Intensität in der Zarge
/io/vision/led/rgba rst.vision.Color setzt LED-Zargenfarbe
/kognidoor/io/display/model/notification rst.kognihome.UserNotification Sendet Erinnerungsnachricht bei checkout
/service/door/controller/status string Sendet den Namen des aktuellen States
Scope Method Input Output Description
/service/kognidb/ register_app string string Registriert Anwendung ‘door’
/service/kognidb/door get_user_tokens int rst.kognihome.db.IdentificationTokens Fragt mögliche Identifizierungstokens an, um sicherzustellen, dass beim Verlassen des Hauses Nutzer mit der ID <int> ein valides Token mit sich führen

1.30.1.1.3.6.2. FSM-Logik

Um auf Ereignisse angemessen reagieren zu können, ist doorcontroller als State Machine bzw. endlicher Automat konzipiert. Zu jedem Zeitpunkt wird einer der folgenden Status angenommen:

Initial:Der Zustand wird während der Initiliesierung eingenommen und danach sofort verlassen.
AccessDenied:Wir nach einem fehlgeschlagenen Authentifizierungsversuch betreten.
BlockedInside:Wenn die Tür aufgrund eines Hindernisses auf der Innenseite der Tür nicht Öffnen kann.
BlockedOutside:Wenn aufgrund eines Hindernisses beim Zufahren der Tür Einklemmen droht.
CLosingDoor:Während die Tür automatisch zugefahren wird.
DetectBeacon:Es wird für die Authentifizierung auf ein Token/Beacon gewartet.
DetectPerson:Platzhalter-Status für weitere Detektionsschritte. Wird im Moment sofort wieder (erfolgreich) verlassen.
DoorClosed:Die Tür gilt als geschlossen.
DoorLockedAndClosed:
 Die Tür wird als geschlossen und verriegelt angenommen.
DoorNotClosed:Die Tür ist (zumindest einen Spalt weit) offen.
LockLock:Schließt das Türschloss.
LockUnlock:Entriegelt das Türschloss.
OpeningAutomatic:
 Fährt die Tür auf.
OpeningManual:Wartet auf manuelle Öffnung der Tür oder (wie momentan konfiguriert) leitet den Übergang zum automatischen Öffnen ein.
PendingCheckout:
 Eine Person hat das Verlassen des Hauses angekündigt. Die Tür wartet auf weitere Ereignisse, um zu Öffnen.

1.30.1.1.3.6.2.1. Funktionslose Status

Einige Status wurden konzipiert, sind jedoch bisher nicht in die Kontrolllogik integriert:

PersonEngage:Löst eigeninitiativ Aktionen aus, um Personen vor der Tür anzusprechen.
PersonPresent:Wird eingenommen, wenn eine Person sich vor der Tür aufhält, aber keine weiteren Ereignisse auslöst.
RecordMessage:Aufnahme eine Sprach-/Videonachricht bei Abwesenheit der Bewohner.
WaitingForResponse:
 Wird nach dem Klopfen eingenommen, wenn ein Bewohner benachrichtigt wird. Dieser Schritt ist obsolet, da Klopfereignisse direkt an den Nutzer mitteln Smartphone-App übermittelt werden.

1.30.1.1.3.6.2.2. Aktueller Stategraph