# Aktor: FabLock Der FabLock Actor wird verwendet, um Türschlösser über unseren Client oder die API (z.B. [pyfabapi](https://docs.fab-access.org/books/schnittstellen-und-apis/page/fabaccess-api#bkmrk-pyfabapi "FabAccess API")) zu bedienen. Er basiert prinzipiell auf dem Template [Aktor: Generisches Python-Template für "Process"](https://docs.fab-access.org/books/plugins-aktoren-initiatoren/page/aktor-generisches-python-template-fur-process "Aktor: Generisches Python-Template für "Process""). Der Aktor unterstüzt darüber hinaus jedoch noch die dafür notwendigen Spezialargumente, die über den Spezialzustand [`raw`](https://docs.fab-access.org/books/was-ist-fabaccess-grundkonzepte/page/zustande-traits#bkmrk-fabaccess-api) (binäre Daten) übermittelt werden können (siehe [hier](https://gitlab.com/fabinfra/fabaccess/actors/fablock/-/blob/main/main.py?ref_type=heads#L8)) und welche in der Dhall-Hauptkonfiguration über das spezielle Trait [Prodable](https://docs.fab-access.org/link/262#bkmrk-optional-information) definiert werden. Dafür gibt es im Borepin Client die Aktionsknöpfe [`UNLOCK`](https://docs.fab-access.org/books/fabaccess-konfiguration/page/client-benutzen-und-typische-konfigurationsfehler-bei-server-und-clients#bkmrk-eine-ressource-bedie) und [`IDENTIFY`](https://docs.fab-access.org/books/fabaccess-konfiguration/page/client-benutzen-und-typische-konfigurationsfehler-bei-server-und-clients#bkmrk-eine-ressource-bedie). Diese senden passende Argumente an den Prozess: - [`"action: unlock"`](https://gitlab.com/fabinfra/fabaccess/borepin/-/blob/main/Borepin/Borepin/PageModel/MachinePageModel.cs?ref_type=heads#L258) - `"action: identify"`

Die Hard- und Software unterstützt nur nicht-permanente Schlösser.

Zur Kommunikation mit der FabLock-Hardware wird MQTT verwendet. Jedes [physische FabLock-Modul](https://docs.fab-access.org/books/schliessfacher-locker/page/ikea-kallax-regal-mit-fablock "FabLock") muss dafür eine eindeutige ID haben. Die ID ist 5 Ziffern lang und hat führende Nullen (`--fablock` Parameter), also z.B. `00001`. Um die einzelnen Schlösser im FabLock-Modul zu unterscheiden, hat jedes eine 5-stellige ID mit führenden Nullen (`--lock` Parameter), also z.B. `00091`. Da verschiedene Schlösser unterschiedliche Auslösezeiten haben und diese eingehalten werden müssen, um die Funktionalität des Schlosses zu erhalten, können diese nur an der Hardware eingestellt werden. Die LED blinkt alle 500ms Sekunden, wenn sie identifiziert wird. Und leuchtet dauerhaft, wenn das Schloss entriegelt ist. Der Zustand des Riegels wird alle 30 Sekunden gemeldet. Quellcode für den Aktor: [https://gitlab.com/fabinfra/fabaccess/actors/fablock](https://gitlab.com/fabinfra/fabaccess/actors/fablock) ## Installation ```929818 mkdir -p /opt/fabinfra/adapters/ cd /opt/fabinfra/adapters/ git clone https://gitlab.com/fabinfra/fabaccess/actors/fablock.git chmod +x fablock/main.py chown -R bffh:bffh /opt/fabinfra/adapters/fablock/ cd /opt/fabinfra/adapters/fablock/ python3 -m venv env . env/bin/activate #activate venv pip install -r requirements.txt ``` ## Konfigurationsparameter - `--host` MQTT Server Addresse - `--port` MQTT Server Port - `--user` MQTT User (optional) - `--password` MQTT Passwort (optional) - `--fablock` FabLock ID - `--lock` Lock ID ## [](#mqtt-commands)MQTT Befehle Das allgemeine Schema lautet: `/fablock/[FabLock-ID]/[Lock-ID]/[event]`. In unserem Python Aktor verwenden wir im Einklang mit der dafür geschriebenen Firmware ([FabLock for ESP8266](https://gitlab.com/fabinfra/fabhardware/fablock) oder [FabLock for Ants Make AM-022](https://gitlab.com/fabinfra/fabhardware/fablock-kallax)) die folgenden Topics: - `/fablock/00001/00001/trigger` - Schloss betätigen- die passende Aktion für den Borepin-Button `UNLOCK` - `/fablock/00001/00001/identify` - LED blinken lassen und visuell leicht erkennbar machen - die passende Aktion für den Borepin-Button `IDENTIFY` - `/fablock/00001/00001/feedback` - Status des Schlossriegels (Deadbolt) erhalten ## In FabAccess einbinden Eine nützliche Beispielkonfiguration für FabLocks findet sich in der [tfom2023-Demo](https://gitlab.com/fabinfra/fabaccess/demos-environments/tfom23-demo/-/blob/main/bffh.dhall?ref_type=heads). ### bffh.dhall Snippets Ressource ```ini LBoxx_1 = { name = "FabLock Tools", description = "LBoxx with Tools of the FabLock Project", disclose = "tfom23.disclose", read = "tfom23.read", write = "tfom23.lboxx.write", manage = "tfom23.manage", category = "LBoxx", prodable = True, }, ``` Aktor ```860133 fablock_lboxx_1 = { module = "Process", params = { cmd = "python", args = /opt/fabinfra/adapters/fablock/main.py --host 127.0.0.1 --user MQTT_USER --password MQTT_PASSWOR --fablock 00001 --lock 00001" } }, ``` Zuweisung ``` actor_connections = [ { machine = "LBoxx_1", actor = "fablock_lboxx_1" } ], ```