iobroker.zeptrion 0.8.4 → 0.8.6
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.md +9 -68
- package/admin/jsonConfig.json +250 -25
- package/io-package.json +37 -2
- package/lib/adapter-config.d.ts +19 -0
- package/main.js +23 -8
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -190,6 +190,12 @@ npm run test:integration # starts a real js-controller (takes longer)
|
|
|
190
190
|
|
|
191
191
|
## Changelog
|
|
192
192
|
|
|
193
|
+
### 0.8.6 (2026-07-17)
|
|
194
|
+
- Corrected object role/type mismatches found by the ioBroker store submission's object structure check: calibrate and ntp.per used role 'value', which strictly requires read=true/write=false and does not fit these intentionally writable states - changed to role 'level'. Also added the missing full i18n translation for info.connection.
|
|
195
|
+
|
|
196
|
+
### 0.8.5 (2026-07-16)
|
|
197
|
+
- Enabled automated npm releases via GitHub Actions using npm Trusted Publishing (OIDC) - no more manual publishing, and this and all future tagged releases are automatically signed with npm provenance. No functional/API changes.
|
|
198
|
+
|
|
193
199
|
### 0.8.4 (2026-07-16)
|
|
194
200
|
- Cleanup release addressing the ioBroker adapter store checker findings, no functional/behavioral changes
|
|
195
201
|
- Updated fast-xml-parser 4.5.7 -> 5.9.3, eslint, mocha, chai and the testing-action-check GitHub Action (verified identical XML parsing output for the zrap API response shapes used by this adapter)
|
|
@@ -209,74 +215,9 @@ npm run test:integration # starts a real js-controller (takes longer)
|
|
|
209
215
|
### 0.8.0
|
|
210
216
|
- Fixed orphaned states remaining after a device is removed/replaced (objects are now cleaned up on start), official Feller zeptrion logo as icon (used with permission)
|
|
211
217
|
|
|
212
|
-
### 0.7.0
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
- CSV bulk import (dedicated config tab) with row validation and auto-ID
|
|
216
|
-
- FIX: position estimate correctly handled after a stop during an end-position run
|
|
217
|
-
- FIX: adapter timer cleanup (this.clearTimeout), leading zeros in chdes codes are preserved
|
|
218
|
-
|
|
219
|
-
### 0.6.0 (2026-07-10)
|
|
220
|
-
- Auto-ID from host, device test button (reachability + zeptrion verification + channel count check)
|
|
221
|
-
- Channel object names taken from the device (chdes), new icon, device icons
|
|
222
|
-
|
|
223
|
-
### 0.5.1 (2026-07-10)
|
|
224
|
-
- CRITICAL FIX: the XML parser skipped the payload because of the XML declaration key - all GET values remained null in 0.5.0
|
|
225
|
-
|
|
226
|
-
### 0.5.0 (2026-07-07)
|
|
227
|
-
- setPosition: time-based %-approach for shutters (chunked due to the 32s API limit, reference run when position is unknown)
|
|
228
|
-
- tiltOpen/tiltClose: slat tilt pulses (configurable pulse duration)
|
|
229
|
-
- calibrate: set the position estimate without moving
|
|
230
|
-
|
|
231
|
-
### 0.4.0 (2026-07-07) - Security & quality hardening
|
|
232
|
-
- **Locked factory reset**: `system.factoryDefault` now only works within
|
|
233
|
-
30s of setting `system.unlock` - a single accidental setState from a
|
|
234
|
-
script/VIS can no longer wipe the device.
|
|
235
|
-
- **Crash-safe onStateChange**: the entire handler (including the bulk commands) now
|
|
236
|
-
runs inside centralized error handling - unhandled promise rejections are
|
|
237
|
-
no longer possible.
|
|
238
|
-
- **Input validation**: channel description (32/32/24/4/4 bytes UTF-8), location (32),
|
|
239
|
-
NTP URL (32) and NTP interval (0-255) are validated before sending; a clear
|
|
240
|
-
error message instead of an HTTP 400 from the device. Umlauts are correctly counted as 2 bytes.
|
|
241
|
-
- **Adapter-managed timers** (`this.setTimeout`) used everywhere - automatic cleanup
|
|
242
|
-
on unload per the ioBroker guidelines.
|
|
243
|
-
- **Connection economy**: as long as the chnotify long-poll is running healthily, the
|
|
244
|
-
redundant chscan resync now only runs on every 5th poll (goes easier on the
|
|
245
|
-
weak embedded web servers of the flush-mounted actuators).
|
|
246
|
-
- **chnotify can be disabled** (Expert tab) for environments with connection issues.
|
|
247
|
-
- **New admin UI**: tabs (Devices/Expert), fully EN+DE, input validators
|
|
248
|
-
(ID pattern, host pattern), tooltips on every column, security notice.
|
|
249
|
-
- Migrated ESLint to flat config (v9), lint runs cleanly; smoke tests for
|
|
250
|
-
command validation, byte limits, position math and multicast body.
|
|
251
|
-
|
|
252
|
-
### 0.3.0 (2026-07-07)
|
|
253
|
-
- Channel commands for the same device are automatically bundled within a 50ms window
|
|
254
|
-
into a single multicast POST to `/zrap/chctrl` instead of being sent sequentially
|
|
255
|
-
one by one - `control.closeAllShutters` (hail alert) in particular
|
|
256
|
-
benefits massively from this (one request per device instead of one per channel).
|
|
257
|
-
- Optional time-based shutter position estimate (`posEstimate`) based on a configurable
|
|
258
|
-
motor travel time, since the hardware itself does not report a position.
|
|
259
|
-
- Optional Smartfront support (`zapi/smartfront/*`): read temperature/brightness/
|
|
260
|
-
humidity, set LED background color.
|
|
261
|
-
- Role fix: `level.blind` is now applied to the position estimate instead of the
|
|
262
|
-
raw (usually -1) hardware value.
|
|
263
|
-
|
|
264
|
-
### 0.2.0 (2026-07-07)
|
|
265
|
-
- Channel states are now primarily updated near real-time via `zrap/chnotify`
|
|
266
|
-
(long-poll) instead of only via interval polling; `chscan` polling remains as a
|
|
267
|
-
periodic resync/fallback.
|
|
268
|
-
- An additional safety net (busy window, 5s) prevents a concurrent
|
|
269
|
-
chscan resync from overwriting a just-sent movement command with a stale value.
|
|
270
|
-
- mDNS discovery handler hardened against exceptions caused by malformed/unrelated
|
|
271
|
-
network packets (try/catch per service event instead of only around the subscription).
|
|
272
|
-
- New device field "kind" (Shutter/Light/unknown) controls the default object roles
|
|
273
|
-
(`level.blind`, `button.stop`, `button.open.blind`, `button.close.blind` resp.
|
|
274
|
-
`level.dimmer`) for better VIS/smart-home integration.
|
|
275
|
-
- Structured `native` metadata (host, channel number, kind) on device/channel objects.
|
|
276
|
-
|
|
277
|
-
### 0.1.0 (2026-07-07)
|
|
278
|
-
- First version: channel control, channel state/description, device/network info,
|
|
279
|
-
system commands, location/NTP/date, bulk commands for hail alerts, mDNS discovery.
|
|
218
|
+
### 0.7.0 and older
|
|
219
|
+
|
|
220
|
+
Older changelog entries can be found in [CHANGELOG_OLD.md](CHANGELOG_OLD.md).
|
|
280
221
|
|
|
281
222
|
## License
|
|
282
223
|
|
package/admin/jsonConfig.json
CHANGED
|
@@ -6,14 +6,32 @@
|
|
|
6
6
|
"type": "panel",
|
|
7
7
|
"label": {
|
|
8
8
|
"en": "Devices",
|
|
9
|
-
"de": "Geräte"
|
|
9
|
+
"de": "Geräte",
|
|
10
|
+
"ru": "Устройства",
|
|
11
|
+
"pt": "Dispositivos",
|
|
12
|
+
"nl": "Apparaten",
|
|
13
|
+
"fr": "Appareils",
|
|
14
|
+
"it": "Dispositivi",
|
|
15
|
+
"es": "Dispositivos",
|
|
16
|
+
"pl": "Urządzenia",
|
|
17
|
+
"uk": "Пристрої",
|
|
18
|
+
"zh-cn": "设备"
|
|
10
19
|
},
|
|
11
20
|
"items": {
|
|
12
21
|
"_infoHeader": {
|
|
13
22
|
"type": "staticText",
|
|
14
23
|
"text": {
|
|
15
24
|
"en": "Feller zeptrion / zApp WLAN actuators (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = IP address or mDNS name (e.g. zapp-14250034.local).",
|
|
16
|
-
"de": "Feller zeptrion / zApp WLAN-Aktoren (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = IP-Adresse oder mDNS-Name (z.B. zapp-14250034.local)."
|
|
25
|
+
"de": "Feller zeptrion / zApp WLAN-Aktoren (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = IP-Adresse oder mDNS-Name (z.B. zapp-14250034.local).",
|
|
26
|
+
"ru": "WLAN-актуаторы Feller zeptrion / zApp (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = IP-адрес или имя mDNS (напр. zapp-14250034.local).",
|
|
27
|
+
"pt": "Atuadores WLAN Feller zeptrion / zApp (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = endereço IP ou nome mDNS (ex. zapp-14250034.local).",
|
|
28
|
+
"nl": "Feller zeptrion / zApp WLAN-actuatoren (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = IP-adres of mDNS-naam (bijv. zapp-14250034.local).",
|
|
29
|
+
"fr": "Actionneurs WLAN Feller zeptrion / zApp (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = adresse IP ou nom mDNS (p. ex. zapp-14250034.local).",
|
|
30
|
+
"it": "Attuatori WLAN Feller zeptrion / zApp (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = indirizzo IP o nome mDNS (es. zapp-14250034.local).",
|
|
31
|
+
"es": "Actuadores WLAN Feller zeptrion / zApp (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = dirección IP o nombre mDNS (p. ej. zapp-14250034.local).",
|
|
32
|
+
"pl": "Aktuatory WLAN Feller zeptrion / zApp (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = adres IP lub nazwa mDNS (np. zapp-14250034.local).",
|
|
33
|
+
"uk": "WLAN-актуатори Feller zeptrion / zApp (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K). Host = IP-адреса або ім'я mDNS (напр. zapp-14250034.local).",
|
|
34
|
+
"zh-cn": "Feller zeptrion / zApp WLAN 执行器(WLAN-Nebenstelle 4K、WLAN-Zwischenmodul 2K)。Host = IP 地址或 mDNS 名称(例如 zapp-14250034.local)。"
|
|
17
35
|
},
|
|
18
36
|
"sm": 12,
|
|
19
37
|
"xs": 12,
|
|
@@ -29,7 +47,16 @@
|
|
|
29
47
|
"variant": "contained",
|
|
30
48
|
"label": {
|
|
31
49
|
"en": "🔍 Scan network for zeptrion devices (mDNS, ~4s)",
|
|
32
|
-
"de": "🔍 Netzwerk nach zeptrion-Geräten durchsuchen (mDNS, ca. 4s)"
|
|
50
|
+
"de": "🔍 Netzwerk nach zeptrion-Geräten durchsuchen (mDNS, ca. 4s)",
|
|
51
|
+
"ru": "🔍 Поиск устройств zeptrion в сети (mDNS, ~4с)",
|
|
52
|
+
"pt": "🔍 Procurar dispositivos zeptrion na rede (mDNS, ~4s)",
|
|
53
|
+
"nl": "🔍 Netwerk scannen naar zeptrion-apparaten (mDNS, ~4s)",
|
|
54
|
+
"fr": "🔍 Rechercher les appareils zeptrion sur le réseau (mDNS, ~4s)",
|
|
55
|
+
"it": "🔍 Cerca dispositivi zeptrion nella rete (mDNS, ~4s)",
|
|
56
|
+
"es": "🔍 Buscar dispositivos zeptrion en la red (mDNS, ~4s)",
|
|
57
|
+
"pl": "🔍 Skanuj sieć w poszukiwaniu urządzeń zeptrion (mDNS, ~4s)",
|
|
58
|
+
"uk": "🔍 Пошук пристроїв zeptrion у мережі (mDNS, ~4с)",
|
|
59
|
+
"zh-cn": "🔍 扫描网络中的 zeptrion 设备(mDNS,约 4 秒)"
|
|
33
60
|
},
|
|
34
61
|
"showProcess": true,
|
|
35
62
|
"sm": 12,
|
|
@@ -45,7 +72,16 @@
|
|
|
45
72
|
"variant": "outlined",
|
|
46
73
|
"label": {
|
|
47
74
|
"en": "🔎 Test configured devices (reachable? really zeptrion?)",
|
|
48
|
-
"de": "🔎 Konfigurierte Geräte testen (erreichbar? wirklich zeptrion?)"
|
|
75
|
+
"de": "🔎 Konfigurierte Geräte testen (erreichbar? wirklich zeptrion?)",
|
|
76
|
+
"ru": "🔎 Проверить настроенные устройства (доступны? действительно zeptrion?)",
|
|
77
|
+
"pt": "🔎 Testar dispositivos configurados (acessíveis? realmente zeptrion?)",
|
|
78
|
+
"nl": "🔎 Geconfigureerde apparaten testen (bereikbaar? echt zeptrion?)",
|
|
79
|
+
"fr": "🔎 Tester les appareils configurés (accessibles ? vraiment zeptrion ?)",
|
|
80
|
+
"it": "🔎 Verifica dispositivi configurati (raggiungibili? realmente zeptrion?)",
|
|
81
|
+
"es": "🔎 Probar dispositivos configurados (¿accesibles? ¿realmente zeptrion?)",
|
|
82
|
+
"pl": "🔎 Testuj skonfigurowane urządzenia (dostępne? rzeczywiście zeptrion?)",
|
|
83
|
+
"uk": "🔎 Перевірити налаштовані пристрої (доступні? дійсно zeptrion?)",
|
|
84
|
+
"zh-cn": "🔎 测试已配置的设备(是否可达?是否确为 zeptrion?)"
|
|
49
85
|
},
|
|
50
86
|
"showProcess": true,
|
|
51
87
|
"sm": 12,
|
|
@@ -58,7 +94,16 @@
|
|
|
58
94
|
"type": "staticText",
|
|
59
95
|
"text": {
|
|
60
96
|
"en": "Found devices are added DISABLED to the table below. Close and reopen this dialog after scanning, then verify each row (name, channel count, kind) and enable it. mDNS only works within the same network segment / VLAN.",
|
|
61
|
-
"de": "Gefundene Geräte werden DEAKTIVIERT in die Tabelle übernommen. Dialog nach der Suche schliessen und neu öffnen, dann jede Zeile prüfen (Name, Kanalzahl, Art) und aktivieren. mDNS funktioniert nur im gleichen Netzsegment/VLAN."
|
|
97
|
+
"de": "Gefundene Geräte werden DEAKTIVIERT in die Tabelle übernommen. Dialog nach der Suche schliessen und neu öffnen, dann jede Zeile prüfen (Name, Kanalzahl, Art) und aktivieren. mDNS funktioniert nur im gleichen Netzsegment/VLAN.",
|
|
98
|
+
"ru": "Найденные устройства добавляются в таблицу ниже в ОТКЛЮЧЁННОМ состоянии. Закройте и снова откройте этот диалог после поиска, затем проверьте каждую строку (имя, число каналов, тип) и включите её. mDNS работает только в пределах одного сегмента сети / VLAN.",
|
|
99
|
+
"pt": "Os dispositivos encontrados são adicionados DESATIVADOS à tabela abaixo. Feche e reabra este diálogo após a pesquisa, depois verifique cada linha (nome, número de canais, tipo) e ative-a. O mDNS só funciona dentro do mesmo segmento de rede / VLAN.",
|
|
100
|
+
"nl": "Gevonden apparaten worden UITGESCHAKELD aan de onderstaande tabel toegevoegd. Sluit dit dialoogvenster na het scannen en open het opnieuw, controleer dan elke rij (naam, aantal kanalen, type) en schakel deze in. mDNS werkt alleen binnen hetzelfde netwerksegment / VLAN.",
|
|
101
|
+
"fr": "Les appareils trouvés sont ajoutés DÉSACTIVÉS au tableau ci-dessous. Fermez et rouvrez cette boîte de dialogue après la recherche, puis vérifiez chaque ligne (nom, nombre de canaux, type) et activez-la. mDNS fonctionne uniquement au sein du même segment réseau / VLAN.",
|
|
102
|
+
"it": "I dispositivi trovati vengono aggiunti DISABILITATI alla tabella sottostante. Chiudi e riapri questa finestra dopo la scansione, quindi verifica ogni riga (nome, numero di canali, tipo) e abilitala. mDNS funziona solo all'interno dello stesso segmento di rete / VLAN.",
|
|
103
|
+
"es": "Los dispositivos encontrados se añaden DESACTIVADOS a la tabla siguiente. Cierre y vuelva a abrir este diálogo tras la búsqueda, luego verifique cada fila (nombre, número de canales, tipo) y actívela. mDNS solo funciona dentro del mismo segmento de red / VLAN.",
|
|
104
|
+
"pl": "Znalezione urządzenia są dodawane do poniższej tabeli jako WYŁĄCZONE. Zamknij i ponownie otwórz to okno po wyszukiwaniu, następnie sprawdź każdy wiersz (nazwa, liczba kanałów, rodzaj) i włącz go. mDNS działa tylko w obrębie tego samego segmentu sieci / VLAN.",
|
|
105
|
+
"uk": "Знайдені пристрої додаються до таблиці нижче у ВИМКНЕНОМУ стані. Закрийте і знову відкрийте це діалогове вікно після пошуку, потім перевірте кожен рядок (назва, кількість каналів, тип) і увімкніть його. mDNS працює лише в межах одного сегмента мережі / VLAN.",
|
|
106
|
+
"zh-cn": "找到的设备会以「禁用」状态添加到下方表格中。扫描完成后请关闭并重新打开此对话框,然后检查每一行(名称、通道数、类型)并启用它。mDNS 仅在同一网络段/VLAN 内有效。"
|
|
62
107
|
},
|
|
63
108
|
"sm": 12,
|
|
64
109
|
"xs": 12,
|
|
@@ -71,7 +116,16 @@
|
|
|
71
116
|
"type": "table",
|
|
72
117
|
"label": {
|
|
73
118
|
"en": "Devices",
|
|
74
|
-
"de": "Geräte"
|
|
119
|
+
"de": "Geräte",
|
|
120
|
+
"ru": "Устройства",
|
|
121
|
+
"pt": "Dispositivos",
|
|
122
|
+
"nl": "Apparaten",
|
|
123
|
+
"fr": "Appareils",
|
|
124
|
+
"it": "Dispositivi",
|
|
125
|
+
"es": "Dispositivos",
|
|
126
|
+
"pl": "Urządzenia",
|
|
127
|
+
"uk": "Пристрої",
|
|
128
|
+
"zh-cn": "设备"
|
|
75
129
|
},
|
|
76
130
|
"sm": 12,
|
|
77
131
|
"items": [
|
|
@@ -91,7 +145,16 @@
|
|
|
91
145
|
"title": "ID",
|
|
92
146
|
"tooltip": {
|
|
93
147
|
"en": "Leave empty = auto-generated from host. Only a-z, 0-9, _ and -",
|
|
94
|
-
"de": "Leer lassen = wird automatisch aus dem Host erzeugt. Nur a-z, 0-9, _ und -"
|
|
148
|
+
"de": "Leer lassen = wird automatisch aus dem Host erzeugt. Nur a-z, 0-9, _ und -",
|
|
149
|
+
"ru": "Оставьте пустым = будет создано автоматически из host. Только a-z, 0-9, _ и -",
|
|
150
|
+
"pt": "Deixe vazio = gerado automaticamente a partir do host. Apenas a-z, 0-9, _ e -",
|
|
151
|
+
"nl": "Leeg laten = automatisch gegenereerd op basis van host. Alleen a-z, 0-9, _ en -",
|
|
152
|
+
"fr": "Laisser vide = généré automatiquement à partir de l'hôte. Uniquement a-z, 0-9, _ et -",
|
|
153
|
+
"it": "Lascia vuoto = generato automaticamente dall'host. Solo a-z, 0-9, _ e -",
|
|
154
|
+
"es": "Dejar vacío = generado automáticamente a partir del host. Solo a-z, 0-9, _ y -",
|
|
155
|
+
"pl": "Pozostaw puste = generowane automatycznie z hosta. Tylko a-z, 0-9, _ i -",
|
|
156
|
+
"uk": "Залиште порожнім = буде згенеровано автоматично з host. Лише a-z, 0-9, _ та -",
|
|
157
|
+
"zh-cn": "留空 = 根据 host 自动生成。仅允许 a-z、0-9、_ 和 -"
|
|
95
158
|
},
|
|
96
159
|
"validator": "!data.id || /^[a-zA-Z0-9_-]+$/.test(data.id)",
|
|
97
160
|
"validatorErrorText": "Only a-z, 0-9, _ and - (or leave empty)",
|
|
@@ -126,7 +189,16 @@
|
|
|
126
189
|
},
|
|
127
190
|
"tooltip": {
|
|
128
191
|
"en": "3340-4-x = 4, 3340-2-x = 2",
|
|
129
|
-
"de": "3340-4-x = 4, 3340-2-x = 2"
|
|
192
|
+
"de": "3340-4-x = 4, 3340-2-x = 2",
|
|
193
|
+
"ru": "3340-4-x = 4, 3340-2-x = 2",
|
|
194
|
+
"pt": "3340-4-x = 4, 3340-2-x = 2",
|
|
195
|
+
"nl": "3340-4-x = 4, 3340-2-x = 2",
|
|
196
|
+
"fr": "3340-4-x = 4, 3340-2-x = 2",
|
|
197
|
+
"it": "3340-4-x = 4, 3340-2-x = 2",
|
|
198
|
+
"es": "3340-4-x = 4, 3340-2-x = 2",
|
|
199
|
+
"pl": "3340-4-x = 4, 3340-2-x = 2",
|
|
200
|
+
"uk": "3340-4-x = 4, 3340-2-x = 2",
|
|
201
|
+
"zh-cn": "3340-4-x = 4,3340-2-x = 2"
|
|
130
202
|
},
|
|
131
203
|
"min": 1,
|
|
132
204
|
"max": 4,
|
|
@@ -142,7 +214,16 @@
|
|
|
142
214
|
},
|
|
143
215
|
"tooltip": {
|
|
144
216
|
"en": "Controls ioBroker object roles for VIS/smart home integrations",
|
|
145
|
-
"de": "Steuert ioBroker-Objektrollen für VIS/Smart-Home-Integrationen"
|
|
217
|
+
"de": "Steuert ioBroker-Objektrollen für VIS/Smart-Home-Integrationen",
|
|
218
|
+
"ru": "Определяет роли объектов ioBroker для интеграции с VIS/умным домом",
|
|
219
|
+
"pt": "Controla os papéis de objeto do ioBroker para integrações VIS/casa inteligente",
|
|
220
|
+
"nl": "Bepaalt ioBroker-objectrollen voor VIS/smarthome-integraties",
|
|
221
|
+
"fr": "Contrôle les rôles d'objet ioBroker pour les intégrations VIS/domotique",
|
|
222
|
+
"it": "Controlla i ruoli oggetto di ioBroker per le integrazioni VIS/smart home",
|
|
223
|
+
"es": "Controla los roles de objeto de ioBroker para integraciones VIS/domótica",
|
|
224
|
+
"pl": "Steruje rolami obiektów ioBroker dla integracji VIS/smart home",
|
|
225
|
+
"uk": "Керує ролями об'єктів ioBroker для інтеграцій VIS/розумного дому",
|
|
226
|
+
"zh-cn": "控制用于 VIS/智能家居集成的 ioBroker 对象角色"
|
|
146
227
|
},
|
|
147
228
|
"options": [
|
|
148
229
|
{
|
|
@@ -206,7 +287,16 @@
|
|
|
206
287
|
},
|
|
207
288
|
"tooltip": {
|
|
208
289
|
"en": "Default travel time in seconds, used for all channels unless overridden per-channel below. 0 = position estimation and setPosition disabled. Only relevant for kind=Blinds.",
|
|
209
|
-
"de": "Standard-Laufzeit in Sekunden, gilt für alle Kanäle, sofern nicht rechts pro Kanal überschrieben. 0 = Positionsschätzung und setPosition deaktiviert. Nur relevant bei Art=Storen."
|
|
290
|
+
"de": "Standard-Laufzeit in Sekunden, gilt für alle Kanäle, sofern nicht rechts pro Kanal überschrieben. 0 = Positionsschätzung und setPosition deaktiviert. Nur relevant bei Art=Storen.",
|
|
291
|
+
"ru": "Время хода по умолчанию в секундах, применяется ко всем каналам, если не переопределено ниже для отдельного канала. 0 = оценка позиции и setPosition отключены. Актуально только для type=Blinds.",
|
|
292
|
+
"pt": "Tempo de percurso padrão em segundos, usado para todos os canais salvo substituição por canal abaixo. 0 = estimativa de posição e setPosition desativados. Relevante apenas para kind=Blinds.",
|
|
293
|
+
"nl": "Standaard looptijd in seconden, geldt voor alle kanalen tenzij hieronder per kanaal overschreven. 0 = positieschatting en setPosition uitgeschakeld. Alleen relevant bij kind=Blinds.",
|
|
294
|
+
"fr": "Temps de course par défaut en secondes, utilisé pour tous les canaux sauf remplacement par canal ci-dessous. 0 = estimation de position et setPosition désactivés. Pertinent uniquement pour kind=Blinds.",
|
|
295
|
+
"it": "Tempo di corsa predefinito in secondi, usato per tutti i canali salvo override per canale sotto. 0 = stima della posizione e setPosition disabilitati. Rilevante solo per kind=Blinds.",
|
|
296
|
+
"es": "Tiempo de recorrido predeterminado en segundos, se usa para todos los canales salvo que se sobrescriba por canal más abajo. 0 = estimación de posición y setPosition desactivados. Solo relevante para kind=Blinds.",
|
|
297
|
+
"pl": "Domyślny czas przejazdu w sekundach, stosowany do wszystkich kanałów, chyba że zostanie nadpisany poniżej dla poszczególnych kanałów. 0 = szacowanie pozycji i setPosition wyłączone. Istotne tylko dla kind=Blinds.",
|
|
298
|
+
"uk": "Час ходу за замовчуванням у секундах, застосовується до всіх каналів, якщо не перевизначено нижче для окремого каналу. 0 = оцінка позиції та setPosition вимкнено. Актуально лише для kind=Blinds.",
|
|
299
|
+
"zh-cn": "默认运行时间(秒),适用于所有通道,除非下方针对单个通道进行了覆盖设置。0 = 禁用位置估算和 setPosition。仅在 kind=Blinds 时适用。"
|
|
210
300
|
},
|
|
211
301
|
"min": 0,
|
|
212
302
|
"max": 300,
|
|
@@ -222,7 +312,16 @@
|
|
|
222
312
|
},
|
|
223
313
|
"tooltip": {
|
|
224
314
|
"en": "Optional: comma-separated per-channel override, one value per channel in order (e.g. '22,28' for a 2K device where channel 1 and 2 have different motor travel times). Empty entries fall back to 'Motor travel (s)'. Leave the whole field empty to use the same value for all channels.",
|
|
225
|
-
"de": "Optional: Kommagetrennte Laufzeit pro Kanal, ein Wert je Kanal in Reihenfolge (z.B. '22,28' für ein 2K-Gerät, bei dem Kanal 1 und 2 unterschiedliche Motor-Laufzeiten haben). Leere Einträge verwenden 'Motor-Laufzeit (s)'. Ganzes Feld leer lassen = gleicher Wert für alle Kanäle."
|
|
315
|
+
"de": "Optional: Kommagetrennte Laufzeit pro Kanal, ein Wert je Kanal in Reihenfolge (z.B. '22,28' für ein 2K-Gerät, bei dem Kanal 1 und 2 unterschiedliche Motor-Laufzeiten haben). Leere Einträge verwenden 'Motor-Laufzeit (s)'. Ganzes Feld leer lassen = gleicher Wert für alle Kanäle.",
|
|
316
|
+
"ru": "Необязательно: переопределение по каналам через запятую, одно значение на канал по порядку (напр. '22,28' для устройства 2K, где каналы 1 и 2 имеют разное время хода). Пустые значения используют 'Motor travel (s)'. Оставьте всё поле пустым, чтобы использовать одно значение для всех каналов.",
|
|
317
|
+
"pt": "Opcional: substituição por canal separada por vírgulas, um valor por canal em ordem (ex. '22,28' para um dispositivo 2K onde os canais 1 e 2 têm tempos de percurso diferentes). Entradas vazias usam 'Motor travel (s)'. Deixe o campo inteiro vazio para usar o mesmo valor em todos os canais.",
|
|
318
|
+
"nl": "Optioneel: door komma's gescheiden override per kanaal, één waarde per kanaal in volgorde (bijv. '22,28' voor een 2K-apparaat waarbij kanaal 1 en 2 verschillende looptijden hebben). Lege items vallen terug op 'Motor travel (s)'. Laat het hele veld leeg om dezelfde waarde voor alle kanalen te gebruiken.",
|
|
319
|
+
"fr": "Facultatif : remplacement par canal séparé par des virgules, une valeur par canal dans l'ordre (p. ex. '22,28' pour un appareil 2K où les canaux 1 et 2 ont des temps de course différents). Les entrées vides utilisent 'Motor travel (s)'. Laissez tout le champ vide pour utiliser la même valeur pour tous les canaux.",
|
|
320
|
+
"it": "Facoltativo: override per canale separato da virgole, un valore per canale in ordine (es. '22,28' per un dispositivo 2K in cui i canali 1 e 2 hanno tempi di corsa diversi). Le voci vuote usano 'Motor travel (s)'. Lascia l'intero campo vuoto per usare lo stesso valore per tutti i canali.",
|
|
321
|
+
"es": "Opcional: anulación por canal separada por comas, un valor por canal en orden (p. ej. '22,28' para un dispositivo 2K donde los canales 1 y 2 tienen tiempos de recorrido diferentes). Las entradas vacías usan 'Motor travel (s)'. Deje todo el campo vacío para usar el mismo valor en todos los canales.",
|
|
322
|
+
"pl": "Opcjonalnie: nadpisanie dla poszczególnych kanałów, oddzielone przecinkami, jedna wartość na kanał w kolejności (np. '22,28' dla urządzenia 2K, gdzie kanały 1 i 2 mają różny czas przejazdu). Puste wpisy korzystają z 'Motor travel (s)'. Pozostaw całe pole puste, aby użyć tej samej wartości dla wszystkich kanałów.",
|
|
323
|
+
"uk": "Необов'язково: перевизначення по каналах через кому, одне значення на канал за порядком (напр. '22,28' для пристрою 2K, де канали 1 і 2 мають різний час ходу). Порожні значення використовують 'Motor travel (s)'. Залиште все поле порожнім, щоб використовувати одне значення для всіх каналів.",
|
|
324
|
+
"zh-cn": "可选:以逗号分隔的按通道覆盖设置,按顺序每个通道一个值(例如 2K 设备中通道 1 和 2 的运行时间不同,可填 \"22,28\")。留空的项将使用 \"Motor travel (s)\"。将整个字段留空则所有通道使用相同的值。"
|
|
226
325
|
},
|
|
227
326
|
"validator": "!data.travelTimeSecCh || /^\\s*\\d*\\s*(,\\s*\\d*\\s*){0,3}$/.test(data.travelTimeSecCh)",
|
|
228
327
|
"validatorErrorText": "Comma-separated numbers only, max 4 values (e.g. '22,28')",
|
|
@@ -237,7 +336,16 @@
|
|
|
237
336
|
},
|
|
238
337
|
"tooltip": {
|
|
239
338
|
"en": "Short move pulse for tilting raffstore lamellas via tiltOpen/tiltClose (typically 300-800ms). 0 = disabled. Only relevant for kind=Blinds.",
|
|
240
|
-
"de": "Kurzer Fahr-Impuls zum Schrägstellen von Rafflamellen via tiltOpen/tiltClose (typisch 300-800ms). 0 = deaktiviert. Nur relevant bei Art=Storen."
|
|
339
|
+
"de": "Kurzer Fahr-Impuls zum Schrägstellen von Rafflamellen via tiltOpen/tiltClose (typisch 300-800ms). 0 = deaktiviert. Nur relevant bei Art=Storen.",
|
|
340
|
+
"ru": "Короткий импульс движения для наклона ламелей жалюзи через tiltOpen/tiltClose (обычно 300-800мс). 0 = отключено. Актуально только для type=Blinds.",
|
|
341
|
+
"pt": "Pulso de movimento curto para inclinar as lâminas via tiltOpen/tiltClose (normalmente 300-800ms). 0 = desativado. Relevante apenas para kind=Blinds.",
|
|
342
|
+
"nl": "Korte beweegimpuls voor het kantelen van lamellen via tiltOpen/tiltClose (doorgaans 300-800ms). 0 = uitgeschakeld. Alleen relevant bij kind=Blinds.",
|
|
343
|
+
"fr": "Impulsion de mouvement courte pour incliner les lamelles via tiltOpen/tiltClose (généralement 300-800ms). 0 = désactivé. Pertinent uniquement pour kind=Blinds.",
|
|
344
|
+
"it": "Breve impulso di movimento per inclinare le lamelle tramite tiltOpen/tiltClose (tipicamente 300-800ms). 0 = disabilitato. Rilevante solo per kind=Blinds.",
|
|
345
|
+
"es": "Pulso de movimiento corto para inclinar las lamas mediante tiltOpen/tiltClose (típicamente 300-800ms). 0 = desactivado. Solo relevante para kind=Blinds.",
|
|
346
|
+
"pl": "Krótki impuls ruchu do przechylania lamel przez tiltOpen/tiltClose (zwykle 300-800ms). 0 = wyłączone. Istotne tylko dla kind=Blinds.",
|
|
347
|
+
"uk": "Короткий імпульс руху для нахилу ламелей через tiltOpen/tiltClose (зазвичай 300-800мс). 0 = вимкнено. Актуально лише для kind=Blinds.",
|
|
348
|
+
"zh-cn": "通过 tiltOpen/tiltClose 使百叶倾斜的短脉冲运行时间(通常为 300-800 毫秒)。0 = 禁用。仅在 kind=Blinds 时适用。"
|
|
241
349
|
},
|
|
242
350
|
"min": 0,
|
|
243
351
|
"max": 5000,
|
|
@@ -250,7 +358,16 @@
|
|
|
250
358
|
"title": "Smartfront",
|
|
251
359
|
"tooltip": {
|
|
252
360
|
"en": "Only enable if a Feller Smartfront (920-330x.xx.ZS/.ZU) is attached: adds temperature/brightness/humidity sensors and LED control",
|
|
253
|
-
"de": "Nur aktivieren, wenn ein Feller-Smartfront (920-330x.xx.ZS/.ZU) montiert ist: ergänzt Temperatur/Helligkeit/Feuchte-Sensoren und LED-Steuerung"
|
|
361
|
+
"de": "Nur aktivieren, wenn ein Feller-Smartfront (920-330x.xx.ZS/.ZU) montiert ist: ergänzt Temperatur/Helligkeit/Feuchte-Sensoren und LED-Steuerung",
|
|
362
|
+
"ru": "Включайте только если установлен Feller Smartfront (920-330x.xx.ZS/.ZU): добавляет датчики температуры/яркости/влажности и управление LED",
|
|
363
|
+
"pt": "Ative apenas se um Feller Smartfront (920-330x.xx.ZS/.ZU) estiver instalado: adiciona sensores de temperatura/brilho/humidade e controlo de LED",
|
|
364
|
+
"nl": "Alleen inschakelen als een Feller Smartfront (920-330x.xx.ZS/.ZU) is aangesloten: voegt temperatuur-/helderheids-/vochtigheidssensoren en LED-besturing toe",
|
|
365
|
+
"fr": "À activer uniquement si un Feller Smartfront (920-330x.xx.ZS/.ZU) est installé : ajoute des capteurs de température/luminosité/humidité et le contrôle LED",
|
|
366
|
+
"it": "Attiva solo se è collegato un Feller Smartfront (920-330x.xx.ZS/.ZU): aggiunge sensori di temperatura/luminosità/umidità e controllo LED",
|
|
367
|
+
"es": "Active solo si hay un Feller Smartfront (920-330x.xx.ZS/.ZU) conectado: añade sensores de temperatura/brillo/humedad y control LED",
|
|
368
|
+
"pl": "Włączaj tylko wtedy, gdy podłączony jest Feller Smartfront (920-330x.xx.ZS/.ZU): dodaje czujniki temperatury/jasności/wilgotności oraz sterowanie LED",
|
|
369
|
+
"uk": "Вмикайте лише якщо підключено Feller Smartfront (920-330x.xx.ZS/.ZU): додає датчики температури/яскравості/вологості та керування LED",
|
|
370
|
+
"zh-cn": "仅在连接了 Feller Smartfront(920-330x.xx.ZS/.ZU)时启用:增加温度/亮度/湿度传感器和 LED 控制"
|
|
254
371
|
},
|
|
255
372
|
"default": false,
|
|
256
373
|
"width": "8%"
|
|
@@ -261,7 +378,16 @@
|
|
|
261
378
|
"title": "Poll (s)",
|
|
262
379
|
"tooltip": {
|
|
263
380
|
"en": "Interval for RSSI + periodic resync. Real-time channel updates come via long-poll independently.",
|
|
264
|
-
"de": "Intervall für RSSI + periodischen Resync. Echtzeit-Kanalupdates kommen unabhängig davon per Long-Poll."
|
|
381
|
+
"de": "Intervall für RSSI + periodischen Resync. Echtzeit-Kanalupdates kommen unabhängig davon per Long-Poll.",
|
|
382
|
+
"ru": "Интервал для RSSI + периодической ресинхронизации. Обновления каналов в реальном времени приходят независимо через long-poll.",
|
|
383
|
+
"pt": "Intervalo para RSSI + ressincronização periódica. As atualizações de canal em tempo real chegam independentemente via long-poll.",
|
|
384
|
+
"nl": "Interval voor RSSI + periodieke resync. Realtime kanaalupdates komen onafhankelijk daarvan via long-poll binnen.",
|
|
385
|
+
"fr": "Intervalle pour le RSSI + resynchronisation périodique. Les mises à jour de canal en temps réel arrivent indépendamment via long-poll.",
|
|
386
|
+
"it": "Intervallo per RSSI + risincronizzazione periodica. Gli aggiornamenti dei canali in tempo reale arrivano indipendentemente tramite long-poll.",
|
|
387
|
+
"es": "Intervalo para RSSI + resincronización periódica. Las actualizaciones de canal en tiempo real llegan de forma independiente mediante long-poll.",
|
|
388
|
+
"pl": "Interwał dla RSSI + okresowej resynchronizacji. Aktualizacje kanałów w czasie rzeczywistym docierają niezależnie przez long-poll.",
|
|
389
|
+
"uk": "Інтервал для RSSI + періодичної ресинхронізації. Оновлення каналів у реальному часі надходять незалежно через long-poll.",
|
|
390
|
+
"zh-cn": "用于 RSSI 及周期性重新同步的间隔。实时通道更新通过长轮询独立到达。"
|
|
265
391
|
},
|
|
266
392
|
"min": 5,
|
|
267
393
|
"max": 3600,
|
|
@@ -280,14 +406,32 @@
|
|
|
280
406
|
"type": "panel",
|
|
281
407
|
"label": {
|
|
282
408
|
"en": "CSV import",
|
|
283
|
-
"de": "CSV-Import"
|
|
409
|
+
"de": "CSV-Import",
|
|
410
|
+
"ru": "Импорт CSV",
|
|
411
|
+
"pt": "Importação CSV",
|
|
412
|
+
"nl": "CSV-import",
|
|
413
|
+
"fr": "Import CSV",
|
|
414
|
+
"it": "Importazione CSV",
|
|
415
|
+
"es": "Importación CSV",
|
|
416
|
+
"pl": "Import CSV",
|
|
417
|
+
"uk": "Імпорт CSV",
|
|
418
|
+
"zh-cn": "CSV 导入"
|
|
284
419
|
},
|
|
285
420
|
"items": {
|
|
286
421
|
"_csvHelp": {
|
|
287
422
|
"type": "staticText",
|
|
288
423
|
"text": {
|
|
289
424
|
"en": "Bulk-add devices. One line per device, semicolon separated (recommended if using the last column, since it contains commas):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nOnly host is mandatory. kind: blind/light/unknown (also: storen, licht). smartfront: 1/0. travel_s_per_channel (optional): comma-separated per-channel override, e.g. '22,28' for a 2K device with different travel times, empty = use travel_s for all channels. Lines starting with # are ignored, a header line 'host;...' is skipped.\nExample:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
290
|
-
"de": "Geräte in Serie anlegen. Eine Zeile pro Gerät, Semikolon getrennt (empfohlen bei Nutzung der letzten Spalte, da diese Kommas enthält):\nhost;name;kanäle;art;laufzeit_s;kipp_ms;smartfront;poll_s;laufzeit_kanal_s\nNur host ist Pflicht. art: blind/light/unknown (auch: storen, licht). smartfront: 1/0. laufzeit_kanal_s (optional): kommagetrennte Laufzeit pro Kanal, z.B. '22,28' für ein 2K-Gerät mit unterschiedlichen Laufzeiten, leer = laufzeit_s für alle Kanäle. Zeilen mit # werden ignoriert, eine Kopfzeile 'host;...' wird übersprungen.\nBeispiel:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25"
|
|
425
|
+
"de": "Geräte in Serie anlegen. Eine Zeile pro Gerät, Semikolon getrennt (empfohlen bei Nutzung der letzten Spalte, da diese Kommas enthält):\nhost;name;kanäle;art;laufzeit_s;kipp_ms;smartfront;poll_s;laufzeit_kanal_s\nNur host ist Pflicht. art: blind/light/unknown (auch: storen, licht). smartfront: 1/0. laufzeit_kanal_s (optional): kommagetrennte Laufzeit pro Kanal, z.B. '22,28' für ein 2K-Gerät mit unterschiedlichen Laufzeiten, leer = laufzeit_s für alle Kanäle. Zeilen mit # werden ignoriert, eine Kopfzeile 'host;...' wird übersprungen.\nBeispiel:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
426
|
+
"ru": "Массовое добавление устройств. Одна строка на устройство, разделитель точка с запятой (рекомендуется при использовании последнего столбца, так как он содержит запятые):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nОбязателен только host. kind: blind/light/unknown (также: storen, licht). smartfront: 1/0. travel_s_per_channel (необязательно): переопределение по каналам через запятую, напр. '22,28' для устройства 2K с разным временем хода, пусто = travel_s для всех каналов. Строки, начинающиеся с #, игнорируются, строка заголовка 'host;...' пропускается.\nПример:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
427
|
+
"pt": "Adicionar dispositivos em massa. Uma linha por dispositivo, separada por ponto e vírgula (recomendado ao usar a última coluna, pois contém vírgulas):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nApenas host é obrigatório. kind: blind/light/unknown (também: storen, licht). smartfront: 1/0. travel_s_per_channel (opcional): substituição por canal separada por vírgulas, ex. '22,28' para um dispositivo 2K com tempos diferentes, vazio = travel_s para todos os canais. Linhas iniciadas com # são ignoradas, uma linha de cabeçalho 'host;...' é ignorada.\nExemplo:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
428
|
+
"nl": "Apparaten in bulk toevoegen. Eén regel per apparaat, gescheiden door puntkomma (aanbevolen bij gebruik van de laatste kolom, aangezien deze komma's bevat):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nAlleen host is verplicht. kind: blind/light/unknown (ook: storen, licht). smartfront: 1/0. travel_s_per_channel (optioneel): door komma's gescheiden override per kanaal, bijv. '22,28' voor een 2K-apparaat met verschillende looptijden, leeg = travel_s voor alle kanalen. Regels die beginnen met # worden genegeerd, een kopregel 'host;...' wordt overgeslagen.\nVoorbeeld:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
429
|
+
"fr": "Ajout groupé d'appareils. Une ligne par appareil, séparée par des points-virgules (recommandé si vous utilisez la dernière colonne, car elle contient des virgules) :\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nSeul host est obligatoire. kind : blind/light/unknown (aussi : storen, licht). smartfront : 1/0. travel_s_per_channel (facultatif) : remplacement par canal séparé par des virgules, p. ex. '22,28' pour un appareil 2K avec des temps différents, vide = travel_s pour tous les canaux. Les lignes commençant par # sont ignorées, une ligne d'en-tête 'host;...' est ignorée.\nExemple :\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
430
|
+
"it": "Aggiunta massiva di dispositivi. Una riga per dispositivo, separata da punto e virgola (consigliato se si usa l'ultima colonna, poiché contiene virgole):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nSolo host è obbligatorio. kind: blind/light/unknown (anche: storen, licht). smartfront: 1/0. travel_s_per_channel (opzionale): override per canale separato da virgole, es. '22,28' per un dispositivo 2K con tempi diversi, vuoto = travel_s per tutti i canali. Le righe che iniziano con # vengono ignorate, una riga di intestazione 'host;...' viene saltata.\nEsempio:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
431
|
+
"es": "Añadir dispositivos en masa. Una línea por dispositivo, separada por punto y coma (recomendado si se usa la última columna, ya que contiene comas):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nSolo host es obligatorio. kind: blind/light/unknown (también: storen, licht). smartfront: 1/0. travel_s_per_channel (opcional): anulación por canal separada por comas, p. ej. '22,28' para un dispositivo 2K con tiempos diferentes, vacío = travel_s para todos los canales. Las líneas que empiezan por # se ignoran, se omite una línea de cabecera 'host;...'.\nEjemplo:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
432
|
+
"pl": "Masowe dodawanie urządzeń. Jedna linia na urządzenie, rozdzielona średnikiem (zalecane przy użyciu ostatniej kolumny, ponieważ zawiera przecinki):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nTylko host jest wymagany. kind: blind/light/unknown (także: storen, licht). smartfront: 1/0. travel_s_per_channel (opcjonalnie): nadpisanie dla poszczególnych kanałów rozdzielone przecinkami, np. '22,28' dla urządzenia 2K z różnym czasem przejazdu, puste = travel_s dla wszystkich kanałów. Linie zaczynające się od # są ignorowane, wiersz nagłówka 'host;...' jest pomijany.\nPrzykład:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
433
|
+
"uk": "Масове додавання пристроїв. Один рядок на пристрій, розділювач крапка з комою (рекомендовано при використанні останнього стовпця, оскільки він містить коми):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\nОбов'язковий лише host. kind: blind/light/unknown (також: storen, licht). smartfront: 1/0. travel_s_per_channel (необов'язково): перевизначення по каналах через кому, напр. '22,28' для пристрою 2K з різним часом ходу, порожньо = travel_s для всіх каналів. Рядки, що починаються з #, ігноруються, рядок заголовка 'host;...' пропускається.\nПриклад:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25",
|
|
434
|
+
"zh-cn": "批量添加设备。每台设备一行,使用分号分隔(如使用最后一列建议如此,因为该列包含逗号):\nhost;name;channels;kind;travel_s;tilt_ms;smartfront;poll_s;travel_s_per_channel\n仅 host 为必填项。kind:blind/light/unknown(也可用 storen、licht)。smartfront:1/0。travel_s_per_channel(可选):以逗号分隔的按通道覆盖值,例如 2K 设备中运行时间不同可填 \"22,28\",留空则所有通道使用 travel_s。以 # 开头的行将被忽略,标题行 \"host;...\" 将被跳过。\n示例:\n10.195.36.116;Storen Büro;2;blind;22;500;0;30;22,28\n10.195.36.117;Storen Wohnen;2;storen;25"
|
|
291
435
|
},
|
|
292
436
|
"sm": 12,
|
|
293
437
|
"xs": 12,
|
|
@@ -300,7 +444,16 @@
|
|
|
300
444
|
"type": "text",
|
|
301
445
|
"label": {
|
|
302
446
|
"en": "CSV lines",
|
|
303
|
-
"de": "CSV-Zeilen"
|
|
447
|
+
"de": "CSV-Zeilen",
|
|
448
|
+
"ru": "Строки CSV",
|
|
449
|
+
"pt": "Linhas CSV",
|
|
450
|
+
"nl": "CSV-regels",
|
|
451
|
+
"fr": "Lignes CSV",
|
|
452
|
+
"it": "Righe CSV",
|
|
453
|
+
"es": "Líneas CSV",
|
|
454
|
+
"pl": "Linie CSV",
|
|
455
|
+
"uk": "Рядки CSV",
|
|
456
|
+
"zh-cn": "CSV 行"
|
|
304
457
|
},
|
|
305
458
|
"minRows": 8,
|
|
306
459
|
"maxRows": 20,
|
|
@@ -320,7 +473,16 @@
|
|
|
320
473
|
"variant": "contained",
|
|
321
474
|
"label": {
|
|
322
475
|
"en": "⬆️ Import (validates every line)",
|
|
323
|
-
"de": "⬆️ Importieren (validiert jede Zeile)"
|
|
476
|
+
"de": "⬆️ Importieren (validiert jede Zeile)",
|
|
477
|
+
"ru": "⬆️ Импортировать (проверяет каждую строку)",
|
|
478
|
+
"pt": "⬆️ Importar (valida cada linha)",
|
|
479
|
+
"nl": "⬆️ Importeren (valideert elke regel)",
|
|
480
|
+
"fr": "⬆️ Importer (valide chaque ligne)",
|
|
481
|
+
"it": "⬆️ Importa (convalida ogni riga)",
|
|
482
|
+
"es": "⬆️ Importar (valida cada línea)",
|
|
483
|
+
"pl": "⬆️ Importuj (waliduje każdą linię)",
|
|
484
|
+
"uk": "⬆️ Імпортувати (перевіряє кожен рядок)",
|
|
485
|
+
"zh-cn": "⬆️ 导入(校验每一行)"
|
|
324
486
|
},
|
|
325
487
|
"showProcess": true,
|
|
326
488
|
"sm": 12,
|
|
@@ -333,7 +495,16 @@
|
|
|
333
495
|
"type": "staticText",
|
|
334
496
|
"text": {
|
|
335
497
|
"en": "Valid lines are added ENABLED, invalid lines are reported and skipped. Duplicate hosts are rejected. After import the adapter restarts - close and reopen this dialog to see the new table rows.",
|
|
336
|
-
"de": "Gültige Zeilen werden AKTIVIERT übernommen, ungültige gemeldet und übersprungen. Doppelte Hosts werden abgelehnt. Nach dem Import startet der Adapter neu - Dialog schliessen und neu öffnen, um die neuen Tabellenzeilen zu sehen."
|
|
498
|
+
"de": "Gültige Zeilen werden AKTIVIERT übernommen, ungültige gemeldet und übersprungen. Doppelte Hosts werden abgelehnt. Nach dem Import startet der Adapter neu - Dialog schliessen und neu öffnen, um die neuen Tabellenzeilen zu sehen.",
|
|
499
|
+
"ru": "Корректные строки добавляются ВКЛЮЧЁННЫМИ, некорректные сообщаются и пропускаются. Дублирующиеся host отклоняются. После импорта адаптер перезапускается - закройте и снова откройте этот диалог, чтобы увидеть новые строки таблицы.",
|
|
500
|
+
"pt": "As linhas válidas são adicionadas ATIVADAS, as inválidas são reportadas e ignoradas. Hosts duplicados são rejeitados. Após a importação, o adaptador reinicia - feche e reabra este diálogo para ver as novas linhas da tabela.",
|
|
501
|
+
"nl": "Geldige regels worden INGESCHAKELD toegevoegd, ongeldige regels worden gemeld en overgeslagen. Dubbele hosts worden geweigerd. Na het importeren start de adapter opnieuw - sluit dit dialoogvenster en open het opnieuw om de nieuwe tabelrijen te zien.",
|
|
502
|
+
"fr": "Les lignes valides sont ajoutées ACTIVÉES, les lignes non valides sont signalées et ignorées. Les hôtes en double sont rejetés. Après l'import, l'adaptateur redémarre - fermez et rouvrez cette boîte de dialogue pour voir les nouvelles lignes du tableau.",
|
|
503
|
+
"it": "Le righe valide vengono aggiunte ABILITATE, quelle non valide vengono segnalate e saltate. Gli host duplicati vengono rifiutati. Dopo l'importazione l'adattatore si riavvia - chiudi e riapri questa finestra per vedere le nuove righe della tabella.",
|
|
504
|
+
"es": "Las líneas válidas se añaden ACTIVADAS, las no válidas se notifican y se omiten. Los hosts duplicados se rechazan. Tras la importación, el adaptador se reinicia - cierre y vuelva a abrir este diálogo para ver las nuevas filas de la tabla.",
|
|
505
|
+
"pl": "Prawidłowe linie są dodawane jako WŁĄCZONE, nieprawidłowe są zgłaszane i pomijane. Zduplikowane hosty są odrzucane. Po imporcie adapter uruchamia się ponownie - zamknij i ponownie otwórz to okno, aby zobaczyć nowe wiersze tabeli.",
|
|
506
|
+
"uk": "Коректні рядки додаються УВІМКНЕНИМИ, некоректні повідомляються та пропускаються. Дубльовані host відхиляються. Після імпорту адаптер перезапускається - закрийте і знову відкрийте це діалогове вікно, щоб побачити нові рядки таблиці.",
|
|
507
|
+
"zh-cn": "有效行将以「启用」状态添加,无效行将被报告并跳过。重复的 host 将被拒绝。导入后适配器会重启 - 请关闭并重新打开此对话框以查看新的表格行。"
|
|
337
508
|
},
|
|
338
509
|
"sm": 12,
|
|
339
510
|
"xs": 12,
|
|
@@ -347,18 +518,45 @@
|
|
|
347
518
|
"type": "panel",
|
|
348
519
|
"label": {
|
|
349
520
|
"en": "Expert",
|
|
350
|
-
"de": "Experten"
|
|
521
|
+
"de": "Experten",
|
|
522
|
+
"ru": "Эксперт",
|
|
523
|
+
"pt": "Especialista",
|
|
524
|
+
"nl": "Expert",
|
|
525
|
+
"fr": "Expert",
|
|
526
|
+
"it": "Esperto",
|
|
527
|
+
"es": "Experto",
|
|
528
|
+
"pl": "Ekspert",
|
|
529
|
+
"uk": "Експерт",
|
|
530
|
+
"zh-cn": "专家模式"
|
|
351
531
|
},
|
|
352
532
|
"items": {
|
|
353
533
|
"requestTimeout": {
|
|
354
534
|
"type": "number",
|
|
355
535
|
"label": {
|
|
356
536
|
"en": "HTTP timeout (ms)",
|
|
357
|
-
"de": "HTTP Timeout (ms)"
|
|
537
|
+
"de": "HTTP Timeout (ms)",
|
|
538
|
+
"ru": "HTTP таймаут (мс)",
|
|
539
|
+
"pt": "Tempo limite HTTP (ms)",
|
|
540
|
+
"nl": "HTTP-timeout (ms)",
|
|
541
|
+
"fr": "Délai HTTP (ms)",
|
|
542
|
+
"it": "Timeout HTTP (ms)",
|
|
543
|
+
"es": "Tiempo de espera HTTP (ms)",
|
|
544
|
+
"pl": "Limit czasu HTTP (ms)",
|
|
545
|
+
"uk": "HTTP тайм-аут (мс)",
|
|
546
|
+
"zh-cn": "HTTP 超时(毫秒)"
|
|
358
547
|
},
|
|
359
548
|
"help": {
|
|
360
549
|
"en": "Timeout per request to a device (does not apply to the chnotify long-poll, which uses a fixed 35s).",
|
|
361
|
-
"de": "Timeout pro Request an ein Gerät (gilt nicht für den chnotify-Long-Poll, der fix 35s verwendet)."
|
|
550
|
+
"de": "Timeout pro Request an ein Gerät (gilt nicht für den chnotify-Long-Poll, der fix 35s verwendet).",
|
|
551
|
+
"ru": "Таймаут для каждого запроса к устройству (не применяется к long-poll chnotify, который использует фиксированные 35с).",
|
|
552
|
+
"pt": "Tempo limite por pedido a um dispositivo (não se aplica ao long-poll chnotify, que usa 35s fixos).",
|
|
553
|
+
"nl": "Timeout per verzoek naar een apparaat (geldt niet voor de chnotify long-poll, die een vaste 35s gebruikt).",
|
|
554
|
+
"fr": "Délai par requête vers un appareil (ne s'applique pas au long-poll chnotify, qui utilise un délai fixe de 35s).",
|
|
555
|
+
"it": "Timeout per richiesta a un dispositivo (non si applica al long-poll chnotify, che usa un valore fisso di 35s).",
|
|
556
|
+
"es": "Tiempo de espera por solicitud a un dispositivo (no se aplica al long-poll chnotify, que usa 35s fijos).",
|
|
557
|
+
"pl": "Limit czasu na żądanie do urządzenia (nie dotyczy long-poll chnotify, który używa stałych 35s).",
|
|
558
|
+
"uk": "Тайм-аут для кожного запиту до пристрою (не застосовується до long-poll chnotify, який використовує фіксовані 35с).",
|
|
559
|
+
"zh-cn": "每次请求设备的超时时间(不适用于固定使用 35 秒的 chnotify 长轮询)。"
|
|
362
560
|
},
|
|
363
561
|
"min": 500,
|
|
364
562
|
"max": 30000,
|
|
@@ -374,11 +572,29 @@
|
|
|
374
572
|
"type": "checkbox",
|
|
375
573
|
"label": {
|
|
376
574
|
"en": "Use chnotify long-poll (near real-time updates)",
|
|
377
|
-
"de": "chnotify-Long-Poll verwenden (nahezu Echtzeit-Updates)"
|
|
575
|
+
"de": "chnotify-Long-Poll verwenden (nahezu Echtzeit-Updates)",
|
|
576
|
+
"ru": "Использовать long-poll chnotify (обновления почти в реальном времени)",
|
|
577
|
+
"pt": "Usar long-poll chnotify (atualizações quase em tempo real)",
|
|
578
|
+
"nl": "chnotify long-poll gebruiken (bijna realtime updates)",
|
|
579
|
+
"fr": "Utiliser le long-poll chnotify (mises à jour quasi temps réel)",
|
|
580
|
+
"it": "Usa long-poll chnotify (aggiornamenti quasi in tempo reale)",
|
|
581
|
+
"es": "Usar long-poll chnotify (actualizaciones casi en tiempo real)",
|
|
582
|
+
"pl": "Użyj long-poll chnotify (aktualizacje niemal w czasie rzeczywistym)",
|
|
583
|
+
"uk": "Використовувати long-poll chnotify (оновлення майже в реальному часі)",
|
|
584
|
+
"zh-cn": "使用 chnotify 长轮询(近实时更新)"
|
|
378
585
|
},
|
|
379
586
|
"help": {
|
|
380
587
|
"en": "Keeps one HTTP connection per device permanently open (device answers within 30s at the latest). Disable only if devices show connection problems; channel states then update only at the poll interval.",
|
|
381
|
-
"de": "Hält dauerhaft eine HTTP-Verbindung pro Gerät offen (Gerät antwortet spätestens nach 30s). Nur deaktivieren, falls Geräte Verbindungsprobleme zeigen; Kanalzustände aktualisieren dann nur noch im Poll-Intervall."
|
|
588
|
+
"de": "Hält dauerhaft eine HTTP-Verbindung pro Gerät offen (Gerät antwortet spätestens nach 30s). Nur deaktivieren, falls Geräte Verbindungsprobleme zeigen; Kanalzustände aktualisieren dann nur noch im Poll-Intervall.",
|
|
589
|
+
"ru": "Постоянно держит одно HTTP-соединение на устройство открытым (устройство отвечает не позднее чем через 30с). Отключайте только если устройства показывают проблемы соединения; тогда состояния каналов обновляются лишь по интервалу опроса.",
|
|
590
|
+
"pt": "Mantém uma ligação HTTP por dispositivo permanentemente aberta (o dispositivo responde no máximo em 30s). Desative apenas se os dispositivos apresentarem problemas de ligação; os estados dos canais então só se atualizam no intervalo de sondagem.",
|
|
591
|
+
"nl": "Houdt permanent één HTTP-verbinding per apparaat open (apparaat antwoordt uiterlijk na 30s). Alleen uitschakelen als apparaten verbindingsproblemen vertonen; kanaaltoestanden worden dan alleen bijgewerkt volgens het poll-interval.",
|
|
592
|
+
"fr": "Maintient une connexion HTTP par appareil ouverte en permanence (l'appareil répond au plus tard après 30s). À désactiver uniquement si les appareils présentent des problèmes de connexion ; les états des canaux ne se mettent alors à jour qu'à l'intervalle d'interrogation.",
|
|
593
|
+
"it": "Mantiene aperta permanentemente una connessione HTTP per dispositivo (il dispositivo risponde entro 30s al massimo). Disabilita solo se i dispositivi mostrano problemi di connessione; gli stati dei canali si aggiornano quindi solo all'intervallo di polling.",
|
|
594
|
+
"es": "Mantiene abierta permanentemente una conexión HTTP por dispositivo (el dispositivo responde como máximo en 30s). Desactive solo si los dispositivos muestran problemas de conexión; los estados de canal entonces solo se actualizan según el intervalo de sondeo.",
|
|
595
|
+
"pl": "Utrzymuje stale otwarte jedno połączenie HTTP na urządzenie (urządzenie odpowiada najpóźniej po 30s). Wyłączaj tylko wtedy, gdy urządzenia wykazują problemy z połączeniem; wówczas stany kanałów aktualizują się jedynie zgodnie z interwałem odpytywania.",
|
|
596
|
+
"uk": "Постійно тримає одне HTTP-з'єднання на пристрій відкритим (пристрій відповідає не пізніше ніж за 30с). Вимикайте лише якщо пристрої мають проблеми зі з'єднанням; тоді стани каналів оновлюються лише за інтервалом опитування.",
|
|
597
|
+
"zh-cn": "为每台设备永久保持一个 HTTP 连接开启(设备最迟 30 秒内响应)。仅在设备出现连接问题时才禁用;禁用后通道状态将仅按轮询间隔更新。"
|
|
382
598
|
},
|
|
383
599
|
"default": true,
|
|
384
600
|
"sm": 12,
|
|
@@ -392,7 +608,16 @@
|
|
|
392
608
|
"type": "staticText",
|
|
393
609
|
"text": {
|
|
394
610
|
"en": "⚠️ Safety: the factory reset button (system.factoryDefault) is interlocked - it only works within 30s after setting system.unlock. This prevents accidental wipes from scripts/VIS.",
|
|
395
|
-
"de": "⚠️ Sicherheit: der Werksreset-Button (system.factoryDefault) ist verriegelt - er funktioniert nur innerhalb von 30s nach Setzen von system.unlock. Das verhindert versehentliches Löschen durch Scripts/VIS."
|
|
611
|
+
"de": "⚠️ Sicherheit: der Werksreset-Button (system.factoryDefault) ist verriegelt - er funktioniert nur innerhalb von 30s nach Setzen von system.unlock. Das verhindert versehentliches Löschen durch Scripts/VIS.",
|
|
612
|
+
"ru": "⚠️ Безопасность: кнопка сброса к заводским настройкам (system.factoryDefault) заблокирована - она работает только в течение 30с после установки system.unlock. Это предотвращает случайное удаление данных через скрипты/VIS.",
|
|
613
|
+
"pt": "⚠️ Segurança: o botão de reposição de fábrica (system.factoryDefault) está bloqueado - só funciona nos 30s seguintes à definição de system.unlock. Isto evita apagamentos acidentais por scripts/VIS.",
|
|
614
|
+
"nl": "⚠️ Veiligheid: de fabrieksresetknop (system.factoryDefault) is vergrendeld - werkt alleen binnen 30s na het instellen van system.unlock. Dit voorkomt onbedoeld wissen door scripts/VIS.",
|
|
615
|
+
"fr": "⚠️ Sécurité : le bouton de réinitialisation d'usine (system.factoryDefault) est verrouillé - il ne fonctionne que dans les 30s suivant la définition de system.unlock. Cela évite les effacements accidentels par des scripts/VIS.",
|
|
616
|
+
"it": "⚠️ Sicurezza: il pulsante di ripristino di fabbrica (system.factoryDefault) è bloccato - funziona solo entro 30s dall'impostazione di system.unlock. Questo previene cancellazioni accidentali da script/VIS.",
|
|
617
|
+
"es": "⚠️ Seguridad: el botón de restablecimiento de fábrica (system.factoryDefault) está bloqueado - solo funciona dentro de los 30s posteriores a establecer system.unlock. Esto evita borrados accidentales desde scripts/VIS.",
|
|
618
|
+
"pl": "⚠️ Bezpieczeństwo: przycisk przywracania ustawień fabrycznych (system.factoryDefault) jest zablokowany - działa tylko w ciągu 30s od ustawienia system.unlock. Zapobiega to przypadkowemu wyczyszczeniu przez skrypty/VIS.",
|
|
619
|
+
"uk": "⚠️ Безпека: кнопка скидання до заводських налаштувань (system.factoryDefault) заблокована - вона працює лише протягом 30с після встановлення system.unlock. Це запобігає випадковому видаленню через скрипти/VIS.",
|
|
620
|
+
"zh-cn": "⚠️ 安全提示:恢复出厂设置按钮(system.factoryDefault)已加锁 - 仅在设置 system.unlock 后的 30 秒内有效。这可防止脚本/VIS 意外触发清除操作。"
|
|
396
621
|
},
|
|
397
622
|
"sm": 12,
|
|
398
623
|
"xs": 12,
|
package/io-package.json
CHANGED
|
@@ -1,11 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "zeptrion",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.6",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.8.6": {
|
|
7
|
+
"en": "Corrected object role/type mismatches found by the ioBroker store submission's object structure check: calibrate and ntp.per used role 'value', which strictly requires read=true/write=false and does not fit these intentionally writable states - changed to role 'level'. Also added the missing full i18n translation for info.connection. No functional/API changes - purely metadata (common.role/common.name) corrections.",
|
|
8
|
+
"de": "Objekt-Rollen-/Typ-Abweichungen behoben, die beim Objektstruktur-Check der ioBroker-Store-Einreichung gefunden wurden: calibrate und ntp.per nutzten die Rolle 'value', die zwingend read=true/write=false erfordert und nicht zu diesen bewusst schreibbaren States passt - auf Rolle 'level' umgestellt. Zusätzlich die fehlende vollständige i18n-Übersetzung für info.connection ergänzt. Keine funktionalen/API-Änderungen - reine Metadaten-Korrekturen (common.role/common.name).",
|
|
9
|
+
"ru": "Исправлены несоответствия ролей/типов объектов, найденных при проверке структуры объектов для подачи в магазин ioBroker: calibrate и ntp.per использовали роль 'value', которая строго требует read=true/write=false и не подходит для этих намеренно записываемых состояний - изменено на роль 'level'. Также добавлен отсутствующий полный перевод i18n для info.connection.",
|
|
10
|
+
"pt": "Corrigidas incompatibilidades de função/tipo de objeto encontradas na verificação da estrutura de objetos da submissão à loja ioBroker: calibrate e ntp.per usavam a função 'value', que exige estritamente read=true/write=false e não se adequa a estes estados intencionalmente graváveis - alterado para a função 'level'. Também foi adicionada a tradução i18n completa em falta para info.connection.",
|
|
11
|
+
"nl": "Object rol/type-mismatches gecorrigeerd die zijn gevonden bij de objectstructuurcontrole van de ioBroker store-inzending: calibrate en ntp.per gebruikten de rol 'value', die strikt read=true/write=false vereist en niet past bij deze bewust schrijfbare states - gewijzigd naar rol 'level'. Ook de ontbrekende volledige i18n-vertaling voor info.connection toegevoegd.",
|
|
12
|
+
"fr": "Correction des incohérences de rôle/type d'objet détectées lors de la vérification de la structure des objets pour la soumission au store ioBroker : calibrate et ntp.per utilisaient le rôle 'value', qui exige strictement read=true/write=false et ne convient pas à ces états volontairement modifiables - changé en rôle 'level'. La traduction i18n complète manquante pour info.connection a également été ajoutée.",
|
|
13
|
+
"it": "Corrette le discrepanze di ruolo/tipo degli oggetti riscontrate durante il controllo della struttura degli oggetti per l'invio allo store ioBroker: calibrate e ntp.per utilizzavano il ruolo 'value', che richiede rigorosamente read=true/write=false e non si adatta a questi stati intenzionalmente scrivibili - cambiato in ruolo 'level'. Aggiunta anche la traduzione i18n completa mancante per info.connection.",
|
|
14
|
+
"es": "Se corrigieron discrepancias de rol/tipo de objeto encontradas en la verificación de estructura de objetos del envío a la tienda ioBroker: calibrate y ntp.per usaban el rol 'value', que requiere estrictamente read=true/write=false y no encaja con estos estados intencionalmente escribibles - cambiado a rol 'level'. También se añadió la traducción i18n completa faltante para info.connection.",
|
|
15
|
+
"pl": "Naprawiono niezgodności ról/typów obiektów wykryte podczas sprawdzania struktury obiektów zgłoszenia do sklepu ioBroker: calibrate i ntp.per używały roli 'value', która wymaga ściśle read=true/write=false i nie pasuje do tych celowo zapisywalnych stanów - zmieniono na rolę 'level'. Dodano również brakujące pełne tłumaczenie i18n dla info.connection.",
|
|
16
|
+
"uk": "Виправлено невідповідності ролей/типів об'єктів, знайдені під час перевірки структури об'єктів для подання до магазину ioBroker: calibrate і ntp.per використовували роль 'value', яка суворо вимагає read=true/write=false і не підходить для цих навмисно записуваних станів - змінено на роль 'level'. Також додано відсутній повний переклад i18n для info.connection.",
|
|
17
|
+
"zh-cn": "修复了在 ioBroker 商店提交的对象结构检查中发现的对象角色/类型不匹配问题:calibrate 和 ntp.per 使用了角色 'value',该角色严格要求 read=true/write=false,不适合这些故意可写的状态——已更改为角色 'level'。同时还补充了 info.connection 缺失的完整 i18n 翻译。"
|
|
18
|
+
},
|
|
19
|
+
"0.8.5": {
|
|
20
|
+
"en": "Enabled automated npm releases via GitHub Actions using npm Trusted Publishing (OIDC) - no more manual publishing, and this and all future tagged releases are automatically signed with npm provenance. No functional/API changes.",
|
|
21
|
+
"de": "Automatisierte npm-Releases über GitHub Actions mittels npm Trusted Publishing (OIDC) aktiviert - kein manuelles Veröffentlichen mehr nötig, dieses und alle künftigen getaggten Releases werden automatisch mit npm-Provenance signiert. Keine funktionalen Änderungen/API-Änderungen.",
|
|
22
|
+
"ru": "Включены автоматические релизы на npm через GitHub Actions с использованием npm Trusted Publishing (OIDC) - больше не требуется ручная публикация, этот и все будущие релизы с тегами автоматически подписываются npm provenance. Без функциональных изменений.",
|
|
23
|
+
"pt": "Ativados os lançamentos automáticos no npm via GitHub Actions usando npm Trusted Publishing (OIDC) - já não é necessária a publicação manual, esta e todas as futuras versões com tag são automaticamente assinadas com npm provenance. Sem alterações funcionais/de API.",
|
|
24
|
+
"nl": "Geautomatiseerde npm-releases via GitHub Actions ingeschakeld met npm Trusted Publishing (OIDC) - handmatig publiceren is niet meer nodig, deze en alle toekomstige getagde releases worden automatisch ondertekend met npm provenance. Geen functionele/API-wijzigingen.",
|
|
25
|
+
"fr": "Publications npm automatisées via GitHub Actions activées grâce à npm Trusted Publishing (OIDC) - plus besoin de publier manuellement, cette version et toutes les futures versions taguées sont automatiquement signées avec la provenance npm. Aucun changement fonctionnel/API.",
|
|
26
|
+
"it": "Abilitate le release npm automatizzate tramite GitHub Actions usando npm Trusted Publishing (OIDC) - non è più necessaria la pubblicazione manuale, questa e tutte le future release taggate vengono firmate automaticamente con la provenance npm. Nessuna modifica funzionale/API.",
|
|
27
|
+
"es": "Se habilitaron los lanzamientos automáticos de npm mediante GitHub Actions usando npm Trusted Publishing (OIDC) - ya no es necesario publicar manualmente, esta y todas las futuras versiones etiquetadas se firman automáticamente con la procedencia de npm. Sin cambios funcionales/de API.",
|
|
28
|
+
"pl": "Włączono automatyczne wydania npm za pośrednictwem GitHub Actions przy użyciu npm Trusted Publishing (OIDC) - ręczna publikacja nie jest już konieczna, to i wszystkie przyszłe otagowane wydania są automatycznie podpisywane provenance npm. Brak zmian funkcjonalnych/API.",
|
|
29
|
+
"uk": "Увімкнено автоматичні релізи npm через GitHub Actions за допомогою npm Trusted Publishing (OIDC) - ручна публікація більше не потрібна, цей і всі майбутні релізи з тегами автоматично підписуються npm provenance. Без функціональних змін.",
|
|
30
|
+
"zh-cn": "已通过 GitHub Actions 使用 npm Trusted Publishing(OIDC)启用自动化 npm 发布——不再需要手动发布,此版本及所有未来的带标签版本都将自动附带 npm provenance 签名。无功能/API 变更。"
|
|
31
|
+
},
|
|
6
32
|
"0.8.4": {
|
|
7
33
|
"en": "Cleanup release addressing the ioBroker adapter store checker findings, no functional/behavioral changes. Updated fast-xml-parser 4.5.7 -> 5.9.3, eslint, mocha, chai and the testing-action-check GitHub Action (verified identical XML parsing output for the zrap API response shapes used by this adapter). Removed devDependencies already bundled by @iobroker/testing. Fixed jsonConfig.json i18n declaration (was 'true' without an admin/i18n directory) and added missing translations for the work area 'kind' dropdown options. Added package-lock.json and aligned dependabot.yml/auto-merge workflow with the current ioBroker-Bot templates.",
|
|
8
|
-
"de": "Aufräum-Release zur Behebung der ioBroker-Store-Checker-Befunde, keine funktionalen/verhaltensändernden Anpassungen. fast-xml-parser 4.5.7 -> 5.9.3, eslint, mocha, chai sowie die testing-action-check GitHub Action aktualisiert (identische XML-Parser-Ausgabe für die von diesem Adapter genutzten zrap-API-Antwortformate verifiziert). Bereits über @iobroker/testing enthaltene devDependencies entfernt. jsonConfig.json-i18n-Deklaration korrigiert (stand auf 'true' ohne admin/i18n-Verzeichnis) und fehlende Übersetzungen der Mähbereich-\"kind\"-Dropdown-Optionen ergänzt. package-lock.json hinzugefügt und dependabot.yml/Auto-Merge-Workflow an die aktuellen ioBroker-Bot-Vorlagen angeglichen."
|
|
34
|
+
"de": "Aufräum-Release zur Behebung der ioBroker-Store-Checker-Befunde, keine funktionalen/verhaltensändernden Anpassungen. fast-xml-parser 4.5.7 -> 5.9.3, eslint, mocha, chai sowie die testing-action-check GitHub Action aktualisiert (identische XML-Parser-Ausgabe für die von diesem Adapter genutzten zrap-API-Antwortformate verifiziert). Bereits über @iobroker/testing enthaltene devDependencies entfernt. jsonConfig.json-i18n-Deklaration korrigiert (stand auf 'true' ohne admin/i18n-Verzeichnis) und fehlende Übersetzungen der Mähbereich-\"kind\"-Dropdown-Optionen ergänzt. package-lock.json hinzugefügt und dependabot.yml/Auto-Merge-Workflow an die aktuellen ioBroker-Bot-Vorlagen angeglichen.",
|
|
35
|
+
"ru": "Релиз для устранения замечаний проверки репозитория ioBroker, без функциональных изменений. Обновлены fast-xml-parser (4.5.7 -> 5.9.3), eslint, mocha, chai и GitHub Action testing-action-check (проверен идентичный результат разбора XML для форматов ответов API zrap, используемых адаптером). Удалены devDependencies, уже включённые в @iobroker/testing. Исправлена декларация i18n в jsonConfig.json (была 'true' без каталога admin/i18n), добавлены недостающие переводы для выпадающего списка 'kind'. Добавлен package-lock.json, dependabot.yml/workflow автослияния приведены в соответствие с актуальными шаблонами ioBroker-Bot.",
|
|
36
|
+
"pt": "Versão de limpeza para resolver os problemas do verificador da loja de adaptadores ioBroker, sem alterações funcionais/de comportamento. Atualizados fast-xml-parser (4.5.7 -> 5.9.3), eslint, mocha, chai e a GitHub Action testing-action-check (saída de análise XML idêntica verificada para os formatos de resposta da API zrap usados por este adaptador). Removidas devDependencies já incluídas em @iobroker/testing. Corrigida a declaração i18n em jsonConfig.json (estava 'true' sem diretório admin/i18n) e adicionadas traduções em falta para as opções do menu 'kind'. Adicionado package-lock.json e dependabot.yml/workflow de auto-merge alinhados com os modelos atuais do ioBroker-Bot.",
|
|
37
|
+
"nl": "Opschoonrelease voor de bevindingen van de ioBroker adapter store checker, geen functionele/gedragswijzigingen. fast-xml-parser (4.5.7 -> 5.9.3), eslint, mocha, chai en de testing-action-check GitHub Action bijgewerkt (identieke XML-parseeruitvoer geverifieerd voor de door deze adapter gebruikte zrap API-antwoordformaten). devDependencies die al door @iobroker/testing worden meegeleverd verwijderd. i18n-declaratie in jsonConfig.json gecorrigeerd (stond op 'true' zonder admin/i18n-map) en ontbrekende vertalingen voor de 'kind'-keuzelijst toegevoegd. package-lock.json toegevoegd en dependabot.yml/auto-merge workflow afgestemd op de huidige ioBroker-Bot-sjablonen.",
|
|
38
|
+
"fr": "Version de nettoyage traitant les remarques du vérificateur du dépôt d'adaptateurs ioBroker, sans changement fonctionnel/de comportement. Mise à jour de fast-xml-parser (4.5.7 -> 5.9.3), eslint, mocha, chai et de l'action GitHub testing-action-check (sortie d'analyse XML identique vérifiée pour les formats de réponse de l'API zrap utilisés par cet adaptateur). Suppression des devDependencies déjà incluses par @iobroker/testing. Correction de la déclaration i18n dans jsonConfig.json (était 'true' sans répertoire admin/i18n) et ajout des traductions manquantes pour la liste déroulante 'kind'. Ajout de package-lock.json et alignement du workflow dependabot.yml/auto-merge sur les modèles standard actuels d'ioBroker-Bot.",
|
|
39
|
+
"it": "Versione di pulizia per risolvere le segnalazioni del checker dello store degli adattatori ioBroker, senza modifiche funzionali/comportamentali. Aggiornati fast-xml-parser (4.5.7 -> 5.9.3), eslint, mocha, chai e la GitHub Action testing-action-check (verificato output di parsing XML identico per i formati di risposta dell'API zrap usati da questo adattatore). Rimosse le devDependencies già incluse in @iobroker/testing. Corretta la dichiarazione i18n in jsonConfig.json (era 'true' senza directory admin/i18n) e aggiunte le traduzioni mancanti per le opzioni del menu a tendina 'kind'. Aggiunto package-lock.json e allineati dependabot.yml/workflow di auto-merge ai modelli standard attuali di ioBroker-Bot.",
|
|
40
|
+
"es": "Versión de limpieza que aborda los hallazgos del verificador de la tienda de adaptadores ioBroker, sin cambios funcionales/de comportamiento. Se actualizaron fast-xml-parser (4.5.7 -> 5.9.3), eslint, mocha, chai y la GitHub Action testing-action-check (se verificó una salida de análisis XML idéntica para los formatos de respuesta de la API zrap utilizados por este adaptador). Se eliminaron devDependencies ya incluidas en @iobroker/testing. Se corrigió la declaración i18n en jsonConfig.json (estaba en 'true' sin directorio admin/i18n) y se añadieron las traducciones faltantes para las opciones del menú desplegable 'kind'. Se añadió package-lock.json y se alinearon dependabot.yml/el flujo de auto-merge con las plantillas estándar actuales de ioBroker-Bot.",
|
|
41
|
+
"pl": "Wydanie porządkujące, usuwające uwagi weryfikatora repozytorium adapterów ioBroker, bez zmian funkcjonalnych/behawioralnych. Zaktualizowano fast-xml-parser (4.5.7 -> 5.9.3), eslint, mocha, chai oraz akcję GitHub testing-action-check (zweryfikowano identyczny wynik parsowania XML dla formatów odpowiedzi API zrap używanych przez ten adapter). Usunięto devDependencies już zawarte w @iobroker/testing. Poprawiono deklarację i18n w jsonConfig.json (była ustawiona na 'true' bez katalogu admin/i18n) i dodano brakujące tłumaczenia dla listy rozwijanej 'kind'. Dodano package-lock.json oraz dostosowano dependabot.yml/workflow auto-merge do aktualnych standardowych szablonów ioBroker-Bot.",
|
|
42
|
+
"uk": "Реліз для усунення зауважень перевірки репозиторію ioBroker, без функціональних змін. Оновлено fast-xml-parser (4.5.7 -> 5.9.3), eslint, mocha, chai та GitHub Action testing-action-check (перевірено ідентичний результат розбору XML для форматів відповідей API zrap, які використовує цей адаптер). Видалено devDependencies, які вже включені до @iobroker/testing. Виправлено декларацію i18n у jsonConfig.json (була 'true' без каталогу admin/i18n), додано відсутні переклади для випадаючого списку 'kind'. Додано package-lock.json, dependabot.yml/workflow автозлиття узгоджено з актуальними шаблонами ioBroker-Bot.",
|
|
43
|
+
"zh-cn": "清理版本,修复 ioBroker 适配器商店检查器发现的问题,无功能/行为变更。更新了 fast-xml-parser(4.5.7 -> 5.9.3)、eslint、mocha、chai 及 testing-action-check GitHub Action(已验证该适配器所用 zrap API 响应格式的 XML 解析输出保持一致)。移除了 @iobroker/testing 已包含的 devDependencies。修正了 jsonConfig.json 中的 i18n 声明(之前为 'true' 但缺少 admin/i18n 目录),并为「kind」下拉选项补充了缺失的翻译。新增了 package-lock.json,并将 dependabot.yml/自动合并工作流与当前 ioBroker-Bot 标准模板对齐。"
|
|
9
44
|
},
|
|
10
45
|
"0.8.3": {
|
|
11
46
|
"en": "CI workflow activated (lint + tests on every push/PR via GitHub Actions), removed redundant duplicate icon file at repo root (only admin/zeptrion.png is used), cleaned up outdated publish instructions in README",
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// This file extends the AdapterConfig type from "@types/iobroker"
|
|
2
|
+
// using the actual properties present in io-package.json
|
|
3
|
+
// in order to provide typings for adapter.config properties
|
|
4
|
+
|
|
5
|
+
import { native } from '../io-package.json';
|
|
6
|
+
|
|
7
|
+
type _AdapterConfig = typeof native;
|
|
8
|
+
|
|
9
|
+
// Augment the globally declared type ioBroker.AdapterConfig
|
|
10
|
+
declare global {
|
|
11
|
+
namespace ioBroker {
|
|
12
|
+
interface AdapterConfig extends _AdapterConfig {
|
|
13
|
+
// Do not enter anything here!
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// this is required so the above AdapterConfig is found by TypeScript / type checking
|
|
19
|
+
export {};
|
package/main.js
CHANGED
|
@@ -123,7 +123,7 @@ class Zeptrion extends utils.Adapter {
|
|
|
123
123
|
async onReady() {
|
|
124
124
|
await this.setStateAsync('info.connection', { val: false, ack: true });
|
|
125
125
|
|
|
126
|
-
const timeout = parseInt(this.config.requestTimeout, 10) || 4000;
|
|
126
|
+
const timeout = parseInt(String(this.config.requestTimeout), 10) || 4000;
|
|
127
127
|
this.requestTimeout = Math.min(Math.max(timeout, 500), 30000);
|
|
128
128
|
|
|
129
129
|
const devicesCfg = Array.isArray(this.config.devices) ? this.config.devices : [];
|
|
@@ -395,7 +395,22 @@ class Zeptrion extends utils.Adapter {
|
|
|
395
395
|
|
|
396
396
|
// --- info ---
|
|
397
397
|
await this.setObjectNotExistsAsync(`${id}.info`, { type: 'channel', common: { name: 'Geräteinformationen' }, native: {} });
|
|
398
|
-
await this.ensureState(`${id}.info.connection`, {
|
|
398
|
+
await this.ensureState(`${id}.info.connection`, {
|
|
399
|
+
name: {
|
|
400
|
+
en: 'Connection OK',
|
|
401
|
+
de: 'Verbindung OK',
|
|
402
|
+
ru: 'Соединение в порядке',
|
|
403
|
+
pt: 'Ligação OK',
|
|
404
|
+
nl: 'Verbinding OK',
|
|
405
|
+
fr: 'Connexion OK',
|
|
406
|
+
it: 'Connessione OK',
|
|
407
|
+
es: 'Conexión OK',
|
|
408
|
+
pl: 'Połączenie OK',
|
|
409
|
+
uk: "З'єднання в порядку",
|
|
410
|
+
'zh-cn': '连接正常'
|
|
411
|
+
},
|
|
412
|
+
type: 'boolean', role: 'indicator.reachable', read: true, write: false, def: false
|
|
413
|
+
});
|
|
399
414
|
await this.ensureState(`${id}.info.lastError`, { name: 'Letzter Fehler', type: 'string', role: 'text', read: true, write: false, def: '' });
|
|
400
415
|
await this.ensureState(`${id}.info.hw`, { name: 'Hardware-Version', type: 'string', role: 'info.hardware', read: true, write: false });
|
|
401
416
|
await this.ensureState(`${id}.info.sw`, { name: 'Software-Version', type: 'string', role: 'info.firmware', read: true, write: false });
|
|
@@ -435,7 +450,7 @@ class Zeptrion extends utils.Adapter {
|
|
|
435
450
|
// --- ntp (zrap/ntp) ---
|
|
436
451
|
await this.setObjectNotExistsAsync(`${id}.ntp`, { type: 'channel', common: { name: 'NTP' }, native: {} });
|
|
437
452
|
await this.ensureState(`${id}.ntp.url`, { name: 'NTP-Server (URL/IP, max. 32 Zeichen)', type: 'string', role: 'text', read: true, write: true });
|
|
438
|
-
await this.ensureState(`${id}.ntp.per`, { name: 'Abfrageintervall in Stunden (0=deaktiviert)', type: 'number', role: '
|
|
453
|
+
await this.ensureState(`${id}.ntp.per`, { name: 'Abfrageintervall in Stunden (0=deaktiviert)', type: 'number', role: 'level', read: true, write: true, min: 0, max: 255 });
|
|
439
454
|
|
|
440
455
|
// --- date (zrap/date) ---
|
|
441
456
|
await this.setObjectNotExistsAsync(`${id}.date`, { type: 'channel', common: { name: 'Datum/Zeit' }, native: {} });
|
|
@@ -513,7 +528,7 @@ class Zeptrion extends utils.Adapter {
|
|
|
513
528
|
});
|
|
514
529
|
await this.ensureState(`${ch}.calibrate`, {
|
|
515
530
|
name: 'Schätzung setzen OHNE Fahrt (z.B. nach manueller Bedienung am Wandtaster): aktuellen Ist-Zustand in % eintragen',
|
|
516
|
-
type: 'number', role: '
|
|
531
|
+
type: 'number', role: 'level', min: 0, max: 100, read: false, write: true
|
|
517
532
|
});
|
|
518
533
|
await this.extendObjectAsync(`${ch}.tiltOpen`, {
|
|
519
534
|
type: 'state',
|
|
@@ -1519,13 +1534,13 @@ class Zeptrion extends utils.Adapter {
|
|
|
1519
1534
|
id: candidate,
|
|
1520
1535
|
name: row.name || row.host,
|
|
1521
1536
|
host: row.host,
|
|
1522
|
-
channels: parseInt(row.channels, 10) || 1,
|
|
1537
|
+
channels: parseInt(String(row.channels), 10) || 1,
|
|
1523
1538
|
kind: row.kind,
|
|
1524
|
-
travelTimeSec: parseInt(row.travelTimeSec, 10) || 0,
|
|
1539
|
+
travelTimeSec: parseInt(String(row.travelTimeSec), 10) || 0,
|
|
1525
1540
|
travelTimeSecCh: String(row.travelTimeSecCh || '').trim(),
|
|
1526
|
-
tiltTimeMs: parseInt(row.tiltTimeMs, 10) || 0,
|
|
1541
|
+
tiltTimeMs: parseInt(String(row.tiltTimeMs), 10) || 0,
|
|
1527
1542
|
smartfront: row.smartfront,
|
|
1528
|
-
pollInterval: parseInt(row.pollInterval, 10) || 30
|
|
1543
|
+
pollInterval: parseInt(String(row.pollInterval), 10) || 30
|
|
1529
1544
|
});
|
|
1530
1545
|
existingHosts.add(row.host.toLowerCase());
|
|
1531
1546
|
existingIds.add(candidate);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.zeptrion",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.6",
|
|
4
4
|
"description": "ioBroker Adapter für Feller zeptrion / zApp WLAN-Aktoren (WLAN-Nebenstelle 4K, WLAN-Zwischenmodul 2K) über die zrap Webservice API - inkl. Sammelbefehlen für Hagelalarm und mDNS-Discovery",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Stefan",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"files": [
|
|
32
32
|
"admin/",
|
|
33
33
|
"main.js",
|
|
34
|
+
"lib/",
|
|
34
35
|
"io-package.json",
|
|
35
36
|
"LICENSE"
|
|
36
37
|
],
|
|
@@ -45,7 +46,9 @@
|
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
48
|
"@iobroker/testing": "^5.3.0",
|
|
48
|
-
"eslint": "^10.6.0"
|
|
49
|
+
"eslint": "^10.6.0",
|
|
50
|
+
"@tsconfig/node22": "^22.0.5",
|
|
51
|
+
"@types/node": "^22.20.1"
|
|
49
52
|
},
|
|
50
53
|
"scripts": {
|
|
51
54
|
"start": "node main.js",
|
|
@@ -55,4 +58,4 @@
|
|
|
55
58
|
"test:integration": "mocha test/integration.js --exit --timeout 60000",
|
|
56
59
|
"test": "npm run test:package && npm run test:unit"
|
|
57
60
|
}
|
|
58
|
-
}
|
|
61
|
+
}
|