iobroker.waip-web 0.7.28 → 0.7.30

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 CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  🇬🇧 [English version of this README](README.md)
6
6
 
7
- Inoffizieller ioBroker-Adapter für **Wachalarm IP-Web (WAIP-Web)**
7
+ ioBroker-Adapter für **Wachalarm IP-Web (WAIP-Web)**
8
8
 
9
9
  Verbindet sich per Socket.IO mit einem WAIP-Web-Wachalarm-Monitor und bildet
10
10
  Einsätze, Rückmeldungen, Routen und TTS-Ansagen als ioBroker-States ab –
@@ -31,7 +31,7 @@ ohne dass ein Browser-Tab dauerhaft offen sein muss.
31
31
 
32
32
  ## Über diesen Adapter
33
33
 
34
- Dieser Adapter ist ein **inoffizielles Community-Projekt** und steht in
34
+ Dieser Adapter ist ein **eigenständiges Community-Projekt** und steht in
35
35
  keiner Verbindung zum WAIP-Web-Projekt, zu Robert-112 oder zum Betreiber
36
36
  einer konkreten Instanz (z. B. der Integrierten Regionalleitstelle
37
37
  Lausitz). Er wurde entwickelt, indem das öffentlich über den Browser
@@ -180,9 +180,13 @@ Rettungsdienst-Wache:
180
180
  eigenen Region ohnehin nur unzuverlässig signalisiert, siehe
181
181
  [Rettungsdienst](#rettungsdienst)
182
182
  - Optionales Einsatzkarten-Bild: ein auf die Einsatz-Koordinaten
183
- zentriertes und mit einem Punkt markiertes PNG, lokal aus
184
- OpenStreetMap-Kacheln zusammengesetzt, dessen Dateipfad als State
185
- bereitsteht - siehe [Einsatzkarte](#einsatzkarte)
183
+ zentriertes PNG, lokal aus OpenStreetMap-Kacheln zusammengesetzt, mit
184
+ dem von WAIP-Web gesendeten Einsatzgebiet als Umriss in
185
+ konfigurierbarer Farbe/Stärke eingezeichnet (umschaltbar auf eine
186
+ einfache Punkt-Markierung), zoomt bei Bedarf automatisch so heraus,
187
+ dass das gesamte Gebiet sichtbar bleibt, Dateipfad als State
188
+ bereitgestellt -
189
+ siehe [Einsatzkarte](#einsatzkarte)
186
190
 
187
191
  ## Konfiguration
188
192
 
@@ -248,7 +252,7 @@ werden dabei keine Daten irgendwohin gesendet. Dieser Tab ist die erste
248
252
  von zwei Quellen, die der Reihe nach geprüft werden (die zweite steht
249
253
  unter [Stichwort-Stammdaten](#stichwort-stammdaten)):
250
254
 
251
- **Rettungsdienst-Dekodierung** (Admin-Checkbox, standardmäßig aus):
255
+ **Rettungsdienst-Dekodierung** (Admin-Checkbox, standardmäßig an):
252
256
  passt das Stichwort auf das Muster `R<Anzahl RTW>N<Anzahl NEF>[p][f][-NT]`
253
257
  (z.B. `R1N0` → "Rettungswagen: 1, Notfalleinsatzfahrzeug: 0"), wird
254
258
  automatisch eine Beschreibung erzeugt. Zwei Schreibweisen des
@@ -258,8 +262,9 @@ vor `NT` (z.B. `R1N1p`, `R1N0-NT`, siehe
258
262
  dazu) sowie mit Leerzeichen und ohne Bindestrich (z.B. `R1N1 p`,
259
263
  `R1N0 nt`, wie von der IRLS Brandenburg verwendet) – dieses Schema
260
264
  (in beiden Schreibweisen) wird von mehreren Leitstellen verwendet,
261
- nicht nur diesen beiden – nur aktivieren, wenn eure Leitstelle eines
262
- dieser Muster tatsächlich verwendet. Der Text für jeden Teil ist
265
+ nicht nur diesen beiden – hat keine Auswirkung, falls eure Leitstelle
266
+ keines dieser Muster verwendet, da das Stichwort dann einfach nicht
267
+ passt. Der Text für jeden Teil ist
263
268
  selbst konfigurierbar (5 zusätzliche Textfelder erscheinen, sobald
264
269
  die Checkbox aktiviert ist), da der Adapter mehrsprachig ist und
265
270
  diese Bezeichnungen nicht automatisch übersetzt werden:
@@ -307,12 +312,28 @@ Passt weder diese Tabelle noch der Dekoder oben, bleibt
307
312
  aus): ist die Checkbox aktiv und liegen für einen Einsatz gültige
308
313
  Koordinaten vor, lädt der Adapter die dafür nötigen Kacheln vom
309
314
  öffentlichen Server `tile.openstreetmap.org` herunter, setzt sie zu
310
- einem einzigen PNG zusammen, zentriert auf den Einsatzort, zeichnet eine
311
- Markierung (roter Punkt, weißer Rand) exakt in die Mitte und stempelt
315
+ einem einzigen PNG zusammen, zentriert auf den Einsatzort, und stempelt
312
316
  die von der ODbL-Lizenz vorgeschriebene OpenStreetMap-Attribution unten
313
- links auf. Der Dateipfad wird in `einsatz.kartenbildPfad` geschrieben
314
- (siehe [einsatz](#einsatz)) – typische Verwendung ist der Versand dieser
315
- Datei aus einem Blockly-/JavaScript-Skript heraus, z.B. als
317
+ links auf.
318
+
319
+ Standardmäßig wird das Einsatzgebiet, das WAIP-Web im `geometry`-Feld
320
+ des Events sendet (meist ein kreisförmiges Polygon um den Einsatzort,
321
+ nicht nur dessen Mittelpunkt), als Umriss in konfigurierbarer Farbe und
322
+ Strichstärke ins Bild eingezeichnet - also die vom Server original
323
+ gesendete Form, keine Markierung an deren Mittelpunkt. **Einsatzgebiet-
324
+ Polygon anzeigen** (Admin-Checkbox, standardmäßig an) steuert das:
325
+ deaktivieren, um stattdessen immer eine einfache Punkt-Markierung in
326
+ der Mitte zu zeigen, auch wenn ein Polygon verfügbar wäre. Liegt gar
327
+ kein Polygon vor (z.B. enthält das Event nur einen Punkt), wird ohnehin
328
+ immer die Punkt-Markierung verwendet, unabhängig von der Checkbox. Das
329
+ Einsatzgebiet bleibt beim Zeichnen des Polygons immer vollständig
330
+ sichtbar: passt es bei der konfigurierten Zoomstufe nicht ins Bild,
331
+ zoomt der Adapter automatisch so weit heraus (nie hinein), wie nötig,
332
+ damit das gesamte Gebiet hineinpasst, statt es am Rand abzuschneiden.
333
+
334
+ Der Dateipfad wird in `einsatz.kartenbildPfad` geschrieben (siehe
335
+ [einsatz](#einsatz)) – typische Verwendung ist der Versand dieser Datei
336
+ aus einem Blockly-/JavaScript-Skript heraus, z.B. als
316
337
  Pushover-Benachrichtigungsanhang. Es werden nur die 10 zuletzt erzeugten
317
338
  Bilder aufgehoben, ältere werden automatisch gelöscht, sobald ein neues
318
339
  geschrieben wird. Die Bilderzeugung läuft im Hintergrund und verzögert
@@ -322,15 +343,24 @@ sonst bleibt nichts betroffen.
322
343
 
323
344
  | Feld | Beschreibung | Default |
324
345
  | --- | --- | --- |
346
+ | Einsatzgebiet-Polygon anzeigen | Das von WAIP-Web gesendete Original-Polygon zeichnen (an) vs. immer eine zentrierte Punkt-Markierung zeigen (aus) | *(an)* |
325
347
  | Bildbreite (px) | Breite des erzeugten PNGs | `600` |
326
348
  | Bildhöhe (px) | Höhe des erzeugten PNGs | `400` |
327
- | Zoomstufe | OpenStreetMap-Zoomstufe (1 = ganze Welt, 19 = Gebäudeebene) | `16` |
349
+ | Zoomstufe | OpenStreetMap-Zoomstufe (1 = ganze Welt, 19 = Gebäudeebene) - ein Maximalwert, wird bei Bedarf automatisch reduziert, damit das Einsatzgebiet vollständig sichtbar bleibt | `19` |
350
+ | Umrissfarbe | Farbe des Einsatzgebiet-Umrisses (und des Kerns der Fallback-Punkt-Markierung) | `#DD2020` |
351
+ | Umriss-Strichstärke (px) | Linienstärke des Umrisses in Pixeln (1-12) | `4` |
328
352
 
329
353
  Die Bilder liegen im eigenen Datenverzeichnis dieser Adapterinstanz
330
354
  (`iobroker-data/<instance>/maps/`), nicht als ioBroker-Dateiobjekte –
331
355
  `einsatz.kartenbildPfad` ist deshalb ein echter, absoluter
332
356
  Dateisystempfad, den ein auf demselben Host laufendes Skript direkt
333
- lesen kann.
357
+ lesen kann. Dieses Verzeichnis wird **nicht** automatisch gelöscht,
358
+ wenn der Adapter gestoppt oder seine Instanzkonfiguration
359
+ zurückgesetzt wird; um es bei einer Deinstallation zu entfernen,
360
+ im Bestätigungsdialog beim Löschen der Instanz/des Adapters in Admin
361
+ die Option **"Auch Instanzdaten löschen"** anhaken (seit js-controller
362
+ 4.0 / Admin 5 für das Instanzdaten-Verzeichnis jedes Adapters verfügbar
363
+ – standardmäßig nicht angehakt).
334
364
 
335
365
  > **Hinweis:** Genutzt wird der offizielle, kostenlose Server
336
366
  > `tile.openstreetmap.org`, der für gelegentliche/geringe Nutzung
@@ -408,7 +438,7 @@ stehen. Der zuletzt abgeschlossene Einsatz bleibt trotzdem über
408
438
  | `ablaufzeit` | string (date) | Ende der Standby-Anzeigedauer, Basis für `restzeit` |
409
439
  | `sondersignal` | number | `1` = Sondersignal, sonst kein Sondersignal |
410
440
  | `latitude` / `longitude` | number | Position des Einsatzortes (normalisiert aus wgs84-Feldern oder GeoJSON-Mittelpunkt) |
411
- | `kartenbildPfad` | string | Pfad zum zuletzt erzeugten Einsatzkarten-Bild (PNG) - siehe [Einsatzkarte](#einsatzkarte). Anders als die Felder oben wird dieser State bei `io.standby` **nicht** geleert (gleiches Muster wie `einsatz.tts.last`), bleibt also auch nach Einsatzende noch verfügbar |
441
+ | `kartenbildPfad` | string | Pfad zum zuletzt erzeugten Einsatzkarten-Bild (PNG) - siehe [Einsatzkarte](#einsatzkarte). Wird wie die übrigen Felder oben bei `io.standby` geleert; die zugrundeliegende Bild-Datei selbst wird dabei nicht gelöscht (nur das 10er-Rotationslimit entfernt Dateien, siehe [Einsatzkarte](#einsatzkarte)) |
412
442
  | `routenGesamt` | number | Anzahl Routen im aktuellen Einsatz |
413
443
  | `rueckmeldungGesamt` | number | Rückmeldungen gesamt im aktuellen Einsatz |
414
444
  | `rueckmeldungAnzahl.ek` | number | Anzahl Rückmeldungen als Einsatzkraft |
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  🇩🇪 [Deutsche Version dieser README](README.de.md)
14
14
 
15
- Unofficial ioBroker adapter for **Wachalarm IP-Web (WAIP-Web)**
15
+ ioBroker adapter for **Wachalarm IP-Web (WAIP-Web)**
16
16
 
17
17
  Connects via Socket.IO to a WAIP-Web dispatch monitor and mirrors incidents
18
18
  ("Einsatz"), responder feedback ("Rückmeldung"), routes and TTS
@@ -41,7 +41,7 @@ open.
41
41
 
42
42
  ## About this adapter
43
43
 
44
- This adapter is an **unofficial community project** and has no connection
44
+ This adapter is an **independent, community-built project** and has no connection
45
45
  to the WAIP-Web project, to Robert-112, or to the operator of any specific
46
46
  instance (e.g. the Integrated Regional Dispatch Center Lausitz /
47
47
  Integrierte Regionalleitstelle Lausitz). It was built by analyzing the
@@ -182,9 +182,11 @@ adapter provides – typical use in a fire station/EMS environment:
182
182
  history, no TTS) - useful where WAIP only signals them unreliably in
183
183
  the first place, see [Rescue service](#rescue-service)
184
184
  - Optional incident map image: a PNG centered on the incident's
185
- coordinates and marked with a dot, composed locally from OpenStreetMap
186
- tiles, with its file path exposed as a state - see
187
- [Incident map image](#incident-map-image)
185
+ coordinates, composed locally from OpenStreetMap tiles, with the
186
+ incident area WAIP-Web sends drawn as an outline in a configurable
187
+ color/thickness (switchable to a plain marker dot instead), automatically
188
+ zoomed out as needed to keep the whole area visible, file path
189
+ exposed as a state - see [Incident map image](#incident-map-image)
188
190
 
189
191
  ## Configuration
190
192
 
@@ -247,7 +249,7 @@ gap **entirely locally**, no data is sent anywhere. This tab is the
247
249
  first of two sources checked, in order (see
248
250
  [Keyword descriptions](#keyword-descriptions) for the second):
249
251
 
250
- **Rescue-service decoding** (admin checkbox, off by default): if the
252
+ **Rescue-service decoding** (admin checkbox, on by default): if the
251
253
  keyword matches the pattern `R<RTW-count>N<NEF-count>[p][f][-NT]`
252
254
  (e.g. `R1N0` → "Rettungswagen: 1, Notfalleinsatzfahrzeug: 0"), a
253
255
  description is generated automatically. Two spellings of the `p`/`f`/`NT`
@@ -256,9 +258,9 @@ part are recognized: without a space and with a hyphen before `NT`
256
258
  [Leitstelle Lausitz's documented explanation](https://www.leitstelle-lausitz.de/anpassung-der-einsatzstichworte-rettungsdienst/)
257
259
  of it), and with a space and without a hyphen (e.g. `R1N1 p`, `R1N0 nt`,
258
260
  as used by the IRLS Brandenburg) – this scheme (in either spelling) is
259
- used by several German dispatch centers, not just these two – only
260
- enable it if your dispatch center actually uses one of these patterns.
261
- The text for each part is itself configurable (5 additional text
261
+ used by several German dispatch centers, not just these two – has no
262
+ effect if your dispatch center doesn't use one of these patterns, since
263
+ the keyword just won't match. The text for each part is itself configurable (5 additional text
262
264
  fields appear once the checkbox is enabled), since the adapter is
263
265
  multi-language and these labels aren't translated automatically:
264
266
 
@@ -301,27 +303,52 @@ is simply `null` - not an error.
301
303
  default): when enabled and an incident carries valid coordinates, the
302
304
  adapter downloads the tiles it needs from the public
303
305
  `tile.openstreetmap.org` server, composites them into a single PNG
304
- centered on the incident's location, draws a marker (red dot, white
305
- ring) at the exact center, and stamps the OpenStreetMap attribution
306
- (required by its ODbL license) into the bottom-left corner. The file
307
- path is written to `einsatz.kartenbildPfad` (see [einsatz](#einsatz)) –
308
- typical use is attaching that file from a Blockly/JavaScript script,
309
- e.g. as a Pushover notification attachment. Only the 10 most recently
310
- generated images are kept on disk; older ones are deleted automatically
311
- whenever a new one is written. Image generation runs in the background
312
- and never delays alarm processing – a slow or failing tile download
313
- just means a missing/delayed image, nothing else is affected.
306
+ centered on the incident's location, and stamps the OpenStreetMap
307
+ attribution (required by its ODbL license) into the bottom-left corner.
308
+
309
+ By default, the incident area WAIP-Web sends in the `geometry` field of
310
+ the event (usually a circle-shaped polygon around the location, not
311
+ just its center) is drawn onto the image as an outline in a
312
+ configurable color and thickness - the original shape the server sent,
313
+ not a marker at its centroid. **Show incident-area polygon** (admin
314
+ checkbox, on by default) controls this: uncheck it to always show a
315
+ simple marker dot at the center instead, even when a polygon is
316
+ available. The dot is also used automatically whenever the event
317
+ carries no polygon at all (e.g. just a point) - it is then the only
318
+ option regardless of the checkbox. The incident area is
319
+ always kept fully visible when the polygon is drawn: if it wouldn't
320
+ fit into the image at the configured zoom level, the adapter
321
+ automatically zooms out (never in) just enough for the whole area to
322
+ fit, instead of clipping it at the edge.
323
+
324
+ The file path is written to `einsatz.kartenbildPfad` (see
325
+ [einsatz](#einsatz)) – typical use is attaching that file from a
326
+ Blockly/JavaScript script, e.g. as a Pushover notification attachment.
327
+ Only the 10 most recently generated images are kept on disk; older
328
+ ones are deleted automatically whenever a new one is written. Image
329
+ generation runs in the background and never delays alarm processing –
330
+ a slow or failing tile download just means a missing/delayed image,
331
+ nothing else is affected.
314
332
 
315
333
  | Field | Description | Default |
316
334
  | --- | --- | --- |
335
+ | Show incident-area polygon | Draw the original polygon WAIP-Web sends (on) vs. always show a centered marker dot instead (off) | *(on)* |
317
336
  | Image width (px) | Width of the generated PNG | `600` |
318
337
  | Image height (px) | Height of the generated PNG | `400` |
319
- | Zoom level | OpenStreetMap zoom level (1 = whole world, 19 = building level) | `16` |
338
+ | Zoom level | OpenStreetMap zoom level (1 = whole world, 19 = building level) - a maximum, automatically reduced if needed to keep the incident area fully visible | `19` |
339
+ | Outline color | Color of the incident-area outline (and the fallback marker dot's core) | `#DD2020` |
340
+ | Outline thickness (px) | Line thickness of the outline, in pixels (1-12) | `4` |
320
341
 
321
342
  Images are stored under this adapter instance's own data directory
322
343
  (`iobroker-data/<instance>/maps/`), not as ioBroker file objects –
323
344
  `einsatz.kartenbildPfad` is therefore a real, absolute filesystem path
324
- that a script running on the same host can read directly.
345
+ that a script running on the same host can read directly. This
346
+ directory is **not** deleted automatically when the adapter is
347
+ stopped or its instance configuration is reset; to remove it when
348
+ uninstalling, tick **"Also delete instance data"** in the confirmation
349
+ dialog when deleting the instance/adapter in Admin (available since
350
+ js-controller 4.0 / Admin 5 for any adapter's instance data directory
351
+ – unchecked by default).
325
352
 
326
353
  > **Note:** This uses the official, free `tile.openstreetmap.org`
327
354
  > server, which is intended for occasional/low-volume use (see the
@@ -397,7 +424,7 @@ The most recently finished incident remains available via
397
424
  | `ablaufzeit` | string (date) | End of the standby display duration, basis for `restzeit` |
398
425
  | `sondersignal` | number | `1` = special signal (lights & siren), otherwise none |
399
426
  | `latitude` / `longitude` | number | Incident location (normalized from wgs84 fields or GeoJSON centroid) |
400
- | `kartenbildPfad` | string | Path to the most recently generated incident map image (PNG) - see [Incident map image](#incident-map-image). Unlike the fields above, **not** cleared on `io.standby` (same pattern as `einsatz.tts.last`), so it stays available to pick up the last incident's map after it ended |
427
+ | `kartenbildPfad` | string | Path to the most recently generated incident map image (PNG) - see [Incident map image](#incident-map-image). Cleared like the other fields above on `io.standby`; the underlying image file itself is not deleted (only the 10-image retention limit removes files, see [Incident map image](#incident-map-image)) |
401
428
  | `routenGesamt` | number | Number of routes in the current incident |
402
429
  | `rueckmeldungGesamt` | number | Total feedback count for the current incident |
403
430
  | `rueckmeldungAnzahl.ek` | number | Feedback count as team member ("Einsatzkraft") |
@@ -468,6 +495,52 @@ example.
468
495
 
469
496
  ## Changelog
470
497
 
498
+ ### 0.7.30 (2026-08-24)
499
+
500
+ - [Incident map image](#incident-map-image): new **Show incident-area
501
+ polygon** checkbox (on by default) - uncheck it to always show the
502
+ centered marker dot instead, even when the server sends a polygon.
503
+ The margin kept around the polygon when auto-zooming to fit it was
504
+ also reduced by 30%, so the area fills more of the image. Default
505
+ zoom level raised from 16 to 19, default outline thickness from 3 to
506
+ 4 px.
507
+ - `einsatz.kartenbildPfad` is now cleared on `io.standby` like the
508
+ other `einsatz.*` fields (previously kept, matching
509
+ `einsatz.tts.last`'s pattern) - the image file itself is unaffected,
510
+ only the 10-image retention limit ever deletes files.
511
+ - Documented that this adapter's own data directory (generated map
512
+ images) is only removed on instance/adapter deletion if "Also
513
+ delete instance data" is checked in Admin's deletion dialog - a
514
+ native js-controller/Admin feature (unchecked by default), not
515
+ something this adapter's code controls.
516
+ - Removed "Unofficial"/"Inoffiziell" from both READMEs' wording; the
517
+ disclaimer about having no connection to the WAIP-Web project/
518
+ Robert-112 itself is unchanged, just reworded without that word.
519
+ - This Changelog section now shows only the 5 most recent versions -
520
+ older entries move to [CHANGELOG_OLD.md](CHANGELOG_OLD.md) on every
521
+ release.
522
+
523
+ ### 0.7.29 (2026-08-24)
524
+
525
+ - [Incident map image](#incident-map-image): draws the actual incident
526
+ area WAIP-Web sends in the event's `geometry` field (usually a
527
+ circle-shaped polygon around the location) as an outline, instead of
528
+ just a marker dot at its centroid. Falls back to the dot marker if no
529
+ polygon is available (e.g. only a point). The area always stays
530
+ fully visible: the adapter automatically zooms out (never in) past
531
+ the configured zoom level if needed, instead of clipping the area at
532
+ the image edge. Outline color and thickness (1-12 px) are now
533
+ configurable too (also used for the fallback marker dot's core).
534
+ - **Rescue-service decoding** (on the [Rescue service](#rescue-service)
535
+ tab) now defaults to **on** for new installations, matching **Process
536
+ rescue-service incidents** (already on by default) - previously it
537
+ defaulted to off. Already-configured instances keep their stored
538
+ value, this only affects fresh installs.
539
+ - Trimmed the self-justifying "kept the previous behavior" sentence
540
+ from both checkboxes' admin descriptions and reworded the decoding
541
+ checkbox's description ("has no effect if your dispatch center
542
+ doesn't use one of these patterns" instead of "only enable if...").
543
+
471
544
  ### 0.7.28 (2026-08-24)
472
545
 
473
546
  - New: **Process rescue-service incidents** checkbox on the
@@ -501,153 +574,8 @@ example.
501
574
  pattern`), and the table's help text was moved above the table
502
575
  instead of below - with many rows it used to sit far out of view.
503
576
 
504
- ### 0.7.25 (2026-08-23)
505
-
506
- - Updated the admin UI text for the [rescue-service decoder](#rescue-service)
507
- to reflect the two supported keyword spellings added in 0.7.23
508
- (Leitstelle Lausitz `R1N1p`/`R1N0-NT` and IRLS Brandenburg `R1N1 p`/
509
- `R1N0 nt`) - the checkbox label/help and the NT suffix label/help
510
- previously only mentioned the hyphenated no-space form.
511
-
512
- ### 0.7.24 (2026-08-23)
513
-
514
- - Extended the default [keyword table](#keyword-descriptions) with two
515
- more Brandenburg spelling variants: `B:Gebäude-Groß` and
516
- `B:Gebäude-Klein` (hyphen instead of space, as used by some dispatch
517
- centers) - same descriptions as the existing `B:Gebäude groß`/`B:Gebäude
518
- klein` entries. Only affects the shipped example table for new
519
- installs - existing configured tables are untouched.
520
-
521
- ### 0.7.23 (2026-08-23)
522
-
523
- - Extended the default [keyword table](#keyword-descriptions) with the
524
- 29 `K`/`V`/`M`/`S` keywords (Krankentransport, Verlegung, MANV,
525
- Sonderstichwörter) from the IRLS Brandenburg rescue-service catalog
526
- (v2.7) - previously only the `R<ambulance>N<physician-vehicle>`
527
- scheme and the Brand/THL (`B:`/`H:`) table were covered, so
528
- `einsatz.beschreibung` stayed `null` for these.
529
- - Fixed the [rescue-service keyword](#rescue-service) decoder
530
- (`decodeRettungsdienstStichwort`): it only accepted the Leitstelle
531
- Lausitz spelling without a space (`R1N1p`, `R1N0-NT`) and silently
532
- returned `null` for the IRLS Brandenburg spelling with a space
533
- (`R1N1 p`, `R1N0 nt`) - both are now recognized.
534
- - Only affects the shipped example table and the decoder logic for
535
- new installs/upgrades - existing configured tables are untouched.
536
-
537
- ### 0.7.22 (2026-08-23)
538
-
539
- - Extended the default [keyword table](#keyword-descriptions) with
540
- `H:Person-TMR` (technical human rescue) and corrected three entries
541
- whose pattern didn't match the actual dispatch keyword:
542
- `H:Flugunfall` → `H:Flugzeugunfall` (`klein`/`groß`), `H:Öl Wasser`
543
- → `H:Öl auf Wasser`, `H:Rettung aus Höhen/Tiefen` → `H:Rettung aus
544
- Höhen und Tiefen` (source: Regionalleitstellen Brandenburg keyword
545
- list, v7.1). Only affects the shipped example table for new
546
- installs - existing configured tables are untouched.
547
-
548
- ### 0.7.21 (2026-08-23)
549
-
550
- - Removed the keyword table's CSV export/import: a bug in ioBroker
551
- Admin's own `table` component corrupted German umlauts on CSV
552
- import (e.g. `ä`/`Ã` instead of `ä`/`ß`) - confirmed to be entirely
553
- inside the Admin UI, not this adapter's code. Use ioBroker's
554
- standard instance configuration export/import (JSON) instead - see
555
- [Keyword descriptions](#keyword-descriptions) for the reload caveat
556
- after using it.
557
- - Split the admin configuration UI into 3 tabs -
558
- [Connection](#connection), [Rescue-service
559
- keywords](#rescue-service),
560
- [Keyword descriptions](#keyword-descriptions) - each with a
561
- matching icon, replacing the single combined settings page.
562
- - Documentation: restructured the configuration section of the
563
- README to mirror the 3 admin tabs, fixed a stale reference to the
564
- removed CSV feature, and added a couple of small clarifications
565
- (mentioned `einsatz.beschreibung` in the practical-use-cases
566
- section, mentioned the 3-tab structure up front). All code comments
567
- in `main.js` are now bilingual (German + English).
568
-
569
- ### 0.7.20 (2026-08-22)
570
-
571
- - Added `einsatz.beschreibung`: a plain-language description for
572
- `einsatz.stichwort`, resolved entirely locally (also included in
573
- `einsatz.json.current`/`.history10`). Two sources, in order:
574
- - An optional decoder for the `R<RTW>N<NEF>[p][f][-NT]` rescue-service
575
- keyword scheme used by several dispatch centers - the label for
576
- each part is fully configurable via 5 new text fields.
577
- - A user-maintained keyword table (admin table, CSV export/import,
578
- pre-filled with an example fire/rescue keyword list) where the
579
- most specific (longest) matching pattern wins automatically,
580
- regardless of row order - the table can be freely sorted by
581
- keyword.
582
- - `null` if nothing matches. See
583
- [Alarm keyword descriptions](#alarm-keyword-descriptions).
584
-
585
- ### 0.7.19 (2026-08-22)
586
-
587
- - Fixed a bug where incoming feedback (`io.new_rmld`) was silently
588
- dropped as "wrong monitor" whenever the responding station's number
589
- (`wache_nr`) differed from the registered monitor ID:
590
- `payloadMonitorMatch()` incorrectly treated `wache_nr`/`wache_id`/
591
- `wacheId` as monitor-identifying fields, but confirmed against the
592
- WAIP-Web server source, `wache_nr` on a feedback event is the station
593
- number of the crew that submitted it, unrelated to the monitor/
594
- dispatch-center ID. Removed these three from the match candidates -
595
- alarms and routes were never affected (they don't carry these
596
- fields).
597
-
598
- ### 0.7.18 (2026-08-22)
599
-
600
- - Fixed `debug.lastEvent`/`debug.normalizedPosition` to hold a
601
- single-element JSON array instead of a bare object (matching
602
- `einsatz.json.current`), for direct VIS table-widget compatibility,
603
- and to correctly initialize to `[]` instead of `null` on a fresh
604
- install/restart.
605
- - Removed `einsatz.einsatznummer`/`.objekt`/`.objektteil`/
606
- `.besonderheiten`/`.strasse`/`.hausnummer`/`.einsatzdetails`/
607
- `.permissions` (and the corresponding fields in
608
- `einsatz.json.current`/`.history10`): confirmed via the WAIP-Web
609
- server source (`server/waip.js`,
610
- `db_user_check_permission_for_waip()`) that these fields are only
611
- ever populated for logged-in clients - since this adapter connects
612
- anonymously by design, they were always empty/`false`. Removed
613
- instead of permanently carrying dead states - see the note in the
614
- [`einsatz`](#einsatz) section.
615
-
616
- ### 0.7.17 (2026-08-22)
617
-
618
- - Fixed `cleanupObsoleteObjects()` incorrectly deleting and recreating
619
- the `einsatz.json` channel on every restart (it wasn't checking
620
- `obj.type`, so the current channel object was mistaken for a leftover
621
- state from before the 0.7.15 migration).
622
- - Fixed a spurious `status.registrationPending` "no existing object"
623
- warning that could occur if the adapter was stopped before object
624
- initialization had finished.
625
- - Reduced WAIP registration from three emits to a single emit - Socket.IO
626
- already delivers reliably once connected, and the existing registration
627
- timeout remains as the safety net for the rare case it doesn't confirm.
628
- - `permissions` inside `einsatz.json.current`/`.history10` is now always
629
- stringified consistently with the standalone `einsatz.permissions`
630
- state, and `einsatz.json.current` is wrapped in a single-element array
631
- (VIS table widgets require an array at the root, not a bare object).
632
- - Fixed `einsatz.json.history10`/`debug.monitorAudit` staying `null`
633
- instead of `[]` on a fresh install (they're excluded from the
634
- per-restart reset to preserve history, which previously also meant
635
- they were never initialized at all on first install).
636
- - Added `registeredMonitor`/`registeredMonitorName` fields to
637
- `einsatz.json.current`/`.history10`.
638
- - Reworked logging: translated all remaining German log text to
639
- English; implemented the official first-occurrence-`warn`/
640
- repeat-`debug`/recovery-`info` pattern for recurring failures (session
641
- cookie, registration, connection); capped noisy Socket.IO ping/pong
642
- debug logging; a sustained flood of wrong-monitor events now escalates
643
- to `warn` instead of staying at `info` indefinitely. See
644
- [LOGGING.md](LOGGING.md) for the full reference.
645
- - Documentation: added a table of contents, a practical-use-cases
646
- section, a known-limitation note (only the single most recently active
647
- incident is shown - see [`einsatz`](#einsatz)), and enforced the
648
- changelog's own 5-entry limit.
649
-
650
- Older entries have moved to [CHANGELOG_OLD.md](CHANGELOG_OLD.md).
577
+ Older entries have moved to [CHANGELOG_OLD.md](CHANGELOG_OLD.md) - this
578
+ section shows only the 5 most recent versions.
651
579
 
652
580
  ## License
653
581
 
@@ -2,9 +2,10 @@
2
2
  "Alarm keyword descriptions": "Stichwort-Stammdaten",
3
3
  "Automatically decode rescue-service keywords (R<RTW>N<NEF>[p][f][-NT], with or without spaces)": "Rettungsdienst-Stichwörter automatisch dekodieren (R<RTW>N<NEF>[p][f][-NT], mit oder ohne Leerzeichen)",
4
4
  "Base URL of the WAIP dispatch server (Socket.IO endpoint, namespace /waip is appended automatically)": "Basis-URL des WAIP-Leitstellenservers (Socket.IO-Endpunkt, Namespace /waip wird automatisch angehängt)",
5
+ "Color of the incident-area outline (and of the fallback marker dot's core, used when no area polygon is available).": "Farbe des Einsatzgebiet-Umrisses (und des Kerns der Fallback-Punkt-Markierung, wenn kein Gebiets-Polygon vorliegt).",
5
6
  "Connection": "Verbindung",
6
7
  "Description": "Beschreibung",
7
- "For every incident with valid coordinates, downloads OpenStreetMap tiles and composes a PNG centered on the incident's location, marked with a dot. The file path is written to the einsatz.kartenbildPfad state, e.g. for sending as a Pushover attachment from a Blockly/JavaScript script. Only the 10 most recent images are kept, older ones are deleted automatically. Uses the public tile.openstreetmap.org server - keep this to the intended one-image-per-incident use per the OSM Tile Usage Policy.": "Lädt für jeden Einsatz mit gültigen Koordinaten OpenStreetMap-Kacheln herunter und setzt sie zu einem PNG zusammen, zentriert auf den Einsatzort und mit einem Punkt markiert. Der Dateipfad wird in den State einsatz.kartenbildPfad geschrieben, z.B. um ihn per Blockly/JavaScript-Skript als Pushover-Anhang zu versenden. Es werden nur die 10 neuesten Bilder aufgehoben, ältere werden automatisch gelöscht. Nutzt den öffentlichen Server tile.openstreetmap.org - bitte bei der vorgesehenen Nutzung von einem Bild pro Einsatz bleiben, siehe OSM Tile Usage Policy.",
8
+ "For every incident with valid coordinates, downloads OpenStreetMap tiles and composes a PNG centered on the incident's location, with the incident area WAIP-Web sends drawn as an outline (falls back to a marker dot if no area polygon is available). The file path is written to the einsatz.kartenbildPfad state, e.g. for sending as a Pushover attachment from a Blockly/JavaScript script. Only the 10 most recent images are kept, older ones are deleted automatically. Uses the public tile.openstreetmap.org server - keep this to the intended one-image-per-incident use per the OSM Tile Usage Policy.": "Lädt für jeden Einsatz mit gültigen Koordinaten OpenStreetMap-Kacheln herunter und setzt sie zu einem PNG zusammen, zentriert auf den Einsatzort, mit dem von WAIP-Web gesendeten Einsatzgebiet als Umriss eingezeichnet (fällt auf einen Punkt-Marker zurück, falls kein Gebiets-Polygon vorliegt). Der Dateipfad wird in den State einsatz.kartenbildPfad geschrieben, z.B. um ihn per Blockly/JavaScript-Skript als Pushover-Anhang zu versenden. Es werden nur die 10 neuesten Bilder aufgehoben, ältere werden automatisch gelöscht. Nutzt den öffentlichen Server tile.openstreetmap.org - bitte bei der vorgesehenen Nutzung von einem Bild pro Einsatz bleiben, siehe OSM Tile Usage Policy.",
8
9
  "Generate a map image for each incident": "Kartenbild für jeden Einsatz erzeugen",
9
10
  "Height of the generated map image in pixels.": "Höhe des erzeugten Kartenbilds in Pixeln.",
10
11
  "How long to wait for the server to confirm the monitor registration before logging a warning; the connection itself keeps running either way.": "Wartezeit auf die Bestätigung der Monitor-Registrierung durch den Server, bevor eine Warnung geloggt wird; die Verbindung läuft in jedem Fall weiter.",
@@ -18,16 +19,20 @@
18
19
  "Label for suffix -NT / nt (special ambulance transport)": "Bezeichnung für Suffix -NT / nt (Notfalltransport mit Notfallkrankenwagen)",
19
20
  "Label for suffix f (first responder)": "Bezeichnung für Suffix f (First Responder)",
20
21
  "Label for suffix p (polytrauma)": "Bezeichnung für Suffix p (Polytrauma)",
22
+ "Line thickness of the incident-area outline, in pixels.": "Linienstärke des Einsatzgebiet-Umrisses in Pixeln.",
21
23
  "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.": "Wird live von der /waip/-Übersichtsseite des konfigurierten Servers geladen - Auswahl nach Leitstelle, Kreis, Träger oder Wache, oder 'Alle Wachalarme' (ID 0) für jeden Einsatz. Ist der Server nicht erreichbar, kann die ID weiterhin manuell eingegeben werden.",
22
24
  "Maps einsatz.stichwort to einsatz.beschreibung. Comparison is case-insensitive and treats spaces/hyphens as equivalent (any run of either collapses to one before comparing), so e.g. \"H:VU mit P\" and \"H:VU-mit-P\" match the same row - no need for a separate row per spelling. If several rows match, the most specific (longest) pattern wins automatically - row order has no effect on matching, sort by any column freely. Pre-filled with an example fire/rescue keyword list as a starting point - it is not confirmed to match your own dispatch center's actual keywords, edit/replace as needed. To back up or transfer this table, use ioBroker's standard instance configuration export/import (JSON). After using that import, reload the Admin page before checking this table - the open config dialog doesn't refresh it from an external import automatically (a state-sync limitation of the Admin table component itself).": "Ordnet einsatz.stichwort eine Beschreibung für einsatz.beschreibung zu. Der Vergleich ist case-insensitiv und behandelt Leerzeichen/Bindestriche als gleichwertig (jede Folge aus beidem wird vor dem Vergleich zu einem Leerzeichen zusammengefasst), sodass z.B. \"H:VU mit P\" und \"H:VU-mit-P\" dieselbe Zeile matchen - keine eigene Zeile pro Schreibvariante nötig. Passen mehrere Zeilen, gewinnt automatisch das spezifischste (längste) Muster - die Zeilenreihenfolge hat keinen Einfluss auf den Abgleich, die Tabelle kann also frei nach jeder Spalte sortiert werden. Vorbefüllt mit einer beispielhaften Feuerwehr-/Rettungsdienst-Stichwortliste als Startpunkt - nicht bestätigt für eure eigene Leitstelle, bei Bedarf anpassen/ersetzen. Zum Sichern/Übertragen dieser Tabelle die Standard-Instanzkonfiguration von ioBroker exportieren/importieren (JSON). Nach einem solchen Import die Admin-Seite neu laden, bevor du diese Tabelle prüfst - der offene Konfigurationsdialog aktualisiert sie bei einem externen Import nicht automatisch (eine State-Sync-Einschränkung der Admin-Tabellenkomponente selbst).",
23
25
  "Match": "Abgleich",
24
26
  "Monitor ID": "Monitor-ID",
25
- "OpenStreetMap zoom level (1 = whole world, 19 = building level). Higher values show a smaller area in more detail.": "OpenStreetMap-Zoomstufe (1 = ganze Welt, 19 = Gebäudeebene). Höhere Werte zeigen einen kleineren Ausschnitt in mehr Detail.",
27
+ "OpenStreetMap zoom level (1 = whole world, 19 = building level). Higher values show a smaller area in more detail. This is a maximum, not a fixed value: if the incident area sent by the server wouldn't fully fit in the image at this zoom, the adapter automatically zooms out (never in) just enough to keep the whole area visible.": "OpenStreetMap-Zoomstufe (1 = ganze Welt, 19 = Gebäudeebene). Höhere Werte zeigen einen kleineren Ausschnitt in mehr Detail. Das ist ein Maximalwert, kein fester Wert: Passt das vom Server gesendete Einsatzgebiet bei dieser Zoomstufe nicht vollständig ins Bild, zoomt der Adapter automatisch so weit heraus (nie hinein), wie nötig, um das gesamte Gebiet sichtbar zu halten.",
28
+ "Outline color": "Umrissfarbe",
29
+ "Outline thickness (px)": "Umriss-Strichstärke (px)",
26
30
  "Process rescue-service incidents": "Rettungsdienst-Einsätze verarbeiten",
27
31
  "Reconnect delay (s)": "Wiederverbindungs-Verzögerung (s)",
28
32
  "Registration timeout (s)": "Registrierungs-Timeout (s)",
29
33
  "Rescue service": "Rettungsdienst",
30
- "Rescue-service keyword scheme R<RTW>N<NEF>, optionally followed by a p/f modifier and/or an NT suffix (e.g. \"R1N0\" = 1 ambulance, no emergency physician). Two spellings are recognized: without a space and with a hyphen before NT (Leitstelle Lausitz, e.g. \"R1N1p\", \"R1N0-NT\") and with a space and without a hyphen (Leitstelle Brandenburg/IRLS, e.g. \"R1N1 p\", \"R1N0 nt\") - only enable if your dispatch center actually uses one of these patterns. Takes priority over the table on the Keyword descriptions tab when a keyword matches.": "Rettungsdienst-Stichwortschema R<RTW>N<NEF>, optional gefolgt von einem p/f-Modifikator und/oder einem NT-Suffix (z.B. \"R1N0\" = 1 Rettungswagen, kein Notarzt). Zwei Schreibweisen werden erkannt: ohne Leerzeichen und mit Bindestrich vor NT (Leitstelle Lausitz, z.B. \"R1N1p\", \"R1N0-NT\") sowie mit Leerzeichen und ohne Bindestrich (Leitstelle Brandenburg/IRLS, z.B. \"R1N1 p\", \"R1N0 nt\") - nur aktivieren, wenn eure Leitstelle eines dieser Muster tatsächlich verwendet. Hat Vorrang vor der Tabelle im Tab Stichwort-Stammdaten, wenn ein Stichwort passt.",
34
+ "Rescue-service keyword scheme R<RTW>N<NEF>, optionally followed by a p/f modifier and/or an NT suffix (e.g. \"R1N0\" = 1 ambulance, no emergency physician). Two spellings are recognized: without a space and with a hyphen before NT (Leitstelle Lausitz, e.g. \"R1N1p\", \"R1N0-NT\") and with a space and without a hyphen (Leitstelle Brandenburg/IRLS, e.g. \"R1N1 p\", \"R1N0 nt\") - has no effect if your dispatch center doesn't use one of these patterns, since the keyword just won't match. Takes priority over the table on the Keyword descriptions tab when a keyword matches.": "Rettungsdienst-Stichwortschema R<RTW>N<NEF>, optional gefolgt von einem p/f-Modifikator und/oder einem NT-Suffix (z.B. \"R1N0\" = 1 Rettungswagen, kein Notarzt). Zwei Schreibweisen werden erkannt: ohne Leerzeichen und mit Bindestrich vor NT (Leitstelle Lausitz, z.B. \"R1N1p\", \"R1N0-NT\") sowie mit Leerzeichen und ohne Bindestrich (Leitstelle Brandenburg/IRLS, z.B. \"R1N1 p\", \"R1N0 nt\") - hat keine Auswirkung, falls eure Leitstelle keines dieser Muster verwendet, da das Stichwort dann einfach nicht passt. Hat Vorrang vor der Tabelle im Tab Stichwort-Stammdaten, wenn ein Stichwort passt.",
35
+ "Show incident-area polygon": "Einsatzgebiet-Polygon anzeigen",
31
36
  "Text appended when the keyword ends in \"-NT\" or \" nt\".": "Text, der angehängt wird, wenn das Stichwort auf \"-NT\" oder \" nt\" endet.",
32
37
  "Text appended when the keyword ends in \"f\".": "Text, der angehängt wird, wenn das Stichwort auf \"f\" endet.",
33
38
  "Text appended when the keyword ends in \"p\".": "Text, der angehängt wird, wenn das Stichwort auf \"p\" endet.",
@@ -35,7 +40,8 @@
35
40
  "Text used in the generated description for the R<n> part, e.g. \"Rettungswagen: 1\".": "Text für den R<n>-Teil der erzeugten Beschreibung, z.B. \"Rettungswagen: 1\".",
36
41
  "WAIP server URL": "WAIP-Server-URL",
37
42
  "Wait time before the adapter automatically reconnects after a lost connection or a connection error.": "Wartezeit, bevor der Adapter nach einem Verbindungsabbruch oder -fehler automatisch neu verbindet.",
38
- "When unchecked, incidents whose einsatzart identifies them as a rescue-service call (contains \"Rettung\" or \"Krankentransport\", case-insensitive) are ignored completely - no states are updated, no history entry is written, no TTS announcement is triggered. Useful because some WAIP dispatch centers only ever signal rescue-service incidents unreliably or not at all. Enabled by default to match previous behavior.": "Wenn deaktiviert, werden Einsätze, deren einsatzart auf einen Rettungsdienst-Einsatz hindeutet (enthält \"Rettung\" oder \"Krankentransport\", ohne Berücksichtigung von Groß-/Kleinschreibung), komplett ignoriert - keine States werden aktualisiert, kein History-Eintrag geschrieben, keine TTS-Ansage ausgelöst. Sinnvoll, weil manche WAIP-Leitstellen Rettungsdienst-Einsätze nur unzuverlässig oder gar nicht signalisieren. Standardmäßig aktiviert, um das bisherige Verhalten beizubehalten.",
43
+ "When checked (default), the incident-area polygon WAIP-Web sends is drawn as an outline (falling back to a centered marker dot only when no polygon is available). Uncheck to always show the simple centered marker dot instead, even when a polygon is available.": "Wenn aktiviert (Standard), wird das von WAIP-Web gesendete Einsatzgebiet-Polygon als Umriss eingezeichnet (Rückfall auf eine zentrierte Punkt-Markierung nur, falls kein Polygon vorliegt). Deaktivieren, um stattdessen immer die einfache zentrierte Punkt-Markierung zu zeigen, auch wenn ein Polygon verfügbar wäre.",
44
+ "When unchecked, incidents whose einsatzart identifies them as a rescue-service call (contains \"Rettung\" or \"Krankentransport\", case-insensitive) are ignored completely - no states are updated, no history entry is written, no TTS announcement is triggered. Useful because some WAIP dispatch centers only ever signal rescue-service incidents unreliably or not at all.": "Wenn deaktiviert, werden Einsätze, deren einsatzart auf einen Rettungsdienst-Einsatz hindeutet (enthält \"Rettung\" oder \"Krankentransport\", ohne Berücksichtigung von Groß-/Kleinschreibung), komplett ignoriert - keine States werden aktualisiert, kein History-Eintrag geschrieben, keine TTS-Ansage ausgelöst. Sinnvoll, weil manche WAIP-Leitstellen Rettungsdienst-Einsätze nur unzuverlässig oder gar nicht signalisieren.",
39
45
  "Width of the generated map image in pixels.": "Breite des erzeugten Kartenbilds in Pixeln.",
40
46
  "Zoom level": "Zoomstufe",
41
47
  "contains": "enthält",
@@ -1,19 +1,18 @@
1
1
  {
2
2
  "Alarm keyword descriptions": "Alarm keyword descriptions",
3
- "Generate a map image for each incident": "Generate a map image for each incident",
4
- "For every incident with valid coordinates, downloads OpenStreetMap tiles and composes a PNG centered on the incident's location, marked with a dot. The file path is written to the einsatz.kartenbildPfad state, e.g. for sending as a Pushover attachment from a Blockly/JavaScript script. Only the 10 most recent images are kept, older ones are deleted automatically. Uses the public tile.openstreetmap.org server - keep this to the intended one-image-per-incident use per the OSM Tile Usage Policy.": "For every incident with valid coordinates, downloads OpenStreetMap tiles and composes a PNG centered on the incident's location, marked with a dot. The file path is written to the einsatz.kartenbildPfad state, e.g. for sending as a Pushover attachment from a Blockly/JavaScript script. Only the 10 most recent images are kept, older ones are deleted automatically. Uses the public tile.openstreetmap.org server - keep this to the intended one-image-per-incident use per the OSM Tile Usage Policy.",
5
- "Image width (px)": "Image width (px)",
6
- "Width of the generated map image in pixels.": "Width of the generated map image in pixels.",
7
- "Image height (px)": "Image height (px)",
8
- "Height of the generated map image in pixels.": "Height of the generated map image in pixels.",
9
- "Incident map image": "Incident map image",
10
- "Zoom level": "Zoom level",
11
- "OpenStreetMap zoom level (1 = whole world, 19 = building level). Higher values show a smaller area in more detail.": "OpenStreetMap zoom level (1 = whole world, 19 = building level). Higher values show a smaller area in more detail.",
12
3
  "Automatically decode rescue-service keywords (R<RTW>N<NEF>[p][f][-NT], with or without spaces)": "Automatically decode rescue-service keywords (R<RTW>N<NEF>[p][f][-NT], with or without spaces)",
13
4
  "Base URL of the WAIP dispatch server (Socket.IO endpoint, namespace /waip is appended automatically)": "Base URL of the WAIP dispatch server (Socket.IO endpoint, namespace /waip is appended automatically)",
5
+ "Color of the incident-area outline (and of the fallback marker dot's core, used when no area polygon is available).": "Color of the incident-area outline (and of the fallback marker dot's core, used when no area polygon is available).",
14
6
  "Connection": "Connection",
7
+ "contains": "contains",
15
8
  "Description": "Description",
9
+ "For every incident with valid coordinates, downloads OpenStreetMap tiles and composes a PNG centered on the incident's location, with the incident area WAIP-Web sends drawn as an outline (falls back to a marker dot if no area polygon is available). The file path is written to the einsatz.kartenbildPfad state, e.g. for sending as a Pushover attachment from a Blockly/JavaScript script. Only the 10 most recent images are kept, older ones are deleted automatically. Uses the public tile.openstreetmap.org server - keep this to the intended one-image-per-incident use per the OSM Tile Usage Policy.": "For every incident with valid coordinates, downloads OpenStreetMap tiles and composes a PNG centered on the incident's location, with the incident area WAIP-Web sends drawn as an outline (falls back to a marker dot if no area polygon is available). The file path is written to the einsatz.kartenbildPfad state, e.g. for sending as a Pushover attachment from a Blockly/JavaScript script. Only the 10 most recent images are kept, older ones are deleted automatically. Uses the public tile.openstreetmap.org server - keep this to the intended one-image-per-incident use per the OSM Tile Usage Policy.",
10
+ "Generate a map image for each incident": "Generate a map image for each incident",
11
+ "Height of the generated map image in pixels.": "Height of the generated map image in pixels.",
16
12
  "How long to wait for the server to confirm the monitor registration before logging a warning; the connection itself keeps running either way.": "How long to wait for the server to confirm the monitor registration before logging a warning; the connection itself keeps running either way.",
13
+ "Image height (px)": "Image height (px)",
14
+ "Image width (px)": "Image width (px)",
15
+ "Incident map image": "Incident map image",
17
16
  "Keyword / pattern": "Keyword / pattern",
18
17
  "Keyword descriptions": "Keyword descriptions",
19
18
  "Label for N (emergency vehicle count)": "Label for N (emergency vehicle count)",
@@ -21,16 +20,21 @@
21
20
  "Label for suffix -NT / nt (special ambulance transport)": "Label for suffix -NT / nt (special ambulance transport)",
22
21
  "Label for suffix f (first responder)": "Label for suffix f (first responder)",
23
22
  "Label for suffix p (polytrauma)": "Label for suffix p (polytrauma)",
23
+ "Line thickness of the incident-area outline, in pixels.": "Line thickness of the incident-area outline, in pixels.",
24
24
  "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.": "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.",
25
25
  "Maps einsatz.stichwort to einsatz.beschreibung. Comparison is case-insensitive and treats spaces/hyphens as equivalent (any run of either collapses to one before comparing), so e.g. \"H:VU mit P\" and \"H:VU-mit-P\" match the same row - no need for a separate row per spelling. If several rows match, the most specific (longest) pattern wins automatically - row order has no effect on matching, sort by any column freely. Pre-filled with an example fire/rescue keyword list as a starting point - it is not confirmed to match your own dispatch center's actual keywords, edit/replace as needed. To back up or transfer this table, use ioBroker's standard instance configuration export/import (JSON). After using that import, reload the Admin page before checking this table - the open config dialog doesn't refresh it from an external import automatically (a state-sync limitation of the Admin table component itself).": "Maps einsatz.stichwort to einsatz.beschreibung. Comparison is case-insensitive and treats spaces/hyphens as equivalent (any run of either collapses to one before comparing), so e.g. \"H:VU mit P\" and \"H:VU-mit-P\" match the same row - no need for a separate row per spelling. If several rows match, the most specific (longest) pattern wins automatically - row order has no effect on matching, sort by any column freely. Pre-filled with an example fire/rescue keyword list as a starting point - it is not confirmed to match your own dispatch center's actual keywords, edit/replace as needed. To back up or transfer this table, use ioBroker's standard instance configuration export/import (JSON). After using that import, reload the Admin page before checking this table - the open config dialog doesn't refresh it from an external import automatically (a state-sync limitation of the Admin table component itself).",
26
26
  "Match": "Match",
27
27
  "Monitor ID": "Monitor ID",
28
+ "OpenStreetMap zoom level (1 = whole world, 19 = building level). Higher values show a smaller area in more detail. This is a maximum, not a fixed value: if the incident area sent by the server wouldn't fully fit in the image at this zoom, the adapter automatically zooms out (never in) just enough to keep the whole area visible.": "OpenStreetMap zoom level (1 = whole world, 19 = building level). Higher values show a smaller area in more detail. This is a maximum, not a fixed value: if the incident area sent by the server wouldn't fully fit in the image at this zoom, the adapter automatically zooms out (never in) just enough to keep the whole area visible.",
29
+ "Outline color": "Outline color",
30
+ "Outline thickness (px)": "Outline thickness (px)",
28
31
  "Process rescue-service incidents": "Process rescue-service incidents",
29
- "When unchecked, incidents whose einsatzart identifies them as a rescue-service call (contains \"Rettung\" or \"Krankentransport\", case-insensitive) are ignored completely - no states are updated, no history entry is written, no TTS announcement is triggered. Useful because some WAIP dispatch centers only ever signal rescue-service incidents unreliably or not at all. Enabled by default to match previous behavior.": "When unchecked, incidents whose einsatzart identifies them as a rescue-service call (contains \"Rettung\" or \"Krankentransport\", case-insensitive) are ignored completely - no states are updated, no history entry is written, no TTS announcement is triggered. Useful because some WAIP dispatch centers only ever signal rescue-service incidents unreliably or not at all. Enabled by default to match previous behavior.",
30
32
  "Reconnect delay (s)": "Reconnect delay (s)",
31
33
  "Registration timeout (s)": "Registration timeout (s)",
32
34
  "Rescue service": "Rescue service",
33
- "Rescue-service keyword scheme R<RTW>N<NEF>, optionally followed by a p/f modifier and/or an NT suffix (e.g. \"R1N0\" = 1 ambulance, no emergency physician). Two spellings are recognized: without a space and with a hyphen before NT (Leitstelle Lausitz, e.g. \"R1N1p\", \"R1N0-NT\") and with a space and without a hyphen (Leitstelle Brandenburg/IRLS, e.g. \"R1N1 p\", \"R1N0 nt\") - only enable if your dispatch center actually uses one of these patterns. Takes priority over the table on the Keyword descriptions tab when a keyword matches.": "Rescue-service keyword scheme R<RTW>N<NEF>, optionally followed by a p/f modifier and/or an NT suffix (e.g. \"R1N0\" = 1 ambulance, no emergency physician). Two spellings are recognized: without a space and with a hyphen before NT (Leitstelle Lausitz, e.g. \"R1N1p\", \"R1N0-NT\") and with a space and without a hyphen (Leitstelle Brandenburg/IRLS, e.g. \"R1N1 p\", \"R1N0 nt\") - only enable if your dispatch center actually uses one of these patterns. Takes priority over the table on the Keyword descriptions tab when a keyword matches.",
35
+ "Rescue-service keyword scheme R<RTW>N<NEF>, optionally followed by a p/f modifier and/or an NT suffix (e.g. \"R1N0\" = 1 ambulance, no emergency physician). Two spellings are recognized: without a space and with a hyphen before NT (Leitstelle Lausitz, e.g. \"R1N1p\", \"R1N0-NT\") and with a space and without a hyphen (Leitstelle Brandenburg/IRLS, e.g. \"R1N1 p\", \"R1N0 nt\") - has no effect if your dispatch center doesn't use one of these patterns, since the keyword just won't match. Takes priority over the table on the Keyword descriptions tab when a keyword matches.": "Rescue-service keyword scheme R<RTW>N<NEF>, optionally followed by a p/f modifier and/or an NT suffix (e.g. \"R1N0\" = 1 ambulance, no emergency physician). Two spellings are recognized: without a space and with a hyphen before NT (Leitstelle Lausitz, e.g. \"R1N1p\", \"R1N0-NT\") and with a space and without a hyphen (Leitstelle Brandenburg/IRLS, e.g. \"R1N1 p\", \"R1N0 nt\") - has no effect if your dispatch center doesn't use one of these patterns, since the keyword just won't match. Takes priority over the table on the Keyword descriptions tab when a keyword matches.",
36
+ "Show incident-area polygon": "Show incident-area polygon",
37
+ "starts with": "starts with",
34
38
  "Text appended when the keyword ends in \"-NT\" or \" nt\".": "Text appended when the keyword ends in \"-NT\" or \" nt\".",
35
39
  "Text appended when the keyword ends in \"f\".": "Text appended when the keyword ends in \"f\".",
36
40
  "Text appended when the keyword ends in \"p\".": "Text appended when the keyword ends in \"p\".",
@@ -38,6 +42,8 @@
38
42
  "Text used in the generated description for the R<n> part, e.g. \"Rettungswagen: 1\".": "Text used in the generated description for the R<n> part, e.g. \"Rettungswagen: 1\".",
39
43
  "WAIP server URL": "WAIP server URL",
40
44
  "Wait time before the adapter automatically reconnects after a lost connection or a connection error.": "Wait time before the adapter automatically reconnects after a lost connection or a connection error.",
41
- "contains": "contains",
42
- "starts with": "starts with"
45
+ "When checked (default), the incident-area polygon WAIP-Web sends is drawn as an outline (falling back to a centered marker dot only when no polygon is available). Uncheck to always show the simple centered marker dot instead, even when a polygon is available.": "When checked (default), the incident-area polygon WAIP-Web sends is drawn as an outline (falling back to a centered marker dot only when no polygon is available). Uncheck to always show the simple centered marker dot instead, even when a polygon is available.",
46
+ "When unchecked, incidents whose einsatzart identifies them as a rescue-service call (contains \"Rettung\" or \"Krankentransport\", case-insensitive) are ignored completely - no states are updated, no history entry is written, no TTS announcement is triggered. Useful because some WAIP dispatch centers only ever signal rescue-service incidents unreliably or not at all.": "When unchecked, incidents whose einsatzart identifies them as a rescue-service call (contains \"Rettung\" or \"Krankentransport\", case-insensitive) are ignored completely - no states are updated, no history entry is written, no TTS announcement is triggered. Useful because some WAIP dispatch centers only ever signal rescue-service incidents unreliably or not at all.",
47
+ "Width of the generated map image in pixels.": "Width of the generated map image in pixels.",
48
+ "Zoom level": "Zoom level"
43
49
  }