Standort-Tracking und Barcode CheckIn-App

Das diesjährige KSJ Sommerlager im Zeichen von Corona stellte uns vor ganz neue Herausforderungen. Um, anders als viele andere Jugendverbände und Pfarreien unsere Fahrt nicht absagen zu müssen, trafen wir uns im Rahmen der Leitungsebene zeitweise wöchentlich um über die neuesten Entwicklungen zu beratschlagen, ein eigenes Hygienekonzept auszuarbeiten und Informationsbriefe für die Teilnehmer zu formulieren.

Teilnahme ausschließlich in festen Bezugsgruppen

Ein wesentlicher Teil dieses Hygienekonzept war die Unterteilung unserer Teilnehmer in sogenannte Bezugsgruppen. Die Idee war, dass man innerhalb der zwei Wochen alles gemeinsam innerhalb dieser Bezugsgruppen ohne Maske machen kann und primär auch alle Aktionen mit der gesamten Gruppe macht. Zu jeder Gruppe gehörte zudem ein Leiter und anders als in den Jahren zuvor bestimmte nicht jeder für sich selbst das nächste Tagesprogramm, sondern die Gruppe gemeinsam. Wir nannten diese Gruppen jugendfreundlich „SoLa-Family’s“ und das Konzept kam so gut an, dass wir es wohl auch in Zukunft ohne Pandemie beibehalten wollen werden.

Organisatorisch mussten wir bei einer zweiwöchigen Fahrt den Teilnehmern die Möglichkeit geben sich selbst in diese Gruppen einzuteilen. Ich hatte glücklicherweise kurz zuvor das Gruppeneinteilungssystem für die geplante SummerSail für WordPress programmiert, welches wir nun statt für Schiffe einfach vorbereitend für die Bezugsgruppen verwenden konnten. Dadurch entstanden auch ganz lustige Gruppennamen wie bspw. „Der grölende Seemann“, da die Zeit zur Anpassung des Generators für Gruppennamen dann nun wirklich fehlte. Diese Gruppenwünsche der Teilnehmer stellten wir in einem weiteren Schritt so zusammen, dass es pädagogisch unserer Ansicht nach gut passte und packten geeignete Leiter dazu.

Altes CheckIn-System nicht mehr verwendbar

Auch zum Hygienekonzept gehörte, dass wir erstmals die Busse nicht zeitgleich, sondern in Etappen fahren ließen, damit der Andrang beim Verladen und Einsteigen durch Teilnehmer und Eltern nicht zu groß wurde. Es durfte jeder Teilnehmer auch nur lediglich eine Begleitung mitbringen. Das alte CheckIn-System war jedoch darauf ausgelegt, dass erst alle Personen zentral eingecheckt werden, dann die Listen gedruckt werden und anschließend diese Listen beim einsteigen abgehakt werden.

Wir brauchten also schnell etwas Neues und ich setzte mich dran endlich mal Swift zu lernen und meine erste native iOS-App zu schreiben. Diese App stellte einen Barcode-Scanner bereit, mit dessen Hilfe die PKPASS- und PDF-Tickets unseres neuen WordPress-Ticketsystems schnell direkt an der Tür gescannt werden konnten. Lediglich das coronakonforme Einsteigen innerhalb der Bezugsgruppen wurde dieses Jahr von einer weiteren Person mittels Papierliste sichergestellt.

Refactoring des eigenen alten Servercodes

Damit die App funktionieren konnte musste ich zudem die alten serverseitigen Websocket-Schnittstellen (eine alte Fehlentscheidung im Projektdesign) neu als REST-Schnittstellen implementieren. Ich nutzte die Gelegenheit mein altes statisches Datenbank-Modell auf das JavaScript ORM-System sequelize umzustellen um so Zeit und Codezeilen zu sparen. Es brachte hierzu praktischerweise direkt einen Generator für die JavaScript-Models mit, welche man lediglich noch händisch um die korrekten Relationen erweitern musste. Stück für Stück entstand so nun auch ein wesentlich saubererer Servercode, welcher perspektivisch den alten Websocket-Code ersetzen können wird. Für mich das erste richtig große Refactoring eines eigenen Projekts. Stellenweise hatte ich Zweifel, ob das zeitlich noch zu machen sei, daher konzentrierte ich mich auf die dringend benötigte Kernfunktionalität, schaffte aber gleichzeitig die Basis für ein künftiges modernes Webinterface, welches das alte jQuery-System ersetzen können wird. Ohne die Idee des ORM-Mappers, wäre das Neuschreiben und Anpassen der alten SQL-Queries wohl zu zeitaufwendig geworden.

Docker war auch hier wieder extrem hilfreich. Gleich zu allererst arbeitete ich zwei Tage daran, den alten Server innerhalb Docker konfigurierbar und lauffähig zu bekommen. Auch die bisher eigenständige Programmwahl-Erweiterung auf Angularbasis, welche auf den Server zugriff band ich direkt mit ein und promotete sie so zu einem modernen zweiten Web-Frontend, welches nun auch im neue Features erweitert werden sollte. Ich konnte nun sämtliche Codeänderungen sehr schnell auf einem Testsystem unter Production-Bedingungen ausprobieren, was bei einem so vielschichtigen Projekt sehr hilfreich ist.

Standort-Tracking der Leiter

Standortanzeige der Reisebusse über Leiter-Smartphones im Leitungsbüro

Dieses Feature war die ursprüngliche Kernidee des ganzen Projekts. Ein kleines Tool, welches die Position der Reisebusse bei Hin- und Rückfahrt direkt an die Eltern meldete, um so für Diese die Ankunftszeit gut einschätzbar zu machen. Die Standortdaten werden bei Aktivierung durch den Nutzer von der iOS-App im Hintergrund regelmäßig gesammelt und via REST-API an den Server geschickt. Zudem erweiterte ich das Angular-Webinterface um zwei Unterseiten mit Google-Maps Karten, eine rein Interne und eine externe Karte. Als Admin kann man hier nun einzelne Marker öffentlich schalten, sah aber immer auch alle aktuellsten Positionen des heutigen Tages in der internen Sicht. Die interne Sicht sollte uns im Leitungsbüro auf einem eigenen Monitor helfen, die Leiter im Blick zu behalten. Die Leiter konnten in der App selbst ihren Namen und eine Bezeichnung wie bspw. „Bus 1“ setzen, welche dann zusammen mit den Standortdaten übermittelt wurde. Eine eindeutige beim ersten App-Start generierte ID garantierte hierbei die Wiedererkennbarkeit beim Namenswechsel.

Evaluation

Das ist insgesamt schon recht gut gelaufen, jedoch machten Unregelmäßigkeiten beim Hintergrund-Scheduling von iOS (die durch den parallelen Release der deutschen Corona-App auffielen) einige Probleme. Außerdem hatte auch mein Code einen Bug, der bei einem Standort-Updateversuch im Hintergrund ohne vorhandenen Empfang automatisch einen Logout durchführte, sodass unsere Leiter regelmäßig ihre App auf der Autobahn prüfen mussten. Die App ist zudem noch recht akku-intensiv. Das liegt an der noch recht naiven Implementierung der regelmäßigen Standort-Updates alle 50 Meter. Hier gibt es also noch viel Raum für Verbesserung. Insgesamt bin ich für ein in grade mal drei Wochen umzusetzendes Projekt aber sehr zufrieden mit dem Ergebnis.

Die App ist im Apple App Store verfügbar und für Leiter unserer Gruppe nutzbar.

Screenshots der App

Kommentar verfassen