Aktueller Stand der Implementation

Heute möchte ich mal wieder über den aktuellen Stand der Implementation berichten.

Allgemein:

2015-11-27-Architektur-Schaubild

  • Die Konfigurationsdatei auf dem Server wurde auf das nötigste reduziert.
  • Der workaround mit dem Benutzerrepository als Propertiesdatei wurde mit dem neuen OpenLDAP Backend abgelöst.
  • Die Initialisierung der Karten schreibt automatisch in das LDAP Backend
  • Die Generierung eines random secret per Transponder Chipkarte findet nun automatisiert bei jeder Initialisierung neu statt und landet ordnungsgemäß im LDAP Backend.
  • Die Methode zur Ermittlung der Karteninhalte wurde zentralisiert.
  • Mails werden nun in einem Hintergrund Thread versendet um die Zeit beim Verbindungsaufbau zum Mailserver nicht im Authentisierungsprozess mit dabei zu haben.
  • Die Authentisierung als extra background thread zu integrieren habe ich wieder zurückgenommen. Der Leser liest einfach die Karten im Feld zu schnell aus und da kam es zu mehrfach Authentisierung.
  • Monitor integriert um Verbindungsabbrüche vom Leser zu erkennen um ggf. Aktionen einzuleiten.
  • Serverüberwachung in die FHEM Console integriert (CPU / Load / Speicher / Prozesse / Swap)

Offene Punkte:

  • Der Call bei der FEIG bezüglich der fehlenden SSL Implementierung in den Raspberry Treibern ist noch offen. Hier warte ich auf ein neues Release das bislang nicht angekündigt wurde.
  • Call bei der FEIG eröffnet bzgl. der RandomUID Option der DESFire Karten. Die reale UID wird wohl bei der Authentifizierung nicht ausgelesen und übermittelt.
  • Monitoring Thread erkennt aktuell potentielle Verbindungsabbrüche zwischen Leser und Server. Er schickt daraufhin einen Notifizierungsrequest um den Leser wieder aufzuwecken. Das ist aktuell nur ein Versuch um hinter das Problem zu kommen.
    Evtl. muss ich hier auch noch einen Call bei der FEIG aufmachen.
  • LDAP Kommunikation mit SSL verschlüsseln
  • Ordentlicher Stop-Mechanismus für den Serverprozess
  • Planung und Entwicklung eines grafischen Frontends um die Daten (Benutzer, Transponder, Zugangspunkte, Rollen und Regeln) zu verwalten. Hier bin ich noch am Überlegen ob ich für die Verwaltung einen WebService entwickle oder eine Android App. Ersteres wäre generisch und letzteres stylisch und hip. 🙂

Der erste Monat Testzeitraum

Vor ca. 1 Monat habe ich das Zugangskontrollsystem in Betrieb genommen. Seit dem gab es die ein oder anderen Problemchen.

  1. Der Server schmiert mit einem OutOfMemory ab
  2. Bei Notifikation per Mail (kann man bei Rollen hinterlegen) kann es zu Verzögerungen von bis zu 30 Sekunden kommen.
  3. Der Leser hört auf, KeepAlive requests zu senden

Das erste Problem war relativ schnell gelöst. Schuld war hier die Temparaturmessung des Raspberry. Bei, Auslesen von /proc gibt es hier manchmal einen deadlock. Ich hoffe dass dies bei dem ein oder anderen OS Update behoben wird. Vorläufig habe ich die Temparaturmessung aber deaktiviert.

Das zweite Problem hoffe ich nun so zu lösen, indem ich meine Klasse hierzu mit „Runnable“ ausstatte und die Klasse zur Laufzeit initialisiere und dann im Hintergrund die Mail versenden lasse. Warum nicht multi threading nutzen wenn es die Plattform hergibt.

Das dritte Problem bin ich nur am Rande angegangen. Hier muss ich erst noch ein paar Informationen sammeln. Hierzu habe ich meinen Monitor Thread umgebaut und berechne nun die Zeit, die zum letzten KeepAlive vergangen ist. Wenn hier ein Schwellwert überschritten wird, sende ich einen Befehl an den Leser. Ich möchte versuchen Ihn darüer zu bewegen wieder KeepAlive Requests zu senden.

In dem Zuge habe ich nun auch die LDAP Anbindung eingebaut und die Authentication Klasse ebenfalls als Hintergrundthread implementiert. Dadurch kommt der Notify Thread schneller zurück und kann dadurch schneller neu getriggert werden.

Die Optimierungen und Bugfixes habe ich zwischenzeitlich alle im Programm, jedoch steht der Test noch aus. Ich hoffe dies morgen durchführen zu können. Aktuell sitz ich nämlich in Katzenelbogen in einem Café fest und warte auf meine Frau. 🙂