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 ADDED
@@ -0,0 +1,202 @@
1
+ ![Logo](admin/waip-web-logo.png)
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
  [![Translation status](https://weblate.iobroker.net/widgets/adapters/-/waip-web/svg-badge.svg)](https://weblate.iobroker.net/engage/adapters/?utm_source=widget)
11
11
  [![License](https://img.shields.io/npm/l/iobroker.waip-web.svg)](LICENSE)
12
12
 
13
- ## English
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
- ### About this adapter
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
- ### About WAIP-Web
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
- ### Features
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
- #### Why a session cookie is needed
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
- ### Configuration
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
- ### States (under `waip-web.0.*`)
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
- #### info
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
- #### status
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
- #### einsatz
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
- #### tts
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
- #### debug
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.
@@ -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.1",
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": ">=5.0.19"
157
+ "js-controller": ">=6.0.11"
158
158
  }
159
159
  ],
160
160
  "globalDependencies": [
161
161
  {
162
- "admin": ">=6.0.0"
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.1",
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": ">=18"
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.2.2",
39
+ "@iobroker/adapter-core": "^3.4.1",
39
40
  "socket.io-client": "^4.7.5"
40
41
  },
41
42
  "devDependencies": {