Aktor: FabLock
Der FabLock Actor wird verwendet, um Türschlösser über unseren Client oder die API (z.B. pyfabapi) zu bedienen. Er basiert prinzipiell auf dem Template 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
(binäre Daten) übermittelt werden können (siehe hier) und welche über das spezielle Trait Prodable definiert werden. Dafür gibt es im Borepin Client die Aktionsknöpfe UNLOCK
und IDENTIFY
. Diese senden passende Argumente an den Prozess:
Die Hard- und Software unterstützt nur nicht-permanente Schlösser. Der Aktor kann...
- Schlösser ansteuern
- Schlösser über eine LED identifizieren
- den Zustand des Schlossriegels zurückmelden
Zur Kommunikation mit der FabLock-Hardware wird MQTT verwendet.
Jedes physische FabLock-Modul muss dafür eine eindeutige ID haben. Die ID ist 5 Ziffern lang und hat führende Nullen(--fablock
Parameter).
Um die einzelnen Schlösser im FabLock-Modul zu unterscheiden, hat jedes eine 5-stellige ID mit führenden Nullen (--lock
Parameter).
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
Installation
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
In FabAccess einbinden
Eine nützliche Beispielkonfiguration für FabLocks findet sich in der tfom2023-Demo.
bffh.dhall Snippets
Ressource
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
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" }
],