iobroker.waip-web 0.7.30 → 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 +10 -5
- package/README.md +27 -12
- package/admin/i18n/de.json +2 -0
- package/admin/i18n/en.json +2 -0
- package/admin/i18n/es.json +2 -0
- package/admin/i18n/fr.json +2 -0
- package/admin/i18n/it.json +2 -0
- package/admin/i18n/nl.json +2 -0
- package/admin/i18n/pl.json +2 -0
- package/admin/i18n/pt.json +2 -0
- package/admin/i18n/ru.json +2 -0
- package/admin/i18n/uk.json +2 -0
- package/admin/i18n/zh-cn.json +2 -0
- package/admin/jsonConfig.json +13 -0
- package/io-package.json +16 -15
- package/main.js +131 -19
- package/package.json +1 -1
package/README.de.md
CHANGED
|
@@ -336,10 +336,14 @@ Der Dateipfad wird in `einsatz.kartenbildPfad` geschrieben (siehe
|
|
|
336
336
|
aus einem Blockly-/JavaScript-Skript heraus, z.B. als
|
|
337
337
|
Pushover-Benachrichtigungsanhang. Es werden nur die 10 zuletzt erzeugten
|
|
338
338
|
Bilder aufgehoben, ältere werden automatisch gelöscht, sobald ein neues
|
|
339
|
-
geschrieben wird. Die
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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.
|
|
343
347
|
|
|
344
348
|
| Feld | Beschreibung | Default |
|
|
345
349
|
| --- | --- | --- |
|
|
@@ -349,6 +353,7 @@ sonst bleibt nichts betroffen.
|
|
|
349
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` |
|
|
350
354
|
| Umrissfarbe | Farbe des Einsatzgebiet-Umrisses (und des Kerns der Fallback-Punkt-Markierung) | `#DD2020` |
|
|
351
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` |
|
|
352
357
|
|
|
353
358
|
Die Bilder liegen im eigenen Datenverzeichnis dieser Adapterinstanz
|
|
354
359
|
(`iobroker-data/<instance>/maps/`), nicht als ioBroker-Dateiobjekte –
|
|
@@ -438,7 +443,7 @@ stehen. Der zuletzt abgeschlossene Einsatz bleibt trotzdem über
|
|
|
438
443
|
| `ablaufzeit` | string (date) | Ende der Standby-Anzeigedauer, Basis für `restzeit` |
|
|
439
444
|
| `sondersignal` | number | `1` = Sondersignal, sonst kein Sondersignal |
|
|
440
445
|
| `latitude` / `longitude` | number | Position des Einsatzortes (normalisiert aus wgs84-Feldern oder GeoJSON-Mittelpunkt) |
|
|
441
|
-
| `kartenbildPfad` | string | Pfad zum zuletzt erzeugten Einsatzkarten-Bild (PNG) - siehe [Einsatzkarte](#einsatzkarte).
|
|
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)) |
|
|
442
447
|
| `routenGesamt` | number | Anzahl Routen im aktuellen Einsatz |
|
|
443
448
|
| `rueckmeldungGesamt` | number | Rückmeldungen gesamt im aktuellen Einsatz |
|
|
444
449
|
| `rueckmeldungAnzahl.ek` | number | Anzahl Rückmeldungen als Einsatzkraft |
|
package/README.md
CHANGED
|
@@ -325,10 +325,15 @@ The file path is written to `einsatz.kartenbildPfad` (see
|
|
|
325
325
|
[einsatz](#einsatz)) – typical use is attaching that file from a
|
|
326
326
|
Blockly/JavaScript script, e.g. as a Pushover notification attachment.
|
|
327
327
|
Only the 10 most recently generated images are kept on disk; older
|
|
328
|
-
ones are deleted automatically whenever a new one is written.
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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.
|
|
332
337
|
|
|
333
338
|
| Field | Description | Default |
|
|
334
339
|
| --- | --- | --- |
|
|
@@ -338,6 +343,7 @@ nothing else is affected.
|
|
|
338
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` |
|
|
339
344
|
| Outline color | Color of the incident-area outline (and the fallback marker dot's core) | `#DD2020` |
|
|
340
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` |
|
|
341
347
|
|
|
342
348
|
Images are stored under this adapter instance's own data directory
|
|
343
349
|
(`iobroker-data/<instance>/maps/`), not as ioBroker file objects –
|
|
@@ -424,7 +430,7 @@ The most recently finished incident remains available via
|
|
|
424
430
|
| `ablaufzeit` | string (date) | End of the standby display duration, basis for `restzeit` |
|
|
425
431
|
| `sondersignal` | number | `1` = special signal (lights & siren), otherwise none |
|
|
426
432
|
| `latitude` / `longitude` | number | Incident location (normalized from wgs84 fields or GeoJSON centroid) |
|
|
427
|
-
| `kartenbildPfad` | string | Path to the most recently generated incident map image (PNG) - see [Incident map image](#incident-map-image).
|
|
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)) |
|
|
428
434
|
| `routenGesamt` | number | Number of routes in the current incident |
|
|
429
435
|
| `rueckmeldungGesamt` | number | Total feedback count for the current incident |
|
|
430
436
|
| `rueckmeldungAnzahl.ek` | number | Feedback count as team member ("Einsatzkraft") |
|
|
@@ -495,6 +501,22 @@ example.
|
|
|
495
501
|
|
|
496
502
|
## Changelog
|
|
497
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
|
+
|
|
498
520
|
### 0.7.30 (2026-08-24)
|
|
499
521
|
|
|
500
522
|
- [Incident map image](#incident-map-image): new **Show incident-area
|
|
@@ -567,13 +589,6 @@ example.
|
|
|
567
589
|
already case-insensitive before this change. Admin UI help text
|
|
568
590
|
updated accordingly.
|
|
569
591
|
|
|
570
|
-
### 0.7.26 (2026-08-23)
|
|
571
|
-
|
|
572
|
-
- [Keyword descriptions](#keyword-descriptions) tab: `Description` and
|
|
573
|
-
`Match` columns are now sortable too (previously only `Keyword /
|
|
574
|
-
pattern`), and the table's help text was moved above the table
|
|
575
|
-
instead of below - with many rows it used to sit far out of view.
|
|
576
|
-
|
|
577
592
|
Older entries have moved to [CHANGELOG_OLD.md](CHANGELOG_OLD.md) - this
|
|
578
593
|
section shows only the 5 most recent versions.
|
|
579
594
|
|
package/admin/i18n/de.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.",
|
|
24
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).",
|
|
25
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.",
|
|
26
27
|
"Monitor ID": "Monitor-ID",
|
|
27
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)",
|
|
28
30
|
"Outline color": "Umrissfarbe",
|
|
29
31
|
"Outline thickness (px)": "Umriss-Strichstärke (px)",
|
|
30
32
|
"Process rescue-service incidents": "Rettungsdienst-Einsätze verarbeiten",
|
package/admin/i18n/en.json
CHANGED
|
@@ -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",
|
package/admin/i18n/es.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.",
|
|
24
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).",
|
|
25
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.",
|
|
26
27
|
"Monitor ID": "Identificador del monitor",
|
|
27
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)",
|
|
28
30
|
"Outline color": "Color del contorno",
|
|
29
31
|
"Outline thickness (px)": "Grosor del contorno (px)",
|
|
30
32
|
"Process rescue-service incidents": "Procesar incidentes del servicio de rescate",
|
package/admin/i18n/fr.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.": "Chargé en direct depuis la page de présentation /waip/ du serveur configuré - choisissez par Leitstelle, Kreis, Träger ou Wache, ou choisissez 'Alle Wachalarme' (ID 0) pour chaque incident. Si le serveur n'est pas accessible, un identifiant peut toujours être saisi manuellement.",
|
|
24
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).": "Mappe einsatz.stichwort à einsatz.beschreibung. La comparaison ne tient pas compte de la casse et traite les espaces/tirets comme équivalents (toute suite de l'un ou l'autre est ramenée à un seul avant la comparaison), de sorte que par exemple \"H:VU mit P\" et \"H:VU-mit-P\" correspondent à la même ligne - pas besoin d'une ligne distincte par variante d'orthographe. Si plusieurs lignes correspondent, le modèle le plus spécifique (le plus long) l'emporte automatiquement - l'ordre des lignes n'a aucun effet sur la correspondance, triez-la librement par n'importe quelle colonne. Pré-rempli avec un exemple de liste de mots-clés d'incendie/sauvetage comme point de départ - il n'est pas confirmé qu'il correspond aux mots-clés réels de votre propre centre de répartition, modifiez/remplacez si nécessaire. Pour sauvegarder ou transférer ce tableau, utilisez l'export/import standard de la configuration d'instance d'ioBroker (JSON). Après avoir utilisé cet import standard, rechargez la page Admin avant de vérifier ce tableau - la boîte de dialogue de configuration ouverte ne l'actualise pas automatiquement après un import externe (une limitation de synchronisation d'état du composant de tableau Admin lui-même).",
|
|
25
25
|
"Match": "Correspondre",
|
|
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.": "Délai d'attente maximal pour que l'image de carte (téléchargement et composition des tuiles OSM) soit terminée avant de continuer à traiter l'intervention. Si elle n'est pas prête dans ce délai, un avertissement est consigné et einsatz.kartenbildPfad reste vide pour cette intervention.",
|
|
26
27
|
"Monitor ID": "ID du moniteur",
|
|
27
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.": "Niveau de zoom OpenStreetMap (1 = monde entier, 19 = niveau du bâtiment). Des valeurs plus élevées affichent une zone plus petite avec plus de détails. Il s'agit d'une valeur maximale, pas fixe : si la zone d'intervention envoyée par le serveur ne tenait pas entièrement dans l'image à ce niveau de zoom, l'adaptateur dézoome automatiquement (jamais ne zoome) juste ce qu'il faut pour garder toute la zone visible.",
|
|
29
|
+
"OSM timeout (s)": "Délai d'attente OSM (s)",
|
|
28
30
|
"Outline color": "Couleur du contour",
|
|
29
31
|
"Outline thickness (px)": "Épaisseur du contour (px)",
|
|
30
32
|
"Process rescue-service incidents": "Traiter les incidents du service de secours",
|
package/admin/i18n/it.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.": "Caricato in tempo reale dalla pagina di panoramica /waip/ del server configurato: scegli Leitstelle, Kreis, Träger o Wache oppure seleziona \"Alle Wachalarme\" (ID 0) per ogni incidente. Se il server non è raggiungibile, è comunque possibile inserire manualmente un ID.",
|
|
24
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).": "Mappa einsatz.stichwort su einsatz.beschreibung. Il confronto non distingue tra maiuscole e minuscole e tratta spazi/trattini come equivalenti (qualsiasi sequenza dell'uno o dell'altro viene ridotta a uno solo prima del confronto), quindi ad es. \"H:VU mit P\" e \"H:VU-mit-P\" corrispondono alla stessa riga - non serve una riga separata per ogni variante di scrittura. Se più righe corrispondono, il modello più specifico (più lungo) vince automaticamente: l'ordine delle righe non ha alcun effetto sulla corrispondenza, ordinala liberamente per qualsiasi colonna. Precompilato con un esempio di elenco di parole chiave per vigili del fuoco/soccorso come punto di partenza: non è confermato che corrisponda alle parole chiave effettive del tuo centro di spedizione, modifica/sostituisci secondo necessità. Per eseguire il backup o trasferire questa tabella, utilizza l'esportazione/importazione standard della configurazione dell'istanza di ioBroker (JSON). Dopo aver utilizzato quell'importazione standard, ricarica la pagina di amministrazione prima di controllare questa tabella - la finestra di configurazione aperta non la aggiorna automaticamente da un'importazione esterna (una limitazione di sincronizzazione dello stato del componente tabella di amministrazione stesso).",
|
|
25
25
|
"Match": "Incontro",
|
|
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.": "Tempo massimo di attesa per il completamento dell'immagine della mappa (download e composizione dei tile OSM) prima di continuare a elaborare l'intervento. Se non è pronta entro questo tempo, viene registrato un avviso e einsatz.kartenbildPfad rimane vuoto per questo intervento.",
|
|
26
27
|
"Monitor ID": "Monitorare l'identità",
|
|
27
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.": "Livello di zoom di OpenStreetMap (1 = mondo intero, 19 = livello edificio). Valori più alti mostrano un'area più piccola con più dettagli. Questo è un valore massimo, non fisso: se l'area dell'incidente inviata dal server non entrasse completamente nell'immagine a questo livello di zoom, l'adattatore riduce automaticamente lo zoom (mai lo aumenta) quanto basta per mantenere visibile l'intera area.",
|
|
29
|
+
"OSM timeout (s)": "Timeout OSM (s)",
|
|
28
30
|
"Outline color": "Colore del contorno",
|
|
29
31
|
"Outline thickness (px)": "Spessore del contorno (px)",
|
|
30
32
|
"Process rescue-service incidents": "Elaborare gli incidenti del servizio di soccorso",
|
package/admin/i18n/nl.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.": "Live geladen vanaf de /waip/ overzichtspagina van de geconfigureerde server - kies voor Leitstelle, Kreis, Träger of Wache, of kies 'Alle Wachalarme' (ID 0) voor elk incident. Als de server niet bereikbaar is, kan er alsnog handmatig een ID worden ingevoerd.",
|
|
24
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).": "Kaarten einsatz.stichwort naar einsatz.beschreibung. De vergelijking is niet hoofdlettergevoelig en behandelt spaties/koppeltekens als gelijkwaardig (elke reeks van beide wordt vóór de vergelijking teruggebracht tot één spatie), zodat bijv. \"H:VU mit P\" en \"H:VU-mit-P\" dezelfde rij matchen - geen aparte rij per schrijfwijze nodig. Als meerdere rijen overeenkomen, wint het meest specifieke (langste) patroon automatisch. De rijvolgorde heeft geen invloed op het matchen, sorteer vrij op elke kolom. Vooraf ingevuld met een voorbeeldlijst met trefwoorden voor brand/redding als uitgangspunt. Er is niet bevestigd dat deze overeenkomt met de daadwerkelijke trefwoorden van uw eigen meldkamer. Bewerk/vervang indien nodig. Gebruik voor het back-uppen of overzetten van deze tabel de standaard export/import van de ioBroker-instantieconfiguratie (JSON). Herlaad na het gebruik van die standaardimport de Admin-pagina voordat u deze tabel controleert - de geopende configuratiedialoog wordt niet automatisch bijgewerkt na een externe import (een status-synchronisatiebeperking van de Admin-tabelcomponent zelf).",
|
|
25
25
|
"Match": "Overeenkomst",
|
|
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 wachttijd voor het voltooien van de kaartafbeelding (OSM-tegels downloaden en samenstellen) voordat wordt doorgegaan met het verwerken van het incident. Is deze niet op tijd klaar, dan wordt een waarschuwing gelogd en blijft einsatz.kartenbildPfad leeg voor dit incident.",
|
|
26
27
|
"Monitor ID": "Monitor-ID",
|
|
27
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-zoomniveau (1 = hele wereld, 19 = gebouwniveau). Hogere waarden tonen een kleiner gebied in meer detail. Dit is een maximum, geen vaste waarde: als het door de server verzonden incidentgebied bij dit zoomniveau niet volledig in de afbeelding zou passen, zoomt de adapter automatisch uit (nooit in) net genoeg om het hele gebied zichtbaar te houden.",
|
|
29
|
+
"OSM timeout (s)": "OSM-time-out (s)",
|
|
28
30
|
"Outline color": "Contourkleur",
|
|
29
31
|
"Outline thickness (px)": "Contourdikte (px)",
|
|
30
32
|
"Process rescue-service incidents": "Reddingsdienst-incidenten verwerken",
|
package/admin/i18n/pl.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.": "Ładowane na żywo ze strony przeglądu /waip/ skonfigurowanego serwera - wybierz Leitstelle, Kreis, Träger lub Wache lub wybierz „Alle Wachalarme” (ID 0) dla każdego zdarzenia. Jeśli serwer jest nieosiągalny, identyfikator można wprowadzić ręcznie.",
|
|
24
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).": "Mapuje einsatz.stichwort na einsatz.beschreibung. Porównanie nie uwzględnia wielkości liter i traktuje spacje/myślniki jako równoważne (dowolny ciąg jednego lub drugiego jest sprowadzany do jednej spacji przed porównaniem), więc np. \"H:VU mit P\" i \"H:VU-mit-P\" pasują do tego samego wiersza - nie trzeba dodawać osobnego wiersza dla każdej odmiany pisowni. Jeśli pasuje kilka wierszy, automatycznie wygrywa najbardziej konkretny (najdłuższy) wzór - kolejność wierszy nie ma wpływu na dopasowanie, sortuj dowolnie według dowolnej kolumny. Wstępnie wypełniona przykładową listą słów kluczowych dotyczących straży pożarnej/ratownictwa jako punkt wyjścia — nie potwierdzono, że jest zgodna z rzeczywistymi słowami kluczowymi Twojego centrum dyspozytorskiego, edytuj/zamień w razie potrzeby. Aby wykonać kopię zapasową lub przenieść tę tabelę, użyj standardowego eksportu/importu konfiguracji instancji ioBroker (JSON). Po użyciu tego standardowego importu odśwież stronę administracyjną przed sprawdzeniem tej tabeli - otwarte okno konfiguracji nie odświeża się automatycznie po zewnętrznym imporcie (ograniczenie synchronizacji stanu samego komponentu tabeli administracyjnej).",
|
|
25
25
|
"Match": "Mecz",
|
|
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.": "Maksymalny czas oczekiwania na ukończenie obrazu mapy (pobranie i złożenie kafelków OSM) przed kontynuowaniem przetwarzania zdarzenia. Jeśli nie będzie gotowy w tym czasie, zostanie zarejestrowane ostrzeżenie, a einsatz.kartenbildPfad pozostanie puste dla tego zdarzenia.",
|
|
26
27
|
"Monitor ID": "Identyfikator monitora",
|
|
27
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.": "Poziom powiększenia OpenStreetMap (1 = cały świat, 19 = poziom budynku). Wyższe wartości pokazują mniejszy obszar z większą ilością szczegółów. To jest wartość maksymalna, a nie stała: jeśli obszar zdarzenia wysłany przez serwer nie zmieściłby się w całości na obrazie przy tym poziomie powiększenia, adapter automatycznie pomniejsza (nigdy nie powiększa) tyle, ile potrzeba, aby cały obszar pozostał widoczny.",
|
|
29
|
+
"OSM timeout (s)": "Limit czasu OSM (s)",
|
|
28
30
|
"Outline color": "Kolor konturu",
|
|
29
31
|
"Outline thickness (px)": "Grubość konturu (px)",
|
|
30
32
|
"Process rescue-service incidents": "Przetwarzaj zdarzenia ratownictwa medycznego",
|
package/admin/i18n/pt.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.": "Carregado ao vivo da página /waip/viewview do servidor configurado - escolha por Leitstelle, Kreis, Träger ou Wache, ou escolha 'Alle Wachalarme' (ID 0) para cada incidente. Se o servidor não puder ser acessado, um ID ainda poderá ser inserido manualmente.",
|
|
24
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).": "Mapeia einsatz.stichwort para einsatz.beschreibung. A comparação não diferencia maiúsculas/minúsculas e trata espaços/hífens como equivalentes (qualquer sequência de um ou outro é reduzida a um único espaço antes da comparação), de modo que, por exemplo, \"H:VU mit P\" e \"H:VU-mit-P\" correspondem à mesma linha - não é necessária uma linha separada para cada variante de escrita. Se várias linhas corresponderem, o padrão mais específico (mais longo) vencerá automaticamente - a ordem das linhas não tem efeito na correspondência, classifique livremente por qualquer coluna. Pré-preenchido com um exemplo de lista de palavras-chave de incêndio/resgate como ponto de partida - não está confirmado que corresponda às palavras-chave reais do seu próprio centro de despacho, edite/substitua conforme necessário. Para fazer backup ou transferir esta tabela, use a exportação/importação padrão da configuração da instância do ioBroker (JSON). Depois de usar essa importação padrão, recarregue a página de administração antes de verificar esta tabela - a caixa de diálogo de configuração aberta não a atualiza automaticamente a partir de uma importação externa (uma limitação de sincronização de estado do próprio componente de tabela de administração).",
|
|
25
25
|
"Match": "Corresponder",
|
|
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.": "Tempo máximo de espera para que a imagem do mapa (download e composição dos blocos OSM) seja concluída antes de continuar a processar a ocorrência. Se não estiver pronta dentro deste tempo, um aviso é registado e einsatz.kartenbildPfad permanece vazio para esta ocorrência.",
|
|
26
27
|
"Monitor ID": "ID do monitor",
|
|
27
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.": "Nível de zoom do OpenStreetMap (1 = mundo inteiro, 19 = nível de edifício). Valores mais altos mostram uma área menor com mais detalhes. Este é um valor máximo, não fixo: se a área da ocorrência enviada pelo servidor não coubesse completamente na imagem nesse zoom, o adaptador reduz automaticamente o zoom (nunca aumenta) o quanto for necessário para manter toda a área visível.",
|
|
29
|
+
"OSM timeout (s)": "Tempo limite OSM (s)",
|
|
28
30
|
"Outline color": "Cor do contorno",
|
|
29
31
|
"Outline thickness (px)": "Espessura do contorno (px)",
|
|
30
32
|
"Process rescue-service incidents": "Processar ocorrências do serviço de resgate",
|
package/admin/i18n/ru.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.": "Загружается в реальном времени со страницы обзора настроенного сервера /waip/ — выберите Leitstelle, Kreis, Träger или Wache или выберите «Alle Wachalarme» (ID 0) для каждого инцидента. Если доступ к серверу недоступен, идентификатор все равно можно ввести вручную.",
|
|
24
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).": "Сопоставляет einsatz.stichwort с einsatz.beschreibung. Сравнение не учитывает регистр и рассматривает пробелы/дефисы как эквивалентные (любая последовательность из них сводится к одному пробелу перед сравнением), поэтому, например, \"H:VU mit P\" и \"H:VU-mit-P\" совпадают с одной и той же строкой - отдельная строка для каждого варианта написания не нужна. Если совпадают несколько строк, автоматически выигрывает наиболее конкретный (самый длинный) шаблон — порядок строк не влияет на совпадение, сортировка возможна свободно по любому столбцу. Предварительно заполнен пример списка ключевых слов пожарной/спасательной службы в качестве отправной точки. Его соответствие фактическим ключевым словам вашего диспетчерского центра не подтверждено. При необходимости отредактируйте/замените его. Для резервного копирования или переноса этой таблицы используйте стандартный экспорт/импорт конфигурации инстанса ioBroker (JSON). После использования этого стандартного импорта перезагрузите страницу администратора, прежде чем проверять эту таблицу - открытый диалог конфигурации не обновляет её автоматически после внешнего импорта (ограничение синхронизации состояния самого компонента таблицы администратора).",
|
|
25
25
|
"Match": "Соответствовать",
|
|
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.": "Максимальное время ожидания завершения создания карты (загрузка и сборка тайлов OSM) перед продолжением обработки вызова. Если изображение не готово за это время, регистрируется предупреждение, а einsatz.kartenbildPfad остаётся пустым для этого вызова.",
|
|
26
27
|
"Monitor ID": "Идентификатор монитора",
|
|
27
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 (1 = весь мир, 19 = уровень здания). Более высокие значения показывают меньшую область с большей детализацией. Это максимальное, а не фиксированное значение: если зона вызова, присланная сервером, не помещается полностью в изображение при этом масштабе, адаптер автоматически уменьшает масштаб (никогда не увеличивает) ровно настолько, чтобы вся зона оставалась видимой.",
|
|
29
|
+
"OSM timeout (s)": "Тайм-аут OSM (с)",
|
|
28
30
|
"Outline color": "Цвет контура",
|
|
29
31
|
"Outline thickness (px)": "Толщина контура (px)",
|
|
30
32
|
"Process rescue-service incidents": "Обрабатывать вызовы скорой помощи",
|
package/admin/i18n/uk.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.": "Завантажується в реальному часі зі сторінки огляду /waip/ налаштованого сервера - виберіть Leitstelle, Kreis, Träger або Wache або виберіть Alle Wachalarme (ID 0) для кожного інциденту. Якщо сервер недоступний, ідентифікатор можна ввести вручну.",
|
|
24
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).": "Зіставляє einsatz.stichwort на einsatz.beschreibung. Порівняння не враховує регістр і розглядає пробіли/дефіси як еквівалентні (будь-яка послідовність з них зводиться до одного пробілу перед порівнянням), тому, наприклад, \"H:VU mit P\" і \"H:VU-mit-P\" збігаються з тим самим рядком - окремий рядок для кожного варіанта написання не потрібен. Якщо збігається кілька рядків, автоматично виграє найконкретніший (найдовший) шаблон - порядок рядків не впливає на збіг, сортуйте вільно за будь-яким стовпцем. Попередньо заповнений прикладом списку ключових слів пожежної/рятувальної служби як відправної точки - не підтверджено, що він відповідає фактичним ключовим словам вашого власного диспетчерського центру, відредагуйте/замініть за потреби. Для резервного копіювання або перенесення цієї таблиці використовуйте стандартний експорт/імпорт конфігурації екземпляра ioBroker (JSON). Після використання цього стандартного імпорту перезавантажте сторінку адміністрування, перш ніж перевіряти цю таблицю - відкритий діалог конфігурації не оновлює її автоматично після зовнішнього імпорту (обмеження синхронізації стану самого компонента таблиці адміністрування).",
|
|
25
25
|
"Match": "Матч",
|
|
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.": "Максимальний час очікування завершення створення карти (завантаження та складання тайлів OSM) перед продовженням обробки виклику. Якщо зображення не готове за цей час, реєструється попередження, а einsatz.kartenbildPfad залишається порожнім для цього виклику.",
|
|
26
27
|
"Monitor ID": "ID монітора",
|
|
27
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 (1 = увесь світ, 19 = рівень будівлі). Вищі значення показують меншу область з більшою деталізацією. Це максимальне, а не фіксоване значення: якщо зона виклику, надіслана сервером, не вміщається повністю в зображення при цьому масштабі, адаптер автоматично зменшує масштаб (ніколи не збільшує) рівно настільки, щоб уся зона залишалася видимою.",
|
|
29
|
+
"OSM timeout (s)": "Тайм-аут OSM (с)",
|
|
28
30
|
"Outline color": "Колір контуру",
|
|
29
31
|
"Outline thickness (px)": "Товщина контуру (px)",
|
|
30
32
|
"Process rescue-service incidents": "Обробляти виклики швидкої допомоги",
|
package/admin/i18n/zh-cn.json
CHANGED
|
@@ -23,8 +23,10 @@
|
|
|
23
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.": "从配置的服务器的 /waip/ 概述页面实时加载 - 按 Leitstelle、Kreis、Träger 或 Wache 进行选择,或为每个事件选择“Alle Wachalarme”(ID 0)。如果无法连接到服务器,仍然可以手动输入 ID。",
|
|
24
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).": "将 einsatz.stichwort 映射到 einsatz.beschreibung。比较不区分大小写,并将空格/连字符视为等效(比较前任意一串空格或连字符都会归并为一个空格),因此例如 \"H:VU mit P\" 和 \"H:VU-mit-P\" 会匹配同一行 - 不需要为每种拼写变体单独添加一行。如果多行匹配,则最具体(最长)的模式自动获胜 - 行顺序对匹配没有影响,可按任意列自由排序。预先填充示例消防/救援关键字列表作为起点 - 尚未确认是否与您自己的调度中心的实际关键字匹配,请根据需要进行编辑/替换。 如需备份或迁移此表,请使用 ioBroker 标准的实例配置导出/导入(JSON)。 使用该标准导入后,请在检查此表之前重新加载管理页面 - 打开的配置对话框不会在外部导入后自动刷新该表(这是管理表格组件自身的状态同步限制)。",
|
|
25
25
|
"Match": "匹配",
|
|
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.": "生成地图图片(下载并拼接 OSM 瓦片)的最长等待时间,超过后将继续处理该出警事件。如果在此时间内未能完成,将记录一条警告,且本次事件的 einsatz.kartenbildPfad 将保持为空。",
|
|
26
27
|
"Monitor ID": "显示器ID",
|
|
27
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 缩放级别(1 = 整个世界,19 = 建筑级别)。数值越高,显示的区域越小,细节越多。这是一个最大值,而非固定值:如果服务器发送的事件区域在此缩放级别下无法完整显示在图像中,适配器会自动缩小(绝不放大)到刚好能显示整个区域为止。",
|
|
29
|
+
"OSM timeout (s)": "OSM 超时(秒)",
|
|
28
30
|
"Outline color": "轮廓颜色",
|
|
29
31
|
"Outline thickness (px)": "轮廓粗细(px)",
|
|
30
32
|
"Process rescue-service incidents": "处理急救服务事件",
|
package/admin/jsonConfig.json
CHANGED
|
@@ -287,6 +287,19 @@
|
|
|
287
287
|
"md": 4,
|
|
288
288
|
"lg": 4,
|
|
289
289
|
"xl": 4
|
|
290
|
+
},
|
|
291
|
+
"mapImageTimeout": {
|
|
292
|
+
"type": "number",
|
|
293
|
+
"label": "OSM timeout (s)",
|
|
294
|
+
"help": "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.",
|
|
295
|
+
"hidden": "!data.mapImageEnabled",
|
|
296
|
+
"min": 1,
|
|
297
|
+
"max": 60,
|
|
298
|
+
"xs": 12,
|
|
299
|
+
"sm": 6,
|
|
300
|
+
"md": 4,
|
|
301
|
+
"lg": 4,
|
|
302
|
+
"xl": 4
|
|
290
303
|
}
|
|
291
304
|
}
|
|
292
305
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "waip-web",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.31",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.7.31": {
|
|
7
|
+
"en": "Fixed two einsatz.kartenbildPfad timing/staleness issues: alarm processing now waits for the incident map image (bounded by a new configurable OSM timeout, 1-60s, default 10s) before continuing, so kartenbildPfad and alarmAktiv become available together instead of kartenbildPfad catching up asynchronously later - if the image isn't ready in time, a warning is logged and kartenbildPfad stays empty. Also, kartenbildPfad is now reset immediately when a new incident starts, instead of possibly still showing a previous incident's stale image path.",
|
|
8
|
+
"de": "Zwei Zeitprobleme bei einsatz.kartenbildPfad behoben: Die Alarmverarbeitung wartet jetzt auf das Einsatzkarten-Bild (begrenzt durch das neue konfigurierbare OSM-Timeout, 1-60s, Standard 10s), bevor sie fortfährt - kartenbildPfad und alarmAktiv werden dadurch gemeinsam verfügbar, statt dass kartenbildPfad erst später asynchron nachzieht. Ist das Bild nicht rechtzeitig fertig, wird eine Warnung geloggt und kartenbildPfad bleibt leer. Außerdem wird kartenbildPfad jetzt sofort bei Beginn eines neuen Einsatzes zurückgesetzt, statt ggf. noch den alten Bildpfad des vorherigen Einsatzes zu zeigen.",
|
|
9
|
+
"es": "Se corrigieron dos problemas de sincronización de einsatz.kartenbildPfad: el procesamiento de la alarma ahora espera la imagen del mapa del incidente (limitado por un nuevo tiempo de espera de OSM configurable, 1-60s, 10s por defecto) antes de continuar, de modo que kartenbildPfad y alarmAktiv están disponibles juntos en lugar de que kartenbildPfad se actualice después de forma asíncrona. Si la imagen no está lista a tiempo, se registra una advertencia y kartenbildPfad permanece vacío. Además, kartenbildPfad ahora se restablece inmediatamente al iniciar un nuevo incidente, en lugar de seguir mostrando la ruta de imagen obsoleta del incidente anterior.",
|
|
10
|
+
"fr": "Correction de deux problèmes de synchronisation de einsatz.kartenbildPfad : le traitement de l'alarme attend désormais l'image de carte de l'incident (limité par un nouveau délai d'attente OSM configurable, 1-60s, 10s par défaut) avant de continuer, afin que kartenbildPfad et alarmAktiv soient disponibles ensemble au lieu que kartenbildPfad se mette à jour de façon asynchrone plus tard. Si l'image n'est pas prête à temps, un avertissement est consigné et kartenbildPfad reste vide. De plus, kartenbildPfad est désormais réinitialisé immédiatement au début d'un nouvel incident, au lieu de pouvoir encore afficher le chemin d'image obsolète de l'incident précédent.",
|
|
11
|
+
"it": "Risolti due problemi di temporizzazione di einsatz.kartenbildPfad: l'elaborazione dell'allarme ora attende l'immagine della mappa dell'incidente (limitata da un nuovo timeout OSM configurabile, 1-60s, predefinito 10s) prima di continuare, così kartenbildPfad e alarmAktiv diventano disponibili insieme invece che kartenbildPfad si aggiorni in modo asincrono più tardi. Se l'immagine non è pronta in tempo, viene registrato un avviso e kartenbildPfad rimane vuoto. Inoltre, kartenbildPfad viene ora reimpostato immediatamente all'inizio di un nuovo incidente, invece di poter ancora mostrare il percorso dell'immagine obsoleta dell'incidente precedente.",
|
|
12
|
+
"nl": "Twee timingproblemen met einsatz.kartenbildPfad opgelost: de alarmverwerking wacht nu op de incidentkaartafbeelding (begrensd door een nieuwe instelbare OSM-time-out, 1-60s, standaard 10s) voordat wordt doorgegaan, zodat kartenbildPfad en alarmAktiv tegelijk beschikbaar komen in plaats van dat kartenbildPfad later asynchroon bijwerkt. Is de afbeelding niet op tijd klaar, dan wordt een waarschuwing gelogd en blijft kartenbildPfad leeg. Bovendien wordt kartenbildPfad nu direct gereset bij de start van een nieuw incident, in plaats van mogelijk nog het verouderde afbeeldingspad van het vorige incident te tonen.",
|
|
13
|
+
"pl": "Naprawiono dwa problemy z synchronizacją czasową einsatz.kartenbildPfad: przetwarzanie alarmu czeka teraz na obraz mapy zdarzenia (ograniczone nowym konfigurowalnym limitem czasu OSM, 1-60s, domyślnie 10s), zanim będzie kontynuowane, dzięki czemu kartenbildPfad i alarmAktiv stają się dostępne razem zamiast kartenbildPfad aktualizującego się później asynchronicznie. Jeśli obraz nie jest gotowy na czas, rejestrowane jest ostrzeżenie, a kartenbildPfad pozostaje puste. Ponadto kartenbildPfad jest teraz natychmiast resetowany na początku nowego zdarzenia, zamiast nadal pokazywać nieaktualną ścieżkę obrazu poprzedniego zdarzenia.",
|
|
14
|
+
"pt": "Corrigidos dois problemas de temporização do einsatz.kartenbildPfad: o processamento do alarme agora aguarda a imagem do mapa da ocorrência (limitado por um novo tempo limite OSM configurável, 1-60s, padrão 10s) antes de continuar, para que kartenbildPfad e alarmAktiv fiquem disponíveis juntos, em vez de kartenbildPfad ser atualizado de forma assíncrona depois. Se a imagem não estiver pronta a tempo, um aviso é registado e kartenbildPfad permanece vazio. Além disso, kartenbildPfad agora é redefinido imediatamente no início de uma nova ocorrência, em vez de continuar a mostrar o caminho de imagem desatualizado da ocorrência anterior.",
|
|
15
|
+
"ru": "Исправлены две проблемы синхронизации einsatz.kartenbildPfad: обработка тревоги теперь ожидает изображение карты вызова (ограничено новым настраиваемым тайм-аутом OSM, 1-60с, по умолчанию 10с) перед продолжением, поэтому kartenbildPfad и alarmAktiv становятся доступны одновременно, а не kartenbildPfad обновляется позже асинхронно. Если изображение не готово вовремя, регистрируется предупреждение, а kartenbildPfad остаётся пустым. Кроме того, kartenbildPfad теперь сразу сбрасывается в начале нового вызова, вместо того чтобы по-прежнему показывать устаревший путь изображения предыдущего вызова.",
|
|
16
|
+
"uk": "Виправлено дві проблеми синхронізації einsatz.kartenbildPfad: обробка тривоги тепер очікує зображення карти виклику (обмежено новим налаштовуваним тайм-аутом OSM, 1-60с, типово 10с) перед продовженням, тому kartenbildPfad і alarmAktiv стають доступні одночасно, а не kartenbildPfad оновлюється пізніше асинхронно. Якщо зображення не готове вчасно, реєструється попередження, а kartenbildPfad залишається порожнім. Крім того, kartenbildPfad тепер одразу скидається на початку нового виклику, замість того щоб і далі показувати застарілий шлях зображення попереднього виклику.",
|
|
17
|
+
"zh-cn": "修复了 einsatz.kartenbildPfad 的两个时序问题:警报处理现在会等待事件地图图片生成完毕(受新增可配置的 OSM 超时限制,1-60秒,默认10秒)后再继续,因此 kartenbildPfad 与 alarmAktiv 会同时可用,而不是 kartenbildPfad 之后才异步补上。如果图片未能按时生成,将记录一条警告,且 kartenbildPfad 保持为空。此外,kartenbildPfad 现在会在新事件开始时立即重置,而不是可能仍显示上一个事件的过期图片路径。"
|
|
18
|
+
},
|
|
6
19
|
"0.7.30": {
|
|
7
20
|
"en": "New \"Show incident-area polygon\" checkbox for the incident map image (on by default, switch to a centered dot instead); the auto-zoom-fit margin around the polygon is 30% smaller, default zoom raised to 19, default outline thickness to 4px. einsatz.kartenbildPfad is now cleared on io.standby like other fields. Documented Admin's \"delete instance data\" option for removing generated map images on uninstall. Dropped \"Unofficial\" from both READMEs. Changelog now shows only the 5 most recent versions.",
|
|
8
21
|
"de": "Neue Checkbox \"Einsatzgebiet-Polygon anzeigen\" für die Einsatzkarte (standardmäßig an, umschaltbar auf einen zentrierten Punkt); der Rand beim automatischen Heranzoomen an das Polygon ist 30% kleiner, Standard-Zoom auf 19 erhöht, Standard-Strichstärke auf 4px. einsatz.kartenbildPfad wird jetzt wie die übrigen Felder bei io.standby geleert. Admin-Option \"Instanzdaten löschen\" zum Entfernen der Kartenbilder bei Deinstallation dokumentiert. \"Inoffiziell\" aus beiden READMEs entfernt. Der Changelog zeigt jetzt nur noch die letzten 5 Versionen.",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"ru": "Удалён экспорт/импорт CSV из таблицы ключевых слов (ошибка в собственном компоненте таблицы ioBroker Admin искажала немецкие умлауты при импорте CSV) - вместо этого используйте стандартный экспорт/импорт конфигурации экземпляра ioBroker (JSON); задокументировано, что открытому диалогу настроек требуется перезагрузка страницы, чтобы учесть внешний импорт. Интерфейс настройки администратора разделён на 3 вкладки (Подключение, Ключевые слова спасательной службы, Описания ключевых слов) с соответствующими значками. README: исправлена устаревшая ссылка на удалённую функцию CSV, раздел настроек реструктурирован в соответствии с 3 вкладками администратора, добавлено несколько небольших уточнений. Все комментарии в коде теперь двуязычные (немецкий + английский).",
|
|
81
94
|
"uk": "Видалено експорт/імпорт CSV таблиці ключових слів (помилка у власному компоненті таблиці ioBroker Admin спотворювала німецькі умлаути під час імпорту CSV) - натомість використовуйте стандартний експорт/імпорт конфігурації екземпляра ioBroker (JSON); задокументовано, що відкритому діалогу налаштувань потрібне перезавантаження сторінки, щоб врахувати зовнішній імпорт. Інтерфейс налаштування адміністратора розділено на 3 вкладки (З'єднання, Ключові слова рятувальної служби, Описи ключових слів) з відповідними іконками. README: виправлено застаріле посилання на видалену функцію CSV, розділ налаштувань реструктуровано відповідно до 3 вкладок адміністратора, додано кілька невеликих уточнень. Усі коментарі в коді тепер двомовні (німецька + англійська).",
|
|
82
95
|
"zh-cn": "移除了关键字表的 CSV 导出/导入功能(ioBroker Admin 自身表格组件中的一个错误在 CSV 导入时会破坏德语变元音)- 请改用 ioBroker 标准的实例配置导出/导入(JSON);并说明打开的配置对话框需要重新加载页面才能识别外部导入。将管理配置界面拆分为 3 个选项卡(连接、救援服务关键字、关键字描述),并配有相应图标。README:修正了对已移除 CSV 功能的过时引用,重新组织了配置部分以对应 3 个管理选项卡,并添加了一些小的说明。所有代码注释现在都是双语的(德语 + 英语)。"
|
|
83
|
-
},
|
|
84
|
-
"0.7.20": {
|
|
85
|
-
"en": "Added einsatz.beschreibung: a plain-language description for einsatz.stichwort, resolved entirely locally. Two sources, in order: an optional decoder for the R<RTW>N<NEF>[p][f][-NT] rescue-service keyword scheme used by several dispatch centers (labels fully configurable via 5 new text fields), then a user-maintained keyword table (admin table, CSV export/import, pre-filled with an example fire/rescue keyword list) where the most specific (longest) matching pattern wins automatically regardless of row order. Also included in einsatz.json.current/.history10. null if nothing matches.",
|
|
86
|
-
"de": "einsatz.beschreibung ergänzt: eine Klartext-Beschreibung zu einsatz.stichwort, vollständig lokal ermittelt. Zwei Quellen, in dieser Reihenfolge: ein optionaler Dekoder für das von mehreren Leitstellen verwendete Rettungsdienst-Stichwortschema R<RTW>N<NEF>[p][f][-NT] (Beschriftungen über 5 neue Textfelder frei konfigurierbar), danach eine selbst pflegbare Stichwort-Tabelle (Admin-Tabelle, CSV-Export/-Import, mit einer beispielhaften Feuerwehr-/Rettungsdienst-Stichwortliste vorbefüllt), bei der automatisch das spezifischste (längste) passende Muster gewinnt, unabhängig von der Zeilenreihenfolge. Ebenfalls in einsatz.json.current/.history10 enthalten. null, falls nichts passt.",
|
|
87
|
-
"ru": "Добавлен einsatz.beschreibung: понятное описание для einsatz.stichwort, полностью разрешаемое локально. Два источника по порядку: дополнительный декодер для схемы ключевых слов спасательной службы R<RTW>N<NEF>[p][f][-NT], используемой несколькими диспетчерскими центрами (метки полностью настраиваются с помощью 5 новых текстовых полей), затем поддерживаемая пользователем таблица ключевых слов (таблица администратора, экспорт/импорт CSV, предварительно заполненный примером списка ключевых слов пожарной/спасательной службы), где наиболее конкретный (самый длинный) шаблон соответствия выигрывает автоматически независимо от порядка строк. Также включен в einsatz.json.current/.history10. null, если ничего не соответствует.",
|
|
88
|
-
"pt": "Adicionado einsatz.beschreibung: uma descrição em linguagem simples para einsatz.stichwort, resolvida inteiramente localmente. Duas fontes, em ordem: um decodificador opcional para o esquema de palavras-chave de serviço de resgate R<RTW>N<NEF>[p][f][-NT] usado por vários centros de despacho (rótulos totalmente configuráveis por meio de 5 novos campos de texto) e, em seguida, uma tabela de palavras-chave mantida pelo usuário (tabela de administração, exportação/importação CSV, pré-preenchida com um exemplo de lista de palavras-chave de incêndio/resgate) onde o padrão de correspondência mais específico (mais longo) vence automaticamente, independentemente da ordem das linhas. Também incluído em einsatz.json.current/.history10. null se nada corresponder.",
|
|
89
|
-
"nl": "Einsatz.beschreibung toegevoegd: een duidelijke taalbeschrijving voor einsatz.stichwort, volledig lokaal opgelost. Twee bronnen, op volgorde: een optionele decoder voor het trefwoordschema R<RTW>N<NEF>[p][f][-NT] van de reddingsdienst dat door verschillende meldkamers wordt gebruikt (labels volledig configureerbaar via 5 nieuwe tekstvelden), en vervolgens een door de gebruiker bijgehouden trefwoordentabel (beheertabel, CSV-export/-import, vooraf gevuld met een voorbeeldlijst met trefwoorden voor brand/redding) waarbij het meest specifieke (langste) overeenkomende patroon automatisch wint, ongeacht de rijvolgorde. Ook opgenomen in einsatz.json.current/.history10. null als er niets overeenkomt.",
|
|
90
|
-
"fr": "Ajout de einsatz.beschreibung : une description en langage clair pour einsatz.stichwort, résolue entièrement localement. Deux sources, dans l'ordre : un décodeur optionnel pour le schéma de mots-clés des services de secours R<RTW>N<NEF>[p][f][-NT] utilisé par plusieurs centres de répartition (étiquettes entièrement configurables via 5 nouveaux champs de texte), puis une table de mots-clés gérée par l'utilisateur (table d'administration, export/import CSV, pré-remplie avec un exemple de liste de mots-clés incendie/sauvetage) où le modèle de correspondance le plus spécifique (le plus long) l'emporte automatiquement quel que soit l'ordre des lignes. Également inclus dans einsatz.json.current/.history10. null si rien ne correspond.",
|
|
91
|
-
"it": "Aggiunto einsatz.beschreibung: una descrizione in linguaggio semplice per einsatz.stichwort, risolta interamente localmente. Due fonti, in ordine: un decodificatore opzionale per lo schema di parole chiave del servizio di soccorso R<RTW>N<NEF>[p][f][-NT] utilizzato da diversi centri di spedizione (etichette completamente configurabili tramite 5 nuovi campi di testo), quindi una tabella di parole chiave gestita dall'utente (tabella di amministrazione, esportazione/importazione CSV, precompilata con un esempio di elenco di parole chiave per incendio/soccorso) in cui il modello di corrispondenza più specifico (più lungo) vince automaticamente indipendentemente dall'ordine delle righe. Incluso anche in einsatz.json.current/.history10. null se non corrisponde nulla.",
|
|
92
|
-
"es": "Se agregó einsatz.beschreibung: una descripción en lenguaje sencillo para einsatz.stichwort, resuelta completamente localmente. Dos fuentes, en orden: un decodificador opcional para el esquema de palabras clave del servicio de rescate R<RTW>N<NEF>[p][f][-NT] utilizado por varios centros de despacho (etiquetas completamente configurables a través de 5 nuevos campos de texto), luego una tabla de palabras clave mantenida por el usuario (tabla de administración, exportación/importación CSV, precargada con una lista de palabras clave de ejemplo de incendio/rescate) donde el patrón de coincidencia más específico (más largo) gana automáticamente independientemente del orden de las filas. También incluido en einsatz.json.current/.history10. nulo si nada coincide.",
|
|
93
|
-
"pl": "Dodano einsatz.beschreibung: prosty opis einsatz.stichwort, rozwiązany całkowicie lokalnie. Dwa źródła w kolejności: opcjonalny dekoder schematu słów kluczowych R<RTW>N<NEF>[p][f][-NT] służb ratowniczych używany przez kilka centrów dyspozytorskich (etykiety w pełni konfigurowalne za pomocą 5 nowych pól tekstowych), następnie utrzymywana przez użytkownika tabela słów kluczowych (tabela administracyjna, eksport/import CSV, wstępnie wypełniona przykładową listą słów kluczowych straży pożarnej/ratownictwa), w której najbardziej konkretny (najdłuższy) pasujący wzorzec wygrywa automatycznie niezależnie od kolejności wierszy. Zawarte także w pliku einsatz.json.current/.history10. null, jeśli nic nie pasuje.",
|
|
94
|
-
"uk": "Додано einsatz.beschreibung: опис простою мовою для einsatz.stichwort, вирішений повністю локально. Два джерела по порядку: додатковий декодер для схеми ключових слів служби порятунку R<RTW>N<NEF>[p][f][-NT], яка використовується кількома диспетчерськими центрами (мітки повністю налаштовуються за допомогою 5 нових текстових полів), а потім таблиця ключових слів, що підтримується користувачем (таблиця адміністратора, експорт/імпорт CSV, попередньо заповнений прикладом списку ключових слів пожежно-рятувальної служби), де автоматично перемагає найбільш конкретний (найдовший) відповідний шаблон незалежно від порядку рядків. Також включено в einsatz.json.current/.history10. null, якщо нічого не відповідає.",
|
|
95
|
-
"zh-cn": "添加了 einsatz.beschreibung:对 einsatz.stichwort 的简单语言描述,完全在本地解析。两个源,按顺序排列:用于多个调度中心使用的 R<RTW>N<NEF>[p][f][-NT] 救援服务关键字方案的可选解码器(通过 5 个新文本字段完全可配置的标签),然后是用户维护的关键字表(管理表、CSV 导出/导入、预先填充示例消防/救援关键字列表),其中最具体(最长)的匹配模式自动获胜,无论行顺序如何。也包含在 einsatz.json.current/.history10 中。如果没有匹配则为 null。"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -537,7 +537,8 @@
|
|
|
537
537
|
"mapImageHeight": 400,
|
|
538
538
|
"mapImageZoom": 19,
|
|
539
539
|
"mapImageOutlineColor": "#dd2020",
|
|
540
|
-
"mapImageOutlineThickness": 4
|
|
540
|
+
"mapImageOutlineThickness": 4,
|
|
541
|
+
"mapImageTimeout": 10
|
|
541
542
|
},
|
|
542
543
|
"objects": [],
|
|
543
544
|
"instanceObjects": [
|
package/main.js
CHANGED
|
@@ -165,6 +165,13 @@ const MAP_IMAGE_OUTLINE_THICKNESS_MAX = 12;
|
|
|
165
165
|
// EN: How many generated map images are kept at most - older ones are deleted after every
|
|
166
166
|
// new one is created, see pruneMapImages().
|
|
167
167
|
const MAP_IMAGE_RETENTION_COUNT = 10;
|
|
168
|
+
// DE: Wie lange handleAlarm() höchstens auf die Fertigstellung des Kartenbilds wartet, bevor
|
|
169
|
+
// er mit leerem einsatz.kartenbildPfad weitermacht - siehe generateEinsatzMapImage().
|
|
170
|
+
// EN: How long handleAlarm() waits at most for the map image to finish before continuing
|
|
171
|
+
// with an empty einsatz.kartenbildPfad - see generateEinsatzMapImage().
|
|
172
|
+
const DEFAULT_MAP_IMAGE_TIMEOUT_SECONDS = 10;
|
|
173
|
+
const MAP_IMAGE_TIMEOUT_SECONDS_MIN = 1;
|
|
174
|
+
const MAP_IMAGE_TIMEOUT_SECONDS_MAX = 60;
|
|
168
175
|
|
|
169
176
|
/* DE: Für die dynamische Monitor-Auswahl im Admin (siehe fetchMonitorList/onMessage):
|
|
170
177
|
Die /waip/-Übersichtsseite einer WAIP-Web-Instanz gliedert die verfügbaren
|
|
@@ -1163,6 +1170,12 @@ class WaipWeb extends utils.Adapter {
|
|
|
1163
1170
|
MAP_IMAGE_OUTLINE_THICKNESS_MAX,
|
|
1164
1171
|
DEFAULT_MAP_IMAGE_OUTLINE_THICKNESS,
|
|
1165
1172
|
);
|
|
1173
|
+
this.mapImageTimeoutSeconds = clampNumber(
|
|
1174
|
+
this.config.mapImageTimeout,
|
|
1175
|
+
MAP_IMAGE_TIMEOUT_SECONDS_MIN,
|
|
1176
|
+
MAP_IMAGE_TIMEOUT_SECONDS_MAX,
|
|
1177
|
+
DEFAULT_MAP_IMAGE_TIMEOUT_SECONDS,
|
|
1178
|
+
);
|
|
1166
1179
|
this.mapImageDir = path.join(utils.getAbsoluteInstanceDataDir(this), 'maps');
|
|
1167
1180
|
// DE: Normalisiert einmalig beim Start (statt bei jedem Lookup): normalizeStichwortForMatch()
|
|
1168
1181
|
// sorgt für case-insensitiven Vergleich UND behandelt Leerzeichen/Bindestriche als identisch
|
|
@@ -2174,20 +2187,47 @@ class WaipWeb extends utils.Adapter {
|
|
|
2174
2187
|
|
|
2175
2188
|
/* DE: Erzeugt (falls mapImageEnabled aktiv ist) das Einsatzkarten-PNG für lat/lon, schreibt
|
|
2176
2189
|
es als Datei unter mapImageDir ab und aktualisiert einsatz.kartenbildPfad. Wird von
|
|
2177
|
-
handleAlarm() bewusst
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2190
|
+
handleAlarm() bewusst AWAITED aufgerufen (siehe dortigen Aufruf) - die Alarmverarbeitung
|
|
2191
|
+
wartet also auf das fertige Bild, damit kartenbildPfad garantiert schon den richtigen
|
|
2192
|
+
Wert für den aktuellen Einsatz trägt, sobald die übrigen einsatz.*-Felder (allen voran
|
|
2193
|
+
alarmAktiv) gesetzt werden - nicht erst irgendwann später asynchron.
|
|
2194
|
+
Um einen einzelnen langsamen/hängenden Kachel-Download trotzdem nicht die gesamte
|
|
2195
|
+
Alarmverarbeitung blockieren zu lassen, ist die Wartezeit auf this.mapImageTimeoutSeconds
|
|
2196
|
+
(Admin-Feld "OSM-Timeout", 1-60s) begrenzt: Wird das Bild nicht rechtzeitig fertig, wird
|
|
2197
|
+
eine Warnung geloggt, einsatz.kartenbildPfad bleibt/wird leer (null), und die Funktion
|
|
2198
|
+
kehrt zurück - die eigentliche Erzeugung läuft im Hintergrund weiter (Kacheln sind
|
|
2199
|
+
bereits angefragt), ihr Ergebnis wird aber verworfen (nicht mehr nach kartenbildPfad
|
|
2200
|
+
geschrieben), damit sie nicht verspätet einen inzwischen neueren/anderen Einsatz
|
|
2201
|
+
überschreibt. Fängt alle Fehler (inkl. Timeout) selbst ab, statt sie an den wartenden
|
|
2202
|
+
Aufrufer durchzureichen - ein misslungenes Kartenbild soll die Alarmverarbeitung selbst
|
|
2203
|
+
nie zum Absturz bringen.
|
|
2181
2204
|
EN: Generates (if mapImageEnabled is on) the incident map PNG for lat/lon, writes it as
|
|
2182
|
-
a file under mapImageDir and updates einsatz.kartenbildPfad. Deliberately called
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2205
|
+
a file under mapImageDir and updates einsatz.kartenbildPfad. Deliberately called AWAITED
|
|
2206
|
+
from handleAlarm() (see that call site) - alarm processing waits for the finished image,
|
|
2207
|
+
so kartenbildPfad is guaranteed to already hold the correct value for the current
|
|
2208
|
+
incident by the time the rest of the einsatz.* fields (most importantly alarmAktiv) get
|
|
2209
|
+
set, rather than only catching up asynchronously at some later point.
|
|
2210
|
+
To still keep a single slow/hanging tile download from blocking the entire alarm
|
|
2211
|
+
processing, the wait is capped at this.mapImageTimeoutSeconds (Admin field "OSM
|
|
2212
|
+
timeout", 1-60s): if the image doesn't finish in time, a warning is logged,
|
|
2213
|
+
einsatz.kartenbildPfad stays/becomes empty (null), and the function returns - the actual
|
|
2214
|
+
generation keeps running in the background (tiles are already in flight), but its result
|
|
2215
|
+
is discarded (never written to kartenbildPfad) so it can't later overwrite a by-then
|
|
2216
|
+
newer/different incident. Catches all errors (including the timeout) itself instead of
|
|
2217
|
+
passing them up to the waiting caller - a failed map image should never crash alarm
|
|
2218
|
+
processing itself. */
|
|
2186
2219
|
async generateEinsatzMapImage(lat, lon, geometry) {
|
|
2187
2220
|
if (!this.mapImageEnabled) {
|
|
2188
2221
|
return;
|
|
2189
2222
|
}
|
|
2190
|
-
|
|
2223
|
+
// DE: Fragment schon vor dem eigentlichen Erzeugen einfrieren - currentEinsatzUuid
|
|
2224
|
+
// könnte sich ändern, falls die Erzeugung durch den Timeout unten im Hintergrund
|
|
2225
|
+
// weiterläuft und erst nach einem inzwischen neuen Einsatz fertig wird.
|
|
2226
|
+
// EN: Freeze the fragment before the actual generation - currentEinsatzUuid could
|
|
2227
|
+
// change if generation keeps running in the background past the timeout below and
|
|
2228
|
+
// only finishes after a by-then new incident.
|
|
2229
|
+
const uuidFragment = (this.currentEinsatzUuid || '').replace(/[^a-zA-Z0-9]/g, '').slice(0, 8) || 'na';
|
|
2230
|
+
const work = (async () => {
|
|
2191
2231
|
await fsPromises.mkdir(this.mapImageDir, { recursive: true });
|
|
2192
2232
|
const image = await this.buildEinsatzMapImage(lat, lon, geometry);
|
|
2193
2233
|
// DE: Dateiname mit Zeitstempel-Präfix (sortierbar für pruneMapImages()) und den
|
|
@@ -2198,14 +2238,64 @@ class WaipWeb extends utils.Adapter {
|
|
|
2198
2238
|
// first 8 characters of the incident UUID (debugging aid, not a uniqueness
|
|
2199
2239
|
// guarantee - Date.now() alone is already sufficient for that, since incidents
|
|
2200
2240
|
// don't arrive at millisecond intervals).
|
|
2201
|
-
const uuidFragment = (this.currentEinsatzUuid || '').replace(/[^a-zA-Z0-9]/g, '').slice(0, 8) || 'na';
|
|
2202
2241
|
const filename = `einsatz_${Date.now()}_${uuidFragment}.png`;
|
|
2203
2242
|
const filePath = path.join(this.mapImageDir, filename);
|
|
2204
2243
|
await image.write(filePath);
|
|
2244
|
+
return filePath;
|
|
2245
|
+
})();
|
|
2246
|
+
|
|
2247
|
+
let timedOut = false;
|
|
2248
|
+
let timeoutHandle;
|
|
2249
|
+
const timeout = new Promise(resolve => {
|
|
2250
|
+
timeoutHandle = this.setTimeout(() => {
|
|
2251
|
+
timedOut = true;
|
|
2252
|
+
resolve();
|
|
2253
|
+
}, this.mapImageTimeoutSeconds * 1000);
|
|
2254
|
+
});
|
|
2255
|
+
|
|
2256
|
+
let filePath;
|
|
2257
|
+
try {
|
|
2258
|
+
filePath = await Promise.race([work, timeout]);
|
|
2259
|
+
} catch (e) {
|
|
2260
|
+
this.clearTimeout(timeoutHandle);
|
|
2261
|
+
this.safeWarn('generateEinsatzMapImage', e);
|
|
2262
|
+
try {
|
|
2263
|
+
await this.setStateAsync('einsatz.kartenbildPfad', null, true);
|
|
2264
|
+
} catch (e2) {
|
|
2265
|
+
this.safeWarn('einsatz.kartenbildPfad.setState', e2);
|
|
2266
|
+
}
|
|
2267
|
+
return;
|
|
2268
|
+
}
|
|
2269
|
+
this.clearTimeout(timeoutHandle);
|
|
2270
|
+
|
|
2271
|
+
if (timedOut) {
|
|
2272
|
+
this.safeWarn(
|
|
2273
|
+
'generateEinsatzMapImage.timeout',
|
|
2274
|
+
`image was not ready within the configured OSM timeout of ${this.mapImageTimeoutSeconds}s - leaving einsatz.kartenbildPfad empty for this incident`,
|
|
2275
|
+
);
|
|
2276
|
+
try {
|
|
2277
|
+
await this.setStateAsync('einsatz.kartenbildPfad', null, true);
|
|
2278
|
+
} catch (e) {
|
|
2279
|
+
this.safeWarn('einsatz.kartenbildPfad.setState', e);
|
|
2280
|
+
}
|
|
2281
|
+
// DE: Ergebnis der im Hintergrund weiterlaufenden Erzeugung bewusst verwerfen (siehe
|
|
2282
|
+
// Funktionskommentar) - nur noch aufräumen, falls sie doch noch fertig wird, aber
|
|
2283
|
+
// nicht mehr nach kartenbildPfad schreiben.
|
|
2284
|
+
// EN: Deliberately discard the result of the still-running background generation
|
|
2285
|
+
// (see function comment) - only still clean up if it does finish, but no longer
|
|
2286
|
+
// write to kartenbildPfad.
|
|
2287
|
+
work.then(() => this.pruneMapImages().catch(e => this.safeWarn('pruneMapImages', e))).catch(() => {
|
|
2288
|
+
/* already logged inside buildEinsatzMapImage's own per-tile handling, or
|
|
2289
|
+
irrelevant now that the result is discarded */
|
|
2290
|
+
});
|
|
2291
|
+
return;
|
|
2292
|
+
}
|
|
2293
|
+
|
|
2294
|
+
try {
|
|
2205
2295
|
await this.setStateAsync('einsatz.kartenbildPfad', filePath, true);
|
|
2206
2296
|
await this.pruneMapImages();
|
|
2207
2297
|
} catch (e) {
|
|
2208
|
-
this.safeWarn('
|
|
2298
|
+
this.safeWarn('einsatz.kartenbildPfad.setState', e);
|
|
2209
2299
|
}
|
|
2210
2300
|
}
|
|
2211
2301
|
|
|
@@ -2614,6 +2704,21 @@ class WaipWeb extends utils.Adapter {
|
|
|
2614
2704
|
this.safeWarn('einsatz.routenGesamt.setState', e);
|
|
2615
2705
|
}
|
|
2616
2706
|
await this.updateRueckmeldungCounts();
|
|
2707
|
+
// DE: kartenbildPfad ebenfalls sofort leeren, statt auf generateEinsatzMapImage()
|
|
2708
|
+
// weiter unten zu warten - sonst könnte er für den neuen Einsatz kurzzeitig (oder,
|
|
2709
|
+
// falls keine gültigen Koordinaten vorliegen bzw. mapImageEnabled aus ist, sogar
|
|
2710
|
+
// dauerhaft) noch den Bildpfad des VORHERIGEN Einsatzes zeigen, obwohl alarmAktiv
|
|
2711
|
+
// bereits für den neuen Einsatz gesetzt wird.
|
|
2712
|
+
// EN: Also clear kartenbildPfad immediately instead of waiting for
|
|
2713
|
+
// generateEinsatzMapImage() further down - otherwise it could briefly (or, if no
|
|
2714
|
+
// valid coordinates are present or mapImageEnabled is off, even permanently) still
|
|
2715
|
+
// show the PREVIOUS incident's image path for the new incident, even though
|
|
2716
|
+
// alarmAktiv is already being set for the new one.
|
|
2717
|
+
try {
|
|
2718
|
+
await this.setStateAsync('einsatz.kartenbildPfad', null, true);
|
|
2719
|
+
} catch (e) {
|
|
2720
|
+
this.safeWarn('einsatz.kartenbildPfad.setState', e);
|
|
2721
|
+
}
|
|
2617
2722
|
} else if (!this.currentEinsatzSnapshot) {
|
|
2618
2723
|
this.currentEinsatzSnapshot = { routen: [], rueckmeldungen: [] };
|
|
2619
2724
|
}
|
|
@@ -2641,17 +2746,24 @@ class WaipWeb extends utils.Adapter {
|
|
|
2641
2746
|
// entnehmen - normalizeData() löscht data.geometry nach der Positions-
|
|
2642
2747
|
// Ermittlung, buildEinsatzMapImage() braucht aber die vollen Polygon-Daten,
|
|
2643
2748
|
// nicht nur den daraus abgeleiteten Mittelpunkt (siehe extractPolygonRings()).
|
|
2644
|
-
//
|
|
2645
|
-
//
|
|
2646
|
-
//
|
|
2749
|
+
// Bewusst AWAITED - die übrigen einsatz.*-Felder (allen voran alarmAktiv gleich
|
|
2750
|
+
// im Anschluss) sollen erst gesetzt werden, wenn kartenbildPfad bereits den
|
|
2751
|
+
// richtigen Wert für DIESEN Einsatz trägt, statt ihn erst irgendwann später
|
|
2752
|
+
// asynchron nachzuliefern. generateEinsatzMapImage() begrenzt die Wartezeit
|
|
2753
|
+
// selbst über this.mapImageTimeoutSeconds und fängt alle Fehler ab, blockiert die
|
|
2754
|
+
// Alarmverarbeitung also nie unbegrenzt. Kein-op, falls mapImageEnabled
|
|
2755
|
+
// deaktiviert ist.
|
|
2647
2756
|
// EN: Take the raw (not normalizeData()-stripped) geometry from incoming -
|
|
2648
2757
|
// normalizeData() deletes data.geometry after determining the position, but
|
|
2649
2758
|
// buildEinsatzMapImage() needs the full polygon data, not just the centroid
|
|
2650
|
-
// derived from it (see extractPolygonRings()).
|
|
2651
|
-
//
|
|
2652
|
-
//
|
|
2653
|
-
//
|
|
2654
|
-
|
|
2759
|
+
// derived from it (see extractPolygonRings()). Deliberately AWAITED - the rest
|
|
2760
|
+
// of the einsatz.* fields (most importantly alarmAktiv right after) should only
|
|
2761
|
+
// be set once kartenbildPfad already holds the correct value for THIS incident,
|
|
2762
|
+
// instead of catching up asynchronously at some later point.
|
|
2763
|
+
// generateEinsatzMapImage() itself caps the wait via
|
|
2764
|
+
// this.mapImageTimeoutSeconds and catches all errors, so it never blocks alarm
|
|
2765
|
+
// processing indefinitely. No-op if mapImageEnabled is disabled.
|
|
2766
|
+
await this.generateEinsatzMapImage(lat, lon, incoming && incoming.geometry);
|
|
2655
2767
|
} else {
|
|
2656
2768
|
try {
|
|
2657
2769
|
await this.setStateAsync('einsatz.latitude', null, true);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.waip-web",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.31",
|
|
4
4
|
"description": "Wachalarm IP-Web (WAIP) Adapter für ioBroker – bindet Alarmierungen, Rückmeldungen, Routen und TTS-Ansagen per Socket.IO an ioBroker an.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "rnc11",
|