/ Tech

pylokid - Lodur Hilfsprogramm

pylokid, ein Hilfsprogramm zum Umgang mit dem Feuerwehrverwaltungsprogramm Lodur.

In meiner Funktion als Fourier in der Feuerwehr Urdorf habe ich unter anderem die Aufgabe, Einsätze im Lodur zu erfassen. Dies ist eine sehr umständliche Aufgabe und alles andere als digitalisiert.

Im Normalfall durchläuft ein Einsatz sehr viele manuelle und büokratische Prozesse:

  1. Einsatzleiter füllt Einsatzrapport auf offiziellem GVZ Formular aus (Papier)
  2. Materialwart kopiert Einsatzrapport und bringt Kopie zur Gemeindeverwaltung
  3. Gemeindeverwaltung füllt diverse Excel Tabellen aus, erstellt Rechnungen und schickt Einsatzrapport per Post an die GVZ
  4. Fourier (also ich) tippt Einsatzrapport in Lodur ab

Nun habe ich eine Lösung gesucht, um wenigstens einen kleinen Teil davon zu automatisieren. Entstanden ist pylokid, ein Open Source Python Programm. Der Name setzt sich zusammen aus: py für Python, loki "Nordischer Gott des Feuers", d Linux Daemon.

Beschreibung aus dem README:

pylokid ist eine Hilfsapplikation um Einsatzaufträge und -Protokolle, welche die Einsatzleitzentrale (ELZ) per E-Mail versendet, automatisch im Lodur einzutragen. Die Applikation versucht so viele Informationen über den Einsatz in Erfahrung zu bringen, wie nur möglich. Dies geschieht unter anderem durch Auslesen von Daten aus dem der E-Mail angehängten PDF.

Im Moment ist die Applikation vermutlich nur im Kanton Zürich einsetzbar und vermutlich auch nur für die Feuerwehr Urdorf. Bei Interesse an dieser Applikation von anderen Feuerwehren bin ich gerne bereit, diese entsprechend zu generalisieren und
weiter zu entwickeln.

Funktionsweise

Bei einem Feuerwehralarm sendet die ELZ automatisch eine E-Mail mit einem PDF im Anhang, welches alle notwendigen Informationen zum Einsatz enthält. Nach Abschluss des Einsatzes sendet die ELZ ein weiteres E-Mail mit dem Einsatzprotokoll.

pylokid funktioniert so:

  • Alle x Sekunden wird das angegebene Postfach nach ELZ E-Mails überprüft. Diese identifizieren sich mit dem Betreff "Einsatzausdruck_FW" oder "Einsatzprotokoll".
  • Wird ein passendes E-Mail gefunden, wird der Anhang (das PDF) heruntergeladen, in die Cloud gespeichert (WebDAV) und im Lodur ein entsprechender Einsatzrapport eröffnet und vorausgefüllt. Das PDF wird sinnvoll umbenannt und als Alarmdepesche ins Lodur geladen.
  • Kommen weitere E-Mails mit dem Betreff "Einsatzausdruck_FW" werden diese im Lodur am entsprechenden Einsatzrapport angehängt.
  • Ist der Einsatz abgeschlossen und das Einsatzprotokoll eingetroffen werden die Informationen im Lodur nachgetragen.

Desweiteren wird über MQTT eine Nachricht mit möglichst vielen Informationen publiziert, inkl. dem PDF. So kann ein Drittsystem auf einen Einsatz reagieren, z.B. den Einsatz auf einem Dashboard darstellen.

Stolpersteine / Herausforderungen

Im abgebildeten Prozess gibt es viele Stolpersteine. Zwei davon:

  • Die ELZ sendet PDFs welche by design keine Datenstruktur haben. Somit ist das herausholen von Informationen mehr Glückssache als Verstand. Würde die ELZ die Informationen vom PDF als strukturierte Daten liefern, würde das System um einiges stabiler.
  • Lodur hat keine API. Alle Datenmanipulationen funktioniert über Reverse Engineering der HTML Formulare. Dabei kamen einige spezielle Techniken von Lodur zum Vorschein:
    • Nach dem Anlegen eines Einsatzrapportes wird in der Antwort des Servers dieselbe Seite mit einem JavaScript Script gesendet, welches die Browserseite noch einmal neu lädt und zum angelegten Datensatz weiterleitet. Nur in diesem JavaScript Tag findet man die zugewiesene Datensatz ID.
    • Zur Bearbeitung eines Datensatzes werden die bekannten Daten nicht etwa im HTML Formular als "value" eingetragen, sondern via JavaScript ausgefüllt. Und es müssen immer alle Daten nochmals gesendet werden, inkl. einiger hidden Fields.

Um die Probleme mit Lodur zu umgehen, werden alle Daten, welche an Lodur gesendet werden, in einem JSON File im WebDAV neben den PDFs abgelegt. So lässt sich im Nachhinein ein Datensatz bearbeiten und eine Zuordnung des Einsatzes im WebDAV und in Lodur herstellen.

Dashboard

Wird ein neuer Einsatz registriert (E-Mail mit dem Betreff "Einsatzausdruck_FW") published pylokid via MQTT Informationen über den Einsatz. Dazu sind folgende Topics vorgesehen:

  • pylokid/Einsatzausdruck_FW/<f_id>/pdf: Binary Blob mit PDF
  • pylokid/Einsatzausdruck_FW/<f_id>/json: Geparste Daten als JSON

Ist der Einsatz beendet (E-Mail mit dem Betreff "Einsatzprotokoll") wird folgendes Topic published:

  • pylokid/Einsatzprotokoll/<f_id>/json: Leeres JSON

Der Dashboard Client dashboard_client.py subscribed auf diese Topics und zeigt mittels xpdf das PDF im Vollbild an. Ist der Einsatz vorbei, wird das PDF wieder geschlossen. Dies kann z.B. auf einem Raspberry PI installiert werden und im Feuerwehr Depot an ein TV angeschlossen werden. Mit Hilfe von cec-client wird versucht den TV über HDMI einzuschalten.