iobroker.waip-web 0.7.29 → 0.7.31

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
@@ -182,9 +182,10 @@ Rettungsdienst-Wache:
182
182
  - Optionales Einsatzkarten-Bild: ein auf die Einsatz-Koordinaten
183
183
  zentriertes PNG, lokal aus OpenStreetMap-Kacheln zusammengesetzt, mit
184
184
  dem von WAIP-Web gesendeten Einsatzgebiet als Umriss in
185
- konfigurierbarer Farbe/Stärke eingezeichnet (Rückfall auf
186
- Punkt-Markierung), zoomt bei Bedarf automatisch so heraus, dass das
187
- gesamte Gebiet sichtbar bleibt, Dateipfad als State bereitgestellt -
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 -
188
189
  siehe [Einsatzkarte](#einsatzkarte)
189
190
 
190
191
  ## Konfiguration
@@ -313,41 +314,58 @@ Koordinaten vor, lädt der Adapter die dafür nötigen Kacheln vom
313
314
  öffentlichen Server `tile.openstreetmap.org` herunter, setzt sie zu
314
315
  einem einzigen PNG zusammen, zentriert auf den Einsatzort, und stempelt
315
316
  die von der ODbL-Lizenz vorgeschriebene OpenStreetMap-Attribution unten
316
- links auf. Das Einsatzgebiet, das WAIP-Web im `geometry`-Feld des
317
- Events sendet (meist ein kreisförmiges Polygon um den Einsatzort, nicht
318
- nur dessen Mittelpunkt), wird als Umriss in konfigurierbarer Farbe und
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
319
322
  Strichstärke ins Bild eingezeichnet - also die vom Server original
320
- gesendete Form, keine Markierung an deren
321
- Mittelpunkt. Nur falls kein solches Polygon vorliegt (z.B. enthält das
322
- Event nur einen Punkt), fällt der Adapter auf eine einfache
323
- Punkt-Markierung in der Mitte zurück. Das Einsatzgebiet bleibt dabei
324
- immer vollständig sichtbar: passt es bei der konfigurierten Zoomstufe
325
- nicht ins Bild, zoomt der Adapter automatisch so weit heraus (nie
326
- hinein), wie nötig, damit das gesamte Gebiet hineinpasst, statt es am
327
- Rand abzuschneiden. Der Dateipfad wird in
328
- `einsatz.kartenbildPfad` geschrieben
329
- (siehe [einsatz](#einsatz)) – typische Verwendung ist der Versand dieser
330
- Datei aus einem Blockly-/JavaScript-Skript heraus, z.B. als
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
331
337
  Pushover-Benachrichtigungsanhang. Es werden nur die 10 zuletzt erzeugten
332
338
  Bilder aufgehoben, ältere werden automatisch gelöscht, sobald ein neues
333
- geschrieben wird. Die Bilderzeugung läuft im Hintergrund und verzögert
334
- die Alarmverarbeitung nie – ein langsamer oder fehlschlagender
335
- Kachel-Download führt höchstens zu einem fehlenden/verspäteten Bild,
336
- sonst bleibt nichts betroffen.
339
+ geschrieben wird. Die Alarmverarbeitung wartet auf die Fertigstellung
340
+ des Bildes, bevor sie fortfährt – `einsatz.kartenbildPfad` trägt daher
341
+ garantiert schon den richtigen Wert, sobald auch die übrigen Felder des
342
+ Einsatzes (z.B. `einsatz.alarmAktiv`) verfügbar werden – allerdings
343
+ höchstens bis zum konfigurierbaren **OSM-Timeout**: Ist der
344
+ Kachel-Download/die Bildzusammensetzung bis dahin nicht fertig, wird
345
+ eine Warnung geloggt und `einsatz.kartenbildPfad` bleibt für diesen
346
+ Einsatz leer, ohne die Alarmverarbeitung unbegrenzt zu blockieren.
337
347
 
338
348
  | Feld | Beschreibung | Default |
339
349
  | --- | --- | --- |
350
+ | Einsatzgebiet-Polygon anzeigen | Das von WAIP-Web gesendete Original-Polygon zeichnen (an) vs. immer eine zentrierte Punkt-Markierung zeigen (aus) | *(an)* |
340
351
  | Bildbreite (px) | Breite des erzeugten PNGs | `600` |
341
352
  | Bildhöhe (px) | Höhe des erzeugten PNGs | `400` |
342
- | Zoomstufe | OpenStreetMap-Zoomstufe (1 = ganze Welt, 19 = Gebäudeebene) - ein Maximalwert, wird bei Bedarf automatisch reduziert, damit das Einsatzgebiet vollständig sichtbar bleibt | `16` |
353
+ | Zoomstufe | OpenStreetMap-Zoomstufe (1 = ganze Welt, 19 = Gebäudeebene) - ein Maximalwert, wird bei Bedarf automatisch reduziert, damit das Einsatzgebiet vollständig sichtbar bleibt | `19` |
343
354
  | Umrissfarbe | Farbe des Einsatzgebiet-Umrisses (und des Kerns der Fallback-Punkt-Markierung) | `#DD2020` |
344
- | Umriss-Strichstärke (px) | Linienstärke des Umrisses in Pixeln (1-12) | `3` |
355
+ | Umriss-Strichstärke (px) | Linienstärke des Umrisses in Pixeln (1-12) | `4` |
356
+ | OSM-Timeout (s) | Maximale Wartezeit auf das Bild (Kachel-Download und -Zusammensetzung), bevor ohne es fortgefahren wird (1-60) | `10` |
345
357
 
346
358
  Die Bilder liegen im eigenen Datenverzeichnis dieser Adapterinstanz
347
359
  (`iobroker-data/<instance>/maps/`), nicht als ioBroker-Dateiobjekte –
348
360
  `einsatz.kartenbildPfad` ist deshalb ein echter, absoluter
349
361
  Dateisystempfad, den ein auf demselben Host laufendes Skript direkt
350
- lesen kann.
362
+ lesen kann. Dieses Verzeichnis wird **nicht** automatisch gelöscht,
363
+ wenn der Adapter gestoppt oder seine Instanzkonfiguration
364
+ zurückgesetzt wird; um es bei einer Deinstallation zu entfernen,
365
+ im Bestätigungsdialog beim Löschen der Instanz/des Adapters in Admin
366
+ die Option **"Auch Instanzdaten löschen"** anhaken (seit js-controller
367
+ 4.0 / Admin 5 für das Instanzdaten-Verzeichnis jedes Adapters verfügbar
368
+ – standardmäßig nicht angehakt).
351
369
 
352
370
  > **Hinweis:** Genutzt wird der offizielle, kostenlose Server
353
371
  > `tile.openstreetmap.org`, der für gelegentliche/geringe Nutzung
@@ -425,7 +443,7 @@ stehen. Der zuletzt abgeschlossene Einsatz bleibt trotzdem über
425
443
  | `ablaufzeit` | string (date) | Ende der Standby-Anzeigedauer, Basis für `restzeit` |
426
444
  | `sondersignal` | number | `1` = Sondersignal, sonst kein Sondersignal |
427
445
  | `latitude` / `longitude` | number | Position des Einsatzortes (normalisiert aus wgs84-Feldern oder GeoJSON-Mittelpunkt) |
428
- | `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 |
446
+ | `kartenbildPfad` | string | Pfad zum zuletzt erzeugten Einsatzkarten-Bild (PNG) - siehe [Einsatzkarte](#einsatzkarte). Leer bis das Bild für den aktuellen Einsatz fertig ist; wird außerdem zu Beginn eines neuen Einsatzes, bei einem Fehlschlag der Erzeugung oder falls das OSM-Timeout überschritten wird geleert (bzw. bleibt leer), sowie - wie die übrigen Felder oben - bei `io.standby`. Die zugrundeliegende Bild-Datei selbst wird beim Leeren des States nicht gelöscht (nur das 10er-Rotationslimit entfernt Dateien, siehe [Einsatzkarte](#einsatzkarte)) |
429
447
  | `routenGesamt` | number | Anzahl Routen im aktuellen Einsatz |
430
448
  | `rueckmeldungGesamt` | number | Rückmeldungen gesamt im aktuellen Einsatz |
431
449
  | `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
@@ -184,9 +184,9 @@ adapter provides – typical use in a fire station/EMS environment:
184
184
  - Optional incident map image: a PNG centered on the incident's
185
185
  coordinates, composed locally from OpenStreetMap tiles, with the
186
186
  incident area WAIP-Web sends drawn as an outline in a configurable
187
- color/thickness (falls back to a marker dot), automatically zoomed
188
- out as needed to keep the whole area visible, file path exposed as a
189
- state - see [Incident map image](#incident-map-image)
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)
190
190
 
191
191
  ## Configuration
192
192
 
@@ -305,37 +305,56 @@ adapter downloads the tiles it needs from the public
305
305
  `tile.openstreetmap.org` server, composites them into a single PNG
306
306
  centered on the incident's location, and stamps the OpenStreetMap
307
307
  attribution (required by its ODbL license) into the bottom-left corner.
308
- The incident area WAIP-Web sends in the `geometry` field of the event
309
- (usually a circle-shaped polygon around the location, not just its
310
- center) is drawn onto the image as an outline in a configurable color
311
- and thickness - the original shape the server sent, not a marker at
312
- its centroid. Only if no such polygon
313
- is available (e.g. the event carries just a point) does the adapter
314
- fall back to a simple marker dot at the center. The incident area is
315
- always kept fully visible: if it wouldn't fit into the image at the
316
- configured zoom level, the adapter automatically zooms out (never in)
317
- just enough for the whole area to fit, instead of clipping it at the
318
- edge. The file
319
- path is written to `einsatz.kartenbildPfad` (see [einsatz](#einsatz)) –
320
- typical use is attaching that file from a Blockly/JavaScript script,
321
- e.g. as a Pushover notification attachment. Only the 10 most recently
322
- generated images are kept on disk; older ones are deleted automatically
323
- whenever a new one is written. Image generation runs in the background
324
- and never delays alarm processing – a slow or failing tile download
325
- just means a missing/delayed image, nothing else is affected.
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. Alarm
329
+ processing waits for the image to finish before continuing, so
330
+ `einsatz.kartenbildPfad` is guaranteed to already hold the correct
331
+ value by the time the rest of the incident's fields (e.g.
332
+ `einsatz.alarmAktiv`) become available – but only up to the
333
+ configurable **OSM timeout**: if the tile download/composition isn't
334
+ done within that time, a warning is logged and
335
+ `einsatz.kartenbildPfad` stays empty for that incident, without
336
+ blocking alarm processing indefinitely.
326
337
 
327
338
  | Field | Description | Default |
328
339
  | --- | --- | --- |
340
+ | Show incident-area polygon | Draw the original polygon WAIP-Web sends (on) vs. always show a centered marker dot instead (off) | *(on)* |
329
341
  | Image width (px) | Width of the generated PNG | `600` |
330
342
  | Image height (px) | Height of the generated PNG | `400` |
331
- | Zoom level | OpenStreetMap zoom level (1 = whole world, 19 = building level) - a maximum, automatically reduced if needed to keep the incident area fully visible | `16` |
343
+ | 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` |
332
344
  | Outline color | Color of the incident-area outline (and the fallback marker dot's core) | `#DD2020` |
333
- | Outline thickness (px) | Line thickness of the outline, in pixels (1-12) | `3` |
345
+ | Outline thickness (px) | Line thickness of the outline, in pixels (1-12) | `4` |
346
+ | OSM timeout (s) | Maximum time to wait for the image (tile download and composition) before continuing without it (1-60) | `10` |
334
347
 
335
348
  Images are stored under this adapter instance's own data directory
336
349
  (`iobroker-data/<instance>/maps/`), not as ioBroker file objects –
337
350
  `einsatz.kartenbildPfad` is therefore a real, absolute filesystem path
338
- that a script running on the same host can read directly.
351
+ that a script running on the same host can read directly. This
352
+ directory is **not** deleted automatically when the adapter is
353
+ stopped or its instance configuration is reset; to remove it when
354
+ uninstalling, tick **"Also delete instance data"** in the confirmation
355
+ dialog when deleting the instance/adapter in Admin (available since
356
+ js-controller 4.0 / Admin 5 for any adapter's instance data directory
357
+ – unchecked by default).
339
358
 
340
359
  > **Note:** This uses the official, free `tile.openstreetmap.org`
341
360
  > server, which is intended for occasional/low-volume use (see the
@@ -411,7 +430,7 @@ The most recently finished incident remains available via
411
430
  | `ablaufzeit` | string (date) | End of the standby display duration, basis for `restzeit` |
412
431
  | `sondersignal` | number | `1` = special signal (lights & siren), otherwise none |
413
432
  | `latitude` / `longitude` | number | Incident location (normalized from wgs84 fields or GeoJSON centroid) |
414
- | `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 |
433
+ | `kartenbildPfad` | string | Path to the most recently generated incident map image (PNG) - see [Incident map image](#incident-map-image). Empty until the first image for the current incident is ready; also cleared (stays empty) at the start of a new incident, if generation fails, or if it doesn't finish within the OSM timeout, and - like the other fields above - on `io.standby`. The underlying image file itself is not deleted when the state is cleared (only the 10-image retention limit removes files, see [Incident map image](#incident-map-image)) |
415
434
  | `routenGesamt` | number | Number of routes in the current incident |
416
435
  | `rueckmeldungGesamt` | number | Total feedback count for the current incident |
417
436
  | `rueckmeldungAnzahl.ek` | number | Feedback count as team member ("Einsatzkraft") |
@@ -482,6 +501,47 @@ example.
482
501
 
483
502
  ## Changelog
484
503
 
504
+ ### 0.7.31 (2026-08-24)
505
+
506
+ - Fixed two `einsatz.kartenbildPfad` timing/staleness issues:
507
+ - Alarm processing now **waits** for the
508
+ [incident map image](#incident-map-image) to finish before
509
+ continuing, instead of generating it in the background - so
510
+ `einsatz.kartenbildPfad` and `einsatz.alarmAktiv` become available
511
+ together. The wait is capped by a new configurable **OSM timeout**
512
+ (1-60s, default 10s): if the image isn't ready in time, a warning
513
+ is logged and `kartenbildPfad` stays empty for that incident
514
+ instead of blocking alarm processing indefinitely.
515
+ - `einsatz.kartenbildPfad` is now reset immediately when a new
516
+ incident starts, instead of possibly still showing a previous
517
+ incident's stale image path (e.g. when the new incident has no
518
+ coordinates, or the map image feature just got disabled).
519
+
520
+ ### 0.7.30 (2026-08-24)
521
+
522
+ - [Incident map image](#incident-map-image): new **Show incident-area
523
+ polygon** checkbox (on by default) - uncheck it to always show the
524
+ centered marker dot instead, even when the server sends a polygon.
525
+ The margin kept around the polygon when auto-zooming to fit it was
526
+ also reduced by 30%, so the area fills more of the image. Default
527
+ zoom level raised from 16 to 19, default outline thickness from 3 to
528
+ 4 px.
529
+ - `einsatz.kartenbildPfad` is now cleared on `io.standby` like the
530
+ other `einsatz.*` fields (previously kept, matching
531
+ `einsatz.tts.last`'s pattern) - the image file itself is unaffected,
532
+ only the 10-image retention limit ever deletes files.
533
+ - Documented that this adapter's own data directory (generated map
534
+ images) is only removed on instance/adapter deletion if "Also
535
+ delete instance data" is checked in Admin's deletion dialog - a
536
+ native js-controller/Admin feature (unchecked by default), not
537
+ something this adapter's code controls.
538
+ - Removed "Unofficial"/"Inoffiziell" from both READMEs' wording; the
539
+ disclaimer about having no connection to the WAIP-Web project/
540
+ Robert-112 itself is unchanged, just reworded without that word.
541
+ - This Changelog section now shows only the 5 most recent versions -
542
+ older entries move to [CHANGELOG_OLD.md](CHANGELOG_OLD.md) on every
543
+ release.
544
+
485
545
  ### 0.7.29 (2026-08-24)
486
546
 
487
547
  - [Incident map image](#incident-map-image): draws the actual incident
@@ -529,160 +589,8 @@ example.
529
589
  already case-insensitive before this change. Admin UI help text
530
590
  updated accordingly.
531
591
 
532
- ### 0.7.26 (2026-08-23)
533
-
534
- - [Keyword descriptions](#keyword-descriptions) tab: `Description` and
535
- `Match` columns are now sortable too (previously only `Keyword /
536
- pattern`), and the table's help text was moved above the table
537
- instead of below - with many rows it used to sit far out of view.
538
-
539
- ### 0.7.25 (2026-08-23)
540
-
541
- - Updated the admin UI text for the [rescue-service decoder](#rescue-service)
542
- to reflect the two supported keyword spellings added in 0.7.23
543
- (Leitstelle Lausitz `R1N1p`/`R1N0-NT` and IRLS Brandenburg `R1N1 p`/
544
- `R1N0 nt`) - the checkbox label/help and the NT suffix label/help
545
- previously only mentioned the hyphenated no-space form.
546
-
547
- ### 0.7.24 (2026-08-23)
548
-
549
- - Extended the default [keyword table](#keyword-descriptions) with two
550
- more Brandenburg spelling variants: `B:Gebäude-Groß` and
551
- `B:Gebäude-Klein` (hyphen instead of space, as used by some dispatch
552
- centers) - same descriptions as the existing `B:Gebäude groß`/`B:Gebäude
553
- klein` entries. Only affects the shipped example table for new
554
- installs - existing configured tables are untouched.
555
-
556
- ### 0.7.23 (2026-08-23)
557
-
558
- - Extended the default [keyword table](#keyword-descriptions) with the
559
- 29 `K`/`V`/`M`/`S` keywords (Krankentransport, Verlegung, MANV,
560
- Sonderstichwörter) from the IRLS Brandenburg rescue-service catalog
561
- (v2.7) - previously only the `R<ambulance>N<physician-vehicle>`
562
- scheme and the Brand/THL (`B:`/`H:`) table were covered, so
563
- `einsatz.beschreibung` stayed `null` for these.
564
- - Fixed the [rescue-service keyword](#rescue-service) decoder
565
- (`decodeRettungsdienstStichwort`): it only accepted the Leitstelle
566
- Lausitz spelling without a space (`R1N1p`, `R1N0-NT`) and silently
567
- returned `null` for the IRLS Brandenburg spelling with a space
568
- (`R1N1 p`, `R1N0 nt`) - both are now recognized.
569
- - Only affects the shipped example table and the decoder logic for
570
- new installs/upgrades - existing configured tables are untouched.
571
-
572
- ### 0.7.22 (2026-08-23)
573
-
574
- - Extended the default [keyword table](#keyword-descriptions) with
575
- `H:Person-TMR` (technical human rescue) and corrected three entries
576
- whose pattern didn't match the actual dispatch keyword:
577
- `H:Flugunfall` → `H:Flugzeugunfall` (`klein`/`groß`), `H:Öl Wasser`
578
- → `H:Öl auf Wasser`, `H:Rettung aus Höhen/Tiefen` → `H:Rettung aus
579
- Höhen und Tiefen` (source: Regionalleitstellen Brandenburg keyword
580
- list, v7.1). Only affects the shipped example table for new
581
- installs - existing configured tables are untouched.
582
-
583
- ### 0.7.21 (2026-08-23)
584
-
585
- - Removed the keyword table's CSV export/import: a bug in ioBroker
586
- Admin's own `table` component corrupted German umlauts on CSV
587
- import (e.g. `ä`/`Ã` instead of `ä`/`ß`) - confirmed to be entirely
588
- inside the Admin UI, not this adapter's code. Use ioBroker's
589
- standard instance configuration export/import (JSON) instead - see
590
- [Keyword descriptions](#keyword-descriptions) for the reload caveat
591
- after using it.
592
- - Split the admin configuration UI into 3 tabs -
593
- [Connection](#connection), [Rescue-service
594
- keywords](#rescue-service),
595
- [Keyword descriptions](#keyword-descriptions) - each with a
596
- matching icon, replacing the single combined settings page.
597
- - Documentation: restructured the configuration section of the
598
- README to mirror the 3 admin tabs, fixed a stale reference to the
599
- removed CSV feature, and added a couple of small clarifications
600
- (mentioned `einsatz.beschreibung` in the practical-use-cases
601
- section, mentioned the 3-tab structure up front). All code comments
602
- in `main.js` are now bilingual (German + English).
603
-
604
- ### 0.7.20 (2026-08-22)
605
-
606
- - Added `einsatz.beschreibung`: a plain-language description for
607
- `einsatz.stichwort`, resolved entirely locally (also included in
608
- `einsatz.json.current`/`.history10`). Two sources, in order:
609
- - An optional decoder for the `R<RTW>N<NEF>[p][f][-NT]` rescue-service
610
- keyword scheme used by several dispatch centers - the label for
611
- each part is fully configurable via 5 new text fields.
612
- - A user-maintained keyword table (admin table, CSV export/import,
613
- pre-filled with an example fire/rescue keyword list) where the
614
- most specific (longest) matching pattern wins automatically,
615
- regardless of row order - the table can be freely sorted by
616
- keyword.
617
- - `null` if nothing matches. See
618
- [Alarm keyword descriptions](#alarm-keyword-descriptions).
619
-
620
- ### 0.7.19 (2026-08-22)
621
-
622
- - Fixed a bug where incoming feedback (`io.new_rmld`) was silently
623
- dropped as "wrong monitor" whenever the responding station's number
624
- (`wache_nr`) differed from the registered monitor ID:
625
- `payloadMonitorMatch()` incorrectly treated `wache_nr`/`wache_id`/
626
- `wacheId` as monitor-identifying fields, but confirmed against the
627
- WAIP-Web server source, `wache_nr` on a feedback event is the station
628
- number of the crew that submitted it, unrelated to the monitor/
629
- dispatch-center ID. Removed these three from the match candidates -
630
- alarms and routes were never affected (they don't carry these
631
- fields).
632
-
633
- ### 0.7.18 (2026-08-22)
634
-
635
- - Fixed `debug.lastEvent`/`debug.normalizedPosition` to hold a
636
- single-element JSON array instead of a bare object (matching
637
- `einsatz.json.current`), for direct VIS table-widget compatibility,
638
- and to correctly initialize to `[]` instead of `null` on a fresh
639
- install/restart.
640
- - Removed `einsatz.einsatznummer`/`.objekt`/`.objektteil`/
641
- `.besonderheiten`/`.strasse`/`.hausnummer`/`.einsatzdetails`/
642
- `.permissions` (and the corresponding fields in
643
- `einsatz.json.current`/`.history10`): confirmed via the WAIP-Web
644
- server source (`server/waip.js`,
645
- `db_user_check_permission_for_waip()`) that these fields are only
646
- ever populated for logged-in clients - since this adapter connects
647
- anonymously by design, they were always empty/`false`. Removed
648
- instead of permanently carrying dead states - see the note in the
649
- [`einsatz`](#einsatz) section.
650
-
651
- ### 0.7.17 (2026-08-22)
652
-
653
- - Fixed `cleanupObsoleteObjects()` incorrectly deleting and recreating
654
- the `einsatz.json` channel on every restart (it wasn't checking
655
- `obj.type`, so the current channel object was mistaken for a leftover
656
- state from before the 0.7.15 migration).
657
- - Fixed a spurious `status.registrationPending` "no existing object"
658
- warning that could occur if the adapter was stopped before object
659
- initialization had finished.
660
- - Reduced WAIP registration from three emits to a single emit - Socket.IO
661
- already delivers reliably once connected, and the existing registration
662
- timeout remains as the safety net for the rare case it doesn't confirm.
663
- - `permissions` inside `einsatz.json.current`/`.history10` is now always
664
- stringified consistently with the standalone `einsatz.permissions`
665
- state, and `einsatz.json.current` is wrapped in a single-element array
666
- (VIS table widgets require an array at the root, not a bare object).
667
- - Fixed `einsatz.json.history10`/`debug.monitorAudit` staying `null`
668
- instead of `[]` on a fresh install (they're excluded from the
669
- per-restart reset to preserve history, which previously also meant
670
- they were never initialized at all on first install).
671
- - Added `registeredMonitor`/`registeredMonitorName` fields to
672
- `einsatz.json.current`/`.history10`.
673
- - Reworked logging: translated all remaining German log text to
674
- English; implemented the official first-occurrence-`warn`/
675
- repeat-`debug`/recovery-`info` pattern for recurring failures (session
676
- cookie, registration, connection); capped noisy Socket.IO ping/pong
677
- debug logging; a sustained flood of wrong-monitor events now escalates
678
- to `warn` instead of staying at `info` indefinitely. See
679
- [LOGGING.md](LOGGING.md) for the full reference.
680
- - Documentation: added a table of contents, a practical-use-cases
681
- section, a known-limitation note (only the single most recently active
682
- incident is shown - see [`einsatz`](#einsatz)), and enforced the
683
- changelog's own 5-entry limit.
684
-
685
- Older entries have moved to [CHANGELOG_OLD.md](CHANGELOG_OLD.md).
592
+ Older entries have moved to [CHANGELOG_OLD.md](CHANGELOG_OLD.md) - this
593
+ section shows only the 5 most recent versions.
686
594
 
687
595
  ## License
688
596
 
@@ -4,7 +4,6 @@
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
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).",
6
6
  "Connection": "Verbindung",
7
- "contains": "enthält",
8
7
  "Description": "Beschreibung",
9
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.",
10
9
  "Generate a map image for each incident": "Kartenbild für jeden Einsatz erzeugen",
@@ -24,8 +23,10 @@
24
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.",
25
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).",
26
25
  "Match": "Abgleich",
26
+ "Maximum time to wait for the map image (OSM tile download and composition) to finish before continuing to process the incident. If it isn't ready within this time, a warning is logged and einsatz.kartenbildPfad stays empty for this incident.": "Maximale Wartezeit auf die Fertigstellung des Kartenbilds (OSM-Kachel-Download und -Zusammensetzung), bevor mit der Verarbeitung des Einsatzes fortgefahren wird. Ist es nicht rechtzeitig fertig, wird eine Warnung geloggt und einsatz.kartenbildPfad bleibt für diesen Einsatz leer.",
27
27
  "Monitor ID": "Monitor-ID",
28
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-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.",
29
+ "OSM timeout (s)": "OSM-Timeout (s)",
29
30
  "Outline color": "Umrissfarbe",
30
31
  "Outline thickness (px)": "Umriss-Strichstärke (px)",
31
32
  "Process rescue-service incidents": "Rettungsdienst-Einsätze verarbeiten",
@@ -33,7 +34,7 @@
33
34
  "Registration timeout (s)": "Registrierungs-Timeout (s)",
34
35
  "Rescue service": "Rettungsdienst",
35
36
  "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.",
36
- "starts with": "beginnt mit",
37
+ "Show incident-area polygon": "Einsatzgebiet-Polygon anzeigen",
37
38
  "Text appended when the keyword ends in \"-NT\" or \" nt\".": "Text, der angehängt wird, wenn das Stichwort auf \"-NT\" oder \" nt\" endet.",
38
39
  "Text appended when the keyword ends in \"f\".": "Text, der angehängt wird, wenn das Stichwort auf \"f\" endet.",
39
40
  "Text appended when the keyword ends in \"p\".": "Text, der angehängt wird, wenn das Stichwort auf \"p\" endet.",
@@ -41,7 +42,10 @@
41
42
  "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\".",
42
43
  "WAIP server URL": "WAIP-Server-URL",
43
44
  "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.",
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.": "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
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.": "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.",
45
47
  "Width of the generated map image in pixels.": "Breite des erzeugten Kartenbilds in Pixeln.",
46
- "Zoom level": "Zoomstufe"
48
+ "Zoom level": "Zoomstufe",
49
+ "contains": "enthält",
50
+ "starts with": "beginnt mit"
47
51
  }
@@ -24,8 +24,10 @@
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
+ "Maximum time to wait for the map image (OSM tile download and composition) to finish before continuing to process the incident. If it isn't ready within this time, a warning is logged and einsatz.kartenbildPfad stays empty for this incident.": "Maximum time to wait for the map image (OSM tile download and composition) to finish before continuing to process the incident. If it isn't ready within this time, a warning is logged and einsatz.kartenbildPfad stays empty for this incident.",
27
28
  "Monitor ID": "Monitor ID",
28
29
  "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.",
30
+ "OSM timeout (s)": "OSM timeout (s)",
29
31
  "Outline color": "Outline color",
30
32
  "Outline thickness (px)": "Outline thickness (px)",
31
33
  "Process rescue-service incidents": "Process rescue-service incidents",
@@ -33,6 +35,7 @@
33
35
  "Registration timeout (s)": "Registration timeout (s)",
34
36
  "Rescue service": "Rescue service",
35
37
  "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.",
38
+ "Show incident-area polygon": "Show incident-area polygon",
36
39
  "starts with": "starts with",
37
40
  "Text appended when the keyword ends in \"-NT\" or \" nt\".": "Text appended when the keyword ends in \"-NT\" or \" nt\".",
38
41
  "Text appended when the keyword ends in \"f\".": "Text appended when the keyword ends in \"f\".",
@@ -41,6 +44,7 @@
41
44
  "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\".",
42
45
  "WAIP server URL": "WAIP server URL",
43
46
  "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.",
47
+ "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.",
44
48
  "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.",
45
49
  "Width of the generated map image in pixels.": "Width of the generated map image in pixels.",
46
50
  "Zoom level": "Zoom level"
@@ -4,7 +4,6 @@
4
4
  "Base URL of the WAIP dispatch server (Socket.IO endpoint, namespace /waip is appended automatically)": "URL base del servidor de envío WAIP (punto final Socket.IO, el espacio de nombres /waip se agrega automáticamente)",
5
5
  "Color of the incident-area outline (and of the fallback marker dot's core, used when no area polygon is available).": "Color del contorno del área del incidente (y del núcleo del punto marcador de reserva, usado cuando no hay ningún polígono de área disponible).",
6
6
  "Connection": "Conexión",
7
- "contains": "contiene",
8
7
  "Description": "Descripción",
9
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.": "Para cada incidente con coordenadas válidas, descarga teselas de OpenStreetMap y compone un PNG centrado en la ubicación del incidente, con el área del incidente enviada por WAIP-Web dibujada como contorno (recurre a un punto marcador si no hay un polígono de área disponible). La ruta del archivo se escribe en el estado einsatz.kartenbildPfad, por ejemplo para enviarlo como adjunto de Pushover desde un script de Blockly/JavaScript. Solo se conservan las 10 imágenes más recientes, las más antiguas se eliminan automáticamente. Utiliza el servidor público tile.openstreetmap.org - mantén esto en el uso previsto de una imagen por incidente según la OSM Tile Usage Policy.",
10
9
  "Generate a map image for each incident": "Generar una imagen de mapa para cada incidente",
@@ -24,8 +23,10 @@
24
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.": "Cargado en vivo desde la página de descripción general /waip/ del servidor configurado: elija Leitstelle, Kreis, Träger o Wache, o elija 'Alle Wachalarme' (ID 0) para cada incidente. Si no se puede acceder al servidor, aún se puede ingresar una identificación manualmente.",
25
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).": "Asigna einsatz.stichwort a einsatz.beschreibung. La comparación no distingue mayúsculas/minúsculas y trata los espacios/guiones como equivalentes (cualquier secuencia de ambos se reduce a uno antes de comparar), de modo que, por ejemplo, \"H:VU mit P\" y \"H:VU-mit-P\" coinciden con la misma fila - no es necesaria una fila separada por cada variante de escritura. Si varias filas coinciden, el patrón más específico (el más largo) gana automáticamente; el orden de las filas no tiene ningún efecto en la coincidencia, ordene libremente por cualquier columna. Precompletado con una lista de palabras clave de ejemplo de incendio/rescate como punto de partida; no se confirma que coincida con las palabras clave reales de su propio centro de despacho, edite/reemplace según sea necesario. Para hacer una copia de seguridad o transferir esta tabla, utilice la exportación/importación estándar de la configuración de instancia de ioBroker (JSON). Después de usar esa importación estándar, recargue la página de administración antes de comprobar esta tabla - el cuadro de diálogo de configuración abierto no la actualiza automáticamente desde una importación externa (una limitación de sincronización de estado del propio componente de tabla de administración).",
26
25
  "Match": "Fósforo",
26
+ "Maximum time to wait for the map image (OSM tile download and composition) to finish before continuing to process the incident. If it isn't ready within this time, a warning is logged and einsatz.kartenbildPfad stays empty for this incident.": "Tiempo máximo de espera para que la imagen del mapa (descarga y composición de teselas OSM) se complete antes de continuar procesando el incidente. Si no está lista dentro de este tiempo, se registra una advertencia y einsatz.kartenbildPfad permanece vacío para este incidente.",
27
27
  "Monitor ID": "Identificador del monitor",
28
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.": "Nivel de zoom de OpenStreetMap (1 = todo el mundo, 19 = nivel de edificio). Valores más altos muestran un área más pequeña con más detalle. Este es un valor máximo, no fijo: si el área del incidente enviada por el servidor no cupiera por completo en la imagen con este zoom, el adaptador aleja automáticamente el zoom (nunca lo acerca) lo justo para mantener toda el área visible.",
29
+ "OSM timeout (s)": "Tiempo de espera de OSM (s)",
29
30
  "Outline color": "Color del contorno",
30
31
  "Outline thickness (px)": "Grosor del contorno (px)",
31
32
  "Process rescue-service incidents": "Procesar incidentes del servicio de rescate",
@@ -33,7 +34,7 @@
33
34
  "Registration timeout (s)": "Tiempos de espera de registro",
34
35
  "Rescue service": "Servicio de rescate",
35
36
  "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.": "Esquema de palabras clave del servicio de rescate R<RTW>N<NEF>, seguido opcionalmente de un modificador p/f y/o un sufijo NT (p. ej. \"R1N0\" = 1 ambulancia, sin médico de urgencias). Se reconocen dos escrituras: sin espacio y con guion antes de NT (Leitstelle Lausitz, p. ej. \"R1N1p\", \"R1N0-NT\") y con espacio y sin guion (Leitstelle Brandeburgo/IRLS, p. ej. \"R1N1 p\", \"R1N0 nt\") - no tiene efecto si su central de despacho no utiliza ninguno de estos patrones, ya que la palabra clave simplemente no coincidirá. Tiene prioridad sobre la tabla de la pestaña Descripciones de palabras clave cuando una palabra clave coincide.",
36
- "starts with": "comienza con",
37
+ "Show incident-area polygon": "Mostrar polígono del área del incidente",
37
38
  "Text appended when the keyword ends in \"-NT\" or \" nt\".": "Texto añadido cuando la palabra clave termina en \"-NT\" o \" nt\".",
38
39
  "Text appended when the keyword ends in \"f\".": "Texto añadido cuando la palabra clave termina en \"f\".",
39
40
  "Text appended when the keyword ends in \"p\".": "Texto añadido cuando la palabra clave termina en \"p\".",
@@ -41,7 +42,10 @@
41
42
  "Text used in the generated description for the R<n> part, e.g. \"Rettungswagen: 1\".": "Texto utilizado en la descripción generada para la parte R<n>, p.e. \"Rettungswagen: 1\".",
42
43
  "WAIP server URL": "URL del servidor WAIP",
43
44
  "Wait time before the adapter automatically reconnects after a lost connection or a connection error.": "Tiempo de espera antes de que el adaptador se vuelva a conectar automáticamente después de una pérdida de conexión o un error de conexión.",
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.": "Cuando está marcado (por defecto), el polígono del área del incidente enviado por WAIP-Web se dibuja como un contorno (recurriendo a un punto marcador centrado solo cuando no hay ningún polígono disponible). Desmárquelo para mostrar siempre el simple punto marcador centrado en su lugar, incluso cuando haya un polígono disponible.",
44
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.": "Si se desactiva, los incidentes cuyo einsatzart los identifica como un aviso del servicio de rescate (contiene \"Rettung\" o \"Krankentransport\", sin distinguir mayúsculas/minúsculas) se ignoran por completo - no se actualiza ningún estado, no se escribe ninguna entrada en el historial, no se activa ningún aviso de voz (TTS). Útil porque algunas centrales de despacho de WAIP solo señalan los incidentes del servicio de rescate de forma poco fiable o no lo hacen en absoluto.",
45
47
  "Width of the generated map image in pixels.": "Ancho de la imagen de mapa generada en píxeles.",
46
- "Zoom level": "Nivel de zoom"
48
+ "Zoom level": "Nivel de zoom",
49
+ "contains": "contiene",
50
+ "starts with": "comienza con"
47
51
  }