==== Schnittstelle WDX3 ====
=== Funktionsumfang ===
^ Funktion ^ Daten senden ^ Daten empfangen |
| Einsatzdaten| ✘*| ✔ |
|Fahrzeugstatus| ✘ | ✔ |
|Fahrzeugstandorte (in Echtzeit)| ✘ | ✔|
|Einsatzmeldungen (Rückmeldungen)| ✔ | ✔ |
|Fahrzeugzuteilungen | ✘| ✔ |
✔ = Die Schnittstelle unterstützt diese Funktion. ✘ = die Schnittstelle unterstützt diese Funktion nicht. (Leer) = Entfällt.
*) Versenden der Einsatzdatenupdates ist von Seiten WDX3 Technisch möglich, jedoch nicht in Schnittstelle implementiert. **Ein erstellen von neuen Einsätzen von EDP über WDX3 in Cobra4 wird durch iSE im WDX3 Server nicht unterstützt.**
=== Einsatzdaten ===
Empfang von Einsätzen und Einsatzaktualisierungen. Der Einsatz würde mit einer Maßnahme innerhalb von Cobra (vergleichbar mit Aufgaben bei EDP) an die WDX3 Schnittstelle übergeben werden und dann als unerledigter Einsatz in EDP auftauchen.
=== Einsatzmittel ===
Empfang der Zuteilung von Einsatzmitteln zu Einsätzen (sowie das entfernen von EMs aus Einsätzen)
Empfang von Einsatzmittel FMS-Status und deren Standort
Automatisches Anlegen von in EDP4 bisher unbekannten Einsatzmitteln als Fremdfahrzeug (Mit der Möglichkeit das Format der Rufnamen anzupassen)
=== Rückmeldungen ===
Empfang und Versand von Rückmeldungen eines Einsatzes. Kann innerhalb von EDP gefiltert und nur bestimmte Einträge an die Leitstelle versendet werden. Denkbar wäre hier, dass nur Rückmeldungen von EDP in die C4 übertragen werden, die als Meldeweg "WDX3" haben.
=== Voraussetzungen ===
Die für Sie zuständige Leitstelle muss die WDX3-Schnittstelle seitens Cobra für Sie freigeben und auch eine Lizenz zur Anbindung von Drittsystemen über WDX3 besitzen/beschaffen.
Unsere Empfehlung für die Anbindung von EDP-Sytemen ist die Einführung eines EDP-Sync-Servers auf Landkreisebene. Mit diesem wäre es u.A. dann auch möglich, die Einsatzdaten unter den verschiedenen EDP-Systemen zu verteilen, ohne den Weg über die Leitstelle gehen zu müssen oder Lagekarten in Echtzeit austauschen zu können. Weitere Infos zu EDP-Sync erhalten Sie unter: https://eifert-systems.de/edpsync.php Dort wären auch Screenshots, die den prinzipiellen Aufbau einer solchen Installation zeigen.
=== Kosten ===
Aus technischen Gründen ist die Anbindung an die WDX3 in drei Schnittstellen unterteilt. Diese Schnittstellen bilden jeweils eine der Funktionsbereiche aus dem oberen Abschnitt ab. Es gibt also jeweils eine WDX3-Einsatz, WDX3-Einsatzmittel und WDX3-Rückmeldungen Schnittstelle. Zum Betreiben einer Schnittstelle wird je eine normale Schnittstellenlizenz benötigt.
=== Konfiguration ===
=== Einrichten ===
=== Voraussetzungen: ===
* EDP (MariaDB Version installiert)
* Schnittstellenanwendung vorhanden
* Folgende Informationen von iSE bzgl. des WDX3 Servers
* Daten für WDX3-Login-Server
* Adresse + Port (in der Regel identisch zum WDX3-Server)
* Öffentliches Zertifikat des WDX3 Servers (.crt Datei) (in der Regel identisch zum WDX3-Server)
* Privater Schlüssel für Authentifzierung beim WDX3 Server (pk8 Datei) (in der Regel identisch zum WDX3-Server)
* Falls die Zertifikate nicht von iSE vorgegeben wurden, sollte geprüft werden, ob alle notwendigen Attribute enthalten sind.
* Login Daten: Username+Password (Username ist in der Regel identisch zur Kennung)
* Daten für WDX3-Server
* Adresse + Port
* Öffentliches Zertifikat des WDX3 Servers (.crt Datei)
* Privater Schlüssel für Authentifzierung beim WDX3 Server (pk8 Datei)
* Falls die Zertifikate nicht von iSE vorgegeben wurden, sollte geprüft werden, ob alle notwendigen Attribute enthalten sind.
* Kennung des EDP Systems in WDX3 (an welche die Daten gesendet werden, in der Regel identisch zum Username)
* Kennung des Cobra4 Systems (an welches Rückmeldungen gesendet werden)
=== Schritte ===
- Schnittstelle mittels EDP-Konfig hinzufügen
- Datenbankeintrag der Schnittstelle öffnen (Tabelle SCHNITTSTELLE_DEF)
- TYP auf 3 ändern
- Konfig siehe unten ergänzen und nach belieben anpassen
- Loglevel anpassen (-1: Debug, 0: Info, 1: Warnung, 2: Error)
**WARNUNG:** Das Standard Loglevel ist auf -1 gestellt. Hierbei werden alle empfangenen Daten im Klartext in die Logdatei geschrieben. Dies kann zu Problemen im Sinne des Datenschutzes kommen.
=== Konfiguration ===
Gilt für jede der drei Schnittstellen:
[WDX3_LOGIN]
; Der WDX3 Login Server (in der Regel identisch zum WDX3 Server)
SERVER=example.com:443
; Absoluter Pfad zur Zertifikat (crt) Datei für den Verbindungsaufbau zum Login Server
; (in der Regel identisch zum WDX3 Server)
CRT_FILE=C:\absoluter\pfad\zur\client.crt
; Absoluter Pfad zur Private-Key (pk8) Datei für den Verbindungsaufbau zum Login Server
; (in der Regel identisch zum WDX3 Server)
PK8_FILE=C:\absoluter\pfad\zur\client.pk8
; Nutzername für den Verbindungsaufbau zum Login Server
USERNAME=username
; Passwort für den Verbindungsaufbau zum Login Server
PASSWORD=password
[WDX3_CLIENT]
; Der WDX3 Server für die tatsächliche Verbindung
SERVER=example.com:443
; Absoluter Pfad zur Zertifikat (crt) Datei für den Verbindungsaufbau zum Server (in der Regel
; identisch zum WDX3 Login Server)
CRT_FILE=C:\absoluter\pfad\zur\client.crt
; Absoluter Pfad zur Private-Key (pk8) Datei für den Verbindungsaufbau zum Server (in der Regel
; identisch zum WDX3 Login Server)
PK8_FILE=C:\absoluter\pfad\zur\client.pk8
; Die Kennung dieses Gerätes (Die Kennung die im sendenden System (Cobra) als Empfänger
; angegeben ist)
KENNUNG=Kennung
; Timeout (in Sekunden) zwischen Keep-Alive Pings an den WDX3 Server
KEEP_ALIVE_TIMEOUT=10
Zusätzlich gibt es folgende Schnittstellenspezifische Abschnitte:
=== anst_wdx3_einsaetze.exe ===
[EINSATZ]
; Wenn aktiviert, wird beim Empfang eines Einsatzes eine Rückmeldung über den erfolgreichen Einsatzempfang angelegt.
SENDE_RUECKMELDUNG_BEI_EMPFANG=false
=== anst_wdx3_rueckmeldungen.exe ===
[RUECKMELDUNG]
; Wenn aktivert, werden in EDP angelegte Nachrichten auch zurück über WDX3 gesendet (siehe zusätzlich SENDE_RUECKMELDUNG_FILTER und SENDE_ETB_FILTER)
AKTIVIERE_SENDEN=true
; Die Kennung des Cobra4 Systems, an die die Rückmeldungen gesendet werden sollen (Nur wenn AKTIVIERE_SENDEN aktivert ist)
ZIEL_KENNUNG=Kennung
; Hier kann ein SQL Befehl angegeben, welcher Filtert, welche Rückmeldungen über WDX3 gesendet werden sollen.
; Die Nachricht wird versendet, sobald mindestens eine Zeile zurückgegeben wird. Ein leerer Wert bedeutet, dass alle Rückmeldungen versendet werden. False bedeutet, dass keine Rückmeldungen versendet werden
; Es können folgende Paramter der Rückmeldung im Befehl als SQL-Named-Paramter mit Doppelpunkt genutzt werden:
; > id, einsatznummer, meldender, meldeweg, meldung, benutzer
SENDE_RUECKMELDUNG_FILTER=SELECT id FROM rueckmeldungen WHERE id=:id AND meldeweg="Sende-über-WDX3"
; Golang text/template Format, welches den Meldungsinhalt von versendeten Rückmeldungen angibt. Bei einem leeren Wert, wird folgendes Format genutzt:
; {{ if and (.Meldender) (not .OperationalResourceId) }}Von: {{ .Meldender }} {{ end }}{{if .Meldeweg }}[{{ .Meldeweg }}]: {{ end }}\n{{ .Meldung }}
; Folgende Variablen stehen zur verfügung:
; - Einsatznummer: EDP Einsatznummer
; - Benutzer: EDP Benutzer, der Rückmeldung angelegt hat
; - Meldender: Meldender der Rückmeldung (i.d.R. Rufname)
; - OperationalResourceId: WDX3 Einsatzmittel-ID (Sofern Meldender ein WDX3-Einsatzmittel ist)
; - Meldeweg
; - Meldung: Meldetext
; - Id: ID der Rückmeldung in EDP
RUECKMELDUNG_FORMAT=
; Identisch zu SENDE_RUECKMELDUNG_FILTER aber für Einsatztagebucheinträge
; Es können folgende Parameter des Eintrags im Befehl als SQL-Named-Paramter mit Doppelpunkt genutzt werden:
; > id, addUser, verlaufId, einsatznummer, typ, von, an, eintrag
SENDE_ETB_FILTER=SELECT id FROM einsatzverlauf WHERE id=:id AND an="Leitstelle"
; Golang text/template Format, welches den Meldungsinhalt von versendeten Einsatztagebucheinträgen angibt. Bei einem leeren Wert, wird folgendes Format genutzt:
; {{ if .Typ }}[{{ .Typ }}]\n{{ end }}{{ if and (.Von) (.An) }}Von: {{ .Von}} -> An: {{ .An }}\n{{ else if .Von }}Von: {{ .Von }}\n{{ else if .An }}An: {{ .An }}\n{{ end }}{{ .Eintrag }}
; Folgende Variablen stehen zur verfügung:
; - Id: ID des Einsatztagebucheintrags
; - ErstellZeitpunkt
; - Benutzer: EDP Benutzer, der ETB-Eintrag angelegt hat
; - LaufendeNummer: Laufende ETB-Nummer im Einsatz
; - Einsatznummer: EDP Einsatznummer
; - Typ: ETB-Typ
; - Von
; - OperationalResourceId: WDX3 Einsatzmittel-ID (Sofern Meldender ein WDX3-Einsatzmittel ist)
; - An
; - Eintrag: Eintragtext
ETB_FORMAT=
; Welchen Meldeweg die eingehenden Nachrichten eingetragen bekommen sollen.
; Wichtig: Nachrichten dieses Meldewegs werden NICHT über WDX3 versendet. Auch wenn sie händisch im ELP eingetragen wurden
MELDEWEG_EINGEHENDER_MELDUNGEN=WDX3
; Ein Regexp Befehl. Eingehende Meldungen, bei denen der Wert AdditionalMessageData. User welche mit der Regexp matchen, werden verworfen.
IGNORIERE_USER=
=== anst_wdx3_einsatzmittel.exe ===
[EINSATZMITTEL]
; Ob Einsatzmittel, die in EDP bereits existieren, automatisch verknüpft werden sollen, falls eine Nachricht für diese ankommt
VERKNUEPFE_VORHANDENE_EINSATZMITTEL=true
; Ob Einsatzmittel, welche in EDP nicht existieren, automatisch neu in EDP angelegt werden sollen, fallst eine Nachricht für diese ankommt
ERSTELLE_FEHLENDE_EINSATZMITTEL=true
; Wenn VERKNUEPFE_VORHANDENE EINSATZMITTEL oder ERSTELLE_FEHLENDE_EINSATZMITTEL aktiviert sind, können Regeln angegeben werden, wie der WDX3 Rufname "übersetzt" werden soll. Das Muster ist an SED und REGEXP angelehnt. Bei einem leeren Wert werden die Rufnamen 1zu1 von Cobra4 übernommen.
; Jede Anweisung hat den Aufbau "s///"
; ist hierbei eine Regular-Expression. Slashes müssen mit einem backslash escaped werden
; ist eine Zeichenfolge, die anstelle des matches genutzt werden soll (Slashes (/)und Backslashes (\) müssen mit einem Backslash escaped werden)
; kann entweder leer oder "g" sein. Im Normalfall wird die Suche nach dem ersten Treffer beendet. Durch den "g" Modifikator werden alle Treffer ersetzt.
; Mehrere Muster können mit einem Semicolon (;) aneinander gehangen werden
; Beispiele:
; - Entferne alle Präfixe aus dem Kreis UE (FL UE 1-64-1 -> 1-64-1)
; RUFNAMEN_UEBERSETZUNG=s/[A-Z]* UE //
; - Kürze alle Präfixe auf zwei Zeichen (FLORIAN UEBINGEN 1-64-1 -> FL UE 1-64-1)
; RUFNAMEN_UEBERSETZUNG=s/([A-Z]{1,2})[A-Z]* ([A-Z]{1,2})[A-Z]*/$1 $2/g
; - Trenne Rufnamen mit Bindestrich statt Slash (FL UE 1/64/1 -> FL UE 1-64-1)
; RUFNAMEN_UEBERSETZUNG=s/\//-/g
RUFNAMEN_UEBERSETZUNG=
; Ob Einsatzmittel dem Einsatz entzogen werden sollen, wenn sie in Cobra einem Einsatz entzogen wurden
ENTZIEHE_EINSATZMITTEL=true
; Ob empfangene Nachrichten mit FMS-Status Meldungen für die Rettungsmittel in EDP gesetzt werden sollen
SETZE_FMS_STATUS=true
; Ob empfangene GPS Koordinaten der Rettungsmittel in EDP eingetragen werden sollen
SETZE_GPS_POSITION=true
=== Fehlerbehandlung ===
== "Fehler beim Laden des Zertifikates: " gefolgt von Fehlermeldung ==
Lokales Problem, welches beim Lesen der Zertifikate durch die Schnittstelle auftritt.
Kann bspw. auftreten, wenn die PK8-Datei und die CRT-Datei nicht zusammenpasst.
Teilweise werden durch iSE auch drei Dateien ausgeliefert (1x CRT, 1x PK8, 1x PEM). Hier kann es funktionieren, die PEM-Datei anstelle der CRT-Datei zu verwenden (also "CRT_FILE=C:\...\wdx3-client.pem")
== "Login fehlgeschlagen: rpc error: code = Unauthenticated desc = wrong username/password" ==
Die Logindaten in der WDX3_LOGIN Sektion sind Fehlerhaft. Das Passwort wird 1-zu-1 genauso gelesen, wie es in der Konfigurationsdatei steht. Es darf nicht in Anführungszeichen stehen und Zeichen auch nicht escaped werden
== "Fehler beim lesen aus dem Einsatzdaten-Stream - Error: rpc error: code = PermissionDenied desc = unexpected HTTP status code received from server: 403 (Forbidden); transport: received unexpected content-type "text/html" (immer wieder neu auftretend, nach einem erfolgreichen Login) ==
Die Schnittstelle konnte sich Authentifizieren (WDX3_LOGIN), jedoch keinen Stream mit dem tatsächlichen WDX3-Server (WDX3_CLIENT) aufbauen.
Kann bspw. auftreten, wenn versehentlich verschieden nicht kompatible Server angegeben sind. Bspw der real WDX3 Server für die Authentifizierung und der test WDX3 Server für den Stream-Aufbau
== "Fehler beim Verbinden zum EDP-Server: " Gefolgt von weiterer Meldung ==
Meldung - EOF: Die Verbindung wurde vom EDP-Server geschlossen. Tritt häufig auf, wenn die Schnittstelle sehr schnell hintereinander gestartet wird. Lässt sich in der Regel durch einen Neustart beheben. Alternativ durch Abwarten, bis EDP die Schnittstelle von selbst neu gestartet hat
Meldung - Lizenzslot: Es konnte kein Schnittstellen-Lizenzslot beantragt werden. Es sollte kontrolliert werden, ob die Anzahl der "Lizenz EDP-Schnittstelle" Lizenzen unter Lizenzen ausreichend für die Anzahl der konfigurierten Schnittstellen ist. Jede der 3 WDX3 Schnittstellen zählt als eigene Schnittstelle und benötigt einen eigenen Slot
== "Datenbankfehler ..." ==
Die Schnittstelle stürzt bewusst ab, wenn es einen Datenbankfehler gibt. Dies kann entweder aufgrund einer beendeten Datenbankverbindung auftreten, oder eines Fehlerhaften Datenbankbefehls.
Die Schnittstelle soll hier bewusst abstürzen, um unentdeckte Fehler und spätere Dateninkosistenz vorzubeugen. Im Falle eines fehlerhaften Datenbankbefehls wird ein Bugfix benötigt. Dies sollte im Produktivbetrieb nicht auftreten.
== "Login fehlgeschlagen: rpc error: code = Internal desc = unexpected HTTP status code received from server: 400 (Bad Request); transport: received unexpected content-type "text/html"" ==
Im Testen aufgetreten, bei dem Versuch einen Login mit einem falschen (self-signed) certificate durchzuführen
== "FATAL wdx3/rueckmeldungen/sending Ein unerwarteter Fehler ist aufgetreten - Error: Fehler beim Sender der Rückmeldung an WDX3 - Error: rpc error: code = PermissionDenied desc = JWT validation failed (WDX3 allowed sender/receiver check)" ==
Tritt auf, wenn die konfigurierte Kennung nicht berechtigt ist, mit der konfigurierten ZIEL_KENNUNG zu kommunizieren
== FATAL main Login fehlgeschlagen: rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: context deadline exceeded" ==
Ein TLS Fehler findet nach dem Verbindungsaufbau zum Login Server beim gRPC Login Aufruf an diesen Server auf. Bisher ist der Fehler nur mit einer selbst gehosteten WDX3 Server Instanz aufgefallen. Ursache war, dass einige Attribute in den Zertifkaten gefehlt haben.