Das Einsatztagebuch

Das Einsatztagebuch

Web-basiertes Einsatztagebuch (ETB) mit automatischem Mail-Parser, Lagekarte, Telegram-Alarmierung und Rollen-Konzept — entwickelt für eine Feuerwehr in NRW, von Grund auf darauf ausgelegt, von anderen Feuerwehren übernommen und über einen Setup-Wizard auf die eigene Wache konfiguriert zu werden.

Status: aktiv im Einsatz bei einer Feuerwehr. Andere Feuerwehren sind willkommen — die ortspezifischen Stellen werden Schritt für Schritt in den Setup-Wizard und in Konfigurations-Settings verschoben.


Was es kann

  • Mail-Parser — eingehende Alarm-Mails der Leitstelle werden automatisch geparst (Stichwort, Adresse, Sachverhalt, Einsatzmittel, Melder) und erzeugen einen Einsatz in der Datenbank.
  • Stichwort-Katalog — administrierbarer Katalog der Einsatzstichworte (Kategorie, volles Stichwort, Anzeige-Variante, Aliase) inkl. CSV-Import und automatisch abgeleiteter Anzeige-Variante über Ausblend-Präfixe. Im Einsatz-Formular wählst du das Stichwort verkettet (Kategorie → Stichwort); Freitext bleibt für noch nicht katalogisierte Stichworte möglich. Der Mail-Parser gleicht eingehende Alarm-Mails gegen den Katalog ab (Treffer auf volles Stichwort oder Alias → Anzeige-Variante).
  • Lagekarte — Leaflet/OpenStreetMap, zeigt offene und abgeschlossene Einsätze, Hydranten und Einsatzmittel-Marker.
  • Hydrantenplan — eigene OSM-basierte Karte mit Hydranten-Inventar, inklusive Foto-Upload und Wartungs-Historie.
  • Telegram-Alarmierung — pushen einer Alarm-Nachricht in einen oder mehrere Telegram-Chats; Sonder-Nachricht für IuK-Alarmstichworte. Sechs frei editierbare Nachrichten-Templates (Alarm, Alarmierungsliste, Fehler, Heartbeat, ETB-Reset, Selbsttest) mit Platzhaltern und Live-Vorschau.
  • Multi-Alarm-Regeln & manuelle Auslösung — ein Stichwort kann automatisch mehrere Folge-Einsätze (oder -Abschnitte) anlegen (z. B. UW-ERSTALARM → Grundschutz + Bereitstellung). Bleibt die Leitstellen-Mail aus, löst der Knopf Alarm auslösen" dieselbe Regel von Hand aus — Basis-Einsatz + Folge-Einsätze an wählbarer Adresse inklusive echter Telegram-Alarmierung, mit Cooldown gegen Doppelauslösung (Recht „Alarm manuell auslösen", Default Lage/EL/Admin). Auch bei manuell angelegten oder geänderten Einsätzen bietet ein Bestätigungs-Banner das Auslösen passender Regeln an (Telegram optional, je Regel und Einsatz nur einmal).
  • Rollen-Konzeptadmin, lage, einsatzleiter, dispo, sp_dispo, gast mit abgestuften Rechten auf Einsätze, Abschnitte, Schwerpunkte und Stammdaten. Berechtigungen pro Rolle administrierbar (/admin/rollen.php) über eine Häkchen-Matrix aus 40 atomaren Permissions — mit Admin-Failsafe und Locked-Permissions gegen Selbst-Aussperren. Rollen-, Aktiv- und Einsatz-Rollen-Änderungen wirken ohne Neuanmeldung (Status-Prüfung pro Request; deaktivierte Konten werden sofort ausgeloggt). Passwort-Selbsthilfe per E-Mail-Link (zeitlich begrenzt, einmalig, nur für Konten mit hinterlegter E-Mail) über ausgehenden SMTP-Versand; keine Selbstregistrierung.
  • Einsatz-Rollen (temporäre Rollen) — einem Benutzer befristet (max. 48 h) die höhere Rolle Einsatzleiter oder Lage leihen, z. B. für eine mehrtägige Lage. Wirkt sofort ohne Neuanmeldung, das höhere Recht gewinnt („Highlander"), und läuft automatisch aus. Administrator und Schwerpunkt-Dispo sind ausgeschlossen, eine geliehene Rolle kann nicht weiterverliehen werden.
  • Abschnitts-Funktion — größere Einsätze in operative Abschnitte unterteilen (Wasserversorgung, Brandbekämpfung, …) mit eigenem Status, Abschnittsleiter, Funk-Rufgruppe und Einsatzmittel-Zuweisung.
  • Schwerpunkte (Großlagen-Gruppierung) — bei Unwetter, Flächenbrand oder Großübung mehrere Einsätze unter einem dedizierten Disponenten bündeln; eigener Einsatzmittel-Pool, eigene Lagekarte mit Dichte- Visualisierung, automatische Einsatz-Zuweisung nach Ort, eigenes „Schwerpunkttagebuch" mit gefiltertem Sub-View aller Module.
  • Audit-Log — jede Mutation (Einsatz, Abschnitt, EM-Zuweisung, Kommentar) wird revisionsfest geloggt.
  • PDF-Export — kompletter Einsatz-Bericht inkl. Kommentaren, Anhängen, Abschnitten, einer Einsatzmittel-Übersicht mit Stärke & Kontakt und optional Audit-Historie.
  • Setup-Wizard — geführte Erst-Konfiguration (Org-Name, Logo, Karten- Center, Telegram, Mailbox, …).
  • Mehrmandanten-fähig — Tabellen-Präfix pro Instanz, mehrere ETBs können in derselben DB nebeneinander laufen.
  • Dark-Mode & UI-Komfort — app-weiter dunkler Modus (folgt initial dem Betriebssystem), einklappbare Sidebar und ein separater Hell/Dunkel-Schalter für die Vollkarten (Lagekarte, Hydrantenplan); die Mini-Karten in Einsatz- und Abschnitts-Detail folgen automatisch dem App-Theme. Die Einsatz-Übersicht lässt sich zwischen Komfort (luftige Karten-Zeilen) und Kompakt (dicht, für viele Einsätze) umschalten; jeder Einsatz trägt eine farbige Status-Kachel (laufende Nummer + Kurz-Status) in Liste, Detail-Kopf, je Abschnitt und als Lagekarte-Marker, Abschnitte lassen sich direkt in der Liste aufklappen. Status und Wichtigkeit werden über Farbe + Label unterschieden (keine Icons/Marker-Formen). Durchgängige Inline-SVG-Icons (Tabler-Stil) statt Emoji. Zentrale Design-Tokens (tokens.css) für ein konsistentes, an einer Stelle anpassbares Erscheinungsbild. Die laufende Programmversion steht dezent unten in der Seitenleiste und auf der Login-Seite — bei jedem Deploy automatisch aus dem Git-Stand erzeugt.
  • Mobil nutzbar & installierbar (PWA) — auf schmalen Bildschirmen ausklappbares Off-Canvas-Menü, einspaltige Formulare und größere Touch-Ziele; per „Zum Startbildschirm hinzufügen" als App-ähnliche Verknüpfung installierbar (HTTPS). Bewusst ohne Offline-Datenspeicher (Network-first) — ein Einsatztagebuch zeigt stets den aktuellen Stand.
  • Branding — Login-Logo, separates Menü-Logo für die Seitenleiste und Favicon hochladen sowie die Leitstellen-Adresse hinterlegen. Farben und Schrift kommen bewusst aus dem ausgelieferten Design (zentrale Design-Tokens) mit sauberer Hell-/Dunkel-Variante.
  • Integriertes Handbuch & Kontext-Hilfe — seiten-genaue Bedienungsanleitung (ein Thema je Bildschirm) in der App („Hilfe"), als „?"-Schublade direkt im Kontext jeder Seite, ohne Login unter /handbuch.php lesbar und ins GitHub-Wiki gespiegelt — Inhalt einmal als Markdown gepflegt.

Anforderungen

  • PHP 8.1+ (auf 8.4 getestet) mit Extensions: pdo_mysql, imap, mbstring, fileinfo, curl, dom, gd
  • MySQL 5.7+ / MariaDB 10.3+
  • Webserver mit Document-Root auf public/ und Rewrite-Modul (Apache mod_rewrite oder Nginx)
  • Cron alle 1–5 Minuten für die Mailbox-Abfrage

Installation

  1. Code in den Webserver kopieren und Document-Root auf public/ setzen.

  2. Konfiguration anlegen:

    cp config/.env.example config/.env
    # DB-Zugang + IMAP-Postfach (Alarm-Mails) eintragen; optional SMTP_*
    # fuer „Passwort vergessen" (ausgehende Mail)
  3. Im Browser öffnen — der Setup-Wizard erscheint automatisch und führt durch die restlichen Schritte (Org-Name, Logo, Standort, Erste User, Telegram-Bot, Cron-Token).

  4. Cron einrichten — der Wizard zeigt am Ende den passenden Crontab-Eintrag mit Token; alternativ unter Admin → Einstellungen einsehbar:

    */2 * * * * curl -fsS "https://etb.example.de/cron.php?token=…" >/dev/null

Update einer bestehenden Installation

git pull
# Schema-Aenderungen wendet die SchemaProvider-Migration beim naechsten
# Login automatisch an.

Erscheint nach dem Update der Schema-Banner, einmalig /admin/schema-check.php → „Reparieren" ausführen — legt neue Tabellen und Spalten an (z. B. für den Passwort-Reset). Wer „Passwort vergessen" nutzen will, ergänzt zusätzlich die SMTP_*-Werte in config/.env.

Backups (DB-Dump + storage/uploads/ + public/branding/) vor jedem Update werden empfohlen.

Dokumentation

Eine ausführliche Bedienungsanleitung liegt unter docs/handbuch/seiten-genau geschnitten (ein Thema je Bildschirm, mit Frontmatter für Reihenfolge und Gruppierung) — und ist über vier Wege zugänglich, immer derselbe Inhalt:

  • Kontext-Hilfe: das „?" rechts in der Aktionsleiste der meisten Seiten öffnet das passende Thema in einer seitlichen Hilfe-Schublade (bleibt über Reload/Seitenwechsel offen; auf schmalen Bildschirmen/PWA ausgeblendet).
  • In der App: Sidebar-Eintrag „Hilfe" — das ganze Handbuch mit aufklappbaren Gruppen, ergänzt um dein konfiguriertes Branding.
  • Öffentlich ohne Login: /handbuch.php — dasselbe Handbuch ohne Anmeldung lesbar (eigenes, bewusst helles Layout); auf der Login-Seite neben „Passwort vergessen?" verlinkt.
  • Im GitHub-Wiki: https://github.com/BrunSoftNet/ffw-einsatztagebuch/wiki — zum Nachlesen außerhalb der Anwendung (z. B. auf dem Tablet während eines Einsatzes).

Master-Quelle sind immer die Markdown-Dateien im Repo. Das Wiki wird via scripts/wiki-sync.ps1 aktuell gehalten.

Releases

  • v3.0.1 — Bugfixing & Feinschliff: neues Recht „Als Disponent arbeiten" (Default Dispo fest, Lage/Einsatzleiter zuschaltbar, Admin via Failsafe; SP-Dispo bleibt ausgeschlossen); Einsatzmittel-Seitenleiste zeigt durchgängig die laufende Nummer (#007) und frisch alarmierte Mittel korrekt als „im Einsatz"; zugeordnete Einsatzmittel jetzt auch mobil sichtbar; Live-Update der EM-Seitenleiste bei Statuswechsel; app-weit neutrale Link-/ Button-/Kachel-Farben (kein Blau nach Klick); Dark-Mode-Korrekturen (Setup-Wizard, Geocode-Admin/-Cache, EM-Gruppen, Lagekarte); Lagekarte- und Geocode-Nummern im #007-Format; diverse Disponenten-Feinheiten
  • v3.0.0 — Schwerpunkte, Sicherheit & UX-Overhaul: Schwerpunkt- Einsatzstärke getrennt nach „im Einsatz" und „Reserve", Einsatzmittel- Stärke im Schema A/B/C/S (Gesamt automatisch); Theme-Engine inkl. Dark-Mode-Feinschliff, gruppiertes Hauptmenü, Menü-Logo, Setup-Wizard mit vertikaler Schritt-Navigation, mobil/PWA inkl. Touch-Drag für die Einsatzmittel-Zuweisung, Versionsanzeige in Sidebar + Login; Lagekarte ohne „Taktisch"-Modus; Kommentar-Bild-Galerie, PDF-Export mit Stärke & Kontakt, sauberer Bild-Pagination und immer hellem Druck; Passwort-vergessen per E-Mail-Link (SMTP) + Session-Invalidierung, CSRF-Schutz für Setup-Wizard und Admin-Formulare; großes Refactoring (Services/JS/CSS) mit Tests, PHPStan & CI; 11 Triage-Issues behoben
  • v2.4.0 — Schwerpunkt-Dispo-Kopplung, Folge-Abschnitte & Übersichtlichkeit: Einsatz-/Abschnitts-Dispo folgt im Schwerpunkt automatisch dem SP-Dispo (gesperrt, Herauslösen-Modal), Alarm-Regeln mit Folge-Abschnitten + Auto-Reset-Stopp pro Regel, administrierbare Standard-Werte (+ Abschnitts-Status „geplant"), Personalstärke-Anzeige & Gesamtstärke, Einsatzmittel nach Gruppen, Lagekarte-Filter-Toggle (Beamer), Geocode-Cache-Verwaltungsseite
  • v2.3.0 — Dark-Mode, UI-Politur & CSS-Zentralisierung: app-weiter dunkler Modus, einklappbare Sidebar, Karten-Hell/Dunkel-Toggle, einklappbare Filterleiste, zentrale Design-Tokens (tokens.css + components.css), einheitliche Admin-Breadcrumbs + Kachel-Reorg
  • v2.2.0 — Bug-Fixing & Alarm-Regeln: Multi-Alarm-Regelwerk (UW-ERSTALARM → Grundschutz + Bereitstellung), Wichtigkeit „Bereitstellung", Unwettermail-Multi-Einsatz-Parsing, generischer Spalten-Migrations-Mechanismus + Feature-Tabellen-Banner, korrigierte Cron-/Heartbeat-Statistik, SP-Dispo-Dropdown-Trennung
  • v2.1.0 — Handbuch: In-App-Hilfe (/hilfe.php) + GitHub-Wiki-Sync über 20 Markdown-Topics in docs/handbuch/
  • v2.0.0 — Administrierbare Rollen-/Permission-Matrix, Modal-Dialog- Library, Schwerpunkt-Historie, Schema-Auto-Migration, Lagekarte- Verbesserungen (Tooltip-z-Index, warme Heatmap, Cluster-Toggle)
  • v1.5.0 — Schwerpunkte (Großlagen-Gruppierung)
  • v1.0.0 — Erste stabile Version

Vollständige Änderungshistorie mit allen Bugfixes und Upgrade-Hinweisen im CHANGELOG.

Lizenz

GPL-3.0 — frei nutzen, weitergeben und anpassen, solange Änderungen ebenfalls unter GPL-3.0 verfügbar gemacht werden.

Entwicklung

Repository: privat. Kontakt für Fragen / Mitarbeit über die im Repo hinterlegten Issues bzw. direkt an den Maintainer.