- Notifications
You must be signed in to change notification settings - Fork0
Lodur Helper - Einsatzrapporte
License
tobru/pylokid
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
"Loki - Nordischer Gott des Feuers"
General application description is in German
pylokid ist eine Hilfsapplikation um z.B. Einsatzaufträge, welche dieEinsatzleitzentrale (ELZ) per E-Mail versendet, automatisch imLodur einzutragen.Die Applikation versucht so viele Informationen über den Einsatz inErfahrung zu bringen, wie nur möglich. Dies geschieht unter anderemdurch Auslesen von Daten aus dem der E-Mail angehängten PDF.
Im Moment ist die Applikation vermutlich nur imKanton Zürich einsetzbarund vermutlich auch nur für dieFeuerwehr Urdorf.Bei Interesse an dieser Applikation von anderen Feuerwehren bin ichgerne bereit, diese entsprechend zu generalisieren undweiter zu entwickeln.
Bei einem Feuerwehralarm sendet die ELZ automatisch eine E-Mailmit einem PDF im Anhang, welches alle notwendigen Informationenzum Einsatz enthält. Nach Abschluss des Einsatzes sendet die ELZein 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 Lodurder entsprechende Einsatzrapport gesucht.Das PDF wird sinnvoll umbenannt und als Alarmdepesche ins Lodurgeladen.
- Kommen weitere E-Mails mit dem Betreff "Einsatzausdruck_FW" werdendiese im Lodur am entsprechenden Einsatzrapport angehängt.
- Ist der Einsatz abgeschlossen und das Einsatzprotokoll eingetroffenwerden die Informationen im Lodur nachgetragen.
- Wird der von Hand ausgefüllte Einsatzrapport via Scanner per E-Mailan das E-Mail Postfach gesendet (Betreff "Attached Image FXXXXXXXX")wird das PDF in der Cloud und im Lodur gespeichert.
- Nach jedem Durchgang wird ein Heartbeat an den konfigurierten Healthcheck Service gesendet, z.B.https://healthchecks.io/
Desweiteren wird über Pushover eine Nachricht mit möglichst vielenInformationen publiziert.
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ückssacheals Verstand. Würde die ELZ die Informationen vom PDF alsstrukturierte Daten liefern, würde das System um einiges stabiler.
- Lodur hat keine API. Alle Datenmanipulationen funktioniert überReverse Engineering der HTML Formulare. Dabei kamen einigespezielle Techniken von Lodur zum Vorschein:
- Nach dem Anlegen eines Einsatzrapportes wird in der Antwort desServers dieselbe Seite mit einem JavaScript Script gesendet,welches die Browserseite noch einmal neu lädt und zum angelegtenDatensatz weiterleitet. Nur in diesem JavaScript Tag findet mandie zugewiesene Datensatz ID.
- Zur Bearbeitung eines Datensatzes werden die bekannten Daten nichtetwa im HTML Formular als "value" eingetragen, sondern viaJavaScript ausgefüllt. Und es müssen immer alle Daten nochmalsgesendet werden, inkl. einiger hidden Fields.
Um die Probleme mit Lodur zu umgehen, werden alle Daten, welchean Lodur gesendet werden, in einem JSON File im WebDAV neben denPDFs abgelegt. So lässt sich im Nachhinein ein Datensatz bearbeitenund eine Zuordnung des Einsatzes im WebDAV und in Lodur herstellen.
- PDF extrahieren und in Cloud hochladen
- Falls PDF noch nicht geparst wurde wird davon ausgegangen, dass dies die initiale Meldung ist:
- PDF parsen
- Push Nachricht mit Infos aus PDF senden
- Geparste Daten als JSON in Cloud speichern
- Falls Einsatz im Lodur noch nicht ausgelesen:
- Einsatz Datensatz ID im Lodur suchen
- Ganzer Datensatz auslesen
- Datensatz als JSON in Cloud speichern
- PDF in Lodur speichern
- E-Mail als gelesen markieren - wird somit nicht nochmals bearbeitet
- Lodur Datensatz ID aus Cloud laden (JSON Datei)
- Ganzer Datensatz aus Lodur auslesen und als JSON in Cloud speichern
- Falls Datensatz zur Bearbeitung freigegeben ist (
aut_created_report == finished)- PDF in Lodur speichern
- Einsatzprotokoll Daten ergänzen und in Lodur speichern
- Push Nachricht senden (Einsatz beendet)
- E-Mail als gelesen markieren - wird somit nicht nochmals bearbeitet
- Prüfen, ob F-Nummer aus Scan E-Mail Betreff gefunden
- Lodur Datensatz ID aus Cloud laden (JSON Datei)
- Ganzer Datensatz aus Lodur auslesen und als JSON in Cloud speichern
- PDF in Lodur speichern und Datensatz ergänzen
- Push Nachricht senden (Rapport bearbeitet)
The application is written in Python and runs perfectly on Kubernetes.
Configuration is done via environment variables:
- IMAP_SERVER: Adress of IMAP server
- IMAP_USERNAME: Username for IMAP login
- IMAP_PASSWORD: Password of IMAP user
- IMAP_MAILBOX: IMAP Mailbox to check for matching messages. Default: INBOX
- IMAP_CHECK_INTERVAL: Interval in seconds to check mailbox. Default: 30
- WEBDAV_URL: Complete WebDAV URL
- WEBDAV_USERNAME: Username for WebDAV
- WEBDAV_PASSWORD: Password of WebDAV user
- WEBDAV_BASEDIR: Basedir on WebDAV
- TMP_DIR: Temporary directory. Default: /tmp
- LODUR_USER: Username for Lodur login
- LODUR_PASSWORD: Password of Lodur user
- LODUR_BASE_URL: Lodur base URL
- HEARTBEAT_URL: URL to send Hearbeat to (https://hchk.io/)
- PUSHOVER_API_TOKEN: Pushover API token
- PUSHOVER_USER_KEY: Pushover User key
Environment variables can also be stored in a.env file.
What could possibly go wrong? A lot!
- Storing files with "current year" doesn't work well during end of year
- PDF layout may change without information
- PDF parsing may fail due to PDF creation instabilities
- Lodur forms can change without notice
- Error handling doesn't catch all cases
02. Einsatzart FKS
<option value="1">Brandbekämpfung</option><option value="2">Elementarereignisse</option><option value="3">Strassenrettung</option><option value="4">Technische Hilfeleistungen</option><option value="5">Ölwehr</option><option value="6">Chemierwehr inkl. B-Einsätze</option><option value="7">Strahlenwehr</option><option value="8">Einsätze auf Bahnanlagen</option><option value="9">BMA Unechte Alarme</option><option value="10">Verschiedene Einsätze</option><option value="11">Keine alarmmässigen Einsätze</option>03. Verrechnungsart
emergency_concept_id= valuever_sart= rc-id
<option value="2" rc-id="ab">ABC-Einsatz inkl. Oel (Ortsfeuerwehr)</option><option value="3" rc-id="ab">ABC-Einsätze inkl. Oel (Stützpunkte)</option><option value="4" rc-id="ab">ABC-Messwagen (Stützpunkte)</option><option value="5" rc-id="ab">Gaseinsätze (Ortsfeuerwehr)</option><option value="6" rc-id="ab">Verkehrsunfälle (ohne Strassenrettung)</option><option value="7" rc-id="ab">Strassenrettung (Ortsfeuerwehr)</option><option value="8" rc-id="ab">Strassenrettung (Stützpunkt)</option><option value="9" rc-id="ab">Fahrzeugbrände (ohne Brandstiftung)</option><option value="10" rc-id="th">BMA-Alarm</option><option value="18" rc-id="th">Hilfeleistungs-Einsätze, verrechenbar durch OFW</option><option value="19" rc-id="th">Unterstützung Rettungsdienst (ADL/Hilfskräfte)</option><option value="11" rc-id="uh">Dienstleistungen, Verrechenbar durch OFW</option><option value="12" rc-id="uh">Stützpunkteinsatz (Grossereignisse)</option><option value="14" rc-id="uh">Nachbarschaftshilfe Ortsfeuerwehr</option><option value="20" rc-id="uh">Kernaufgaben (Brand, Explosion, Elementar, Erdbeben)</option><option value="21" rc-id="uh">ADL-/HRF-Einsatz BRAND (ADL = Stüpt-Fahrzeug)</option><option value="13" rc-id="ak">ADL-/HRF-Einsatz BRAND (ADL = OFW-Fahrzeug)</option><option value="15" rc-id="tt">Grosstierrettung Stützpunkt (PIF mit Kran)</option>docker run --rm -ti -v $(pwd):/usr/src/pylokid:ro local/pylokid
find ./ -name "Einsatzausdruck_FW*.pdf" -exec pdftotext -f 1 -l 1 -x 70 -y 47 -W 50 -H 10 {} - \;
About
Lodur Helper - Einsatzrapporte
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.