Zeiterfassung per Touchscreen mit Kimai
Im Bereich der Webentwicklung kennen wir uns gut aus und haben bereits viele erfolgreiche Projekte abgeschlossen. Nun hat sich ein kleines Team unserer Mitarbeiter an eine neue Herausforderung gewagt. Als Pilotprojekt sollte ein Zeiterfassungssystem entwickelt werden, das Mitarbeitende eines Kunden über einen RFID-Chip und per Touchscreen bedienen können.
Zeiterfassung wie beim Fastfood-Restaurant
Das Ziel war es, ein System zur Erfassung von Arbeitszeit zu entwickeln, bei dem Mitarbeitende über einen Touchscreen sehr einfach und intuitiv ihre Zeiten verwalten können. Ganz ähnlich zum Bestellvorgang in dem einen oder anderen bekannten Fastfood-Restaurant sollte es eine Übersicht der aktuellen Projekte geben, die ausgewählt werden können, um eine Zeiterfassung zu starten. Als Identifikation der Mitarbeitenden kommen RFID-Chips zum Einsatz, die dann lediglich vor einen Scanner gehalten werden müssen, wie es beim kontaktlosen Bezahlen mit Bankkarte oder Handy im Supermarkt auch der Fall ist.
Andere Technologie, neue Herausforderungen
Im Gegensatz zu Webseiten, Apps und Ähnlichem galt es bei diesem Projekt eigenständige Stationen zu bauen und zu programmieren, sodass auch die Hardware bei der Entwicklung stärker miteinbezogen werden musste. Für unsere Entwickler gab es Touchscreen, RFID-Scanner und Raspberry Pis, einen Computer im Kleinformat und das Herzstück einer Zeiterfassungsstation.
Eine flexible und mächtige Zeiterfassung
Im Zentrum des ganzen Systems steht Kimai, eine leistungsfähige Open-Source-Zeiterfassung, die auch bei uns zum Einsatz kommt. Kimai ist projektorientiert und bietet unter anderem die Möglichkeit, eigene Erweiterungen zu entwickeln, um dem Einsatz im eigenen Betrieb besser angepasst zu sein. Es hat viele mächtige Funktionen, welche im Projekt direkt eingesetzt werden können und nicht erst entwickelt werden müssen.
Zwar gibt es hier auch eine Marketplace Lösung, den „Kimai Kiosk Modus“ (https://www.kimai.org/store/kiosk-barcode-bundle.html), dieser erfüllte die Anforderungen aber nicht vollständig und brachte ein paar andere Probleme mit.
Eine nutzerfreundliche Lösung
Das resultierende System besteht aus einem Kimai-Server im Zentrum, der die Zeiten, Projekte und Mitarbeitenden verwaltet, und einer oder mehreren Zeiterfassungsstationen mit Touchscreen und RFID-Scanner. Die Bedienung der Stationen ist dabei sehr einfach gehalten.
Zunächst loggt sich ein Mitarbeiter mit seinem RFID-Chip ein. Wenn für ihn noch keine Arbeitszeit läuft, wird eine Übersicht aller verfügbaren Projekte angezeigt, an denen er arbeiten kann.
Wenn dann ein Projekt ausgewählt wird, startet die Zeiterfassung nach einem kurzen Moment, während weitere Informationen zum Projekt angezeigt werden, damit keine fehlerhafte Buchung geschieht. Danach wird der Mitarbeitende automatisch ausgeloggt.
Sollte bereits die Zeiterfassung für ein Projekt gestartet sein, wird die bereits vergangene Zeit angezeigt und der Mitarbeiter bekommt die Möglichkeit, die Zeiterfassung zu stoppen.
Technische Details unter der Decke
Ein paar technische Fachbegriffe für alle, die sich genauer dafür interessieren: Die Zeiterfassungsstation besteht aus zwei Komponenten, dem Frontend und einem lokalen Backend, welches mit dem zentralen Kimai-Server kommuniziert.
Das Frontend wurde mit React in TypeScript umgesetzt und wird über einen auf dem Raspberry Pi laufenden Apache2-Server zur Verfügung gestellt.
Auch im lokalen Backend wurde TypeScript verwendet, um die Anfragen aus dem Frontend zu bearbeiten. Der Service pm2 verwaltet dabei die verschiedenen Node-Prozesse des Backends. Das Starten und Stoppen der Zeiterfassung geschieht außerdem über eine Redis-Queue, die auf dem Pi persistiert wird. Damit ist die Station robuster gegenüber Ausfällen des Kimai-Servers aber auch des Pis selbst. Schlussendlich hat unser Team noch eine Anti-Corruption-Schicht vor der API von Kimai entwickelt, um die Station bei Änderungen und Updates der API möglichst aufwandsarm warten zu können. Das ist eine Schnittstelle, die die API-Anfragen handhabt und diese damit um eine Ebene abstrahiert.
Provisioniert werden die Pis mit Ansible. Das Deployment läuft automatisch über unsere GitLab CI/CD Pipeline.
Ein zufriedenstellendes Ergebnis
Unser Team hat die Kommunikation zwischen den Zeiterfassungsstationen und Kimai effektiv implementiert und auch die Verwendung spezieller Hardware wie des RFID-Scanners umgesetzt. Außerdem wurden neue Wege unseres eigenen Projektmanagements erschlossen und umgesetzt, wie die Verwendung der Dokumentation (Arc42 – siehe https://arc42.org/), welche wahrscheinlich einen eigenen Blogeintrag verdient. Zudem wurde die Software im Rahmen dieses Pilotprojekts sehr flexibel und anpassbar gehalten, um in Zukunft auch in ähnlichen Projekten zum Einsatz kommen zu können.