iobroker.waip-web 0.7.1 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.de.md +202 -0
- package/README.md +65 -235
- package/admin/jsonConfig.json +13 -4
- package/io-package.json +16 -16
- package/main.js +3 -3
- package/package.json +5 -4
package/README.de.md
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# ioBroker.waip-web
|
|
4
|
+
|
|
5
|
+
🇬🇧 [English version of this README](README.md)
|
|
6
|
+
|
|
7
|
+
Inoffizieller ioBroker-Adapter für **Wachalarm IP-Web (WAIP-Web)**
|
|
8
|
+
|
|
9
|
+
Verbindet sich per Socket.IO mit einem WAIP-Web-Wachalarm-Monitor und bildet
|
|
10
|
+
Einsätze, Rückmeldungen, Routen und TTS-Ansagen als ioBroker-States ab –
|
|
11
|
+
ohne dass ein Browser-Tab dauerhaft offen sein muss.
|
|
12
|
+
|
|
13
|
+
## Über diesen Adapter
|
|
14
|
+
|
|
15
|
+
Dieser Adapter ist ein **inoffizielles Community-Projekt** und steht in
|
|
16
|
+
keiner Verbindung zum WAIP-Web-Projekt, zu Robert-112 oder zum Betreiber
|
|
17
|
+
einer konkreten Instanz (z. B. der Integrierten Regionalleitstelle
|
|
18
|
+
Lausitz). Er wurde entwickelt, indem das öffentlich über den Browser
|
|
19
|
+
ausgelieferte Frontend (`client_waip.js`) einer WAIP-Web-Instanz auf sein
|
|
20
|
+
Verhalten hin analysiert wurde, um dieselben Socket.IO-Events und
|
|
21
|
+
Datenfelder nachzubilden, die auch ein regulärer Browser-Client empfängt.
|
|
22
|
+
|
|
23
|
+
Der Adapter meldet sich **ohne Login** an und erhält dadurch ausschließlich
|
|
24
|
+
die öffentliche Berechtigungsstufe von WAIP-Web (Stichwort, Ort, ungefähre
|
|
25
|
+
Position, alarmierte Einsatzmittel, Rückmeldungen) – dieselben Daten, die
|
|
26
|
+
auch ein anonymer Browser-Besucher ohne Anmeldung sehen würde. Es werden
|
|
27
|
+
keine Zugriffsbeschränkungen umgangen.
|
|
28
|
+
|
|
29
|
+
> **Hinweis:** Ein automatisierter Dauerclient wie dieser Adapter ist etwas
|
|
30
|
+
> anderes als ein gelegentlich geöffneter Browser-Tab. Bevor du den Adapter
|
|
31
|
+
> gegen eine produktive Instanz laufen lässt, sprich kurz mit dem
|
|
32
|
+
> Betreiber/deiner Leitstelle ab, ob eine dauerhafte automatisierte
|
|
33
|
+
> Verbindung erwünscht ist.
|
|
34
|
+
|
|
35
|
+
## Über WAIP-Web
|
|
36
|
+
|
|
37
|
+
[Wachalarm IP-Web](https://github.com/Robert-112/n112_waip-web) ist eine
|
|
38
|
+
quelloffene Webanwendung von **Robert-112**, die Alarmierungsinformationen
|
|
39
|
+
für Feuerwehr/Rettungsdienst geräteunabhängig im Browser darstellt (Windows,
|
|
40
|
+
Linux, Mac, Smartphone – keine Installation nötig). Sie bietet u. a.:
|
|
41
|
+
|
|
42
|
+
- **Alarmmonitor** – Einsatzart, Stichwort, Sondersignal, Ort, Karte,
|
|
43
|
+
alarmierte Einsatzmittel, App-Rückmeldungen der Einsatzkräfte inkl.
|
|
44
|
+
Sprachansage
|
|
45
|
+
- **Dashboard** – Gesamtübersicht laufender Einsätze
|
|
46
|
+
- **Rückmeldefunktion** – App-basierte Rückmeldungen der Einsatzkräfte,
|
|
47
|
+
gegliedert nach Rolle (EK/GF/ZF/VF) und Zusatzfunktion (AGT/FZF/MA/MED)
|
|
48
|
+
- **Administration** – Nutzerverwaltung, Wachdaten, Monitor-Übersicht
|
|
49
|
+
|
|
50
|
+
WAIP-Web selbst ist unter der
|
|
51
|
+
[**Creative Commons BY-SA 4.0**](https://creativecommons.org/licenses/by-sa/4.0/deed.de)
|
|
52
|
+
lizenziert. Dieser Adapter enthält keinen Code aus dem WAIP-Web-Projekt,
|
|
53
|
+
sondern implementiert eine eigenständige Anbindung an dessen Socket.IO-
|
|
54
|
+
Schnittstelle.
|
|
55
|
+
|
|
56
|
+
## Funktionen
|
|
57
|
+
|
|
58
|
+
- Verbindung zum Namespace `/waip` per `socket.io-client`, Registrierung
|
|
59
|
+
über `emit('WAIP', monitorId)` (3-faches Emit für Robustheit)
|
|
60
|
+
- Manuelles Reconnect-Handling (kein Auto-Reconnect der Bibliothek) mit
|
|
61
|
+
konfigurierbarer Verzögerung
|
|
62
|
+
- Registrierungs-Timeout mit Audit-Log (`debug.monitorAudit`)
|
|
63
|
+
- Normalisierung von Geodaten (wgs84-Felder, `position` oder
|
|
64
|
+
GeoJSON-`geometry` → Mittelpunkt)
|
|
65
|
+
- History der letzten 10 abgeschlossenen Einsätze (`einsatz.history10`)
|
|
66
|
+
- Getrennte Handler für Alarm (`io.new_waip`), Rückmeldung (`io.new_rmld`),
|
|
67
|
+
Routen (`io.routes`), TTS (`io.playtts`) und Standby (`io.standby`)
|
|
68
|
+
- Automatisches Session-Cookie-Management (siehe unten), damit die
|
|
69
|
+
Alarm-Zustellung auch ohne offene Browsersitzung dauerhaft weiterläuft
|
|
70
|
+
- Server-Neustart-Erkennung über `io.version` mit automatischem
|
|
71
|
+
Session-Refresh + Reconnect
|
|
72
|
+
- Vollständige Einsatzdaten inkl. verschachtelter Rückmeldungen/Routen
|
|
73
|
+
pro Einsatz (Rückmeldungen und Routen sind 1:n-Beziehungen)
|
|
74
|
+
- Aggregierte Rückmeldungs-Zähler pro Rolle/Fähigkeit, analog zu den
|
|
75
|
+
Live-Badges der Weboberfläche
|
|
76
|
+
|
|
77
|
+
### Warum ein Session-Cookie nötig ist
|
|
78
|
+
|
|
79
|
+
Der WAIP-Web-Server bindet die Alarm-Zustellung an einen
|
|
80
|
+
Express-Session-Cookie, den ein Browser über ein mitgeliefertes Skript
|
|
81
|
+
automatisch alle paar Minuten erneuert. Ein reiner Socket.IO-Client bekommt
|
|
82
|
+
diesen Cookie nie automatisch – der Adapter holt ihn deshalb selbst per
|
|
83
|
+
`GET /session/keepalive` und hängt ihn an die Socket.IO-Verbindung an.
|
|
84
|
+
|
|
85
|
+
Die Cookie-Lebensdauer ist laut Quellcode von WAIP-Web **pro Instanz per
|
|
86
|
+
Umgebungsvariable konfigurierbar** (Server-Standard: 60 Sekunden; diese
|
|
87
|
+
Instanz nutzt offenbar 10 Minuten) – ein fest angenommenes Erneuerungs-
|
|
88
|
+
intervall wäre daher für andere WAIP-Web-Instanzen potenziell falsch. Der
|
|
89
|
+
Adapter leitet das tatsächliche Intervall deshalb **adaptiv** aus der vom
|
|
90
|
+
Server bei jedem Aufruf gemeldeten Ablaufzeit ab (80 % der beobachteten
|
|
91
|
+
Laufzeit, mindestens 55 Sekunden, höchstens die konfigurierte Obergrenze) –
|
|
92
|
+
genau die gleiche Klammerung, die auch `/js/session_keepalive.js` der
|
|
93
|
+
Website selbst verwendet.
|
|
94
|
+
|
|
95
|
+
## Konfiguration
|
|
96
|
+
|
|
97
|
+
In der Admin-Oberfläche der Adapterinstanz:
|
|
98
|
+
|
|
99
|
+
| Feld | Beschreibung | Default |
|
|
100
|
+
| --- | --- | --- |
|
|
101
|
+
| WAIP-Server-URL | Basis-URL der WAIP-Web-Instanz | `https://wachalarm.leitstelle-lausitz.de` |
|
|
102
|
+
| Monitor-ID | Auswahl per Live-Dropdown, geladen von der `/waip/`-Übersichtsseite des konfigurierten Servers und gruppiert nach Leitstelle/Kreis/Träger/Wache; manuelle Eingabe bleibt möglich, falls der Server nicht erreichbar ist. Leer/`0` = globaler Monitor (alle Einsätze) | *(leer)* |
|
|
103
|
+
| Registrierungs-Timeout (s) | Zeit bis eine ausbleibende Registrierungsbestätigung geloggt wird | `10` |
|
|
104
|
+
| Wiederverbindungs-Verzögerung (s) | Wartezeit vor manuellem Reconnect nach Disconnect/Fehler | `5` |
|
|
105
|
+
|
|
106
|
+
Das Session-Keepalive-Intervall ist **nicht konfigurierbar** – es wird bei
|
|
107
|
+
jeder Erneuerung vollautomatisch aus der vom Server gemeldeten Cookie-
|
|
108
|
+
Laufzeit abgeleitet (min. 55s, max. 5 Min., analog zu
|
|
109
|
+
`/js/session_keepalive.js` der Website selbst).
|
|
110
|
+
|
|
111
|
+
## States (unter `waip-web.0.*`)
|
|
112
|
+
|
|
113
|
+
Rückmeldungen und Routen sind pro Einsatz Listen (1:n) und liegen deshalb
|
|
114
|
+
als verschachtelte JSON-Arrays in `einsatz.json` bzw. in jedem Eintrag von
|
|
115
|
+
`einsatz.history10` – ergänzt um schnell bindbare Zähler, damit VIS-Bindings
|
|
116
|
+
und Trigger ohne JSON-Parsing auskommen.
|
|
117
|
+
|
|
118
|
+
### info
|
|
119
|
+
|
|
120
|
+
| State | Typ | Beschreibung |
|
|
121
|
+
| --- | --- | --- |
|
|
122
|
+
| `connection` | boolean | Standard-ioBroker-Indikator: Verbindung zum WAIP-Server aktiv |
|
|
123
|
+
|
|
124
|
+
### status
|
|
125
|
+
|
|
126
|
+
| State | Typ | Beschreibung |
|
|
127
|
+
| --- | --- | --- |
|
|
128
|
+
| `connected` | boolean | Socket.IO-Verbindung technisch aufgebaut |
|
|
129
|
+
| `alarmAktiv` | boolean | `true` seit dem letzten `io.new_waip`, `false` seit dem letzten `io.standby` |
|
|
130
|
+
| `restzeit` | number (s) | Verbleibende Sekunden bis `einsatz.ablaufzeit`, sekündlich aktualisiert |
|
|
131
|
+
| `registeredMonitor` | string | Zuletzt beim Server registrierte Monitor-ID |
|
|
132
|
+
| `registeredMonitorName` | string | Anzeigename dieses Monitors ohne ID (z. B. „Leitstelle: Lausitz"); wird einmalig beim Start von derselben `/waip/`-Übersichtsseite wie das Admin-Dropdown aufgelöst, `null` falls nicht auflösbar |
|
|
133
|
+
| `registrationAccepted` | mixed | `"pending"` direkt nach Connect, `true` sobald das erste Event empfangen wurde, sonst `false` nach Ablauf des Registrierungs-Timeouts |
|
|
134
|
+
|
|
135
|
+
### einsatz
|
|
136
|
+
|
|
137
|
+
Flache Felder des aktuell laufenden Einsatzes. Werden bei `io.standby`
|
|
138
|
+
geleert (`null`/`0`), analog zum offiziellen Frontend – `status.alarmAktiv`
|
|
139
|
+
ist damit ein verlässlicher Schalter dafür, ob hier gerade echte Live-Daten
|
|
140
|
+
stehen. Der zuletzt abgeschlossene Einsatz bleibt trotzdem über
|
|
141
|
+
`einsatz.history10` abrufbar:
|
|
142
|
+
|
|
143
|
+
| State | Typ | Beschreibung |
|
|
144
|
+
| --- | --- | --- |
|
|
145
|
+
| `id` | number | Interne Einsatz-ID |
|
|
146
|
+
| `uuid` | string | Eindeutige Einsatz-UUID (dient auch der Zuordnung von Rückmeldungen) |
|
|
147
|
+
| `einsatzart` | string | z. B. „Brandeinsatz", „Hilfeleistungseinsatz", „Rettungseinsatz", „Krankentransport" |
|
|
148
|
+
| `stichwort` | string | Alarmstichwort |
|
|
149
|
+
| `ort` | string | Ort |
|
|
150
|
+
| `ortsteil` | string | Ortsteil (falls abweichend vom Ort) |
|
|
151
|
+
| `strasse` / `hausnummer` | string | Adresse |
|
|
152
|
+
| `objekt` / `objektteil` | string | Gebäude-/Objektname und -teil |
|
|
153
|
+
| `einsatzdetails` | string | Zusatzdetails (nur bei Brand-/Hilfeleistungseinsätzen befüllt) |
|
|
154
|
+
| `besonderheiten` | string | Freitext-Besonderheiten der Leitstelle |
|
|
155
|
+
| `zeitstempel` | string (date) | Alarmzeit |
|
|
156
|
+
| `ablaufzeit` | string (date) | Ende der Standby-Anzeigedauer, Basis für `status.restzeit` |
|
|
157
|
+
| `einsatznummer` | string | Einsatznummer (sofern vom Server vergeben) |
|
|
158
|
+
| `sondersignal` | number | `1` = Sondersignal, sonst kein Sondersignal |
|
|
159
|
+
| `permissions` | mixed | Berechtigungsflag der Registrierung (Vollzugriff auf Detailkarte ja/nein) |
|
|
160
|
+
| `latitude` / `longitude` | number | Position des Einsatzortes (normalisiert aus wgs84-Feldern oder GeoJSON-Mittelpunkt) |
|
|
161
|
+
| `json` | string (JSON) | Vollständiges Einsatz-Objekt: alle Felder oben plus `emAlarmiert[]`, `emWeitere[]`, `routen[]`, `rueckmeldungen[]` |
|
|
162
|
+
| `history10` | string (JSON-Array) | Letzte 10 abgeschlossenen Einsätze, gleicher Objekt-Shape wie `json`, geschrieben bei `io.standby` |
|
|
163
|
+
| `routenGesamt` | number | Anzahl Routen im aktuellen Einsatz (= `json.routen.length`) |
|
|
164
|
+
| `rueckmeldungGesamt` | number | Rückmeldungen gesamt im aktuellen Einsatz |
|
|
165
|
+
| `rueckmeldungAnzahl.ek` | number | Anzahl Rückmeldungen als Einsatzkraft |
|
|
166
|
+
| `rueckmeldungAnzahl.gf` | number | Anzahl Rückmeldungen als Gruppenführer |
|
|
167
|
+
| `rueckmeldungAnzahl.zf` | number | Anzahl Rückmeldungen als Zugführer |
|
|
168
|
+
| `rueckmeldungAnzahl.vf` | number | Anzahl Rückmeldungen als Verbandsführer |
|
|
169
|
+
| `rueckmeldungAnzahl.agt` | number | Anzahl Rückmeldungen mit Atemschutz-Befähigung |
|
|
170
|
+
| `rueckmeldungAnzahl.fzf` | number | Anzahl Rückmeldungen als Fahrzeugführer |
|
|
171
|
+
| `rueckmeldungAnzahl.ma` | number | Anzahl Rückmeldungen als Maschinist |
|
|
172
|
+
| `rueckmeldungAnzahl.med` | number | Anzahl Rückmeldungen mit medizinischer Befähigung |
|
|
173
|
+
|
|
174
|
+
### tts
|
|
175
|
+
|
|
176
|
+
| State | Typ | Beschreibung |
|
|
177
|
+
| --- | --- | --- |
|
|
178
|
+
| `last` | string (URL) | URL der zuletzt empfangenen Sprachansage |
|
|
179
|
+
| `lastTimestamp` | string (date) | Zeitpunkt der letzten Ansage |
|
|
180
|
+
| `history10` | string (JSON-Array) | Letzte 10 Ansagen als `{zeitstempel, url}` |
|
|
181
|
+
|
|
182
|
+
### debug
|
|
183
|
+
|
|
184
|
+
| State | Typ | Beschreibung |
|
|
185
|
+
| --- | --- | --- |
|
|
186
|
+
| `lastEvent` | string (JSON) | Letztes empfangenes Socket-Event (Name + Zeitstempel), zur Verbindungsdiagnose |
|
|
187
|
+
| `normalizedPosition` | string (JSON) | Zuletzt normalisierte Position des Einsatzes |
|
|
188
|
+
| `rawPayloadShort` | string | Vorschau (500 Zeichen) der rohen, unnormalisierten `io.new_waip`-Nutzlast |
|
|
189
|
+
| `ignoredCount` | number | Anzahl verworfener Events (Payload nannte explizit eine andere Monitor-ID) |
|
|
190
|
+
| `monitorAudit` | string (JSON-Array) | Chronologisches Log von Connect-/Registrierungs-/Reconnect-Ereignissen (200 Einträge) |
|
|
191
|
+
| `sessionExpires` | string (date) | Ablaufzeit des Session-Cookies laut letzter Erneuerung |
|
|
192
|
+
| `lastError` | string (JSON) | Letzte vom Server gemeldete Fehlermeldung (`io.error`) |
|
|
193
|
+
| `serverVersion` | string | Zuletzt gemeldete Server-Instanz-ID (`io.version`); Änderung deutet auf Server-Neustart hin |
|
|
194
|
+
|
|
195
|
+
JSON-interne Schlüssel innerhalb von `einsatz.json` (`emAlarmiert`,
|
|
196
|
+
`emWeitere`, `routen`, `rueckmeldungen`) bleiben kleingeschrieben – das sind
|
|
197
|
+
Objekteigenschaften im JSON-Wert, keine eigenen ioBroker-States.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
Lizenz und vollständiges Changelog stehen in der
|
|
202
|
+
[englischen README](README.md#license) (`## License`, `## Changelog`).
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
[](https://weblate.iobroker.net/engage/adapters/?utm_source=widget)
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
🇩🇪 [Deutsche Version dieser README](README.de.md)
|
|
14
14
|
|
|
15
15
|
Unofficial ioBroker adapter for **Wachalarm IP-Web (WAIP-Web)**
|
|
16
16
|
|
|
@@ -19,7 +19,7 @@ Connects via Socket.IO to a WAIP-Web dispatch monitor and mirrors incidents
|
|
|
19
19
|
announcements into ioBroker states – without needing a browser tab to stay
|
|
20
20
|
open.
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
## About this adapter
|
|
23
23
|
|
|
24
24
|
This adapter is an **unofficial community project** and has no connection
|
|
25
25
|
to the WAIP-Web project, to Robert-112, or to the operator of any specific
|
|
@@ -40,7 +40,7 @@ bypassed.
|
|
|
40
40
|
> production instance, briefly check with the operator/your dispatch
|
|
41
41
|
> center whether a permanent automated connection is welcome.
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
## About WAIP-Web
|
|
44
44
|
|
|
45
45
|
[Wachalarm IP-Web](https://github.com/Robert-112/n112_waip-web) is an
|
|
46
46
|
open-source web application by **Robert-112** that displays dispatch/alert
|
|
@@ -61,7 +61,7 @@ WAIP-Web itself is licensed under
|
|
|
61
61
|
This adapter contains no code from the WAIP-Web project; it implements an
|
|
62
62
|
independent client for its Socket.IO interface.
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
## Features
|
|
65
65
|
|
|
66
66
|
- Connects to the `/waip` namespace via `socket.io-client`, registers via
|
|
67
67
|
`emit('WAIP', monitorId)` (emitted 3× for robustness)
|
|
@@ -82,7 +82,7 @@ independent client for its Socket.IO interface.
|
|
|
82
82
|
- Aggregated feedback counters per role/capability, mirroring the live
|
|
83
83
|
badges on the web UI
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
### Why a session cookie is needed
|
|
86
86
|
|
|
87
87
|
The WAIP-Web server ties alarm delivery to an Express session cookie,
|
|
88
88
|
which a browser renews automatically every few minutes via a bundled
|
|
@@ -100,7 +100,7 @@ observed lifetime, at least 55 seconds, at most a fixed 5-minute ceiling)
|
|
|
100
100
|
– the exact same clamping that `/js/session_keepalive.js` on the site
|
|
101
101
|
itself uses.
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
## Configuration
|
|
104
104
|
|
|
105
105
|
In the admin UI of the adapter instance:
|
|
106
106
|
|
|
@@ -116,20 +116,20 @@ fully automatically on every renewal from the cookie lifetime the server
|
|
|
116
116
|
reports (min. 55s, max. 5 min., matching `/js/session_keepalive.js` on
|
|
117
117
|
the site itself).
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
## States (under `waip-web.0.*`)
|
|
120
120
|
|
|
121
121
|
Feedback and routes are 1:n lists per incident and are therefore stored
|
|
122
122
|
as nested JSON arrays inside `einsatz.json` and in every entry of
|
|
123
123
|
`einsatz.history10` – complemented by quick-to-bind counters so VIS
|
|
124
124
|
bindings and triggers don't need JSON parsing.
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
### info
|
|
127
127
|
|
|
128
128
|
| State | Type | Description |
|
|
129
129
|
| --- | --- | --- |
|
|
130
130
|
| `connection` | boolean | Standard ioBroker indicator: connection to the WAIP server active |
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
### status
|
|
133
133
|
|
|
134
134
|
| State | Type | Description |
|
|
135
135
|
| --- | --- | --- |
|
|
@@ -140,7 +140,7 @@ bindings and triggers don't need JSON parsing.
|
|
|
140
140
|
| `registeredMonitorName` | string | Display name of that monitor, without the ID (e.g. "Leitstelle: Lausitz"); resolved once at startup from the same `/waip/` overview page as the admin dropdown, `null` if it couldn't be resolved |
|
|
141
141
|
| `registrationAccepted` | mixed | `"pending"` right after connecting, `true` once the first event was received, otherwise `false` once the registration timeout elapses |
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
### einsatz
|
|
144
144
|
|
|
145
145
|
Flat fields of the currently running incident. Cleared (`null`/`0`) on
|
|
146
146
|
`io.standby`, matching the official frontend – `status.alarmAktiv` is
|
|
@@ -179,7 +179,7 @@ live data. The most recently finished incident remains available via
|
|
|
179
179
|
| `rueckmeldungAnzahl.ma` | number | Feedback count as driver/operator ("Maschinist") |
|
|
180
180
|
| `rueckmeldungAnzahl.med` | number | Feedback count with a medical qualification |
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
### tts
|
|
183
183
|
|
|
184
184
|
| State | Type | Description |
|
|
185
185
|
| --- | --- | --- |
|
|
@@ -187,7 +187,7 @@ live data. The most recently finished incident remains available via
|
|
|
187
187
|
| `lastTimestamp` | string (date) | Time of the last announcement |
|
|
188
188
|
| `history10` | string (JSON array) | Last 10 announcements as `{zeitstempel, url}` |
|
|
189
189
|
|
|
190
|
-
|
|
190
|
+
### debug
|
|
191
191
|
|
|
192
192
|
| State | Type | Description |
|
|
193
193
|
| --- | --- | --- |
|
|
@@ -204,231 +204,32 @@ JSON-internal keys inside `einsatz.json` (`emAlarmiert`, `emWeitere`,
|
|
|
204
204
|
`routen`, `rueckmeldungen`) stay lowercase – these are object properties
|
|
205
205
|
inside the JSON value, not their own ioBroker states.
|
|
206
206
|
|
|
207
|
-
## Deutsch
|
|
208
|
-
|
|
209
|
-
Inoffizieller ioBroker-Adapter für **Wachalarm IP-Web (WAIP-Web)**
|
|
210
|
-
|
|
211
|
-
Verbindet sich per Socket.IO mit einem WAIP-Web-Wachalarm-Monitor und bildet
|
|
212
|
-
Einsätze, Rückmeldungen, Routen und TTS-Ansagen als ioBroker-States ab –
|
|
213
|
-
ohne dass ein Browser-Tab dauerhaft offen sein muss.
|
|
214
|
-
|
|
215
|
-
### Über diesen Adapter
|
|
216
|
-
|
|
217
|
-
Dieser Adapter ist ein **inoffizielles Community-Projekt** und steht in
|
|
218
|
-
keiner Verbindung zum WAIP-Web-Projekt, zu Robert-112 oder zum Betreiber
|
|
219
|
-
einer konkreten Instanz (z. B. der Integrierten Regionalleitstelle
|
|
220
|
-
Lausitz). Er wurde entwickelt, indem das öffentlich über den Browser
|
|
221
|
-
ausgelieferte Frontend (`client_waip.js`) einer WAIP-Web-Instanz auf sein
|
|
222
|
-
Verhalten hin analysiert wurde, um dieselben Socket.IO-Events und
|
|
223
|
-
Datenfelder nachzubilden, die auch ein regulärer Browser-Client empfängt.
|
|
224
|
-
|
|
225
|
-
Der Adapter meldet sich **ohne Login** an und erhält dadurch ausschließlich
|
|
226
|
-
die öffentliche Berechtigungsstufe von WAIP-Web (Stichwort, Ort, ungefähre
|
|
227
|
-
Position, alarmierte Einsatzmittel, Rückmeldungen) – dieselben Daten, die
|
|
228
|
-
auch ein anonymer Browser-Besucher ohne Anmeldung sehen würde. Es werden
|
|
229
|
-
keine Zugriffsbeschränkungen umgangen.
|
|
230
|
-
|
|
231
|
-
> **Hinweis:** Ein automatisierter Dauerclient wie dieser Adapter ist etwas
|
|
232
|
-
> anderes als ein gelegentlich geöffneter Browser-Tab. Bevor du den Adapter
|
|
233
|
-
> gegen eine produktive Instanz laufen lässt, sprich kurz mit dem
|
|
234
|
-
> Betreiber/deiner Leitstelle ab, ob eine dauerhafte automatisierte
|
|
235
|
-
> Verbindung erwünscht ist.
|
|
236
|
-
|
|
237
|
-
### Über WAIP-Web
|
|
238
|
-
|
|
239
|
-
[Wachalarm IP-Web](https://github.com/Robert-112/n112_waip-web) ist eine
|
|
240
|
-
quelloffene Webanwendung von **Robert-112**, die Alarmierungsinformationen
|
|
241
|
-
für Feuerwehr/Rettungsdienst geräteunabhängig im Browser darstellt (Windows,
|
|
242
|
-
Linux, Mac, Smartphone – keine Installation nötig). Sie bietet u. a.:
|
|
243
|
-
|
|
244
|
-
- **Alarmmonitor** – Einsatzart, Stichwort, Sondersignal, Ort, Karte,
|
|
245
|
-
alarmierte Einsatzmittel, App-Rückmeldungen der Einsatzkräfte inkl.
|
|
246
|
-
Sprachansage
|
|
247
|
-
- **Dashboard** – Gesamtübersicht laufender Einsätze
|
|
248
|
-
- **Rückmeldefunktion** – App-basierte Rückmeldungen der Einsatzkräfte,
|
|
249
|
-
gegliedert nach Rolle (EK/GF/ZF/VF) und Zusatzfunktion (AGT/FZF/MA/MED)
|
|
250
|
-
- **Administration** – Nutzerverwaltung, Wachdaten, Monitor-Übersicht
|
|
251
|
-
|
|
252
|
-
WAIP-Web selbst ist unter der
|
|
253
|
-
[**Creative Commons BY-SA 4.0**](https://creativecommons.org/licenses/by-sa/4.0/deed.de)
|
|
254
|
-
lizenziert. Dieser Adapter enthält keinen Code aus dem WAIP-Web-Projekt,
|
|
255
|
-
sondern implementiert eine eigenständige Anbindung an dessen Socket.IO-
|
|
256
|
-
Schnittstelle.
|
|
257
|
-
|
|
258
|
-
### Funktionen
|
|
259
|
-
|
|
260
|
-
- Verbindung zum Namespace `/waip` per `socket.io-client`, Registrierung
|
|
261
|
-
über `emit('WAIP', monitorId)` (3-faches Emit für Robustheit)
|
|
262
|
-
- Manuelles Reconnect-Handling (kein Auto-Reconnect der Bibliothek) mit
|
|
263
|
-
konfigurierbarer Verzögerung
|
|
264
|
-
- Registrierungs-Timeout mit Audit-Log (`debug.monitorAudit`)
|
|
265
|
-
- Normalisierung von Geodaten (wgs84-Felder, `position` oder
|
|
266
|
-
GeoJSON-`geometry` → Mittelpunkt)
|
|
267
|
-
- History der letzten 10 abgeschlossenen Einsätze (`einsatz.history10`)
|
|
268
|
-
- Getrennte Handler für Alarm (`io.new_waip`), Rückmeldung (`io.new_rmld`),
|
|
269
|
-
Routen (`io.routes`), TTS (`io.playtts`) und Standby (`io.standby`)
|
|
270
|
-
- Automatisches Session-Cookie-Management (siehe unten), damit die
|
|
271
|
-
Alarm-Zustellung auch ohne offene Browsersitzung dauerhaft weiterläuft
|
|
272
|
-
- Server-Neustart-Erkennung über `io.version` mit automatischem
|
|
273
|
-
Session-Refresh + Reconnect
|
|
274
|
-
- Vollständige Einsatzdaten inkl. verschachtelter Rückmeldungen/Routen
|
|
275
|
-
pro Einsatz (Rückmeldungen und Routen sind 1:n-Beziehungen)
|
|
276
|
-
- Aggregierte Rückmeldungs-Zähler pro Rolle/Fähigkeit, analog zu den
|
|
277
|
-
Live-Badges der Weboberfläche
|
|
278
|
-
|
|
279
|
-
#### Warum ein Session-Cookie nötig ist
|
|
280
|
-
|
|
281
|
-
Der WAIP-Web-Server bindet die Alarm-Zustellung an einen
|
|
282
|
-
Express-Session-Cookie, den ein Browser über ein mitgeliefertes Skript
|
|
283
|
-
automatisch alle paar Minuten erneuert. Ein reiner Socket.IO-Client bekommt
|
|
284
|
-
diesen Cookie nie automatisch – der Adapter holt ihn deshalb selbst per
|
|
285
|
-
`GET /session/keepalive` und hängt ihn an die Socket.IO-Verbindung an.
|
|
286
|
-
|
|
287
|
-
Die Cookie-Lebensdauer ist laut Quellcode von WAIP-Web **pro Instanz per
|
|
288
|
-
Umgebungsvariable konfigurierbar** (Server-Standard: 60 Sekunden; diese
|
|
289
|
-
Instanz nutzt offenbar 10 Minuten) – ein fest angenommenes Erneuerungs-
|
|
290
|
-
intervall wäre daher für andere WAIP-Web-Instanzen potenziell falsch. Der
|
|
291
|
-
Adapter leitet das tatsächliche Intervall deshalb **adaptiv** aus der vom
|
|
292
|
-
Server bei jedem Aufruf gemeldeten Ablaufzeit ab (80 % der beobachteten
|
|
293
|
-
Laufzeit, mindestens 55 Sekunden, höchstens die konfigurierte Obergrenze) –
|
|
294
|
-
genau die gleiche Klammerung, die auch `/js/session_keepalive.js` der
|
|
295
|
-
Website selbst verwendet.
|
|
296
|
-
|
|
297
|
-
### Konfiguration
|
|
298
|
-
|
|
299
|
-
In der Admin-Oberfläche der Adapterinstanz:
|
|
300
|
-
|
|
301
|
-
| Feld | Beschreibung | Default |
|
|
302
|
-
| --- | --- | --- |
|
|
303
|
-
| WAIP-Server-URL | Basis-URL der WAIP-Web-Instanz | `https://wachalarm.leitstelle-lausitz.de` |
|
|
304
|
-
| Monitor-ID | Auswahl per Live-Dropdown, geladen von der `/waip/`-Übersichtsseite des konfigurierten Servers und gruppiert nach Leitstelle/Kreis/Träger/Wache; manuelle Eingabe bleibt möglich, falls der Server nicht erreichbar ist. Leer/`0` = globaler Monitor (alle Einsätze) | *(leer)* |
|
|
305
|
-
| Registrierungs-Timeout (s) | Zeit bis eine ausbleibende Registrierungsbestätigung geloggt wird | `10` |
|
|
306
|
-
| Wiederverbindungs-Verzögerung (s) | Wartezeit vor manuellem Reconnect nach Disconnect/Fehler | `5` |
|
|
307
|
-
|
|
308
|
-
Das Session-Keepalive-Intervall ist **nicht konfigurierbar** – es wird bei
|
|
309
|
-
jeder Erneuerung vollautomatisch aus der vom Server gemeldeten Cookie-
|
|
310
|
-
Laufzeit abgeleitet (min. 55s, max. 5 Min., analog zu
|
|
311
|
-
`/js/session_keepalive.js` der Website selbst).
|
|
312
|
-
|
|
313
|
-
### States (unter `waip-web.0.*`)
|
|
314
|
-
|
|
315
|
-
Rückmeldungen und Routen sind pro Einsatz Listen (1:n) und liegen deshalb
|
|
316
|
-
als verschachtelte JSON-Arrays in `einsatz.json` bzw. in jedem Eintrag von
|
|
317
|
-
`einsatz.history10` – ergänzt um schnell bindbare Zähler, damit VIS-Bindings
|
|
318
|
-
und Trigger ohne JSON-Parsing auskommen.
|
|
319
|
-
|
|
320
|
-
#### info
|
|
321
|
-
|
|
322
|
-
| State | Typ | Beschreibung |
|
|
323
|
-
| --- | --- | --- |
|
|
324
|
-
| `connection` | boolean | Standard-ioBroker-Indikator: Verbindung zum WAIP-Server aktiv |
|
|
325
|
-
|
|
326
|
-
#### status
|
|
327
|
-
|
|
328
|
-
| State | Typ | Beschreibung |
|
|
329
|
-
| --- | --- | --- |
|
|
330
|
-
| `connected` | boolean | Socket.IO-Verbindung technisch aufgebaut |
|
|
331
|
-
| `alarmAktiv` | boolean | `true` seit dem letzten `io.new_waip`, `false` seit dem letzten `io.standby` |
|
|
332
|
-
| `restzeit` | number (s) | Verbleibende Sekunden bis `einsatz.ablaufzeit`, sekündlich aktualisiert |
|
|
333
|
-
| `registeredMonitor` | string | Zuletzt beim Server registrierte Monitor-ID |
|
|
334
|
-
| `registeredMonitorName` | string | Anzeigename dieses Monitors ohne ID (z. B. „Leitstelle: Lausitz"); wird einmalig beim Start von derselben `/waip/`-Übersichtsseite wie das Admin-Dropdown aufgelöst, `null` falls nicht auflösbar |
|
|
335
|
-
| `registrationAccepted` | mixed | `"pending"` direkt nach Connect, `true` sobald das erste Event empfangen wurde, sonst `false` nach Ablauf des Registrierungs-Timeouts |
|
|
336
|
-
|
|
337
|
-
#### einsatz
|
|
338
|
-
|
|
339
|
-
Flache Felder des aktuell laufenden Einsatzes. Werden bei `io.standby`
|
|
340
|
-
geleert (`null`/`0`), analog zum offiziellen Frontend – `status.alarmAktiv`
|
|
341
|
-
ist damit ein verlässlicher Schalter dafür, ob hier gerade echte Live-Daten
|
|
342
|
-
stehen. Der zuletzt abgeschlossene Einsatz bleibt trotzdem über
|
|
343
|
-
`einsatz.history10` abrufbar:
|
|
344
|
-
|
|
345
|
-
| State | Typ | Beschreibung |
|
|
346
|
-
| --- | --- | --- |
|
|
347
|
-
| `id` | number | Interne Einsatz-ID |
|
|
348
|
-
| `uuid` | string | Eindeutige Einsatz-UUID (dient auch der Zuordnung von Rückmeldungen) |
|
|
349
|
-
| `einsatzart` | string | z. B. „Brandeinsatz", „Hilfeleistungseinsatz", „Rettungseinsatz", „Krankentransport" |
|
|
350
|
-
| `stichwort` | string | Alarmstichwort |
|
|
351
|
-
| `ort` | string | Ort |
|
|
352
|
-
| `ortsteil` | string | Ortsteil (falls abweichend vom Ort) |
|
|
353
|
-
| `strasse` / `hausnummer` | string | Adresse |
|
|
354
|
-
| `objekt` / `objektteil` | string | Gebäude-/Objektname und -teil |
|
|
355
|
-
| `einsatzdetails` | string | Zusatzdetails (nur bei Brand-/Hilfeleistungseinsätzen befüllt) |
|
|
356
|
-
| `besonderheiten` | string | Freitext-Besonderheiten der Leitstelle |
|
|
357
|
-
| `zeitstempel` | string (date) | Alarmzeit |
|
|
358
|
-
| `ablaufzeit` | string (date) | Ende der Standby-Anzeigedauer, Basis für `status.restzeit` |
|
|
359
|
-
| `einsatznummer` | string | Einsatznummer (sofern vom Server vergeben) |
|
|
360
|
-
| `sondersignal` | number | `1` = Sondersignal, sonst kein Sondersignal |
|
|
361
|
-
| `permissions` | mixed | Berechtigungsflag der Registrierung (Vollzugriff auf Detailkarte ja/nein) |
|
|
362
|
-
| `latitude` / `longitude` | number | Position des Einsatzortes (normalisiert aus wgs84-Feldern oder GeoJSON-Mittelpunkt) |
|
|
363
|
-
| `json` | string (JSON) | Vollständiges Einsatz-Objekt: alle Felder oben plus `emAlarmiert[]`, `emWeitere[]`, `routen[]`, `rueckmeldungen[]` |
|
|
364
|
-
| `history10` | string (JSON-Array) | Letzte 10 abgeschlossenen Einsätze, gleicher Objekt-Shape wie `json`, geschrieben bei `io.standby` |
|
|
365
|
-
| `routenGesamt` | number | Anzahl Routen im aktuellen Einsatz (= `json.routen.length`) |
|
|
366
|
-
| `rueckmeldungGesamt` | number | Rückmeldungen gesamt im aktuellen Einsatz |
|
|
367
|
-
| `rueckmeldungAnzahl.ek` | number | Anzahl Rückmeldungen als Einsatzkraft |
|
|
368
|
-
| `rueckmeldungAnzahl.gf` | number | Anzahl Rückmeldungen als Gruppenführer |
|
|
369
|
-
| `rueckmeldungAnzahl.zf` | number | Anzahl Rückmeldungen als Zugführer |
|
|
370
|
-
| `rueckmeldungAnzahl.vf` | number | Anzahl Rückmeldungen als Verbandsführer |
|
|
371
|
-
| `rueckmeldungAnzahl.agt` | number | Anzahl Rückmeldungen mit Atemschutz-Befähigung |
|
|
372
|
-
| `rueckmeldungAnzahl.fzf` | number | Anzahl Rückmeldungen als Fahrzeugführer |
|
|
373
|
-
| `rueckmeldungAnzahl.ma` | number | Anzahl Rückmeldungen als Maschinist |
|
|
374
|
-
| `rueckmeldungAnzahl.med` | number | Anzahl Rückmeldungen mit medizinischer Befähigung |
|
|
375
|
-
|
|
376
|
-
#### tts
|
|
377
|
-
|
|
378
|
-
| State | Typ | Beschreibung |
|
|
379
|
-
| --- | --- | --- |
|
|
380
|
-
| `last` | string (URL) | URL der zuletzt empfangenen Sprachansage |
|
|
381
|
-
| `lastTimestamp` | string (date) | Zeitpunkt der letzten Ansage |
|
|
382
|
-
| `history10` | string (JSON-Array) | Letzte 10 Ansagen als `{zeitstempel, url}` |
|
|
383
|
-
|
|
384
|
-
#### debug
|
|
385
|
-
|
|
386
|
-
| State | Typ | Beschreibung |
|
|
387
|
-
| --- | --- | --- |
|
|
388
|
-
| `lastEvent` | string (JSON) | Letztes empfangenes Socket-Event (Name + Zeitstempel), zur Verbindungsdiagnose |
|
|
389
|
-
| `normalizedPosition` | string (JSON) | Zuletzt normalisierte Position des Einsatzes |
|
|
390
|
-
| `rawPayloadShort` | string | Vorschau (500 Zeichen) der rohen, unnormalisierten `io.new_waip`-Nutzlast |
|
|
391
|
-
| `ignoredCount` | number | Anzahl verworfener Events (Payload nannte explizit eine andere Monitor-ID) |
|
|
392
|
-
| `monitorAudit` | string (JSON-Array) | Chronologisches Log von Connect-/Registrierungs-/Reconnect-Ereignissen (200 Einträge) |
|
|
393
|
-
| `sessionExpires` | string (date) | Ablaufzeit des Session-Cookies laut letzter Erneuerung |
|
|
394
|
-
| `lastError` | string (JSON) | Letzte vom Server gemeldete Fehlermeldung (`io.error`) |
|
|
395
|
-
| `serverVersion` | string | Zuletzt gemeldete Server-Instanz-ID (`io.version`); Änderung deutet auf Server-Neustart hin |
|
|
396
|
-
|
|
397
|
-
JSON-interne Schlüssel innerhalb von `einsatz.json` (`emAlarmiert`,
|
|
398
|
-
`emWeitere`, `routen`, `rueckmeldungen`) bleiben kleingeschrieben – das sind
|
|
399
|
-
Objekteigenschaften im JSON-Wert, keine eigenen ioBroker-States.
|
|
400
|
-
|
|
401
|
-
## License
|
|
402
|
-
|
|
403
|
-
MIT License (this adapter) – see [LICENSE](LICENSE).
|
|
404
|
-
|
|
405
|
-
The adapter connects to instances of
|
|
406
|
-
[WAIP-Web](https://github.com/Robert-112/n112_waip-web), which is licensed
|
|
407
|
-
under CC BY-SA 4.0 by Robert-112. This adapter contains no code from that
|
|
408
|
-
project.
|
|
409
|
-
|
|
410
|
-
Copyright (c) 2026 rnc11
|
|
411
|
-
|
|
412
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
413
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
414
|
-
in the Software without restriction, including without limitation the rights
|
|
415
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
416
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
417
|
-
furnished to do so, subject to the following conditions:
|
|
418
|
-
|
|
419
|
-
The above copyright notice and this permission notice shall be included in all
|
|
420
|
-
copies or substantial portions of the Software.
|
|
421
|
-
|
|
422
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
423
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
424
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
425
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
426
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
427
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
428
|
-
SOFTWARE.
|
|
429
|
-
|
|
430
207
|
## Changelog
|
|
431
208
|
|
|
209
|
+
### 0.7.2 (2026-08-21)
|
|
210
|
+
|
|
211
|
+
- README is now English-only (per the official ioBroker adapter checker,
|
|
212
|
+
which flags mixed-language READMEs); the German version moved to a
|
|
213
|
+
separate [README.de.md](README.de.md), linked near the top.
|
|
214
|
+
- Moved the License section to the very end of the file (was before the
|
|
215
|
+
Changelog) - the checker requires License to be the last section.
|
|
216
|
+
- `package.json`: raised `engines.node` to `>=20` and `@iobroker/adapter-core`
|
|
217
|
+
to `^3.4.1`.
|
|
218
|
+
- `io-package.json`: raised the `js-controller` dependency to `>=6.0.11`
|
|
219
|
+
and the `admin` dependency to `>=7.6.17`; removed the `0.7.0` news
|
|
220
|
+
entry (never published to npm, only `0.7.1` and later actually are).
|
|
221
|
+
- `admin/jsonConfig.json`: added the root `"i18n": true` attribute (now
|
|
222
|
+
required since the fields resolve translations from `admin/i18n/*.json`)
|
|
223
|
+
and explicit `xs`/`xl` grid sizes on all fields.
|
|
224
|
+
- `main.js`: `require('http')`/`require('https')`/`require('url')` now
|
|
225
|
+
use the `node:` prefix for Node's built-in modules.
|
|
226
|
+
- `.gitignore`: added `.commitinfo`.
|
|
227
|
+
- Removed `.npmignore` - redundant with the `files` allowlist already
|
|
228
|
+
used in `package.json`.
|
|
229
|
+
- CI: `adapter-tests` now explicitly declares `needs: check-and-lint`;
|
|
230
|
+
raised the Node.js version used by the `check-and-lint` and `deploy`
|
|
231
|
+
jobs.
|
|
232
|
+
|
|
432
233
|
### 0.7.1 (2026-08-21)
|
|
433
234
|
|
|
434
235
|
- Added a License badge to the README.
|
|
@@ -789,3 +590,32 @@ SOFTWARE.
|
|
|
789
590
|
- Initial version: ported the original "WAIP Instrumented v3.9" ioBroker
|
|
790
591
|
JavaScript-adapter script into a standalone adapter. The URL/monitor
|
|
791
592
|
ID now come from the admin configuration instead of a runtime state.
|
|
593
|
+
|
|
594
|
+
## License
|
|
595
|
+
|
|
596
|
+
MIT License (this adapter) – see [LICENSE](LICENSE).
|
|
597
|
+
|
|
598
|
+
The adapter connects to instances of
|
|
599
|
+
[WAIP-Web](https://github.com/Robert-112/n112_waip-web), which is licensed
|
|
600
|
+
under CC BY-SA 4.0 by Robert-112. This adapter contains no code from that
|
|
601
|
+
project.
|
|
602
|
+
|
|
603
|
+
Copyright (c) 2026 rnc11
|
|
604
|
+
|
|
605
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
606
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
607
|
+
in the Software without restriction, including without limitation the rights
|
|
608
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
609
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
610
|
+
furnished to do so, subject to the following conditions:
|
|
611
|
+
|
|
612
|
+
The above copyright notice and this permission notice shall be included in all
|
|
613
|
+
copies or substantial portions of the Software.
|
|
614
|
+
|
|
615
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
616
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
617
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
618
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
619
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
620
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
621
|
+
SOFTWARE.
|
package/admin/jsonConfig.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "panel",
|
|
3
|
+
"i18n": true,
|
|
3
4
|
"items": {
|
|
4
5
|
"url": {
|
|
5
6
|
"type": "text",
|
|
6
7
|
"label": "WAIP server URL",
|
|
7
8
|
"help": "Base URL of the WAIP dispatch server (Socket.IO endpoint, namespace /waip is appended automatically)",
|
|
9
|
+
"xs": 12,
|
|
8
10
|
"sm": 12,
|
|
9
11
|
"md": 8,
|
|
10
|
-
"lg": 6
|
|
12
|
+
"lg": 6,
|
|
13
|
+
"xl": 6
|
|
11
14
|
},
|
|
12
15
|
"monitorID": {
|
|
13
16
|
"type": "selectSendTo",
|
|
@@ -17,9 +20,11 @@
|
|
|
17
20
|
"manual": true,
|
|
18
21
|
"label": "Monitor ID",
|
|
19
22
|
"help": "Loaded live from the configured server's /waip/ overview page - choose by Leitstelle, Kreis, Träger or Wache, or pick 'Alle Wachalarme' (ID 0) for every incident. If the server can't be reached, an ID can still be entered manually.",
|
|
23
|
+
"xs": 12,
|
|
20
24
|
"sm": 12,
|
|
21
25
|
"md": 12,
|
|
22
|
-
"lg": 12
|
|
26
|
+
"lg": 12,
|
|
27
|
+
"xl": 12
|
|
23
28
|
},
|
|
24
29
|
"_divider1": {
|
|
25
30
|
"type": "divider"
|
|
@@ -30,9 +35,11 @@
|
|
|
30
35
|
"help": "How long to wait for the server to confirm the monitor registration before logging a warning; the connection itself keeps running either way.",
|
|
31
36
|
"min": 1,
|
|
32
37
|
"max": 120,
|
|
38
|
+
"xs": 12,
|
|
33
39
|
"sm": 12,
|
|
34
40
|
"md": 6,
|
|
35
|
-
"lg": 4
|
|
41
|
+
"lg": 4,
|
|
42
|
+
"xl": 4
|
|
36
43
|
},
|
|
37
44
|
"reconnectDelaySec": {
|
|
38
45
|
"type": "number",
|
|
@@ -40,9 +47,11 @@
|
|
|
40
47
|
"help": "Wait time before the adapter automatically reconnects after a lost connection or a connection error.",
|
|
41
48
|
"min": 1,
|
|
42
49
|
"max": 120,
|
|
50
|
+
"xs": 12,
|
|
43
51
|
"sm": 12,
|
|
44
52
|
"md": 6,
|
|
45
|
-
"lg": 4
|
|
53
|
+
"lg": 4,
|
|
54
|
+
"xl": 4
|
|
46
55
|
}
|
|
47
56
|
}
|
|
48
57
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "waip-web",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.2",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.7.2": {
|
|
7
|
+
"en": "Fixed all findings from the official ioBroker Check and Service Bot: raised Node.js/dependency minimums (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), split the README into English-only (README.md) and German (README.de.md) since the checker requires English-only READMEs, moved License to the very last section, added the required i18n/size attributes to jsonConfig.json, switched to node: prefixes for built-in requires, removed the redundant .npmignore, and added .commitinfo to .gitignore. Also removed the orphaned 0.7.0 news entry (never actually published to npm).",
|
|
8
|
+
"de": "Alle Findings des offiziellen ioBroker Check and Service Bot behoben: Mindestversionen angehoben (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README aufgeteilt in rein englisches README.md und deutsches README.de.md (der Checker verlangt rein englische READMEs), Lizenz-Abschnitt ans Dateiende verschoben, fehlende i18n-/Größenattribute in jsonConfig.json ergänzt, auf node:-Präfixe bei Built-in-Requires umgestellt, überflüssige .npmignore entfernt und .commitinfo zur .gitignore hinzugefügt. Außerdem den verwaisten 0.7.0-News-Eintrag entfernt (wurde nie tatsächlich bei npm veröffentlicht).",
|
|
9
|
+
"ru": "Устранены все замечания официального ioBroker Check and Service Bot: подняты минимальные версии (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README разделён на англоязычный README.md и немецкий README.de.md (чекер требует README только на английском), раздел License перемещён в самый конец, добавлены недостающие атрибуты i18n/размеров в jsonConfig.json, встроенные require переведены на префикс node:, удалён избыточный .npmignore, добавлен .commitinfo в .gitignore. Также удалена осиротевшая запись новостей 0.7.0 (никогда не публиковалась на npm).",
|
|
10
|
+
"pt": "Corrigidos todos os apontamentos do ioBroker Check and Service Bot oficial: versões mínimas elevadas (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README dividido em README.md somente em inglês e README.de.md em alemão (o verificador exige READMEs somente em inglês), seção License movida para o final, atributos i18n/tamanho ausentes adicionados ao jsonConfig.json, requires nativos alterados para o prefixo node:, .npmignore redundante removido e .commitinfo adicionado ao .gitignore. Também removida a entrada de notícias órfã 0.7.0 (nunca publicada no npm).",
|
|
11
|
+
"nl": "Alle bevindingen van de officiële ioBroker Check and Service Bot opgelost: minimumversies verhoogd (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README opgesplitst in Engelstalige README.md en Duitse README.de.md (de checker vereist Engelstalige READMEs), License-sectie naar het einde verplaatst, ontbrekende i18n-/formaatattributen toegevoegd aan jsonConfig.json, ingebouwde requires overgezet naar het node:-voorvoegsel, overbodige .npmignore verwijderd en .commitinfo toegevoegd aan .gitignore. Ook het verweesde 0.7.0-nieuwsitem verwijderd (nooit echt op npm gepubliceerd).",
|
|
12
|
+
"fr": "Correction de toutes les remarques du ioBroker Check and Service Bot officiel : versions minimales relevées (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README divisé en README.md uniquement en anglais et README.de.md en allemand (le vérificateur exige des README uniquement en anglais), section License déplacée tout à la fin, attributs i18n/taille manquants ajoutés à jsonConfig.json, passage au préfixe node: pour les requires natifs, suppression du .npmignore redondant et ajout de .commitinfo au .gitignore. Suppression également de l'entrée de nouvelles orpheline 0.7.0 (jamais réellement publiée sur npm).",
|
|
13
|
+
"it": "Risolte tutte le segnalazioni del bot ufficiale ioBroker Check and Service: versioni minime innalzate (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README diviso in README.md solo in inglese e README.de.md in tedesco (il checker richiede README solo in inglese), sezione License spostata alla fine, attributi i18n/dimensione mancanti aggiunti a jsonConfig.json, passaggio al prefisso node: per i require nativi, rimosso il .npmignore ridondante e aggiunto .commitinfo al .gitignore. Rimossa anche la voce di news orfana 0.7.0 (mai effettivamente pubblicata su npm).",
|
|
14
|
+
"es": "Se corrigieron todos los hallazgos del ioBroker Check and Service Bot oficial: se elevaron las versiones mínimas (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), el README se dividió en README.md solo en inglés y README.de.md en alemán (el verificador exige READMEs solo en inglés), la sección License se movió al final, se añadieron los atributos i18n/tamaño faltantes en jsonConfig.json, se cambió a prefijos node: para los requires nativos, se eliminó el .npmignore redundante y se añadió .commitinfo al .gitignore. También se eliminó la entrada de noticias huérfana 0.7.0 (nunca publicada realmente en npm).",
|
|
15
|
+
"pl": "Naprawiono wszystkie ustalenia oficjalnego ioBroker Check and Service Bot: podniesiono minimalne wersje (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README podzielono na anglojęzyczny README.md i niemiecki README.de.md (checker wymaga README wyłącznie po angielsku), sekcję License przeniesiono na sam koniec, dodano brakujące atrybuty i18n/rozmiaru w jsonConfig.json, przełączono na prefiks node: dla wbudowanych require, usunięto zbędny .npmignore i dodano .commitinfo do .gitignore. Usunięto też osierocony wpis news 0.7.0 (nigdy faktycznie nie opublikowany w npm).",
|
|
16
|
+
"uk": "Виправлено всі зауваження офіційного ioBroker Check and Service Bot: підвищено мінімальні версії (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README розділено на англомовний README.md та німецький README.de.md (перевірник вимагає README лише англійською), розділ License переміщено в самий кінець, додано відсутні атрибути i18n/розміру в jsonConfig.json, вбудовані require переведено на префікс node:, видалено зайвий .npmignore та додано .commitinfo до .gitignore. Також видалено осиротілий запис новин 0.7.0 (ніколи не публікувався на npm).",
|
|
17
|
+
"zh-cn": "修复了官方 ioBroker Check and Service Bot 报告的所有问题:提升了最低版本要求(engines.node >=20、@iobroker/adapter-core ^3.4.1、js-controller >=6.0.11、admin >=7.6.17);将 README 拆分为纯英文的 README.md 和德文的 README.de.md(检查器要求 README 仅使用英文);将 License 部分移动到文件末尾;为 jsonConfig.json 添加了缺失的 i18n/尺寸属性;将内置模块的 require 改为使用 node: 前缀;移除了多余的 .npmignore;并在 .gitignore 中添加了 .commitinfo。同时移除了从未真正发布到 npm 的孤立新闻条目 0.7.0。"
|
|
18
|
+
},
|
|
6
19
|
"0.7.1": {
|
|
7
20
|
"en": "Added a License badge to the README.",
|
|
8
21
|
"de": "Lizenz-Badge im README ergänzt.",
|
|
@@ -16,19 +29,6 @@
|
|
|
16
29
|
"uk": "До README додано значок ліцензії.",
|
|
17
30
|
"zh-cn": "已在 README 中添加许可证徽章。"
|
|
18
31
|
},
|
|
19
|
-
"0.7.0": {
|
|
20
|
-
"en": "Prepared the admin UI for community translation via ioBroker's Weblate: added @iobroker/adapter-dev as a dev dependency, converted admin/jsonConfig.json's label/help fields from inline en/de objects to plain English keys, and added admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json (German curated manually, the rest auto-translated via the official translate-adapter tool). Added a Translation status badge to the README (only shows real data once the adapter is registered on weblate.iobroker.net).",
|
|
21
|
-
"de": "Admin-Oberfläche für die Community-Übersetzung über ioBrokers Weblate vorbereitet: @iobroker/adapter-dev als Dev-Dependency ergänzt, label/help-Felder in admin/jsonConfig.json von Inline-en/de-Objekten auf einfache englische Schlüssel umgestellt, sowie admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json ergänzt (Deutsch manuell kuratiert, der Rest automatisch über das offizielle translate-adapter-Tool übersetzt). Übersetzungsstatus-Badge im README ergänzt (zeigt erst echte Daten, sobald der Adapter bei weblate.iobroker.net registriert ist).",
|
|
22
|
-
"ru": "Подготовлен интерфейс администратора к переводу сообществом через Weblate ioBroker: добавлена dev-зависимость @iobroker/adapter-dev, поля label/help в admin/jsonConfig.json переведены с встроенных объектов en/de на простые английские ключи, добавлены файлы admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json (немецкий подготовлен вручную, остальные переведены автоматически официальным инструментом translate-adapter). В README добавлен значок статуса перевода (реальные данные появятся только после регистрации адаптера на weblate.iobroker.net).",
|
|
23
|
-
"pt": "Preparada a interface de administração para tradução pela comunidade via Weblate do ioBroker: adicionada a dependência de desenvolvimento @iobroker/adapter-dev, os campos label/help em admin/jsonConfig.json convertidos de objetos inline en/de para chaves simples em inglês, e adicionados os arquivos admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json (alemão selecionado manualmente, o restante traduzido automaticamente pela ferramenta oficial translate-adapter). Adicionado um selo de status de tradução ao README (só mostra dados reais após o adaptador ser registrado em weblate.iobroker.net).",
|
|
24
|
-
"nl": "Admin-UI voorbereid op community-vertaling via ioBrokers Weblate: @iobroker/adapter-dev toegevoegd als dev-dependency, label/help-velden in admin/jsonConfig.json omgezet van inline en/de-objecten naar eenvoudige Engelse sleutels, en admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json toegevoegd (Duits handmatig samengesteld, de rest automatisch vertaald met de officiële translate-adapter-tool). Vertaalstatusbadge toegevoegd aan de README (toont pas echte gegevens zodra de adapter is geregistreerd op weblate.iobroker.net).",
|
|
25
|
-
"fr": "Interface d'administration préparée pour la traduction communautaire via Weblate d'ioBroker : ajout de @iobroker/adapter-dev comme dépendance de développement, conversion des champs label/help d'admin/jsonConfig.json d'objets en/de en ligne vers de simples clés anglaises, et ajout des fichiers admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json (allemand sélectionné manuellement, le reste traduit automatiquement via l'outil officiel translate-adapter). Badge de statut de traduction ajouté au README (n'affiche de vraies données qu'une fois l'adaptateur enregistré sur weblate.iobroker.net).",
|
|
26
|
-
"it": "Interfaccia di amministrazione preparata per la traduzione della community tramite Weblate di ioBroker: aggiunta la dev-dependency @iobroker/adapter-dev, i campi label/help in admin/jsonConfig.json convertiti da oggetti inline en/de a semplici chiavi inglesi, e aggiunti i file admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json (tedesco curato manualmente, il resto tradotto automaticamente con lo strumento ufficiale translate-adapter). Aggiunto un badge di stato traduzione al README (mostra dati reali solo dopo la registrazione dell'adapter su weblate.iobroker.net).",
|
|
27
|
-
"es": "Interfaz de administración preparada para la traducción comunitaria mediante Weblate de ioBroker: se añadió @iobroker/adapter-dev como dependencia de desarrollo, los campos label/help en admin/jsonConfig.json se convirtieron de objetos en línea en/de a simples claves en inglés, y se añadieron los archivos admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json (alemán curado manualmente, el resto traducido automáticamente con la herramienta oficial translate-adapter). Se añadió una insignia de estado de traducción al README (solo muestra datos reales una vez que el adaptador esté registrado en weblate.iobroker.net).",
|
|
28
|
-
"pl": "Interfejs administracyjny przygotowany do tłumaczenia przez społeczność za pomocą Weblate ioBroker: dodano @iobroker/adapter-dev jako zależność deweloperską, pola label/help w admin/jsonConfig.json przekonwertowano z obiektów inline en/de na proste angielskie klucze oraz dodano pliki admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json (niemiecki dopracowany ręcznie, reszta przetłumaczona automatycznie oficjalnym narzędziem translate-adapter). Dodano odznakę statusu tłumaczenia do README (pokazuje rzeczywiste dane dopiero po zarejestrowaniu adaptera na weblate.iobroker.net).",
|
|
29
|
-
"uk": "Адмін-інтерфейс підготовлено до перекладу спільнотою через Weblate ioBroker: додано @iobroker/adapter-dev як dev-залежність, поля label/help в admin/jsonConfig.json перетворено з вбудованих об'єктів en/de на прості англійські ключі, додано файли admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json (німецьку підготовлено вручну, решту перекладено автоматично офіційним інструментом translate-adapter). До README додано значок статусу перекладу (реальні дані з'являться лише після реєстрації адаптера на weblate.iobroker.net).",
|
|
30
|
-
"zh-cn": "已为管理界面准备好通过 ioBroker Weblate 进行社区翻译:添加了开发依赖 @iobroker/adapter-dev;将 admin/jsonConfig.json 中的 label/help 字段从内联的 en/de 对象改为纯英文键;并新增了 admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json 文件(德语为手动整理,其余语言通过官方 translate-adapter 工具自动翻译)。在 README 中添加了翻译状态徽章(仅在适配器于 weblate.iobroker.net 注册后才会显示真实数据)。"
|
|
31
|
-
},
|
|
32
32
|
"0.6.11-beta.0": {
|
|
33
33
|
"en": "README: logo now shown enlarged (115x115, crisp pixel-scaled since the source icon is only 32x32) via a new admin/waip-web-logo.png; the actual ioBroker adapter icon (admin/waip-web.png) is unchanged. Simplified the README title back to \"ioBroker.waip-web\".",
|
|
34
34
|
"de": "README: Logo wird jetzt vergrößert angezeigt (115x115, scharf pixel-skaliert, da das Quell-Icon nur 32x32 ist) über eine neue admin/waip-web-logo.png; das eigentliche ioBroker-Adapter-Icon (admin/waip-web.png) bleibt unverändert. README-Titel wieder auf „ioBroker.waip-web\" vereinfacht.",
|
|
@@ -154,12 +154,12 @@
|
|
|
154
154
|
},
|
|
155
155
|
"dependencies": [
|
|
156
156
|
{
|
|
157
|
-
"js-controller": ">=
|
|
157
|
+
"js-controller": ">=6.0.11"
|
|
158
158
|
}
|
|
159
159
|
],
|
|
160
160
|
"globalDependencies": [
|
|
161
161
|
{
|
|
162
|
-
"admin": ">=6.
|
|
162
|
+
"admin": ">=7.6.17"
|
|
163
163
|
}
|
|
164
164
|
]
|
|
165
165
|
},
|
package/main.js
CHANGED
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
* einsatz.rueckmeldungAnzahl.*). Der frühere vis.*-Kanal entfällt komplett.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
const https = require('https');
|
|
21
|
-
const http = require('http');
|
|
22
|
-
const { URL } = require('url');
|
|
20
|
+
const https = require('node:https');
|
|
21
|
+
const http = require('node:http');
|
|
22
|
+
const { URL } = require('node:url');
|
|
23
23
|
const utils = require('@iobroker/adapter-core');
|
|
24
24
|
const { io } = require('socket.io-client');
|
|
25
25
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.waip-web",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "Wachalarm IP-Web (WAIP) Adapter für ioBroker – bindet Alarmierungen, Rückmeldungen, Routen und TTS-Ansagen per Socket.IO an ioBroker an.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "rnc11",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"url": "https://github.com/rnc11/ioBroker.waip-web/issues"
|
|
25
25
|
},
|
|
26
26
|
"engines": {
|
|
27
|
-
"node": ">=
|
|
27
|
+
"node": ">=20"
|
|
28
28
|
},
|
|
29
29
|
"main": "main.js",
|
|
30
30
|
"files": [
|
|
@@ -32,10 +32,11 @@
|
|
|
32
32
|
"lib/",
|
|
33
33
|
"io-package.json",
|
|
34
34
|
"main.js",
|
|
35
|
-
"LICENSE"
|
|
35
|
+
"LICENSE",
|
|
36
|
+
"README.de.md"
|
|
36
37
|
],
|
|
37
38
|
"dependencies": {
|
|
38
|
-
"@iobroker/adapter-core": "^3.
|
|
39
|
+
"@iobroker/adapter-core": "^3.4.1",
|
|
39
40
|
"socket.io-client": "^4.7.5"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|