1.30.1.1.3.6. KogniDoor-Controller¶
| Kontakt: | Alexander Neumann <alneuman@techfak.uni-bielefeld.de> |
|---|---|
| CITK: | |
| Vorbedingung: | Die KogniHome-Variane von Robotic Service Types wird benötigt, sowie die Python-Pakete |
| Quickstart: |
$ 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. | |