iobroker.waip-web 1.0.0 → 1.0.1
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 +20 -20
- package/README.md +42 -36
- package/io-package.json +14 -1
- package/main.js +45 -13
- package/package.json +3 -3
package/README.de.md
CHANGED
|
@@ -415,7 +415,7 @@ siehe [Verbindung](#verbindung)), und öffnet für jeden der bis zu N
|
|
|
415
415
|
passenden Einsätze nacheinander (nie parallel) eine **kurzlebige**
|
|
416
416
|
Socket.IO-Verbindung, um dessen aktuellen Stand abzurufen, bevor sie
|
|
417
417
|
wieder geschlossen wird. Ein vollständiger Refresh dauert dadurch
|
|
418
|
-
realistisch einige Sekunden pro belegtem
|
|
418
|
+
realistisch einige Sekunden pro belegtem `einsatzN`, nicht Millisekunden –
|
|
419
419
|
das Minimum beim **Refresh-Intervall** unten trägt dem Rechnung.
|
|
420
420
|
|
|
421
421
|
| Feld | Beschreibung | Standard |
|
|
@@ -431,24 +431,24 @@ manueller Refresh lässt sich jederzeit über den Button-State
|
|
|
431
431
|
`dashboard.refreshNow` auslösen, z. B. per VIS-Button oder Skript.
|
|
432
432
|
|
|
433
433
|
Kartenbilder unter `dashboard.einsatzN.kartenbildPfad` werden **nicht**
|
|
434
|
-
eigens für Dashboard
|
|
434
|
+
eigens für das Dashboard erzeugt – sie werden aus demselben
|
|
435
435
|
Datei-Fundus abgeleitet, den [Einsatzkarte](#einsatzkarte) für den
|
|
436
|
-
eigenen Monitor dieser Instanz bereits erzeugt hat.
|
|
436
|
+
eigenen Monitor dieser Instanz bereits erzeugt hat. `einsatzN` hat also
|
|
437
437
|
nur dann ein Kartenbild, wenn dieser Adapter für genau diesen Einsatz
|
|
438
438
|
über die eigene `einsatzAktuell.*`-Alarmverarbeitung bereits eines erzeugt
|
|
439
439
|
hat – am vollständigsten, wenn die **Monitor-ID** auf `0` (alle
|
|
440
440
|
Wachalarme) steht und **Kartenbild für jeden Einsatz erzeugen**
|
|
441
441
|
aktiviert ist, da dann jeder Einsatz, der im Dashboard erscheinen kann,
|
|
442
442
|
zuvor auch schon einmal `einsatzAktuell.*` durchlaufen hat. Bei einer
|
|
443
|
-
enger gefassten Monitor-ID fehlt
|
|
443
|
+
enger gefassten Monitor-ID fehlt `einsatzN`-Einträgen für Einsätze außerhalb
|
|
444
444
|
der eigenen Alarm-Historie das Kartenbild – das ist erwartetes
|
|
445
445
|
Verhalten, kein Fehler.
|
|
446
446
|
|
|
447
447
|
Wird das Feature deaktiviert, wird der komplette `dashboard.*`-Objekt-
|
|
448
448
|
baum entfernt (Kanäle und States, nicht nur deren Werte); wird **Number
|
|
449
449
|
of incidents to show** verringert, werden nur die dadurch nicht mehr
|
|
450
|
-
benötigten
|
|
451
|
-
10 auf 5 die
|
|
450
|
+
benötigten `einsatzN`-Einträge am Ende entfernt (z. B. entfernt eine Reduzierung von
|
|
451
|
+
10 auf 5 die Einträge `dashboard.einsatz6` … `einsatz10`). Beide Änderungen
|
|
452
452
|
wirken erst nach dem **nächsten Adapter-Neustart** nach dem Speichern
|
|
453
453
|
(ioBroker startet die Instanz ohnehin bei jeder Konfigurationsänderung
|
|
454
454
|
neu – die Entfernung passiert nicht sofort, während der Admin-Dialog
|
|
@@ -583,14 +583,14 @@ relevant, deshalb wird nur die jeweils letzte vorgehalten.
|
|
|
583
583
|
Nur vorhanden, wenn [Dashboard](#dashboard) aktiviert ist – siehe dort
|
|
584
584
|
für den Objektbaum-Lebenszyklus bei Aktivierung/Deaktivierung/
|
|
585
585
|
Größenänderung. `dashboard.einsatzN` (`N` = 1 … die konfigurierte
|
|
586
|
-
|
|
586
|
+
Anzahl anzuzeigender Einsätze) spiegelt dasselbe Schema wie `einsatzAktuell`/`einsatzAktuell.json`
|
|
587
587
|
oben, für den N-aktuellsten Einsatz, der zum Monitor dieser Instanz
|
|
588
588
|
passt – **nicht** beschränkt auf den einen aktuellen Einsatz. Alle
|
|
589
|
-
Felder eines belegten
|
|
589
|
+
Felder eines belegten `einsatzN` werden bei jedem Refresh immer komplett
|
|
590
590
|
neu geschrieben (nicht nur bei Änderung), damit laufende Rückmeldungen
|
|
591
|
-
für einen Einsatz, der über mehrere Refreshs hinweg
|
|
592
|
-
bleibt, weiter aktualisiert werden; ein
|
|
593
|
-
passende Einsätze als
|
|
591
|
+
für einen Einsatz, der über mehrere Refreshs hinweg an demselben `einsatzN`
|
|
592
|
+
bleibt, weiter aktualisiert werden; ein unbelegtes `einsatzN` (weniger
|
|
593
|
+
passende Einsätze als konfiguriert) trägt an allen Feldern den
|
|
594
594
|
Leerwert, genau wie `einsatzAktuell.*`, wenn kein Einsatz aktiv ist.
|
|
595
595
|
|
|
596
596
|
Bewusst **ohne** `restzeit`/`ablaufzeit` (WAIP-Webs `/dbrd/`-
|
|
@@ -604,7 +604,7 @@ das nur im `/dbrd`-Payload enthalten ist.
|
|
|
604
604
|
| State | Typ | Beschreibung |
|
|
605
605
|
| --- | --- | --- |
|
|
606
606
|
| `refreshNow` | boolean (Button) | `true` schreiben, um einen sofortigen Dashboard-Refresh auszulösen, z. B. per VIS-Button oder Skript. Setzt sich nach Abschluss des Refreshs selbst auf `false` zurück |
|
|
607
|
-
| `einsatzN.alarmAktiv` | boolean | `true`, solange
|
|
607
|
+
| `einsatzN.alarmAktiv` | boolean | `true`, solange `einsatzN` mit einem passenden Einsatz belegt ist |
|
|
608
608
|
| `einsatzN.id` | number | Interne Einsatz-ID |
|
|
609
609
|
| `einsatzN.uuid` | string | Eindeutige Einsatz-UUID |
|
|
610
610
|
| `einsatzN.einsatzart` | string | Gleiche Bedeutung wie [einsatzAktuell.einsatzart](#einsatzaktuell) |
|
|
@@ -616,14 +616,14 @@ das nur im `/dbrd`-Payload enthalten ist.
|
|
|
616
616
|
| `einsatzN.sondersignal` | number | `1` = Sondersignal (Blaulicht & Martinshorn), sonst keins |
|
|
617
617
|
| `einsatzN.latitude` / `einsatzN.longitude` | number | Einsatzort, gleiche Normalisierung wie bei [einsatzAktuell](#einsatzaktuell) |
|
|
618
618
|
| `einsatzN.kartenbildPfad` | string | Pfad zu einem passenden, bereits erzeugten Einsatzkarten-Bild – siehe [Dashboard](#dashboard) oben. Leer, falls keins gefunden wurde |
|
|
619
|
-
| `einsatzN.routenGesamt` | number | Anzahl Routen für den Einsatz
|
|
620
|
-
| `einsatzN.rueckmeldungenGesamt` | number | Rückmeldungen gesamt für den Einsatz
|
|
621
|
-
| `einsatzN.rueckmeldungen.rollen.*` / `.funktionen.*` | number | Dieselben acht Rückmeldungs-Zähler wie bei [einsatzAktuell.rueckmeldungen](#einsatzaktuell), pro
|
|
622
|
-
| `einsatzN.json.current` | string (JSON-Array) | Flache Einsatzdaten
|
|
623
|
-
| `einsatzN.json.routen` | string (JSON-Array) | Routen des Einsatzes
|
|
624
|
-
| `einsatzN.json.rueckmeldungen` | string (JSON-Array) | Rückmeldungen des Einsatzes
|
|
625
|
-
| `einsatzN.json.emAlarmiert` | string (JSON-Array) | Alarmierte Einsatzmittel des Einsatzes
|
|
626
|
-
| `einsatzN.json.wachen` | string (JSON-Array) | Am Einsatz
|
|
619
|
+
| `einsatzN.routenGesamt` | number | Anzahl Routen für den Einsatz von `einsatzN` |
|
|
620
|
+
| `einsatzN.rueckmeldungenGesamt` | number | Rückmeldungen gesamt für den Einsatz von `einsatzN` |
|
|
621
|
+
| `einsatzN.rueckmeldungen.rollen.*` / `.funktionen.*` | number | Dieselben acht Rückmeldungs-Zähler wie bei [einsatzAktuell.rueckmeldungen](#einsatzaktuell), pro `einsatzN` |
|
|
622
|
+
| `einsatzN.json.current` | string (JSON-Array) | Flache Einsatzdaten von `einsatzN`, gleiches Schema wie `einsatzAktuell.json.current` (ohne `registeredMonitor`/`registeredMonitorName`) |
|
|
623
|
+
| `einsatzN.json.routen` | string (JSON-Array) | Routen des Einsatzes von `einsatzN`, gleiches Schema wie `einsatzAktuell.json.routen` |
|
|
624
|
+
| `einsatzN.json.rueckmeldungen` | string (JSON-Array) | Rückmeldungen des Einsatzes von `einsatzN` |
|
|
625
|
+
| `einsatzN.json.emAlarmiert` | string (JSON-Array) | Alarmierte Einsatzmittel des Einsatzes von `einsatzN` |
|
|
626
|
+
| `einsatzN.json.wachen` | string (JSON-Array) | Am Einsatz von `einsatzN` beteiligte Wachen (`em_station_id`/`em_station_name`) – nur über `/dbrd` verfügbar, kein `einsatzAktuell.json.*`-Gegenstück |
|
|
627
627
|
|
|
628
628
|
### debug
|
|
629
629
|
|
package/README.md
CHANGED
|
@@ -406,7 +406,7 @@ itself - see [Connection](#connection)), and for each of up to N
|
|
|
406
406
|
matching incidents opens one **short-lived** Socket.IO connection in
|
|
407
407
|
turn (never in parallel) to collect its current state, then closes it
|
|
408
408
|
again. A full refresh therefore realistically takes a few seconds per
|
|
409
|
-
occupied
|
|
409
|
+
occupied `einsatzN`, not milliseconds - the minimum **Refresh interval**
|
|
410
410
|
below reflects that.
|
|
411
411
|
|
|
412
412
|
| Field | Description | Default |
|
|
@@ -422,21 +422,21 @@ refresh can be triggered any time via the `dashboard.refreshNow`
|
|
|
422
422
|
button state, e.g. from a VIS button or a script.
|
|
423
423
|
|
|
424
424
|
Map images shown as `dashboard.einsatzN.kartenbildPfad` are **not**
|
|
425
|
-
generated separately for dashboard
|
|
425
|
+
generated separately for the dashboard - they are looked up in the
|
|
426
426
|
same file history [Incident map image](#incident-map-image) already
|
|
427
|
-
produces for this instance's own monitor.
|
|
427
|
+
produces for this instance's own monitor. `einsatzN` only has a map image
|
|
428
428
|
when this adapter has *already* generated one for that exact incident
|
|
429
429
|
via its own `einsatzAktuell.*` alarm handling - most complete when **Monitor
|
|
430
430
|
ID** is `0` (all dispatch monitors) and **Generate a map image for
|
|
431
431
|
each incident** is enabled, since then every incident that can appear
|
|
432
432
|
on the dashboard has also passed through `einsatzAktuell.*` at least once.
|
|
433
|
-
With a narrower Monitor ID,
|
|
433
|
+
With a narrower Monitor ID, `einsatzN` entries for incidents outside that
|
|
434
434
|
monitor's own alarm history will have no map image - this is expected,
|
|
435
435
|
not a bug.
|
|
436
436
|
|
|
437
437
|
Disabling the feature removes the entire `dashboard.*` object tree
|
|
438
438
|
(channels and states, not just their values); reducing **Number of
|
|
439
|
-
incidents to show** removes only the now-unused
|
|
439
|
+
incidents to show** removes only the now-unused `einsatzN` entries at the end
|
|
440
440
|
(e.g. going from 10 to 5 removes `dashboard.einsatz6` … `einsatz10`).
|
|
441
441
|
Both changes only take effect on the **next adapter restart** after
|
|
442
442
|
saving (ioBroker restarts the instance on any configuration change
|
|
@@ -570,15 +570,15 @@ only matters in the moment, so only the most recent one is kept.
|
|
|
570
570
|
|
|
571
571
|
Only present when [Dashboard](#dashboard) is enabled - see there for
|
|
572
572
|
the object-tree lifecycle on enable/disable/resize. `dashboard.einsatzN`
|
|
573
|
-
(`N` = 1 … the configured
|
|
574
|
-
`einsatzAktuell`/`einsatzAktuell.json` above, for the Nth most
|
|
575
|
-
incident matching this instance's monitor - **not** limited to
|
|
576
|
-
single current incident. All fields of an occupied
|
|
577
|
-
rewritten on every refresh (not just on change), so ongoing
|
|
578
|
-
an incident that stays
|
|
579
|
-
an unoccupied
|
|
580
|
-
has all fields at their empty value, exactly
|
|
581
|
-
when no incident is active.
|
|
573
|
+
(`N` = 1 … the configured number of incidents to show) mirrors the same
|
|
574
|
+
shape as `einsatzAktuell`/`einsatzAktuell.json` above, for the Nth most
|
|
575
|
+
recent incident matching this instance's monitor - **not** limited to
|
|
576
|
+
the single current incident. All fields of an occupied `einsatzN` are
|
|
577
|
+
always rewritten on every refresh (not just on change), so ongoing
|
|
578
|
+
feedback for an incident that stays at the same `einsatzN` across
|
|
579
|
+
refreshes keeps updating; an unoccupied `einsatzN` (fewer matching
|
|
580
|
+
incidents than configured) has all fields at their empty value, exactly
|
|
581
|
+
like `einsatzAktuell.*` when no incident is active.
|
|
582
582
|
|
|
583
583
|
Deliberately **without** `restzeit`/`ablaufzeit` (WAIP-Web's `/dbrd/`
|
|
584
584
|
incident-detail data has no equivalent field, unlike the live `/waip`
|
|
@@ -591,7 +591,7 @@ only the `/dbrd` payload includes.
|
|
|
591
591
|
| State | Type | Description |
|
|
592
592
|
| --- | --- | --- |
|
|
593
593
|
| `refreshNow` | boolean (button) | Write `true` to trigger an immediate dashboard refresh, e.g. from a VIS button or a script. Resets itself to `false` once the refresh completes |
|
|
594
|
-
| `einsatzN.alarmAktiv` | boolean | `true` while
|
|
594
|
+
| `einsatzN.alarmAktiv` | boolean | `true` while `einsatzN` is occupied by a matching incident |
|
|
595
595
|
| `einsatzN.id` | number | Internal incident ID |
|
|
596
596
|
| `einsatzN.uuid` | string | Unique incident UUID |
|
|
597
597
|
| `einsatzN.einsatzart` | string | Same meaning as [einsatzAktuell.einsatzart](#einsatzaktuell) |
|
|
@@ -603,14 +603,14 @@ only the `/dbrd` payload includes.
|
|
|
603
603
|
| `einsatzN.sondersignal` | number | `1` = special signal (lights & siren), otherwise none |
|
|
604
604
|
| `einsatzN.latitude` / `einsatzN.longitude` | number | Incident location, same normalization as [einsatzAktuell](#einsatzaktuell) |
|
|
605
605
|
| `einsatzN.kartenbildPfad` | string | Path to a matching, previously generated incident map image - see [Dashboard](#dashboard) above. Empty if none was found |
|
|
606
|
-
| `einsatzN.routenGesamt` | number | Number of routes for
|
|
607
|
-
| `einsatzN.rueckmeldungenGesamt` | number | Total feedback count for
|
|
608
|
-
| `einsatzN.rueckmeldungen.rollen.*` / `.funktionen.*` | number | Same eight feedback counters as [einsatzAktuell.rueckmeldungen](#einsatzaktuell), per
|
|
609
|
-
| `einsatzN.json.current` | string (JSON array) |
|
|
610
|
-
| `einsatzN.json.routen` | string (JSON array) | Routes of
|
|
611
|
-
| `einsatzN.json.rueckmeldungen` | string (JSON array) | Feedback entries of
|
|
612
|
-
| `einsatzN.json.emAlarmiert` | string (JSON array) | Alerted resources of
|
|
613
|
-
| `einsatzN.json.wachen` | string (JSON array) | Participating stations of
|
|
606
|
+
| `einsatzN.routenGesamt` | number | Number of routes for `einsatzN`'s incident |
|
|
607
|
+
| `einsatzN.rueckmeldungenGesamt` | number | Total feedback count for `einsatzN`'s incident |
|
|
608
|
+
| `einsatzN.rueckmeldungen.rollen.*` / `.funktionen.*` | number | Same eight feedback counters as [einsatzAktuell.rueckmeldungen](#einsatzaktuell), per `einsatzN` |
|
|
609
|
+
| `einsatzN.json.current` | string (JSON array) | `einsatzN`'s flat incident data, same shape as `einsatzAktuell.json.current` (without `registeredMonitor`/`registeredMonitorName`) |
|
|
610
|
+
| `einsatzN.json.routen` | string (JSON array) | Routes of `einsatzN`'s incident, same shape as `einsatzAktuell.json.routen` |
|
|
611
|
+
| `einsatzN.json.rueckmeldungen` | string (JSON array) | Feedback entries of `einsatzN`'s incident |
|
|
612
|
+
| `einsatzN.json.emAlarmiert` | string (JSON array) | Alerted resources of `einsatzN`'s incident |
|
|
613
|
+
| `einsatzN.json.wachen` | string (JSON array) | Participating stations of `einsatzN`'s incident (`em_station_id`/`em_station_name`) - only available via `/dbrd`, no `einsatzAktuell.json.*` counterpart |
|
|
614
614
|
|
|
615
615
|
### debug
|
|
616
616
|
|
|
@@ -645,6 +645,22 @@ example.
|
|
|
645
645
|
Re-add it afterwards (or use `npm run release -- --addPlaceholder`).
|
|
646
646
|
Collect changes for the upcoming release underneath it.
|
|
647
647
|
-->
|
|
648
|
+
### 1.0.1 (2026-09-19)
|
|
649
|
+
|
|
650
|
+
- `registrationTimeoutSec` and `reconnectDelaySec` are now clamped in
|
|
651
|
+
code to their admin UI range (1-120s), matching how every other
|
|
652
|
+
numeric configuration value (e.g. `historySize`, `mapImageWidth`) was
|
|
653
|
+
already handled - a direct instance config JSON edit/import can no
|
|
654
|
+
longer set them outside that range.
|
|
655
|
+
- The `stateChange` listener (used only for `dashboard.refreshNow`) is
|
|
656
|
+
now registered only while the Dashboard feature is enabled, matching
|
|
657
|
+
its `subscribeStates()` call, instead of unconditionally in the
|
|
658
|
+
constructor.
|
|
659
|
+
- Fixed the "Number of Installations" and "Current version in stable
|
|
660
|
+
repository" badges, which pointed at the shields.io homepage instead
|
|
661
|
+
of the actual `iobroker.live` badge images and therefore rendered as
|
|
662
|
+
broken links.
|
|
663
|
+
|
|
648
664
|
### 1.0.0 (2026-08-30)
|
|
649
665
|
|
|
650
666
|
- **Breaking change:** the `einsatz` channel is renamed to `einsatzAktuell`
|
|
@@ -656,8 +672,8 @@ example.
|
|
|
656
672
|
bindings/scripts referencing the old `einsatz.*`/`einsatz.json.history10`
|
|
657
673
|
paths - they are removed automatically on upgrade, along with their
|
|
658
674
|
values.
|
|
659
|
-
- Dashboard channel/state display names
|
|
660
|
-
|
|
675
|
+
- Dashboard channel/state display names are now consistent: they use
|
|
676
|
+
"Einsatz N" throughout, matching the `einsatzAktuell.*` naming, and
|
|
661
677
|
the redundant "flat JSON array" phrase was removed from every state
|
|
662
678
|
name. Object IDs are unaffected, only the display names shown in
|
|
663
679
|
Admin/VIS.
|
|
@@ -690,7 +706,7 @@ example.
|
|
|
690
706
|
not a permanent connection - see [Dashboard](#dashboard) and
|
|
691
707
|
[dashboard states](#dashboard-states) for the full behavior,
|
|
692
708
|
including the manual refresh button and the object-deletion behavior
|
|
693
|
-
when disabling the feature or reducing the
|
|
709
|
+
when disabling the feature or reducing the number of incidents to show.
|
|
694
710
|
|
|
695
711
|
### 0.7.38 (2026-08-27)
|
|
696
712
|
|
|
@@ -714,16 +730,6 @@ example.
|
|
|
714
730
|
the state-definition consistency. `npm test` now runs it alongside the
|
|
715
731
|
package tests.
|
|
716
732
|
|
|
717
|
-
### 0.7.37 (2026-08-26)
|
|
718
|
-
|
|
719
|
-
- Fixed a bug where a routes update (`io.routes`) or TTS announcement
|
|
720
|
-
(`io.playtts`) arriving after an incident had already ended
|
|
721
|
-
(`io.standby`) could revive `einsatz.json.current`/`.routen`/
|
|
722
|
-
`einsatz.routenGesamt` or `einsatz.tts.last`/`.lastTimestamp` for the
|
|
723
|
-
already-finished incident, while every other `einsatz.*` field
|
|
724
|
-
correctly stayed cleared. Both handlers now ignore such events while
|
|
725
|
-
no incident is active.
|
|
726
|
-
|
|
727
733
|
Older entries have been moved to [CHANGELOG_OLD.md](CHANGELOG_OLD.md).
|
|
728
734
|
|
|
729
735
|
## License
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "waip-web",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.1",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.0.1": {
|
|
7
|
+
"en": "- `registrationTimeoutSec` and `reconnectDelaySec` are now clamped in\n code to their admin UI range (1-120s), matching how every other\n numeric configuration value (e.g. `historySize`, `mapImageWidth`) was\n already handled - a direct instance config JSON edit/import can no\n longer set them outside that range.\n- The `stateChange` listener (used only for `dashboard.refreshNow`) is\n now registered only while the Dashboard feature is enabled, matching\n its `subscribeStates()` call, instead of unconditionally in the\n constructor.\n- Fixed the \"Number of Installations\" and \"Current version in stable\n repository\" badges, which pointed at the shields.io homepage instead\n of the actual `iobroker.live` badge images and therefore rendered as\n broken links.",
|
|
8
|
+
"de": "- `RegistrationTimeoutSec` und `ReconnectDelaySec` sind nun fest\n Code für ihre Admin-UI (1—120 s), passt wie alle\n Der numerische Wert (z. B. `historySize`, `mapImageWidth`) war\n schon erledigt — ein JSON-Import kann nicht\n setzt sie länger aus dem Bereich.\n- Der `StateChange`-Listener (nur für `Dashboard.RefreshNow`) ist\n jetzt nur bei aktiviertem Dashboard registriert, passend\n es ist `subscribeStates () `-Aufruf, statt bedingungslos im\n Konstrukteur.\n- „Anzahl der Installationen“ und „Aktuelle Version“ behoben\n Archiv“ -Badges, die stattdessen auf die Shields.io-Homepage zeigten\n der echten `iobroker.live`-Badge-Bilder und daher gerendert als\n Kaputte Links.",
|
|
9
|
+
"ru": "- «Время ожидания регистрации» и «Задержка повторного подключения» теперь заблокированы\n код для их диапазона пользовательского интерфейса администратора (1-120 секунд), совпадающий с любым другим\n числовое значение конфигурации (например, `historySize`, `MapImageWidth`) было\n уже обработано - конфигурация прямого экземпляра JSON редактировать/импортировать невозможно\n дольше выведите их за пределы этого диапазона.\n- Слушатель `StateChange` (используется только для `Dashboard.RefreshNow`)\n теперь зарегистрирован только при включенной функции Dashboard, совпадение\n его вызов `subscribeStates () `вместо безоговорочного вызова в\n конструктор.\n- Исправлены ошибки «Количество установок» и «Текущая версия в стабильной версии»\n значки «репозитория», которые вместо этого указывали на домашнюю страницу shields.io\n фактических изображений бейджей `iobroker.live`, которые, следовательно, отображаются в виде\n неработающие ссылки.",
|
|
10
|
+
"pt": "- `registrationTimeoutSec` e `reconnectDelaySec` agora estão presos\n código para sua UI admin (1-120s), igual a todos os outros\n valor de configuração numérica (ex: `historySize`, `mapImageWidth`) foi\n já tratado - uma instância direta JSON edit/import não pode\n deixe-os fora dessa faixa.\n- O ouvinte `stateChange` (usado só em `dashboard.refreshNow`) é\n agora registrado apenas com o recurso Painel ativado\n sua chamada `subscribeStates () `, em vez de incondicional no\n construtor.\n- Corrigido o “Número de instalações” e “Versão atual estável\n selos repository”, que apontavam para a página inicial shields.io\n das imagens reais do selo `iobroker.live` e, portanto, como\n links falidos.",
|
|
11
|
+
"nl": "- `RegistrationTimeOutSec` en `ReconnectDelaySec` zijn nu ingeklemd\n code voor hun beheerdersinterfacebereik (1-120s), overeenkomend met elke andere\n De numerieke configuratiewaarde (bijv. `HistorySize`, `MapImageWidth`) was\n al afgehandeld - een directe instantieconfiguratie voor JSON bewerken/importeren kan nee\n plaats ze langer buiten dat bereik.\n- De `StateChange` listener (alleen gebruikt voor `Dashboard.RefreshNow`) is\n nu alleen geregistreerd als de Dashboard-functie is ingeschakeld, wat overeenkomt met\n het is de `SubscribeStates () `aanroep, in plaats van onvoorwaardelijk in de\n constructeur.\n- Het „Aantal installaties” en „Huidige versie” is opgelost in stabiel\n badges van de repository, die in plaats daarvan naar de homepagina van shields.io verwezen\n van de daadwerkelijke afbeeldingen van de `iobroker.live` badge en daarom weergegeven als\n verbroken links.",
|
|
12
|
+
"fr": "- `RegistrationTimeoutSec` et `ReconnectDelaySec` sont désormais bloqués\n code vers leur interface d'administration (1 à 120 s), comme les autres\n valeur de configuration numérique (par exemple « HistorySize », « MapImageWidth ») était\n déjà géré - une instance directe JSON edit/import ne peut pas\n les placer plus longtemps en dehors de ce cadre.\n- L'écouteur StateChange (utilisé uniquement pour Dashboard.RefreshNow) est\n désormais enregistrée uniquement lorsque le tableau de bord est activé\n son appel `subscribeStates () `, au lieu d'être inconditionnel dans\n constructeur.\n- Correction du « nombre d'installations » et de la « version stable »\n des badges « repository », qui pointaient plutôt vers la page d'accueil de Shields.io\n des images réelles du badge « iobroker.live » et donc rendu comme\n liens brisés.",
|
|
13
|
+
"it": "- `RegistrationTimeoutSec` e `ReconnectDelaySec` sono ora bloccati\n codice per la loro interfaccia utente admin (1-120 s)\n valore numerico (ad es. `historySize`, `mapImageWidth`) era\n già gestito - un JSON edit/import diretto non può\n più a lungo fuori da quel range.\n- Il listener StateChange (usato solo per Dashboard.refreshNow) è\n ora registrato solo se la funzione Dashboard è attiva, abbinata\n la sua chiamata `subscribeStates () `, invece che incondizionata\n costruttore.\n- Risolti «Numero di installazioni» e «Versione attuale stabile\n badge «repository», che indicavano invece la homepage di shields.io\n delle vere immagini dei badge `iobroker.live` e quindi rese come\n link rotti.",
|
|
14
|
+
"es": "- `RegistrationTimeoutSec` y `ReconnectDelaySec` ya están restringidos\n código para su rango de UI de administrador (1 a 120 s), que coincide con cada\n el valor de configuración numérico (p. ej., `HistorySize`, `MapImageWidth`) era\n ya gestionado: una instancia directa JSON edit/import no puede\n ya no los puso fuera de ese rango.\n- El oyente `StateChange` (solo se usa para `Dashboard.RefreshNow`) es\n ahora registrado solo con la función Panel de control habilitada, coincidente\n su llamada `SubscribeStates () `, en lugar de incondicionalmente en\n constructor.\n- Se corrigieron «Número de instalaciones» y «Versión actual en estable»\n insignias «repositorio», que apuntaban a la página principal de shields.io\n de las imágenes reales de la placa de «iobroker.live» y, por lo tanto, renderizadas como\n enlaces rotos.",
|
|
15
|
+
"pl": "- `RegistrationTimeOutSec` i `ReconnectDelaySec` są teraz zaciśnięte\n kod do zakresu interfejsu administratora (1-120 s), pasujący do każdego innego\n wartość konfiguracji liczbowej (np. `HistorySize`, `MapImageWidth`) była\n już obsługiwane - bezpośrednia konfiguracja instancji JSON edit/import nie może\n Dłużej ustawić je poza tym zakresem.\n- Słuchacz `StateChange` (używany tylko dla `dashboard.RefreshNow`) jest\n teraz zarejestrowany tylko wtedy, gdy funkcja pulpitu nawigacyjnego jest włączona, dopasowanie\n jego wywołanie `subscribeStates () `zamiast bezwarunkowo w\n konstruktor.\n- Naprawiono „Liczba instalacji” i „Aktualna wersja w stabilnej\n repozytorium” odznaki, które wskazywały zamiast tego na stronę główną shields.io\n rzeczywistych obrazów plakietek „iobroker.live”, a zatem renderowanych jako\n uszkodzone linki.",
|
|
16
|
+
"uk": "- `RegistrationTimeoutSec` та `ReconnectDelaySec` тепер затиснуті\n код до їх діапазону інтерфейсу адміністратора (1-120 с), відповідаючи кожному іншому\n числове значення конфігурації (наприклад, `historySize`, `mapImageWidth`) було\n вже оброблено - прямий конфігураційний екземпляр JSON редагувати/імпортувати не може\n довше виставити їх за межі цього діапазону.\n- Слухач `StateChange` (використовується лише для `Dashboard.RefreshNow`)\n тепер зареєстрований лише тоді, коли функція Dashboard увімкнена, відповідає\n його виклик `subscribeStates () `замість беззастережно в\n конструктор.\n- Виправлено «Кількість установок» та «Поточна версія у стабільній\n репозиторій» значки, які замість цього вказували на домашню сторінку shields.io\n фактичних зображень значків `iobroker.live` і, отже, відтворено як\n несправні посилання.",
|
|
17
|
+
"zh-cn": "-`registrationTimeoutSec` 和 `reconnectDelaySec` 现已被限制\n 代码到他们的管理界面范围(1-120 秒),相互匹配\n 数字配置值(例如 `HistorySize`、`mapImageWidth`)是\n 已经处理了——直接实例配置 JSON 编辑/导入不能\n 将它们设置在该范围之外的时间更长。\n-`StateChange` 监听器(仅用于 `dashboard.refreshNow`)是\n 现在仅在启用仪表板功能时注册,匹配\n 它的 `subscribeStates () `调用,而不是无条件地调用\n 建造者。\n-修复了稳定版中的 “安装次数” 和 “当前版本”\n 存储库” 徽章,改为指向 shields.io 主页\n 实际的 “iobroker.live” 徽章图片,因此呈现为\n 断开的链接。"
|
|
18
|
+
},
|
|
6
19
|
"1.0.0": {
|
|
7
20
|
"en": "- **Breaking change:** the `einsatz` channel is renamed to `einsatzAktuell`\n (to distinguish it from the `dashboard.einsatz1` … `einsatzN` dashboard\n channels), and `einsatzAktuell.json.history10` is renamed to\n `einsatzAktuell.json.history`, now holding a configurable number of\n entries (new \"Number of incidents in history\" setting on the\n [Connection](#connection) tab, 1-100, default 10). Update any VIS\n bindings/scripts referencing the old `einsatz.*`/`einsatz.json.history10`\n paths - they are removed automatically on upgrade, along with their\n values.\n- Dashboard channel/state display names no longer use \"Slot\" - they now\n say \"Einsatz N\" consistently with the `einsatzAktuell.*` naming, and\n the redundant \"flat JSON array\" phrase was removed from every state\n name. Object IDs are unaffected, only the display names shown in\n Admin/VIS.",
|
|
8
21
|
"de": "- **Breaking Change:** Der Kanal „einsatz“ wird in „einsatzAktuell“ umbenannt\n (zur Unterscheidung vom Dashboard „dashboard.einsatz1“ … „einsatzN“.\nKanäle), und `einsatzAktuell.json.history10` wird umbenannt in\n`einsatzAktuell.json.history`, das nun eine konfigurierbare Anzahl von\nEinträge (neue Einstellung „Anzahl der Vorfälle in der Historie“)\nRegisterkarte [Verbindung](#Verbindung), 1-100, Standardwert 10). Aktualisieren Sie beliebige VIS.\n Bindungen/Skripte, die auf den alten `einsatz.*`/`einsatz.json.history10` verweisen\nPfade – diese werden beim Upgrade automatisch zusammen mit ihren\n Werte.\n- Die Anzeigenamen der Dashboard-Kanäle/Status verwenden nicht mehr \"Slot\" - sie werden jetzt\n Sagen Sie „Einsatz N“ konsistent mit der Benennung „einsatzAktuell.*“ und\nDer überflüssige Ausdruck „flaches JSON-Array“ wurde aus jedem Zustand entfernt.\nName. Objekt-IDs bleiben unberührt, nur die angezeigten Anzeigenamen werden geändert.\nAdmin/VIS.",
|
package/main.js
CHANGED
|
@@ -68,6 +68,23 @@ const DEFAULT_SESSION_KEEPALIVE_SEC = 300;
|
|
|
68
68
|
// server/app_cfg.js: 60s!) - so the interval below is derived adaptively from the
|
|
69
69
|
// expiry time the server reports, instead of assuming a fixed value.
|
|
70
70
|
const SESSION_KEEPALIVE_MIN_MS = 55 * 1000;
|
|
71
|
+
// DE: Konfigurierbarer Bereich für registrationTimeoutSec/reconnectDelaySec (siehe
|
|
72
|
+
// onReady()) - identisch zu den Admin-UI-Grenzen (min: 1, max: 120), zusätzlich per
|
|
73
|
+
// clampNumber() im Code selbst durchgesetzt. Ohne diese Klemmung könnte eine direkte
|
|
74
|
+
// Instanzkonfigurations-JSON-Bearbeitung/ein Import einen Wert außerhalb des
|
|
75
|
+
// Admin-UI-Bereichs enthalten (z.B. negativ oder unrealistisch groß), der ungeprüft in
|
|
76
|
+
// setTimeout()/setInterval() landen würde.
|
|
77
|
+
// EN: Configurable range for registrationTimeoutSec/reconnectDelaySec (see onReady()) -
|
|
78
|
+
// identical to the admin UI limits (min: 1, max: 120), additionally enforced in code via
|
|
79
|
+
// clampNumber(). Without this clamp, a direct instance config JSON edit/import could
|
|
80
|
+
// contain a value outside the admin UI range (e.g. negative or unrealistically large)
|
|
81
|
+
// that would end up unchecked in setTimeout()/setInterval().
|
|
82
|
+
const REGISTRATION_TIMEOUT_SEC_MIN = 1;
|
|
83
|
+
const REGISTRATION_TIMEOUT_SEC_MAX = 120;
|
|
84
|
+
const DEFAULT_REGISTRATION_TIMEOUT_SEC = 10;
|
|
85
|
+
const RECONNECT_DELAY_SEC_MIN = 1;
|
|
86
|
+
const RECONNECT_DELAY_SEC_MAX = 120;
|
|
87
|
+
const DEFAULT_RECONNECT_DELAY_SEC = 5;
|
|
71
88
|
// DE: Konfigurierbarer Bereich für die Größe von einsatzAktuell.json.history (siehe
|
|
72
89
|
// onReady()/pushEinsatzToHistory()/trimHistoryIfNeeded()) - historySize ist ein
|
|
73
90
|
// Konfigurationswert (1..100, Default 10 zur Wahrung des bisherigen Verhaltens
|
|
@@ -1650,13 +1667,6 @@ class WaipWeb extends utils.Adapter {
|
|
|
1650
1667
|
this.on('ready', this.onReady.bind(this));
|
|
1651
1668
|
this.on('unload', this.onUnload.bind(this));
|
|
1652
1669
|
this.on('message', this.onMessage.bind(this));
|
|
1653
|
-
// DE: Erstmaliger stateChange-Listener in diesem Adapter (siehe onStateChange()) -
|
|
1654
|
-
// bisher wurde nirgends subscribeStates() genutzt. Nur für den Dashboard-Refresh-
|
|
1655
|
-
// Button (dashboard.refreshNow, Plandokument Abschnitt 3.5) benötigt.
|
|
1656
|
-
// EN: First stateChange listener in this adapter (see onStateChange()) - until now
|
|
1657
|
-
// subscribeStates() was never used anywhere. Only needed for the dashboard refresh
|
|
1658
|
-
// button (dashboard.refreshNow, plan document section 3.5).
|
|
1659
|
-
this.on('stateChange', this.onStateChange.bind(this));
|
|
1660
1670
|
|
|
1661
1671
|
this.socket = null;
|
|
1662
1672
|
this.currentMonitor = '';
|
|
@@ -1724,14 +1734,26 @@ class WaipWeb extends utils.Adapter {
|
|
|
1724
1734
|
}
|
|
1725
1735
|
|
|
1726
1736
|
async onReady() {
|
|
1727
|
-
this.REGISTRATION_TIMEOUT_MS =
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1737
|
+
this.REGISTRATION_TIMEOUT_MS =
|
|
1738
|
+
clampNumber(
|
|
1739
|
+
this.config.registrationTimeoutSec,
|
|
1740
|
+
REGISTRATION_TIMEOUT_SEC_MIN,
|
|
1741
|
+
REGISTRATION_TIMEOUT_SEC_MAX,
|
|
1742
|
+
DEFAULT_REGISTRATION_TIMEOUT_SEC,
|
|
1743
|
+
) * 1000;
|
|
1744
|
+
this.RECONNECT_DELAY_MS =
|
|
1745
|
+
clampNumber(
|
|
1746
|
+
this.config.reconnectDelaySec,
|
|
1747
|
+
RECONNECT_DELAY_SEC_MIN,
|
|
1748
|
+
RECONNECT_DELAY_SEC_MAX,
|
|
1749
|
+
DEFAULT_RECONNECT_DELAY_SEC,
|
|
1750
|
+
) * 1000;
|
|
1751
|
+
// DE: Größe von einsatzAktuell.json.history (siehe pushEinsatzToHistory()) - ebenso
|
|
1752
|
+
// per clampNumber() geklemmt wie die beiden Timeout-Werte oben, da eine direkte
|
|
1731
1753
|
// Instanzkonfigurations-JSON-Bearbeitung/ein Import Werte außerhalb des
|
|
1732
1754
|
// Admin-UI-Bereichs (1..100) enthalten könnte.
|
|
1733
|
-
// EN: Size of einsatzAktuell.json.history (see pushEinsatzToHistory()) -
|
|
1734
|
-
// two timeout values above,
|
|
1755
|
+
// EN: Size of einsatzAktuell.json.history (see pushEinsatzToHistory()) - clamped via
|
|
1756
|
+
// clampNumber() just like the two timeout values above, since a direct instance
|
|
1735
1757
|
// config JSON edit/import could contain values outside the admin UI range (1..100).
|
|
1736
1758
|
this.historySize = clampNumber(
|
|
1737
1759
|
this.config.historySize,
|
|
@@ -1960,8 +1982,18 @@ class WaipWeb extends utils.Adapter {
|
|
|
1960
1982
|
this.startDashboardRefreshInterval();
|
|
1961
1983
|
// DE: Nur abonnieren, wenn das Feature aktiv ist - kein Sinn, den Button bei
|
|
1962
1984
|
// deaktiviertem Dashboard zu abonnieren (siehe Plandokument Abschnitt 3.5).
|
|
1985
|
+
// Der stateChange-Listener selbst wird ebenfalls erst hier registriert (nicht
|
|
1986
|
+
// schon im Constructor) - onStateChange() behandelt ausschließlich
|
|
1987
|
+
// dashboard.refreshNow, ein Listener ohne zugehöriges subscribeStates() liefe
|
|
1988
|
+
// ohnehin nie an, wäre aber unnötige tote Infrastruktur bei deaktiviertem
|
|
1989
|
+
// Dashboard.
|
|
1963
1990
|
// EN: Only subscribe when the feature is active - no point subscribing to the
|
|
1964
1991
|
// button while the dashboard is disabled (see the plan document section 3.5).
|
|
1992
|
+
// The stateChange listener itself is also only registered here (not already in
|
|
1993
|
+
// the constructor) - onStateChange() exclusively handles dashboard.refreshNow,
|
|
1994
|
+
// a listener without a matching subscribeStates() would never fire anyway, but
|
|
1995
|
+
// would be unnecessary dead infrastructure while the dashboard is disabled.
|
|
1996
|
+
this.on('stateChange', this.onStateChange.bind(this));
|
|
1965
1997
|
this.subscribeStates('dashboard.refreshNow');
|
|
1966
1998
|
}
|
|
1967
1999
|
// DE: Nicht awaiten - der Alarm-Empfang soll nicht auf diesen (rein informativen)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.waip-web",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
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",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"README.de.md"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@iobroker/adapter-core": "^3.4.
|
|
39
|
+
"@iobroker/adapter-core": "^3.4.3",
|
|
40
40
|
"jimp": "^1.6.1",
|
|
41
41
|
"socket.io-client": "^4.7.5"
|
|
42
42
|
},
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@alcalzone/release-script-plugin-manual-review": "^5.2.0",
|
|
48
48
|
"@iobroker/adapter-dev": "^1.5.0",
|
|
49
49
|
"@iobroker/eslint-config": "^2.2.0",
|
|
50
|
-
"@iobroker/testing": "^
|
|
50
|
+
"@iobroker/testing": "^6.2.1",
|
|
51
51
|
"@tsconfig/node22": "^22.0.6",
|
|
52
52
|
"@types/node": "^22.0.0"
|
|
53
53
|
},
|