# Maschienenzugangssystem (und Türen und....)

Rechte zu Zugängen und Maschienen

Siehe auch Siehe auch [22 Automatisierte Maschinenberechtigungsprüfung](https://wiki.betreiberverein.de/books/projekte-abgeschlossen/page/22-automatisierte-maschinenberechtigungsprufung "22 Automatisierte Maschinenberechtigungsprüfung") - dem Post-Corona-Projekt

# Systeme

## Fabaccess

Siehe auch [22 Automatisierte Maschinenberechtigungsprüfung](https://wiki.betreiberverein.de/books/projekte-abgeschlossen/page/22-automatisierte-maschinenberechtigungsprufung "22 Automatisierte Maschinenberechtigungsprüfung") - dem Post-Corona-

### Links

- [Stand des aktuellen ZAM-Fabaccess-Experiements](https://erlangen.ccc.de/markdown/1bpRFipCScKQkRLIh_o_0g)
- [Konzept](https://pad.gwdg.de/XrReiGdCS-GfcWhEKgjTBA)
- Ein *wenig* [Doku](https://fab-access.readthedocs.io/en/v0.3/)
- [Gitlab Repo](https://gitlab.com/fabinfra/fabaccess)
- [Hardware für Fabacces](https://gitlab.com/fabinfra/fabhardware)
- NFC 
    - [Fabreader-Repo](https://gitlab.com/fabinfra/fabhardware/fabreader)
    - [Doku](https://hackmd.io/qATu8uYdRnOC40aFrB9afg?both)
- Artikel 
    - [Heise](https://heise.de/-5027184)
- Einführungsvieos 
    - [1. Einführung](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702405147280/meeting.mp4);[ 2. Einführung](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) (Gleicher Inhalt, aber andere Leute. Die zweite ist länger und hat mehr Inhalt)
    - [Vorstelleung](https://media.ccc.de/v/rc3-326175-fabaccess#t=2812)

### Funktionsumfang

<span style="background-color: rgb(248, 202, 198);">**TODO**</span>

- Freigabe von Maschienen
- Ausführen beliebiger Skripte
- Abrechnung von Material
- Passende Hardware
- Kommunikation über MQTT
- Hat eine App (was kann die?)
- Abrechnung zwischen den Fablabs (?)
- 

### Einschätzung

#### Konzepte

Viele der Konzepte finde ich (morty) überaus Problematisch. Sehr viel "not invented here" für Probleme, die bereits von anderer Software gelöst sind.

- Benutzer und Maschinenverwaltung in Plain-Text-Dateien. ([https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) ab 13:40)
- Sie sind der Meinung, dass ihre Dateibasierte eigene Datenbank besser ist als eine fertige DB zu verwenden (Morty: Ich Zweifel ernsthaft an deren Kompetenz). ([https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) ab 15:00)
- Auditlog in einer Datei und nicht der DB ([https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) 23:20)
- Rechteverwaltung nur hierarchisch mit Wildcard am Ende, wobei read/write, etc teil der Hierarchie ist. Immerhin gibt es Rollen (kommen danach) ([https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) ab 29:50)
- Sie haben ein sehr interessantes Bild von Rechtehierarchien "Parents" sind eigentlich Children - Evtl denken sie auch einfach Objekthierarchien.... \*schrug\* ([https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) 23:20)
- LDAP als externe Benutzerverwaltung geplant - aber keine Rechte/Gruppen ([https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) (104:00)
- Zertifikate werden vom Client aktuell nicht geprüft ([https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) 107:00)
- Man kann entweder Rollen vergeben oder auch nicht - Rollen nur für bestimmtes zu vergeben geht nicht und ist auch nicht geplant ([https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4](https://recordings.prototypefund.de/presentation/2392dda5fdeb3d4ae538b4738c98e3aeb557847b-1702480827153/meeting.mp4) 113:00)

#### Diflouroborane / bffh  


Windfisch bestätigt den Eindruck, dass sie sehr viel neu erfunden haben und sehr viel Zeit für Nebenschauplätze drauf geht. Grundsätzlich hat er aber den Eindruck, dass der Code OK ist.

#### Fabreader-Code

Der Code hat weder Design noch Architektur. Zum Glück ist er nicht sehr umfangreich, so dass er mit überschaubarem Aufwand umgebaut werden kann. Einige der Architekturentscheidungen sollte man noch mal diskutieren - hält sich aber alles in Grenzen.

## Fabmanger

Kommerzielle Lösung, die aber unter AGPL zur Verfügung steht. Eher auf betreute bzw kommerzielle Spaces ausgelegt. Open Source, in Ruby geschrieben.

- [Webseite](https://www.fab-manager.com/)
- [Source auf Github](https://github.com/sleede/fab-manager)
- [Funktionsumfang](https://www.fab-manager.com/features)
- [Online Demo](https://demonstration.fab-manager.com/#!/)

### Funktionsumfang

Siehe auch [Funktionsumfang](https://www.fab-manager.com/features)

- Kalender
- Räume
- Maschinen
- Reservierungen
- SSO
- Mitgliederverwaltung (viel mehr als wir wohl brauchen)
- Abrechnung
- Materielverwaltung
- [API-Schnittstelle](https://demonstration.fab-manager.com/open_api/doc/v1) Leider sind die meisten Zugriffe nur lesend, was für viele unsere Anforderungen nicht ausreichend ist.
- ...

### Einschätzung

Auf Kommerzielle Projekte ausgelegt. Dafür wirkt der Code aufgeräumt und dokumentiert. Es gibt eine Architekturdokumentation.

## Rosenguarden

Maschienenverwaltungsystem mit Hardware

### Links

- [Konzept](https://pad.gwdg.de/v-xVnpWQREmBGuLG_hYTfQ)
- [Github](https://gitlab.com/roseguarden)

### Funktionsumfang

\*

### Einschätzung

Das Konzept ist konträr zu Fabaccess: Möglichst wenig selber machen, auf fertiges zurückgreifen, Ordentliche Schnittstellen um leicht erweitern zu können.

Das Backend ist in Python und das Frontend in Vue geschrieben.

## Fabman

[Fabman ](https://fabman.io/)kann wahrscheinlich alles was wir wollen, ist aber einfach viel zu teuer.

# Überblick

## Zielsetzung

Ziel ist es Zugang zu Maschinen, und Räumen zu verwalten.

## Wichtige Links

- [Übersicht über die verwendeten Systeme in anderen Makerspaces der DWGD](https://pad.gwdg.de/DsyvzN4TQyyB5M94ZCBihQ#Bereits-laufende-Aktivit%C3%A4ten)
- [PDF über die vorhandenen Zugrangssysteme der Offenen Werkstätten mit Bewertung](https://www.offene-werkstaetten.org/cowiki/zutaten/15)
- [Sammlung der Zugangssysteme der Offenen Werkstätten (mäßig Hilfreich)](https://www.offene-werkstaetten.org/cowiki/sammlungen/11)
- 

## Anforderungen

- [Original Pad](https://www.offene-werkstaetten.org/de/seite/ein-zugangssystem-fuer-offene-werkstaetten)
- [Übersicht über die untersuchten Systeme](https://wiki.betreiberverein.de/books/projekte-aktuell/page/systeme "Systeme")

(H) High Prio  
(M) Medium Prio  
(L) Low Prio  
(R) Rejected

<span class="efont" id="bkmrk-%E2%9D%8C">❌</span> Wird nicht unterstützt  
<span class="efont" id="bkmrk-%E2%9C%85">✅</span> Wird unterstützt  
<span class="efont" id="bkmrk-%E2%9D%93">❓</span> Wird vielleicht unterstützt  
<span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F">〰️</span>Nicht zutreffend -&gt; Muss z.B. in Hardware implementiert werden

<table border="1" id="bkmrk-prio-anforderung-bff" style="border-collapse: collapse; width: 100%; height: 1235.27px;"><colgroup><col style="width: 13.8463%;"></col><col style="width: 43.1459%;"></col><col style="width: 17.9259%;"></col><col style="width: 24.9727%;"></col></colgroup><tbody><tr style="height: 29.9167px;"><td style="height: 29.9167px;">Prio  
</td><td style="height: 29.9167px;">Anforderung  
</td><td style="height: 29.9167px;">BFFH  
</td><td style="height: 29.9167px;">Fabmanager  
</td></tr><tr style="height: 35.5167px;"><td style="height: 35.5167px;">  
</td><td style="height: 35.5167px;">**Berechtigung**  
</td><td style="height: 35.5167px;"><span class="efont" id="bkmrk-">  
</span>

</td><td style="height: 35.5167px;"><span class="efont" id="bkmrk--1">  
</span></td></tr><tr style="height: 80.3167px;"><td style="height: 80.3167px;">H  
</td><td style="height: 80.3167px;">Anbindung SSO / LDAP  
</td><td style="height: 80.3167px;"><span class="efont" id="bkmrk-%E2%9D%8C-1">❌</span>

<span class="efont" id="bkmrk-%28ldap-f%C3%BCr-passwort-a">(LDAP für Passwort angedacht)  
</span>

</td><td style="height: 80.3167px;"><span class="efont" id="bkmrk-%E2%9C%85-1">✅</span></td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">H  
</td><td style="height: 46.7167px;">*Einfaches einpflegen von Berechtigungen/Einweisungen*, durch Einweisende</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9D%8C-2">❌</span></td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9C%85-2">✅</span></td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">M</td><td style="height: 46.7167px;">Zeitabhängige Berechtigungen  
z.B. Presslufthammer nur zwischen 6 und 18 Uhr,</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9D%8C-3">❌</span></td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9D%93-1">❓</span></td></tr><tr style="height: 63.5167px;"><td style="height: 63.5167px;">H  
</td><td style="height: 63.5167px;">Auslaufende Berechtigungen  
 z.B. Zugang zum Aquarium vom 1.1.23 bis 3.1.23.</td><td style="height: 63.5167px;"><span class="efont" id="bkmrk-%E2%9D%8C-4">❌</span> In planung  
</td><td style="height: 63.5167px;"><span class="efont" id="bkmrk-%E2%9C%85-3">✅</span></td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">H  
</td><td style="height: 46.7167px;">Gruppenbasierte Berechtigungen</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9C%85-4">✅</span></td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9D%93-2">❓</span> Kann über Trainings abgebildet werden  
</td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">  
</td><td style="height: 29.9167px;">**Maschienen**  
</td><td style="height: 29.9167px;">  
</td><td style="height: 29.9167px;">  
</td></tr><tr style="height: 102.717px;"><td style="height: 102.717px;">H  
</td><td style="height: 102.717px;">aktivieren/freischalten

z.B. durch  
 \* Strom ein/aus  
 \* Interlock trennen/verbinden

</td><td style="height: 102.717px;"><span class="efont" id="bkmrk-%E2%9C%85-5">✅</span></td><td style="height: 102.717px;"><span class="efont" id="bkmrk-%E2%9D%8C-5">❌</span> - Aber API/Pluginsystem  
</td></tr><tr style="height: 113.917px;"><td style="height: 113.917px;">M  
</td><td style="height: 113.917px;">Zustand überwachen (z.B. gerade in Nutzung)

Material verbrauch, z.B. bei Drucker  
In Betrieb  
Betriebsstundenzähler

</td><td style="height: 113.917px;"><span class="efont" id="bkmrk-%E2%9D%93-3">❓</span> Alle aktivitäten werden in eine Logdatei geschrieben, die man auswerten kann  
</td><td style="height: 113.917px;"><span class="efont" id="bkmrk-%E2%9D%8C---m%C3%BCsste-man-erwei">❌ - Müsste man erweitern</span>  
</td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">M  
</td><td style="height: 46.7167px;">Präsenzsprüfung ("Totmannschalter")</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-1">〰️</span></td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-2">〰️</span></td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">H  
</td><td style="height: 46.7167px;">Maschinenspezifische An-/Abmeld/Betriebs Verhalten</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-3">〰️</span></td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-4">〰️</span></td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">H  
</td><td style="height: 46.7167px;">Maschinenabhängigkeiten (z.B. Lüfung und Klappen korrekt geschaltet)</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-5">〰️</span></td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-6">〰️</span></td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">L  
</td><td style="height: 46.7167px;">Admin Tokens/Zugänge sollten offline noch funktionieren</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-7">〰️</span></td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-8">〰️</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">M  
</td><td style="height: 29.9167px;">Internet-Unabhängiger Funktionserhalt</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-6">✅</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-7">✅</span></td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">H  
</td><td style="height: 46.7167px;">Türen öffnen</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9C%85-8">✅</span></td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9D%93rechteabfrage-%C3%BCber-">❓Rechteabfrage über Plugin  
</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">L  
</td><td style="height: 29.9167px;">Spinde/Fächer für Privatzeugs</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-9">〰️</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-10">〰️</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">M  
</td><td style="height: 29.9167px;">Spinde/Fächer für Geräte</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-11">〰️</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-12">〰️</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">M  
</td><td style="height: 29.9167px;">Reservierungen von Maschinen (und Räumen)</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9D%8C-6">❌</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-9">✅</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">H</td><td style="height: 29.9167px;">Protokollierung von Nutzung</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-10">✅</span> (Logdatei)  
</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-11">✅</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">H  
</td><td style="height: 29.9167px;">Anbindung an Abrechnungssystem</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9D%8C-7">❌</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-12">✅</span></td></tr><tr style="height: 46.7167px;"><td style="height: 46.7167px;">H  
</td><td style="height: 46.7167px;">Letzte x Nutzer:innen</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9C%85-13">✅</span> Nur der letzte / Sonst logdatei  
</td><td style="height: 46.7167px;"><span class="efont" id="bkmrk-%E2%9C%85-14">✅</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">TODO  
</td><td style="height: 29.9167px;">Materialabrechnung  
</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9D%8C-8">❌</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-15">✅</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">R</td><td style="height: 29.9167px;">Warteschlange: -&gt; Wird mit Papier/Whiteboard gmeacht</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-13">〰️</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-14">〰️</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">H  
</td><td style="height: 29.9167px;">RFID Nutzerschnittstelle</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-16">✅</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9D%8C-9">❌</span> - Aber Plugin-system  
</td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">M  
</td><td style="height: 29.9167px;">Display für Feedback</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-15">〰️</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E3%80%B0%EF%B8%8F-16">〰️</span></td></tr><tr><td style="height: 29.9167px;">H  
</td><td style="height: 29.9167px;">Sicheres RFID-Protokoll (Für Türen) - Siehe auch extra Paragraph  
</td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9C%85-17">✅</span></td><td style="height: 29.9167px;"><span class="efont" id="bkmrk-%E2%9D%8C-10">❌</span></td></tr><tr><td>H  
</td><td>Basisfunktionalität sollte komplette per RFID gehen

Maschinen

Räume

</td><td><span class="efont" id="bkmrk-%E2%9C%85-18">✅</span></td><td><span class="efont" id="bkmrk-%E2%9D%8C-11">❌</span></td></tr><tr><td>  
</td><td>App / Webapp zur Bedienung</td><td><span class="efont" id="bkmrk-%E2%9D%8C-nur-textdateien">❌ Nur Textdateien  
</span></td><td><span class="efont" id="bkmrk-%E2%9C%85-19">✅</span></td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">  
</td><td style="height: 29.9167px;">  
</td><td style="height: 29.9167px;">  
</td><td style="height: 29.9167px;">  
</td></tr><tr style="height: 29.9167px;"><td style="height: 29.9167px;">  
</td><td style="height: 29.9167px;">  
</td><td style="height: 29.9167px;">  
</td><td style="height: 29.9167px;">  
</td></tr></tbody></table>

### RFID

Zum Öffnen der Türen muss es sicher sein. D.h. es sollte nicht möglich sein durch Demontage des Lesers an den Schlüssel zu kommen. Im Inneren ist es ok, wenn man an den Schlüssel kommt - der muss dann halt ggf ausgetauscht werden. -&gt; Verwendung von zwei unterschiedlichen Schlüsseln.

# FabAccess Notizen

#### Community Call 04.03.2023

- SSO/LDAP wurde angefangen in die API einzubauen, klingt aber noch nach work in progress
- Claims auf Ressource können künftig überschrieben werden durch andere Nutzer, wenn Ressource in einem bestimmten Zustand (z.B. fertigen 3D-Drucker übernehmen, der nicht freigegeben wurde)
- "Ablaufzeit" über "Script dranhängen an API"
- Verleihzustand vs. Gerätezustand soll dargestellt werden
- Gerätezustand über Initiator z.B. von MQTT in FabAccess übertragen; z.B. Stromverbauch für x min &lt; y, dann freigeben
- Komplexe Abhängigkeiten z.B. in Homeassistant abbilden und Ergebnis-Signale an FabAccess übertragen
- Ablaufende Berechtigung über API möglich, Implementierung in Kern WIP
- OAuth soll implementiert werden, wird aber nicht alle Mechaniken erlauben
- Login mit gescanntem QR Code als Alternative zu Benutzername/Passwort
- Hackwerk Aalen baut eigenen FabReader (Gehäuse), Zusammenbau der existierenden Designs hat nicht geklappt 
    - [https://gitlab.com/sfz.aalen/projekte/fabaccess-case](https://gitlab.com/sfz.aalen/projekte/fabaccess-case)