iobroker.waip-web 0.7.8 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.de.md CHANGED
@@ -130,7 +130,8 @@ und Trigger ohne JSON-Parsing auskommen.
130
130
  | `restzeit` | number (s) | Verbleibende Sekunden bis `einsatz.ablaufzeit`, sekündlich aktualisiert |
131
131
  | `registeredMonitor` | string | Zuletzt beim Server registrierte Monitor-ID |
132
132
  | `registeredMonitorName` | string | Anzeigename dieses Monitors ohne ID (z. B. „Leitstelle: Lausitz"); wird einmalig beim Start von derselben `/waip/`-Übersichtsseite wie das Admin-Dropdown aufgelöst, `null` falls nicht auflösbar |
133
- | `registrationAccepted` | mixed | `"pending"` direkt nach Connect, `true` sobald das erste Event empfangen wurde, sonst `false` nach Ablauf des Registrierungs-Timeouts |
133
+ | `registrationAccepted` | boolean | `true` sobald das erste Event empfangen wurde, sonst `false` direkt nach Connect oder nach Ablauf des Registrierungs-Timeouts |
134
+ | `registrationPending` | boolean | `true` direkt nach Connect, solange noch auf eine Antwort vom Server gewartet wird, sonst `false` sobald bestätigt oder Timeout erreicht |
134
135
 
135
136
  ### einsatz
136
137
 
@@ -156,7 +157,7 @@ stehen. Der zuletzt abgeschlossene Einsatz bleibt trotzdem über
156
157
  | `ablaufzeit` | string (date) | Ende der Standby-Anzeigedauer, Basis für `status.restzeit` |
157
158
  | `einsatznummer` | string | Einsatznummer (sofern vom Server vergeben) |
158
159
  | `sondersignal` | number | `1` = Sondersignal, sonst kein Sondersignal |
159
- | `permissions` | mixed | Berechtigungsflag der Registrierung (Vollzugriff auf Detailkarte ja/nein) |
160
+ | `permissions` | string | Berechtigungsflag der Registrierung (Vollzugriff auf Detailkarte ja/nein); als String bzw. JSON, falls der Server einen nicht-primitiven Wert sendet |
160
161
  | `latitude` / `longitude` | number | Position des Einsatzortes (normalisiert aus wgs84-Feldern oder GeoJSON-Mittelpunkt) |
161
162
  | `json` | string (JSON) | Vollständiges Einsatz-Objekt: alle Felder oben plus `emAlarmiert[]`, `emWeitere[]`, `routen[]`, `rueckmeldungen[]` |
162
163
  | `history10` | string (JSON-Array) | Letzte 10 abgeschlossenen Einsätze, gleicher Objekt-Shape wie `json`, geschrieben bei `io.standby` |
package/README.md CHANGED
@@ -138,7 +138,8 @@ bindings and triggers don't need JSON parsing.
138
138
  | `restzeit` | number (s) | Remaining seconds until `einsatz.ablaufzeit`, updated every second |
139
139
  | `registeredMonitor` | string | Monitor ID last registered with the server |
140
140
  | `registeredMonitorName` | string | Display name of that monitor, without the ID (e.g. "Leitstelle: Lausitz"); resolved once at startup from the same `/waip/` overview page as the admin dropdown, `null` if it couldn't be resolved |
141
- | `registrationAccepted` | mixed | `"pending"` right after connecting, `true` once the first event was received, otherwise `false` once the registration timeout elapses |
141
+ | `registrationAccepted` | boolean | `true` once the first event was received, `false` right after connecting or once the registration timeout elapses |
142
+ | `registrationPending` | boolean | `true` right after connecting while a response from the server is still awaited, `false` once accepted or timed out |
142
143
 
143
144
  ### einsatz
144
145
 
@@ -164,7 +165,7 @@ live data. The most recently finished incident remains available via
164
165
  | `ablaufzeit` | string (date) | End of the standby display duration, basis for `status.restzeit` |
165
166
  | `einsatznummer` | string | Incident number (if assigned by the server) |
166
167
  | `sondersignal` | number | `1` = special signal (lights & siren), otherwise none |
167
- | `permissions` | mixed | The registration's permission flag (full access to the detail map yes/no) |
168
+ | `permissions` | string | The registration's permission flag (full access to the detail map yes/no); stringified/JSON if the server sends a non-primitive value |
168
169
  | `latitude` / `longitude` | number | Incident location (normalized from wgs84 fields or GeoJSON centroid) |
169
170
  | `json` | string (JSON) | Complete incident object: all fields above plus `emAlarmiert[]`, `emWeitere[]`, `routen[]`, `rueckmeldungen[]` |
170
171
  | `history10` | string (JSON array) | Last 10 completed incidents, same object shape as `json`, written on `io.standby` |
@@ -206,6 +207,31 @@ inside the JSON value, not their own ioBroker states.
206
207
 
207
208
  ## Changelog
208
209
 
210
+ ### 0.7.11 (2026-08-21)
211
+
212
+ - Fixed **[E3009]** (57 findings): added the missing channel/folder
213
+ objects (`status`, `einsatz`, `einsatz.rueckmeldungAnzahl`, `debug`,
214
+ `tts`) that ioBroker requires for every state path segment - found
215
+ by the `ioBroker.repositories` object structure check.
216
+ - Fixed **[E3005]**/**[E1009]**: replaced the unsupported
217
+ `common.type: "mixed"` on `einsatz.permissions` (now `string`) and
218
+ `status.registrationAccepted` (now split into two booleans:
219
+ `registrationAccepted` and the new `registrationPending`).
220
+
221
+ ### 0.7.10 (2026-08-21)
222
+
223
+ - Fixed **[S9508]**: excluded `CHANGELOG_OLD.md` from the npm package
224
+ (removed from `package.json`'s `files` allowlist) - ioBroker shows
225
+ the README via a GitHub link, not from the installed npm package, so
226
+ the file remains fully readable on GitHub without needing to ship
227
+ inside the tarball.
228
+
229
+ ### 0.7.9 (2026-08-21)
230
+
231
+ - Fixed **[E5025]**/**[E5036]**: installed the missing
232
+ `@alcalzone/release-script-plugin-license` dev dependency required
233
+ for the `"license"` plugin referenced in `.releaseconfig.json`.
234
+
209
235
  ### 0.7.8 (2026-08-21)
210
236
 
211
237
  - Fixed **[E5018]**: added the missing `.releaseconfig.json` (`plugins:
@@ -230,25 +256,6 @@ inside the JSON value, not their own ioBroker states.
230
256
  version-bump/tag workflow (see below) is unchanged; the tool is
231
257
  available but not actively used for releasing yet.
232
258
 
233
- ### 0.7.5 (2026-08-21)
234
-
235
- *(Also never tagged/published to npm - superseded directly by 0.7.6.)*
236
-
237
- - Fixed **[E2004]**: removed the orphaned `0.7.3` entry from
238
- `common.news` in `io-package.json` - that version (see below) was
239
- never actually tagged/published to npm, `0.7.2` was followed directly
240
- by `0.7.4`. Confirmed via a bot recheck that every other finding from
241
- the last two rounds is now fixed.
242
-
243
- ### 0.7.4 (2026-08-21)
244
-
245
- - Bumped the `ioBroker/testing-action-check` GitHub Action used by the
246
- `check-and-lint` CI job from `@v1` to `@v2` (via a
247
- [Dependabot](https://github.com/rnc11/ioBroker.waip-web/pull/10) PR -
248
- the first one filed by the `.github/dependabot.yml` added in 0.7.3).
249
- Purely additive on the action's side (adds an optional `test-command:
250
- 'false'` flag), no behavior change for us.
251
-
252
259
  Older entries have moved to [CHANGELOG_OLD.md](CHANGELOG_OLD.md).
253
260
 
254
261
  ## License
package/io-package.json CHANGED
@@ -1,8 +1,47 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "waip-web",
4
- "version": "0.7.8",
4
+ "version": "0.7.11",
5
5
  "news": {
6
+ "0.7.11": {
7
+ "en": "Fixed [E3009] (57 findings): added the missing channel/folder objects (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts) that ioBroker requires for every state path segment. Fixed [E3005]/[E1009]: replaced the unsupported common.type 'mixed' on einsatz.permissions (now string) and status.registrationAccepted (now split into two booleans: registrationAccepted and the new registrationPending) - all found by the ioBroker.repositories object structure check.",
8
+ "de": "[E3009] behoben (57 Fundstellen): fehlende Channel-/Folder-Objekte (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts) ergänzt, die ioBroker für jedes Pfadsegment eines States benötigt. [E3005]/[E1009] behoben: den nicht unterstützten common.type 'mixed' bei einsatz.permissions (jetzt string) und status.registrationAccepted (jetzt aufgeteilt in zwei Booleans: registrationAccepted und den neuen registrationPending) ersetzt - alles gefunden beim Objektstruktur-Check von ioBroker.repositories.",
9
+ "ru": "Исправлено [E3009] (57 результатов): добавлены отсутствующие объекты канала/папки (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts), которые ioBroker требует для каждого сегмента пути к состоянию. Исправлено [E3005]/[E1009]: заменен неподдерживаемый common.type «mixed» на einsatz.permissions (теперь строка) и status.registrationAccepted (теперь разделен на два логических значения: RegistrationAccepted и новое RegistrationPending) – все они найдены при проверке структуры объекта ioBroker.repositories.",
10
+ "pt": "Corrigido [E3009] (57 descobertas): foram adicionados os objetos de canal/pasta ausentes (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts) que o ioBroker requer para cada segmento de caminho de estado. Corrigido [E3005]/[E1009]: substituiu o common.type 'mixed' não suportado em einsatz.permissions (agora string) e status.registrationAccepted (agora dividido em dois booleanos: RegistrationAccepted e o novo RegistrationPending) - todos encontrados pela verificação da estrutura do objeto ioBroker.repositories.",
11
+ "nl": "Opgelost [E3009] (57 bevindingen): de ontbrekende kanaal-/mapobjecten toegevoegd (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts) die ioBroker nodig heeft voor elk statuspadsegment. [E3005]/[E1009] opgelost: het niet-ondersteunde common.type 'gemengd' vervangen op einsatz.permissions (nu string) en status.registrationAccepted (nu opgesplitst in twee booleans: RegistrationAccepted en de nieuwe RegistrationPending) - allemaal gevonden door de controle van de objectstructuur van ioBroker.repositories.",
12
+ "fr": "Corrigé [E3009] (57 résultats) : ajout des objets canal/dossier manquants (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts) dont ioBroker a besoin pour chaque segment de chemin d'état. Corrigé [E3005]/[E1009] : remplacement du common.type 'mixed' non pris en charge par einsatz.permissions (maintenant chaîne) et status.registrationAccepted (maintenant divisé en deux booléens : RegistrationAccepted et le nouveau RegistrationPending) - tous trouvés par la vérification de la structure de l'objet ioBroker.repositories.",
13
+ "it": "Risolto [E3009] (57 risultati): aggiunti gli oggetti canale/cartella mancanti (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts) che ioBroker richiede per ogni segmento del percorso di stato. Risolto il problema [E3005]/[E1009]: sostituito il common.type 'mixed' non supportato su einsatz.permissions (ora stringa) e status.registrationAccepted (ora diviso in due booleani: RegistrationAccepted e il nuovo RegistrationPending) - tutti trovati dal controllo della struttura dell'oggetto ioBroker.repositories.",
14
+ "es": "Corregido [E3009] (57 hallazgos): se agregaron los objetos de canal/carpeta faltantes (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts) que ioBroker requiere para cada segmento de ruta de estado. Se corrigió [E3005]/[E1009]: reemplazó el common.type 'mixed' no admitido en einsatz.permissions (ahora cadena) y status.registrationAccepted (ahora dividido en dos booleanos: RegistrationAccepted y el nuevo RegistrationPending): todos encontrados mediante la verificación de la estructura del objeto ioBroker.repositories.",
15
+ "pl": "Naprawiono [E3009] (57 wyników): dodano brakujące obiekty kanału/folderu (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts), których ioBroker wymaga dla każdego segmentu ścieżki stanu. Naprawiono [E3005]/[E1009]: zastąpiono nieobsługiwany typ common.type „mixed” w einsatz.permissions (teraz ciąg znaków) i status.registrationAccepted (teraz podzielony na dwie wartości logiczne: RegistrationAccepted i nowa rejestracjaPending) – wszystkie znalezione podczas sprawdzania struktury obiektu ioBroker.repositories.",
16
+ "uk": "Виправлено [E3009] (57 знахідок): додано відсутні об’єкти каналу/папки (status, einsatz, einsatz.rueckmeldungAnzahl, debug, tts), які потрібні ioBroker для кожного сегмента шляху стану. Виправлено [E3005]/[E1009]: замінено непідтримуваний common.type «mixed» на einsatz.permissions (тепер рядок) і status.registrationAccepted (тепер розділений на два логічних значення: registrationAccepted і нове registrationPending) — усе це виявлено під час перевірки структури об’єкта ioBroker.repositories.",
17
+ "zh-cn": "修复了 [E3009](57 个结果):添加了 ioBroker 为每个状态路径段所需的缺失通道/文件夹对象(状态、einsatz、einsatz.rueckmeldungAnzahl、调试、tts)。修复了 [E3005]/[E1009]:替换了 einsatz.permissions(现在为字符串)和 status.registrationAccepted(现在分为两个布尔值:registrationAccepted 和新的 RegistrationPending)上不支持的 common.type 'mixed' - 所有这些都由 ioBroker.repositories 对象结构检查找到。"
18
+ },
19
+ "0.7.10": {
20
+ "en": "Fixed [S9508]: excluded CHANGELOG_OLD.md from the npm package (removed from package.json's files allowlist) - ioBroker shows the README via a GitHub link, not from the installed npm package, so the file remains fully readable on GitHub without needing to ship inside the tarball.",
21
+ "de": "[S9508] behoben: CHANGELOG_OLD.md aus dem npm-Paket ausgeschlossen (aus der files-Liste in package.json entfernt) - ioBroker zeigt das README über einen GitHub-Link an, nicht aus dem installierten npm-Paket, die Datei bleibt also auf GitHub weiterhin vollständig lesbar, ohne im Tarball enthalten sein zu müssen.",
22
+ "ru": "Исправлено [S9508]: CHANGELOG_OLD.md исключён из npm-пакета (удалён из списка files в package.json) - ioBroker показывает README по ссылке на GitHub, а не из установленного npm-пакета, поэтому файл остаётся полностью читаемым на GitHub без необходимости включать его в архив.",
23
+ "pt": "Corrigido [S9508]: CHANGELOG_OLD.md excluído do pacote npm (removido da lista files em package.json) - o ioBroker exibe o README via link do GitHub, não a partir do pacote npm instalado, então o arquivo permanece totalmente legível no GitHub sem precisar estar no tarball.",
24
+ "nl": "[S9508] opgelost: CHANGELOG_OLD.md uitgesloten van het npm-pakket (verwijderd uit de files-lijst in package.json) - ioBroker toont het README via een GitHub-link, niet vanuit het geïnstalleerde npm-pakket, dus het bestand blijft volledig leesbaar op GitHub zonder in de tarball te hoeven zitten.",
25
+ "fr": "Correction de [S9508] : exclusion de CHANGELOG_OLD.md du paquet npm (retiré de la liste files dans package.json) - ioBroker affiche le README via un lien GitHub, pas depuis le paquet npm installé, le fichier reste donc entièrement lisible sur GitHub sans devoir être inclus dans l'archive.",
26
+ "it": "Risolto [S9508]: escluso CHANGELOG_OLD.md dal pacchetto npm (rimosso dall'elenco files in package.json) - ioBroker mostra il README tramite un link GitHub, non dal pacchetto npm installato, quindi il file resta pienamente leggibile su GitHub senza dover essere incluso nel tarball.",
27
+ "es": "Se corrigió [S9508]: se excluyó CHANGELOG_OLD.md del paquete npm (eliminado de la lista files en package.json) - ioBroker muestra el README mediante un enlace de GitHub, no desde el paquete npm instalado, por lo que el archivo sigue siendo totalmente legible en GitHub sin necesidad de incluirlo en el tarball.",
28
+ "pl": "Naprawiono [S9508]: wykluczono CHANGELOG_OLD.md z pakietu npm (usunięto z listy files w package.json) - ioBroker wyświetla README przez link do GitHub, a nie z zainstalowanego pakietu npm, więc plik pozostaje w pełni czytelny na GitHub bez konieczności umieszczania go w tarballu.",
29
+ "uk": "Виправлено [S9508]: виключено CHANGELOG_OLD.md з npm-пакета (видалено зі списку files у package.json) - ioBroker показує README через посилання на GitHub, а не з встановленого npm-пакета, тож файл залишається повністю доступним для читання на GitHub без потреби включати його до архіву.",
30
+ "zh-cn": "修复了 [S9508]:已将 CHANGELOG_OLD.md 从 npm 包中排除(从 package.json 的 files 列表中移除)——ioBroker 通过 GitHub 链接显示 README,而不是从已安装的 npm 包中读取,因此该文件在 GitHub 上仍然完全可读,无需包含在发布包中。"
31
+ },
32
+ "0.7.9": {
33
+ "en": "Fixed [E5025]/[E5036]: installed the missing @alcalzone/release-script-plugin-license devDependency required for the 'license' plugin referenced in .releaseconfig.json.",
34
+ "de": "[E5025]/[E5036] behoben: fehlende Dev-Dependency @alcalzone/release-script-plugin-license nachinstalliert, die für das in .releaseconfig.json referenzierte 'license'-Plugin benötigt wird.",
35
+ "ru": "Исправлено [E5025]/[E5036]: установлена отсутствовавшая dev-зависимость @alcalzone/release-script-plugin-license, необходимая для плагина 'license', указанного в .releaseconfig.json.",
36
+ "pt": "Corrigido [E5025]/[E5036]: instalada a dependência de desenvolvimento ausente @alcalzone/release-script-plugin-license, necessária para o plugin 'license' referenciado em .releaseconfig.json.",
37
+ "nl": "[E5025]/[E5036] opgelost: ontbrekende dev-dependency @alcalzone/release-script-plugin-license geïnstalleerd, nodig voor de 'license'-plugin waarnaar in .releaseconfig.json wordt verwezen.",
38
+ "fr": "Correction de [E5025]/[E5036] : installation de la dépendance de développement manquante @alcalzone/release-script-plugin-license, nécessaire pour le plugin « license » référencé dans .releaseconfig.json.",
39
+ "it": "Risolti [E5025]/[E5036]: installata la dev-dependency mancante @alcalzone/release-script-plugin-license, necessaria per il plugin 'license' referenziato in .releaseconfig.json.",
40
+ "es": "Se corrigieron [E5025]/[E5036]: se instaló la dependencia de desarrollo faltante @alcalzone/release-script-plugin-license, necesaria para el plugin 'license' referenciado en .releaseconfig.json.",
41
+ "pl": "Naprawiono [E5025]/[E5036]: zainstalowano brakującą zależność deweloperską @alcalzone/release-script-plugin-license, wymaganą dla wtyczki 'license' wskazanej w .releaseconfig.json.",
42
+ "uk": "Виправлено [E5025]/[E5036]: встановлено відсутню dev-залежність @alcalzone/release-script-plugin-license, потрібну для плагіна 'license', зазначеного в .releaseconfig.json.",
43
+ "zh-cn": "修复了 [E5025]/[E5036]:安装了缺失的开发依赖 @alcalzone/release-script-plugin-license,这是 .releaseconfig.json 中引用的 'license' 插件所必需的。"
44
+ },
6
45
  "0.7.8": {
7
46
  "en": "Fixed [E5018]: added the missing .releaseconfig.json (plugins: iobroker, license) required now that @alcalzone/release-script is a dev dependency. Caught by the ioBroker.repositories 'ADD TO LATEST' submission check.",
8
47
  "de": "[E5018] behoben: fehlende .releaseconfig.json ergänzt (plugins: iobroker, license), die nun erforderlich ist, da @alcalzone/release-script als Dev-Dependency vorhanden ist. Aufgefallen beim ioBroker.repositories-„ADD TO LATEST\"-Check.",
@@ -67,32 +106,6 @@
67
106
  "pl": "Naprawiono wszystkie ustalenia oficjalnego ioBroker Check and Service Bot: podniesiono minimalne wersje (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README podzielono na anglojęzyczny README.md i niemiecki README.de.md (checker wymaga README wyłącznie po angielsku), sekcję License przeniesiono na sam koniec, dodano brakujące atrybuty i18n/rozmiaru w jsonConfig.json, przełączono na prefiks node: dla wbudowanych require, usunięto zbędny .npmignore i dodano .commitinfo do .gitignore. Usunięto też osierocony wpis news 0.7.0 (nigdy faktycznie nie opublikowany w npm).",
68
107
  "uk": "Виправлено всі зауваження офіційного ioBroker Check and Service Bot: підвищено мінімальні версії (engines.node >=20, @iobroker/adapter-core ^3.4.1, js-controller >=6.0.11, admin >=7.6.17), README розділено на англомовний README.md та німецький README.de.md (перевірник вимагає README лише англійською), розділ License переміщено в самий кінець, додано відсутні атрибути i18n/розміру в jsonConfig.json, вбудовані require переведено на префікс node:, видалено зайвий .npmignore та додано .commitinfo до .gitignore. Також видалено осиротілий запис новин 0.7.0 (ніколи не публікувався на npm).",
69
108
  "zh-cn": "修复了官方 ioBroker Check and Service Bot 报告的所有问题:提升了最低版本要求(engines.node >=20、@iobroker/adapter-core ^3.4.1、js-controller >=6.0.11、admin >=7.6.17);将 README 拆分为纯英文的 README.md 和德文的 README.de.md(检查器要求 README 仅使用英文);将 License 部分移动到文件末尾;为 jsonConfig.json 添加了缺失的 i18n/尺寸属性;将内置模块的 require 改为使用 node: 前缀;移除了多余的 .npmignore;并在 .gitignore 中添加了 .commitinfo。同时移除了从未真正发布到 npm 的孤立新闻条目 0.7.0。"
70
- },
71
- "0.7.1": {
72
- "en": "Added a License badge to the README.",
73
- "de": "Lizenz-Badge im README ergänzt.",
74
- "ru": "В README добавлен значок лицензии.",
75
- "pt": "Adicionado um selo de licença ao README.",
76
- "nl": "Licentiebadge toegevoegd aan de README.",
77
- "fr": "Ajout d'un badge de licence au README.",
78
- "it": "Aggiunto un badge di licenza al README.",
79
- "es": "Se añadió una insignia de licencia al README.",
80
- "pl": "Dodano odznakę licencji do README.",
81
- "uk": "До README додано значок ліцензії.",
82
- "zh-cn": "已在 README 中添加许可证徽章。"
83
- },
84
- "0.6.11-beta.0": {
85
- "en": "README: logo now shown enlarged (115x115, crisp pixel-scaled since the source icon is only 32x32) via a new admin/waip-web-logo.png; the actual ioBroker adapter icon (admin/waip-web.png) is unchanged. Simplified the README title back to \"ioBroker.waip-web\".",
86
- "de": "README: Logo wird jetzt vergrößert angezeigt (115x115, scharf pixel-skaliert, da das Quell-Icon nur 32x32 ist) über eine neue admin/waip-web-logo.png; das eigentliche ioBroker-Adapter-Icon (admin/waip-web.png) bleibt unverändert. README-Titel wieder auf „ioBroker.waip-web\" vereinfacht.",
87
- "ru": "README: логотип теперь отображается увеличенным (115x115, чёткое пиксельное масштабирование, так как исходная иконка всего 32x32) через новый файл admin/waip-web-logo.png; сама иконка адаптера ioBroker (admin/waip-web.png) не изменилась. Заголовок README снова упрощён до «ioBroker.waip-web».",
88
- "pt": "README: o logotipo agora é exibido ampliado (115x115, escalonamento em pixels nítido, já que o ícone de origem tem apenas 32x32) através de um novo admin/waip-web-logo.png; o ícone real do adaptador ioBroker (admin/waip-web.png) permanece inalterado. Título do README simplificado novamente para \"ioBroker.waip-web\".",
89
- "nl": "README: logo wordt nu vergroot weergegeven (115x115, scherpe pixel-schaling omdat het bronicoon slechts 32x32 is) via een nieuwe admin/waip-web-logo.png; het eigenlijke ioBroker-adapterpictogram (admin/waip-web.png) blijft ongewijzigd. README-titel weer vereenvoudigd naar \"ioBroker.waip-web\".",
90
- "fr": "README : le logo s'affiche désormais agrandi (115x115, mise à l'échelle en pixels nets car l'icône source ne fait que 32x32) via un nouveau fichier admin/waip-web-logo.png ; l'icône réelle de l'adaptateur ioBroker (admin/waip-web.png) reste inchangée. Titre du README de nouveau simplifié en « ioBroker.waip-web ».",
91
- "it": "README: il logo ora viene mostrato ingrandito (115x115, scalatura nitida a pixel poiché l'icona sorgente è solo 32x32) tramite un nuovo admin/waip-web-logo.png; l'icona reale dell'adapter ioBroker (admin/waip-web.png) resta invariata. Titolo del README nuovamente semplificato in \"ioBroker.waip-web\".",
92
- "es": "README: el logotipo ahora se muestra ampliado (115x115, escalado nítido por píxeles ya que el icono de origen es de solo 32x32) mediante un nuevo admin/waip-web-logo.png; el icono real del adaptador de ioBroker (admin/waip-web.png) permanece sin cambios. Título del README simplificado de nuevo a \"ioBroker.waip-web\".",
93
- "pl": "README: logo jest teraz wyświetlane powiększone (115x115, ostre skalowanie pikselowe, ponieważ ikona źródłowa ma tylko 32x32) za pomocą nowego pliku admin/waip-web-logo.png; rzeczywista ikona adaptera ioBroker (admin/waip-web.png) pozostaje bez zmian. Tytuł README ponownie uproszczono do \"ioBroker.waip-web\".",
94
- "uk": "README: логотип тепер відображається збільшеним (115x115, чітке пікселне масштабування, оскільки вихідна іконка лише 32x32) через новий файл admin/waip-web-logo.png; фактична іконка адаптера ioBroker (admin/waip-web.png) залишається незмінною. Заголовок README знову спрощено до «ioBroker.waip-web».",
95
- "zh-cn": "README:徽标现在以放大显示(115x115,由于源图标仅为 32x32,采用清晰的像素缩放)通过新的 admin/waip-web-logo.png 实现;实际的 ioBroker 适配器图标(admin/waip-web.png)保持不变。README 标题重新简化为 \"ioBroker.waip-web\"。"
96
109
  }
97
110
  },
98
111
  "titleLang": {
package/main.js CHANGED
@@ -95,6 +95,17 @@ const OBSOLETE_OBJECT_IDS = [
95
95
  'routen.count',
96
96
  ];
97
97
 
98
+ // Übergeordnete Channel/Folder-Objekte, die für jeden State-Zweig existieren müssen.
99
+ // ioBroker verlangt ein eigenes Objekt für jedes Segment eines State-Pfads - reine
100
+ // State-Blätter (siehe STATE_DEFS) reichen dafür nicht aus.
101
+ const CHANNEL_DEFS = [
102
+ { id: 'status', type: 'channel', name: 'Verbindungs- und Registrierungsstatus' },
103
+ { id: 'einsatz', type: 'channel', name: 'Aktueller Einsatz' },
104
+ { id: 'einsatz.rueckmeldungAnzahl', type: 'folder', name: 'Rückmeldungen nach Funktion' },
105
+ { id: 'debug', type: 'channel', name: 'Diagnose- und Debug-Informationen' },
106
+ { id: 'tts', type: 'channel', name: 'TTS-Ansagen' },
107
+ ];
108
+
98
109
  // Definition aller States, die beim Start sichergestellt werden.
99
110
  const STATE_DEFS = [
100
111
  {
@@ -122,9 +133,17 @@ const STATE_DEFS = [
122
133
  },
123
134
  {
124
135
  id: 'status.registrationAccepted',
125
- type: 'mixed',
136
+ type: 'boolean',
137
+ role: 'indicator',
138
+ name: 'Registrierung bestätigt',
139
+ def: false,
140
+ },
141
+ {
142
+ id: 'status.registrationPending',
143
+ type: 'boolean',
126
144
  role: 'indicator',
127
- name: 'Registrierung bestätigt (true/false/pending)',
145
+ name: 'Registrierung angefragt, Antwort vom Server steht noch aus',
146
+ def: false,
128
147
  },
129
148
  { id: 'debug.lastEvent', type: 'string', role: 'json', name: 'Letztes empfangenes Socket-Event' },
130
149
  { id: 'debug.normalizedPosition', type: 'string', role: 'json', name: 'Letzte normalisierte Position' },
@@ -162,7 +181,7 @@ const STATE_DEFS = [
162
181
  { id: 'einsatz.ablaufzeit', type: 'string', role: 'date', name: 'Ablaufzeit' },
163
182
  { id: 'einsatz.einsatznummer', type: 'string', role: 'text', name: 'Einsatznummer' },
164
183
  { id: 'einsatz.sondersignal', type: 'number', role: 'value', name: 'Sondersignal', def: 0 },
165
- { id: 'einsatz.permissions', type: 'mixed', role: 'json', name: 'Berechtigungs-Flag der Registrierung' },
184
+ { id: 'einsatz.permissions', type: 'string', role: 'json', name: 'Berechtigungs-Flag der Registrierung' },
166
185
  { id: 'einsatz.latitude', type: 'number', role: 'value.gps.latitude', name: 'Breitengrad' },
167
186
  { id: 'einsatz.longitude', type: 'number', role: 'value.gps.longitude', name: 'Längengrad' },
168
187
  // verschachteltes Gesamtobjekt + Historie
@@ -572,6 +591,13 @@ class WaipWeb extends utils.Adapter {
572
591
  }
573
592
 
574
593
  async initObjects() {
594
+ for (const def of CHANNEL_DEFS) {
595
+ await this.setObjectNotExistsAsync(def.id, {
596
+ type: def.type,
597
+ common: { name: def.name },
598
+ native: {},
599
+ });
600
+ }
575
601
  for (const def of STATE_DEFS) {
576
602
  await this.setObjectNotExistsAsync(def.id, {
577
603
  type: 'state',
@@ -1028,6 +1054,7 @@ class WaipWeb extends utils.Adapter {
1028
1054
  this.registrationTimer = null;
1029
1055
  }
1030
1056
  this.registrationPending = false;
1057
+ this.setState('status.registrationPending', false, true);
1031
1058
  }
1032
1059
 
1033
1060
  try {
@@ -1448,6 +1475,7 @@ class WaipWeb extends utils.Adapter {
1448
1475
  this.socket = null;
1449
1476
  this.connecting = false;
1450
1477
  this.registrationPending = false;
1478
+ this.setState('status.registrationPending', false, true);
1451
1479
  if (this.registrationTimer) {
1452
1480
  this.clearTimeout(this.registrationTimer);
1453
1481
  this.registrationTimer = null;
@@ -1512,13 +1540,15 @@ class WaipWeb extends utils.Adapter {
1512
1540
  // Gecachter Anzeigename (siehe refreshMonitorName) - keine erneute HTTP-Abfrage
1513
1541
  // bei jedem (Re-)Connect, ist ggf. beim allerersten Connect noch null.
1514
1542
  this.setState('status.registeredMonitorName', this.monitorName, true);
1515
- this.setState('status.registrationAccepted', 'pending', true);
1543
+ this.setState('status.registrationAccepted', false, true);
1544
+ this.setState('status.registrationPending', true, true);
1516
1545
  if (this.registrationTimer) {
1517
1546
  this.clearTimeout(this.registrationTimer);
1518
1547
  this.registrationTimer = null;
1519
1548
  }
1520
1549
  this.registrationTimer = this.setTimeout(async () => {
1521
1550
  this.registrationPending = false;
1551
+ this.setState('status.registrationPending', false, true);
1522
1552
  const accState = await this.getStateAsync('status.registrationAccepted');
1523
1553
  const acc = accState ? accState.val : null;
1524
1554
  if (acc !== true) {
@@ -1545,6 +1575,7 @@ class WaipWeb extends utils.Adapter {
1545
1575
  this.logDisconnect(`Socket disconnected: ${reason}`);
1546
1576
  this.registrationPending = false;
1547
1577
  this.setState('status.registrationAccepted', false, true);
1578
+ this.setState('status.registrationPending', false, true);
1548
1579
  if (this.registrationTimer) {
1549
1580
  this.clearTimeout(this.registrationTimer);
1550
1581
  this.registrationTimer = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.waip-web",
3
- "version": "0.7.8",
3
+ "version": "0.7.11",
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",
@@ -33,8 +33,7 @@
33
33
  "io-package.json",
34
34
  "main.js",
35
35
  "LICENSE",
36
- "README.de.md",
37
- "CHANGELOG_OLD.md"
36
+ "README.de.md"
38
37
  ],
39
38
  "dependencies": {
40
39
  "@iobroker/adapter-core": "^3.4.1",
@@ -43,6 +42,7 @@
43
42
  "devDependencies": {
44
43
  "@alcalzone/release-script": "^5.2.1",
45
44
  "@alcalzone/release-script-plugin-iobroker": "^5.2.0",
45
+ "@alcalzone/release-script-plugin-license": "^5.2.2",
46
46
  "@iobroker/adapter-dev": "^1.5.0",
47
47
  "@iobroker/eslint-config": "^2.2.0",
48
48
  "@iobroker/testing": "^5.2.2"
package/CHANGELOG_OLD.md DELETED
@@ -1,401 +0,0 @@
1
- # Older changes
2
-
3
- ### 0.7.3 (2026-08-21)
4
-
5
- *(Never tagged/published to npm - superseded directly by 0.7.4; kept
6
- here for a complete history of what was worked on.)*
7
-
8
- - Addressed further findings from the official ioBroker Check and
9
- Service Bot (which re-scans the repository after every push):
10
- - Removed the deprecated `common.materialize` field from
11
- `io-package.json` (superseded by `common.adminUI.config`)
12
- - Raised `engines.node` to `>=22` and dropped Node.js 20 (reached
13
- End of Life on 2026-04-30) from the CI test matrix
14
- - Raised the `admin` dependency to `>=7.8.23`
15
- - Moved the `check-and-lint` CI job to Node 24.x
16
- - Added `.github/dependabot.yml` for automated dependency updates
17
- (weekly `npm`/`github-actions` checks)
18
-
19
- ### 0.7.2 (2026-08-21)
20
-
21
- - README is now English-only (per the official ioBroker adapter checker,
22
- which flags mixed-language READMEs); the German version moved to a
23
- separate [README.de.md](README.de.md), linked near the top.
24
- - Moved the License section to the very end of the file (was before the
25
- Changelog) - the checker requires License to be the last section.
26
- - `package.json`: raised `engines.node` to `>=20` and `@iobroker/adapter-core`
27
- to `^3.4.1`.
28
- - `io-package.json`: raised the `js-controller` dependency to `>=6.0.11`
29
- and the `admin` dependency to `>=7.6.17`; removed the `0.7.0` news
30
- entry (never published to npm, only `0.7.1` and later actually are).
31
- - `admin/jsonConfig.json`: added the root `"i18n": true` attribute (now
32
- required since the fields resolve translations from `admin/i18n/*.json`)
33
- and explicit `xs`/`xl` grid sizes on all fields.
34
- - `main.js`: `require('http')`/`require('https')`/`require('url')` now
35
- use the `node:` prefix for Node's built-in modules.
36
- - `.gitignore`: added `.commitinfo`.
37
- - Removed `.npmignore` - redundant with the `files` allowlist already
38
- used in `package.json`.
39
- - CI: `adapter-tests` now explicitly declares `needs: check-and-lint`;
40
- raised the Node.js version used by the `check-and-lint` and `deploy`
41
- jobs.
42
-
43
- ### 0.7.1 (2026-08-21)
44
-
45
- - Added a License badge to the README.
46
-
47
- ### 0.7.0 (2026-08-21)
48
-
49
- - Prepared the admin UI for community translation via
50
- [ioBroker's Weblate](https://weblate.iobroker.net/engage/adapters/):
51
- added `@iobroker/adapter-dev` as a dev dependency (`npm run
52
- translate`), converted `admin/jsonConfig.json`'s `label`/`help` fields
53
- from inline `en`/`de` objects to plain English keys, and added
54
- `admin/i18n/{en,de,ru,pt,nl,fr,it,es,pl,uk,zh-cn}.json` (German
55
- curated manually, the rest auto-translated via the official
56
- `translate-adapter` tool — the same tool that already maintains the
57
- `io-package.json` translations). Added a "Translation status" badge to
58
- the README; like the "installed"/"stable" badges, it only shows real
59
- data once the adapter is actually registered as a component on
60
- weblate.iobroker.net (not done yet).
61
-
62
- ### 0.6.11 (2026-08-21)
63
-
64
- - README: logo now shown enlarged (115×115) via a new
65
- `admin/waip-web-logo.png`, nearest-neighbor-scaled from the 32×32
66
- source icon for a crisp (if visibly pixelated) result instead of a
67
- blurry interpolated one — no higher-resolution source exists anywhere
68
- in the WAIP-Web ecosystem (checked the Lausitz instance and the
69
- upstream project, both use the same 32×32 favicon). The actual
70
- ioBroker adapter icon (`admin/waip-web.png`, referenced from
71
- `io-package.json`) is unchanged.
72
- - Simplified the README title back to "ioBroker.waip-web".
73
-
74
- ### 0.6.10 (2026-08-21)
75
-
76
- - Added the adapter logo and npm/installation badges (NPM version,
77
- downloads, installed, stable) to the README, matching standard
78
- ioBroker adapter conventions. The "installed"/"stable" badges won't
79
- show meaningful data until the adapter is listed in the official
80
- [ioBroker.repositories](https://github.com/ioBroker/ioBroker.repositories)
81
- ("latest" repository PR pending), but will populate automatically once
82
- it is.
83
-
84
- ### 0.6.9 (2026-08-21)
85
-
86
- - Fixed adapter-checker finding **[E254]**: removed `common.news` entries
87
- for versions that were never actually published to npm (`0.6.1`–`0.6.5`,
88
- `0.6.7` were only version bumps in git/GitHub, without a matching
89
- tagged npm release). `common.news` now only lists versions that really
90
- exist on the npm registry (`0.6.6`, `0.6.8`); the full history remains
91
- in this changelog regardless of what was actually published.
92
-
93
- ### 0.6.8 (2026-08-21)
94
-
95
- - Renamed the README title to "ioBroker-Adapter (ioBroker.waip-web)".
96
- - This release doubles as the first end-to-end test of the automatic
97
- npm publish via Trusted Publishing introduced in 0.6.7.
98
-
99
- ### 0.6.7 (2026-08-21)
100
-
101
- - Enabled automatic npm publishing: the `deploy` job in
102
- `.github/workflows/test-and-release.yml` is no longer commented out
103
- and now runs on every version tag (`vX.Y.Z`), publishing to npm via
104
- [Trusted Publishing](https://docs.npmjs.com/trusted-publishers) (OIDC,
105
- no `NPM_TOKEN` secret needed).
106
-
107
- ### 0.6.6 (2026-08-21)
108
-
109
- - Added `.gitattributes` `eol=lf` so all contributors get consistent LF
110
- line endings regardless of their local git `autocrlf` setting
111
- (previously caused hundreds of spurious local lint errors on Windows
112
- without affecting CI, since CI checkouts weren't affected).
113
- - Added `package-lock.json` and switched CI to the default `npm ci` with
114
- caching instead of `npm install` without caching, now that a lockfile
115
- exists.
116
-
117
- ### 0.6.5 (2026-08-21)
118
-
119
- - Fixed all issues reported by the official [ioBroker adapter checker](https://adapter-check.iobroker.in/):
120
- - Bumped the required `js-controller` dependency to `>=5.0.19` and `@iobroker/adapter-core` to `^3.2.2`
121
- - Replaced the deprecated `common.license`/`common.title`/`common.main` fields with `common.licenseInformation`/`common.titleLang`; `common.main` is redundant with `package.json`'s `main` field
122
- - Added the required `common.tier` (`2` - external/cloud data source)
123
- - Added translations of `titleLang`, `desc` and the kept `common.news` entries into all 10 additional ioBroker admin languages (ru, pt, nl, fr, it, es, pl, uk, zh-cn)
124
- - Trimmed `common.news` to the 7 most recent entries, as recommended (the repository builder truncates there anyway); the full history stays in this changelog
125
-
126
- ### 0.6.4 (2026-08-21)
127
-
128
- - New state `status.registeredMonitorName` shows the registered monitor
129
- as text without the ID (e.g. "Leitstelle: Lausitz"), resolved once at
130
- startup from the same `/waip/` overview page as the admin dropdown.
131
- `status.registeredMonitor` is unchanged and keeps showing the ID.
132
-
133
- ### 0.6.3 (2026-08-21)
134
-
135
- - Admin UI: the Monitor ID field is now always full-width, placed on its
136
- own row below the WAIP server URL, so the (sometimes long) dropdown
137
- entries have enough room to display without being cramped.
138
-
139
- ### 0.6.2 (2026-08-21)
140
-
141
- - Monitor dropdown entries are now sorted by numeric monitor ID instead
142
- of following the source page's (per-category) order.
143
-
144
- ### 0.6.1 (2026-08-21)
145
-
146
- - Monitor dropdown entries now start with the actual monitor ID, e.g.
147
- "4 - Leitstelle: Lausitz", so the numeric ID stays visible even after
148
- a monitor has been selected.
149
-
150
- ### 0.6.0 (2026-08-21)
151
-
152
- - **Admin UI:** Monitor ID is now a live dropdown (`selectSendTo`) instead
153
- of a plain text field. The adapter fetches the configured server's
154
- public `/waip/` overview page on demand and offers every monitor it
155
- finds there, grouped by Leitstelle/Kreis/Träger/Wache, with "Alle
156
- Wachalarme" (ID `0`) as an explicit first option. Manual entry remains
157
- available if the server can't be reached or uses a different page
158
- layout, so existing configurations keep working unchanged.
159
- - Removed the static "session keepalive interval" info text from the
160
- admin UI (the behavior itself is unchanged).
161
- - Added help text to the "Registration timeout" and "Reconnect delay"
162
- fields.
163
-
164
- ### 0.5.1 (2026-08-21)
165
-
166
- - **Logging:** Reclassified log levels so `warn` becomes a reliable signal
167
- again. Session-cookie rotation, the known "Fehler beim Erneuern der
168
- Session" server message, and detected server restarts are now logged
169
- as `info` instead of `warn`, since they're part of this instance's
170
- normal, self-healing ~10-minute session cycle. Events discarded for a
171
- different monitor ID are now `info` (frequency remains tracked via
172
- `debug.ignoredCount`). Failures that only affect internal housekeeping
173
- (`debug.monitorAudit`, socket cleanup) are now `debug`. A duplicate
174
- `connect_error` log line (logged once at `warn`, once at `info`) was
175
- removed. Introduced `error` level for cases where an incident,
176
- feedback, route or TTS event genuinely failed to be processed (actual
177
- data loss), so these now stand out instead of being buried among
178
- routine `warn` noise.
179
-
180
- ### 0.5.0 (2026-08-20)
181
-
182
- - **Behavior change:** On `io.standby`, all `einsatz.*` states (including
183
- `einsatz.json` and all counters) are now cleared instead of leaving the
184
- finished incident's data in place – matching the official frontend,
185
- which also clears keyword, location data etc. on standby.
186
- `status.alarmAktiv` is therefore now a reliable switch for whether
187
- `einsatz.*` currently holds real live data. The finished incident
188
- remains fully available via `einsatz.history10` (archived there first).
189
-
190
- ### 0.4.9 (2026-08-20)
191
-
192
- - **CI fix:** Reverted a self-introduced, unnecessary line wrap in
193
- `connect()` (engine-packet preview) – `prettier/prettier` flagged it as
194
- superfluous; the line actually fits on one line within the configured
195
- print width.
196
-
197
- ### 0.4.8 (2026-08-20)
198
-
199
- - **CI fix:** Fixed the final 16 lint errors – this time the complete,
200
- non-truncated error list including the exact desired replacement text
201
- was available, so every location could be corrected precisely 1:1
202
- (line wraps for overly long calls/objects, one `prefer-template`
203
- case). Lint should now be fully green.
204
-
205
- ### 0.4.7 (2026-08-20)
206
-
207
- - **CI fix:** Fixed the remaining lint errors in `main.js` – consistently
208
- applied `curly` (braces even for single-line `if`/`for`),
209
- `no-unused-vars` for empty `catch` blocks (`catch (e) {}` → `catch {}`
210
- where `e` isn't used), and `arrowParens: avoid` (removed parentheses
211
- around single-parameter arrow functions). Purely mechanical code-style
212
- fixes, no behavior change.
213
-
214
- ### 0.4.6 (2026-08-20)
215
-
216
- - **CI fix:** The `lint` step failed with hundreds of formatting errors
217
- (e.g. "Replace 'x' with "x""). Cause: `@iobroker/eslint-config`
218
- requires its own `prettier.config.mjs` in addition to
219
- `eslint.config.mjs`, re-exporting the ioBroker formatting style
220
- (single quotes, 4-space indentation, `trailingComma: 'all'`) – without
221
- it, Prettier fell back to its own defaults (double quotes). File added.
222
-
223
- ### 0.4.5 (2026-08-20)
224
-
225
- - **CI fix:** The first pipeline run failed with "Dependencies lock file
226
- is not found". Cause: `actions/setup-node`'s built-in npm caching
227
- needs a `package-lock.json` for its cache key, independent of the
228
- install command used. Since none is committed to the repo yet,
229
- `package-cache: 'false'` is now set on both jobs.
230
-
231
- ### 0.4.4 (2026-08-20)
232
-
233
- - Set up the CI pipeline (`.github/workflows/test-and-release.yml`),
234
- following the standard pattern of the official
235
- `@iobroker/create-adapter` template: a `check-and-lint` job (ESLint
236
- via `@iobroker/eslint-config`) and an `adapter-tests` matrix (Node
237
- 20/22/24 × Ubuntu/Windows/macOS) via the central
238
- `testing-action-check`/`testing-action-adapter` actions. Added
239
- `test/package.js` and `test/integration.js` (`@iobroker/testing`)
240
- plus `eslint.config.mjs` for this; bumped `@iobroker/testing` to
241
- `^5.2.2`. Since no `package-lock.json` is committed yet, the pipeline
242
- uses `npm install` instead of `npm ci`.
243
- - Raised `engines.node` in `package.json` to `>=18` (matching the tested
244
- Node versions and `@iobroker/testing` 5.x's requirements)
245
- - A `deploy` job (automatic npm publishing) is prepared but commented
246
- out until npm Trusted Publishing is set up
247
-
248
- ### 0.4.3 (2026-08-20)
249
-
250
- - **Bugfix:** `einsatz.id` and `einsatz.sondersignal` were declared as
251
- `string`, but the server actually sends them as numbers
252
- (`sondersignal`, per `client_waip.js`: `switch (data.sondersignal) {
253
- case 1: ... }`) – ioBroker therefore logged a type warning on every
254
- incident. Both states are now declared as `number`. Existing objects
255
- with the old (wrong) type are automatically recreated on the next
256
- adapter start (`migrateObjectTypes()`, generic for future type
257
- corrections).
258
-
259
- ### 0.4.2 (2026-08-20)
260
-
261
- - Removed the "Session keepalive interval – upper bound" config field
262
- again: the official `/js/session_keepalive.js` on the site hard-codes
263
- this upper bound at 5 minutes and doesn't make it configurable. Having
264
- an admin field for it wrongly suggested a fixed interval, even though
265
- the actual renewal has long been fully automatic (see 0.4.1). The
266
- upper bound is now likewise fixed at 5 minutes.
267
-
268
- ### 0.4.1 (2026-08-20)
269
-
270
- - **Robustness:** The session keepalive interval is now adaptive instead
271
- of a fixed assumption. WAIP-Web's source code (`server/app_cfg.js`)
272
- shows that the session cookie's lifetime is configurable per instance
273
- via an environment variable (server default: 60s instead of the
274
- previously assumed 10 minutes) – the adapter now derives the renewal
275
- interval from the expiry time actually reported by the server
276
- (matching `/js/session_keepalive.js` on the site: 80% of the observed
277
- lifetime, min. 55s, at most the configured upper bound). The "Session
278
- keepalive interval" config option is accordingly now an upper bound
279
- rather than a fixed interval.
280
- - Corrected a comment about `io.version`/server restarts: per
281
- `server/auth.js`, WAIP-Web stores sessions persistently (SQLite), not
282
- in-memory – a restart therefore normally doesn't clear them. The
283
- proactive session refresh + reconnect on server restart remains as a
284
- general safeguard, only the previous justification was inaccurate.
285
-
286
- ### 0.4.0 (2026-08-20)
287
-
288
- - **Restructured the object tree:** Feedback and routes are 1:n lists
289
- per incident and now live as nested JSON arrays inside one overall
290
- object `einsatz.json` (including `emAlarmiert[]`, `emWeitere[]`,
291
- `routen[]`, `rueckmeldungen[]`) instead of several loose states.
292
- - `einsatz.history10` replaces `history.last10` – now with the **full**
293
- nested incident object per entry instead of just 6 reduced fields.
294
- - New counters directly under `einsatz.*`: `routenGesamt`,
295
- `rueckmeldungGesamt`, `rueckmeldungAnzahl.{ek,gf,zf,vf,agt,fzf,ma,med}`
296
- (replaces `rueckmeldung.counts.*`).
297
- - `einsatz.latitude`/`einsatz.longitude` replace
298
- `geo.latitude`/`geo.longitude` (position is additionally available in
299
- `einsatz.json.position`).
300
- - New state `tts.history10` (last 10 TTS announcements).
301
- - **Removed:** the entire `vis.*` channel, `json.raw`, `json.einsatz`,
302
- `geo.position`, `rueckmeldung.last.json`, `routen.json`,
303
- `routen.count`, `einsatz.emWeitere` (now part of `einsatz.json`).
304
- - The adapter automatically removes all obsolete objects from the
305
- previous structure on its first start after the update
306
- (`cleanupObsoleteObjects()`).
307
-
308
- ### 0.3.4 (2026-08-20)
309
-
310
- - All state names (`common.name`) consistently switched to German
311
- (previously a mix of English and German) – the adapter only makes
312
- sense for German-speaking users anyway
313
-
314
- ### 0.3.3 (2026-08-20)
315
-
316
- - **Bugfix (potential data loss):** For a specific monitor ID (≠ `0`),
317
- events were silently discarded ("unknownMonitor") after the
318
- registration timeout elapsed, because real WAIP payloads, per
319
- `client_waip.js`, **never** contain a monitor-identifying field – that
320
- assignment happens entirely server-side via Socket.IO rooms. As a
321
- result, alarm delivery could stop completely after 10s even though
322
- the connection was technically up. `status.registrationAccepted`
323
- stayed permanently `false` for the same reason, even for the global
324
- monitor (`0`). Now any received event confirms the registration;
325
- events are only discarded if a payload explicitly names a different
326
- monitor ID.
327
-
328
- ### 0.3.2 (2026-08-20)
329
-
330
- - Also switched the "Registration timeout" and "Reconnect delay" config
331
- fields from milliseconds to seconds (`registrationTimeout` →
332
- `registrationTimeoutSec`, default `10`; `reconnectDelay` →
333
- `reconnectDelaySec`, default `5`). Existing instances without a newly
334
- set value automatically use the defaults.
335
-
336
- ### 0.3.1 (2026-08-20)
337
-
338
- - Switched the "Session keepalive interval" config field from
339
- milliseconds to seconds (`sessionKeepaliveInterval` →
340
- `sessionKeepaliveIntervalSec`, still defaulting to 5 min = `300`).
341
- Existing instances without a newly set value automatically use the
342
- default.
343
-
344
- ### 0.3.0 (2026-08-20)
345
-
346
- - **Bugfix:** `wgs84_x`/`wgs84_y` were swapped (latitude/longitude). Per
347
- the official web frontend (`client_waip.js`), `wgs84_x = latitude,
348
- wgs84_y = longitude` – contrary to the usual GIS convention.
349
- `geo.latitude`/`geo.longitude` were therefore swapped for directly
350
- transmitted coordinates (not the GeoJSON fallback path).
351
- - Added the missing `io.standby` handler: `status.alarmAktiv` was
352
- previously never reset when an incident ended
353
- - Captured new incident fields (previously only contained in the raw
354
- `json.raw`/`json.einsatz`, now as their own states): `zeitstempel`,
355
- `einsatznummer`, `objekt`, `objektteil`, `strasse`, `hausnummer`,
356
- `einsatzdetails`, `besonderheiten`, `permissions`
357
- - `em_alarmiert` (alerted resources) is now stored in
358
- `vis.fahrzeugTabelle`, `em_weitere` in `einsatz.emWeitere`
359
- - Feedback is now collected per incident (`vis.rueckmeldungenTabelle`)
360
- and aggregated into counters per role/capability
361
- (`rueckmeldung.counts.*`), mirroring the live badges
362
- (EK/GF/ZF/VF/AGT/FZF/MA/MED) on the web UI
363
- - New handlers for `io.error` (→ `debug.lastError`) and `io.version`
364
- (server-restart detection → session-cookie refresh + forced reconnect)
365
- - Generalized `reconnectForRotatedSession()` into the more generic
366
- `forceReconnect(reason)` (now also used on a server version change)
367
-
368
- ### 0.2.1 (2026-08-20)
369
-
370
- - Detected session-cookie rotation: if `/session/keepalive` returns a
371
- different cookie value than before (e.g. because the old session was
372
- already invalid server-side – a missed keepalive, a server restart
373
- with an in-memory session store), an existing Socket.IO connection is
374
- now actively rebuilt with the new session instead of waiting for a
375
- silent failure
376
-
377
- ### 0.2.0 (2026-08-20)
378
-
379
- - Introduced session-cookie management: the adapter fetches and renews
380
- the WAIP server's `connect.sid` session cookie itself (`GET
381
- /session/keepalive`, matching `/js/session_keepalive.js` on the site)
382
- and attaches it to the Socket.IO connection. Fixes alarm delivery
383
- stopping after about 10 minutes without an active browser session.
384
- - New state `debug.sessionExpires` and a new config option "Session
385
- keepalive interval (ms)" (default `300000`)
386
-
387
- ### 0.1.1 (2026-08-20)
388
-
389
- - Adopted the favicon from `wachalarm.leitstelle-lausitz.de` as the
390
- adapter icon (`admin/waip-web.png`), replacing the previous
391
- placeholder
392
- - Renamed the GitHub repository from `ioBroker.WAIP-Web` to
393
- `ioBroker.waip-web` (uppercase letters in the repo name prevented
394
- installation via `iobroker url` with `Process exited with code 25`);
395
- updated all URLs in `package.json`/`io-package.json` accordingly
396
-
397
- ### 0.1.0 (2026-08-20)
398
-
399
- - Initial version: ported the original "WAIP Instrumented v3.9" ioBroker
400
- JavaScript-adapter script into a standalone adapter. The URL/monitor
401
- ID now come from the admin configuration instead of a runtime state.