iobroker.zigbee 1.10.2 → 1.10.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.md +61 -20
- package/admin/adapter-settings.js +105 -18
- package/admin/admin.js +77 -45
- package/admin/i18n/de/translations.json +1 -1
- package/admin/i18n/en/translations.json +1 -1
- package/admin/i18n/fr/translations.json +1 -1
- package/admin/i18n/nl/translations.json +1 -1
- package/admin/i18n/pl/translations.json +1 -1
- package/admin/i18n/pt/translations.json +1 -1
- package/admin/img/E2204.png +0 -0
- package/admin/img/group_1.png +0 -0
- package/admin/img/group_2.png +0 -0
- package/admin/img/group_3.png +0 -0
- package/admin/img/group_4.png +0 -0
- package/admin/img/group_5.png +0 -0
- package/admin/img/group_6.png +0 -0
- package/admin/img/group_7.png +0 -0
- package/admin/img/ikea_symfonisk_remote_gen2.png +0 -0
- package/admin/img/next_track.png +0 -0
- package/admin/img/play_pause.png +0 -0
- package/admin/img/previous_track.png +0 -0
- package/admin/index_m.html +286 -32
- package/admin/tab_m.html +312 -7
- package/admin/words.js +2 -2
- package/docs/de/readme.md +15 -16
- package/docs/en/readme.md +19 -19
- package/io-package.json +112 -101
- package/lib/backup.js +1 -2
- package/lib/binding.js +28 -26
- package/lib/commands.js +79 -74
- package/lib/developer.js +6 -2
- package/lib/devices.js +14 -2
- package/lib/groups.js +1 -25
- package/lib/ota.js +2 -2
- package/lib/states.js +194 -2
- package/lib/statescontroller.js +48 -39
- package/lib/utils.js +4 -1
- package/lib/zigbeecontroller.js +76 -28
- package/main.js +61 -12
- package/package.json +17 -16
- package/support/docgen.js +3 -1
package/io-package.json
CHANGED
|
@@ -1,98 +1,98 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "zigbee",
|
|
4
|
-
"version": "1.10.
|
|
4
|
+
"version": "1.10.11",
|
|
5
5
|
"news": {
|
|
6
|
-
"1.10.
|
|
7
|
-
"en": "
|
|
8
|
-
"de": "
|
|
9
|
-
"ru": "
|
|
10
|
-
"pt": "
|
|
11
|
-
"nl": "
|
|
12
|
-
"fr": "
|
|
13
|
-
"it": "
|
|
14
|
-
"es": "
|
|
15
|
-
"pl": "
|
|
16
|
-
"uk": "
|
|
17
|
-
"zh-cn": "
|
|
6
|
+
"1.10.11": {
|
|
7
|
+
"en": "BREAKING CHANGE\n\nbugs : ChannelScan is currently not available\n\n\nfix linter errors\ndisable map display for deactivated devices\nnew option on map: disable physics interaction\nnew zigbee-herdsman-converters 20.28.0\nnew zigbee-herdsman 2.1.1\nAllow use of keyless converters (used for TuYa and compatible devices in zigbee-herdsman-converters\nswap from request to axios\ndelete groups works again",
|
|
8
|
+
"de": "VERWENDUNGSBEREICH\n\nbugs : ChannelScan ist derzeit nicht verfügbar\n\n\nlinterfehler beheben\nkartenanzeige für deaktivierte geräte deaktivieren\nneue option auf der karte: physik-interaktion deaktivieren\nneue zickbee-herdsman-konverter 20.28.0\nneuer zickbee-herdsman 2.1.1\nVerwenden von schlüssellosen Wandlern (für TuYa und kompatible Geräte in Zickbee-herdsman-Konverter verwendet)\nswap von anfrage an axios\nlöschen von gruppen funktioniert wieder",
|
|
9
|
+
"ru": "ОБМЕН\n\nжуки: ChannelScan в настоящее время не доступен\n\n\nисправление ошибок\nотключить отображение карты для деактивированных устройств\nновый вариант на карте: отключить взаимодействие физики\n20.28.0\n2.1.1\nПозволить использовать бесключевые конвертеры (используемые для TuYa и совместимые устройства в zigbee-herdsman-конвертерах\nсвопа от запроса к axios\nудалить группы снова",
|
|
10
|
+
"pt": "ALTERAÇÕES DE TRABALHO\n\nbugs : ChannelScan não está disponível\n\n\ncorrigir erros do linter\ndesativar a exibição do mapa para dispositivos desativados\nnova opção no mapa: desativar a interação física\nnovos conversores de zigbee-herdsman 20.28.0\nnovo zigbee-herdsman 2.1.1\nPermitir o uso de conversores sem chave (usado para TuYa e dispositivos compatíveis em conversores de zigbee-herdsman\nswap de pedido para axios\nexcluir grupos funciona novamente",
|
|
11
|
+
"nl": "BREAKING VERANDERING\n\nbugs: ChannelScan is momenteel niet beschikbaar\n\n\nrepareren linter fouten\nkaartweergave voor gedeactiveerde apparaten uitschakelen\nnieuwe optie op de kaart: interactie natuurkunde uitschakelen\nnieuwe zigbee-herdsman-converters 20.28.0\nnieuwe zigbee-herdsman 2.1.1\nGebruik van sleutelloze converters toestaan (gebruikt voor TuYa en compatibele apparaten in zigbee-herdsman-converters\nruil van verzoek naar axios\ngroepen opnieuw verwijderen",
|
|
12
|
+
"fr": "CHANGEMENT DE BREAING\n\nbugs : ChannelScan n'est actuellement pas disponible\n\n\ncorrection des erreurs linter\ndésactiver l'affichage de la carte pour les appareils désactivés\nnouvelle option sur la carte: désactiver l'interaction physique\nnouveaux convertisseurs zigbee-herdsman 20.28.0\nnouveau zigbee-herdsman 2.1.1\nPermettre l'utilisation de convertisseurs sans clé (utilisés pour TuYa et appareils compatibles dans les convertisseurs zigbee-herdsman-converters\néchange de la demande à l'axios\nsupprimer les groupes fonctionne à nouveau",
|
|
13
|
+
"it": "CAPITOLO DI RICERCA\n\nbugs: ChannelScan non è attualmente disponibile\n\n\ncorreggere gli errori di linter\ndisabilitare la visualizzazione della mappa per i dispositivi disattivati\nnuova opzione sulla mappa: disabilitare l'interazione fisica\nnuovo zigbee-herdsman-converters 20.28.0\nnuovo zigbee-herdsman 2.1.1\nConsentire l'uso di convertitori senza chiave (utilizzati per TuYa e dispositivi compatibili in zigbee-herdsman-converter\nswap da richiesta a assios\ncancellare i gruppi funziona di nuovo",
|
|
14
|
+
"es": "BREAKING CHANGE\n\nbugs : ChannelScan actualmente no está disponible\n\n\ncorrige errores de invierno\npantalla de mapa deshabilitado para dispositivos desactivados\nnueva opción en el mapa: la interacción física deshabilitada\nnuevos zigbee-herdsman-converters 20.28.0\nnuevo zigbee-herdsman 2.1.1\nPermitir el uso de convertidores sin llave (utilizados para TuYa y dispositivos compatibles en zigbee-herdsman-converters\nswap from request to axios\neliminar grupos funciona de nuevo",
|
|
15
|
+
"pl": "ZMIANA ZBIORCZA\n\nbłędy: ChannelScan jest obecnie niedostępny\n\n\nnaprawić błędy lintera\nwyłączyć wyświetlacz mapy dla wyłączonych urządzeń\nnowa opcja na mapie: wyłączenie interakcji fizyki\nnowe konwertery zigbee- herdsman- 20.28.0\nnowy zigbee-herdsman 2.1.1\nZezwalaj na stosowanie konwerterów bezklawiszowych (używanych dla TuYa i kompatybilnych urządzeń w konwerterach zigbee- herdsman-\nzamiana z wniosku na aksjos\nusuń grupy działa ponownie",
|
|
16
|
+
"uk": "БРЕАКІНГ ЗМІН\n\nпомилки : CanalScan наразі немає\n\n\nвиправлено помилки linter\nвідключення відображення карти для деактивованих пристроїв\nновий варіант на карті: відключена фізика взаємодія\nнові zigbee-herdsman-converters 20.28.0\nновий zigbee-herdsman 2.1.1\nДозволити використання без ключів конвертерів (використовується для TuYa та сумісних пристроїв в zigbee-herdsman-converters\nковтання від запиту в осях\nвидалити групи знову",
|
|
17
|
+
"zh-cn": "破坏变化\n\n错误 : 频道扫描目前不可用\n\n\n修正线性错误\n禁用已停用设备的地图显示\n地图上的新选项: 禁用物理交互\n新齐格比-牧民-转换器 20.28.0\n新齐格比牧民 2.1.1\n允许使用无密钥转换器( 用于 TuYa 和 Zigbee- herdsman- 转换器中的兼容设备)\n从请求转换为轴\n再次删除组工作"
|
|
18
18
|
},
|
|
19
|
-
"1.10.
|
|
20
|
-
"en": "
|
|
21
|
-
"de": "
|
|
22
|
-
"ru": "
|
|
23
|
-
"pt": "
|
|
24
|
-
"nl": "
|
|
25
|
-
"fr": "
|
|
26
|
-
"it": "
|
|
27
|
-
"es": "
|
|
28
|
-
"pl": "
|
|
29
|
-
"uk": "
|
|
30
|
-
"zh-cn": "
|
|
19
|
+
"1.10.10": {
|
|
20
|
+
"en": "core update\ndependency update",
|
|
21
|
+
"de": "kern-update\naktualisierung der abhängigkeit",
|
|
22
|
+
"ru": "обновление\nобновление",
|
|
23
|
+
"pt": "atualização do núcleo\natualização de dependência",
|
|
24
|
+
"nl": "kernupdate\nafhankelijkheidsupdate",
|
|
25
|
+
"fr": "mise à jour de base\nmise à jour de la dépendance",
|
|
26
|
+
"it": "aggiornamento del core\naggiornamento della dipendenza",
|
|
27
|
+
"es": "actualización básica\nactualización de la dependencia",
|
|
28
|
+
"pl": "podstawowa aktualizacja\naktualizacja zależności",
|
|
29
|
+
"uk": "оновлення ядра\nоновлення залежності",
|
|
30
|
+
"zh-cn": "核心更新\n依赖性更新"
|
|
31
31
|
},
|
|
32
|
-
"1.10.
|
|
33
|
-
"en": "
|
|
34
|
-
"de": "
|
|
35
|
-
"ru": "
|
|
36
|
-
"pt": "
|
|
37
|
-
"nl": "
|
|
38
|
-
"fr": "
|
|
39
|
-
"it": "
|
|
40
|
-
"es": "
|
|
41
|
-
"pl": "
|
|
42
|
-
"uk": "
|
|
43
|
-
"zh-cn": "
|
|
32
|
+
"1.10.9": {
|
|
33
|
+
"en": "typo admin settings\neslint config",
|
|
34
|
+
"de": "typo admin einstellungen\neslint config",
|
|
35
|
+
"ru": "настройки admin\neslint config",
|
|
36
|
+
"pt": "configurações de administração do tipo\neslint config",
|
|
37
|
+
"nl": "typo admin instellingen\neslint config",
|
|
38
|
+
"fr": "paramètres d'administration typo\nconfig eslint",
|
|
39
|
+
"it": "impostazioni dell'amministratore\neslint config",
|
|
40
|
+
"es": "configuración de administración de tipo\neslint config",
|
|
41
|
+
"pl": "ustawienia admin typo\neslint config",
|
|
42
|
+
"uk": "параметри адміністратора\neslint config",
|
|
43
|
+
"zh-cn": "类型管理员设置\n埃斯林特配置"
|
|
44
44
|
},
|
|
45
|
-
"1.
|
|
46
|
-
"en": "corr
|
|
47
|
-
"de": "
|
|
48
|
-
"ru": "
|
|
49
|
-
"pt": "
|
|
50
|
-
"nl": "corr
|
|
51
|
-
"fr": "corr
|
|
52
|
-
"it": "
|
|
53
|
-
"es": "configuración de corr
|
|
54
|
-
"pl": "
|
|
55
|
-
"uk": "
|
|
56
|
-
"zh-cn": "
|
|
45
|
+
"1.10.8": {
|
|
46
|
+
"en": "corr admin settings\nadd new eslint version\n",
|
|
47
|
+
"de": "korr admin einstellungen\nneue eslint-version hinzufügen\n",
|
|
48
|
+
"ru": "настройки администрирования\nдобавить новую версию eslint\n",
|
|
49
|
+
"pt": "configurações de administração de corrimento\nadicionar nova versão eslint\n",
|
|
50
|
+
"nl": "corr admin instellingen\nnieuwe eslint versie toevoegen\n",
|
|
51
|
+
"fr": "paramètres d'administration corr\najouter une nouvelle version eslint\n",
|
|
52
|
+
"it": "impostazioni dell'amministratore\naggiungere nuova versione eslint\n",
|
|
53
|
+
"es": "configuración de administración de corr\nañadir nueva versión eslint\n",
|
|
54
|
+
"pl": "ustawienia admin corr\ndodaj nową wersję eslint\n",
|
|
55
|
+
"uk": "корр налаштування адміністратора\nдодати нову версію eslint\n",
|
|
56
|
+
"zh-cn": "corr 管理员设置\n添加新的 eslint 版本\n"
|
|
57
57
|
},
|
|
58
|
-
"1.
|
|
59
|
-
"en": "
|
|
60
|
-
"de": "
|
|
61
|
-
"ru": "
|
|
62
|
-
"pt": "
|
|
63
|
-
"nl": "
|
|
64
|
-
"fr": "
|
|
65
|
-
"it": "
|
|
66
|
-
"es": "
|
|
67
|
-
"pl": "
|
|
68
|
-
"uk": "
|
|
69
|
-
"zh-cn": "
|
|
58
|
+
"1.10.7": {
|
|
59
|
+
"en": "add flow control option \nadd new NewHerdsman\nadd new ezsp coordinator Firmware (7.4.1.0)",
|
|
60
|
+
"de": "möglichkeit der durchflussregelung\nneues hinzufügen NewHerdsman\nezsp Koordinator Firmware hinzufügen (7.4.1.0)",
|
|
61
|
+
"ru": "добавить параметр управления потоком\nдобавить новый NewHerdsman\nдобавить новый координатор ezsp Firmware (7.4.1.0)",
|
|
62
|
+
"pt": "adicionar opção de controle de fluxo\nadicionar novo NewHerdsman\nadicionar novo coordenador ezsp Firmware (7.4.1.0)",
|
|
63
|
+
"nl": "flow control optie toevoegen\nnieuwe NewHerdsman toevoegen\nnieuwe ezsp coördinator Firmware (7.4.1.0) toevoegen",
|
|
64
|
+
"fr": "ajouter l'option de contrôle du débit\najouter un nouveau NewHerdsman\najouter un nouveau logiciel ezsp coordinator (7.4.1.0)",
|
|
65
|
+
"it": "aggiungere opzione di controllo del flusso\naggiungere nuovo NewHerdsman\naggiungere nuovo coordinatore ezsp Firmware (7.4.1.0)",
|
|
66
|
+
"es": "añadir opción de control de flujo\nañadir nuevo NewHerdsman\nañadir nuevo coordinador de ezsp Firmware (7.4.1.0)",
|
|
67
|
+
"pl": "dodaj opcję kontroli przepływu\ndodaj nowy NewHerdsman\ndodaj nowego koordynatora ezsp Firmware (7.4.1.0)",
|
|
68
|
+
"uk": "додати варіант контролю потоку\nдодати новийHerdsman\nadd new ezsp manager Прошивка (7.4.1.0)",
|
|
69
|
+
"zh-cn": "添加流量控制选项\n添加新赫兹曼\n添加新的 ezsp 协调员 Firmware (7.4.1.0)"
|
|
70
70
|
},
|
|
71
|
-
"1.
|
|
72
|
-
"en": "update
|
|
73
|
-
"de": "
|
|
74
|
-
"ru": "обновление
|
|
75
|
-
"pt": "
|
|
76
|
-
"nl": "
|
|
77
|
-
"fr": "
|
|
78
|
-
"it": "
|
|
79
|
-
"es": "actualización de la dependencia
|
|
80
|
-
"pl": "
|
|
81
|
-
"uk": "оновлення
|
|
82
|
-
"zh-cn": "
|
|
71
|
+
"1.10.6": {
|
|
72
|
+
"en": "core update\ndependency update",
|
|
73
|
+
"de": "kern-update\naktualisierung der abhängigkeit",
|
|
74
|
+
"ru": "обновление\nобновление",
|
|
75
|
+
"pt": "atualização do núcleo\natualização de dependência",
|
|
76
|
+
"nl": "kernupdate\nafhankelijkheidsupdate",
|
|
77
|
+
"fr": "mise à jour de base\nmise à jour de la dépendance",
|
|
78
|
+
"it": "aggiornamento del core\naggiornamento della dipendenza",
|
|
79
|
+
"es": "actualización básica\nactualización de la dependencia",
|
|
80
|
+
"pl": "podstawowa aktualizacja\naktualizacja zależności",
|
|
81
|
+
"uk": "оновлення ядра\nоновлення залежності",
|
|
82
|
+
"zh-cn": "核心更新\n依赖性更新"
|
|
83
83
|
},
|
|
84
|
-
"1.
|
|
85
|
-
"en": "
|
|
86
|
-
"de": "
|
|
87
|
-
"ru": "
|
|
88
|
-
"pt": "
|
|
89
|
-
"nl": "
|
|
90
|
-
"fr": "
|
|
91
|
-
"it": "
|
|
92
|
-
"es": "
|
|
93
|
-
"pl": "
|
|
94
|
-
"uk": "
|
|
95
|
-
"zh-cn": "
|
|
84
|
+
"1.10.5": {
|
|
85
|
+
"en": "icon ota device update\nicon fix",
|
|
86
|
+
"de": "icon ota device update\nsymbol fix",
|
|
87
|
+
"ru": "обновление значок ota\nзначок",
|
|
88
|
+
"pt": "atualização do dispositivo do ícone ota\ncorreção do ícone",
|
|
89
|
+
"nl": "pictogram ota apparaat update\npictogramfix",
|
|
90
|
+
"fr": "icône ota mise à jour du périphérique\ncorrection de l'icône",
|
|
91
|
+
"it": "icona ota aggiornamento del dispositivo\nicona fix",
|
|
92
|
+
"es": "icono ota actualización del dispositivo\nicono de fijación",
|
|
93
|
+
"pl": "icon ota aktualizacji urządzenia\nikona fix",
|
|
94
|
+
"uk": "ota пристрій оновлення\nфіксатор ікони",
|
|
95
|
+
"zh-cn": "图标 ota 设备更新\n图标修复"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -121,10 +121,17 @@
|
|
|
121
121
|
"pl": "Adapter Zigbee do urządzeń Xiaomi (i innych) za pośrednictwem Chip cc26xx/cc25xx",
|
|
122
122
|
"zh-cn": "适用于小米(和其他)设备的Zigbee适配器,通过Chip cc26xx/cc25xx"
|
|
123
123
|
},
|
|
124
|
+
"docs": {
|
|
125
|
+
"en": "docs/en/readme.md",
|
|
126
|
+
"de": "docs/en/readme.md"
|
|
127
|
+
},
|
|
124
128
|
"authors": [
|
|
125
129
|
"Kirov Ilya<kirovilya@gmail.com>"
|
|
126
130
|
],
|
|
127
|
-
"
|
|
131
|
+
"licenseInformation": {
|
|
132
|
+
"license": "MIT",
|
|
133
|
+
"type": "free"
|
|
134
|
+
},
|
|
128
135
|
"platform": "Javascript/Node.js",
|
|
129
136
|
"mode": "daemon",
|
|
130
137
|
"icon": "zigbee.png",
|
|
@@ -144,15 +151,17 @@
|
|
|
144
151
|
"readme": "https://github.com/ioBroker/ioBroker.zigbee/blob/master/README.md",
|
|
145
152
|
"loglevel": "info",
|
|
146
153
|
"type": "hardware",
|
|
147
|
-
"materialize": true,
|
|
148
154
|
"supportedMessages": {
|
|
149
155
|
"deviceManager": true
|
|
150
156
|
},
|
|
157
|
+
"adminUI": {
|
|
158
|
+
"config": "materialize",
|
|
159
|
+
"tab": "materialize"
|
|
160
|
+
},
|
|
151
161
|
"messagebox": true,
|
|
152
162
|
"stopBeforeUpdate": true,
|
|
153
163
|
"dataFolder": "zigbee_%INSTANCE%",
|
|
154
164
|
"compact": true,
|
|
155
|
-
"materializeTab": true,
|
|
156
165
|
"connectionType": "local",
|
|
157
166
|
"dataSource": "push",
|
|
158
167
|
"tier": 2,
|
|
@@ -191,8 +200,8 @@
|
|
|
191
200
|
"condition": {
|
|
192
201
|
"operand": "and",
|
|
193
202
|
"rules": [
|
|
194
|
-
"oldVersion<=1.
|
|
195
|
-
"newVersion>=1.
|
|
203
|
+
"oldVersion<=1.10.3",
|
|
204
|
+
"newVersion>=1.10.10"
|
|
196
205
|
]
|
|
197
206
|
},
|
|
198
207
|
"title": {
|
|
@@ -208,16 +217,17 @@
|
|
|
208
217
|
"zh-cn": "重要通知!"
|
|
209
218
|
},
|
|
210
219
|
"text": {
|
|
211
|
-
"en": "
|
|
212
|
-
"
|
|
213
|
-
"
|
|
214
|
-
"
|
|
215
|
-
"
|
|
216
|
-
"
|
|
217
|
-
"
|
|
218
|
-
"
|
|
219
|
-
"
|
|
220
|
-
"
|
|
220
|
+
"en": "\"BREAKING CHANGE. after update to this Version you can't go back to Version <= 1.10.3. Only option is your Backup",
|
|
221
|
+
"de": "\"BREAKING CHANGE. nach dem Update könnt ihr nicht zurück zu einer Version <= 1.10.3. Es geht nur per ioBroker Backup was hoffentlich gemacht habt",
|
|
222
|
+
"ru": "\"Изменяюсь. После обновления этой версии вы не можете вернуться к версии <= 1.10.3. Единственный вариант - это ваша резервная копия",
|
|
223
|
+
"pt": "\"BREAKING CHANGE. após a atualização para esta versão você não pode voltar para Versão <= 1.10.3. A única opção é o seu Backup",
|
|
224
|
+
"nl": "\"Verandering. Na update naar deze versie kun je niet meer terug naar versie <= 1.10.3. De enige optie is uw back-up",
|
|
225
|
+
"fr": "\"C'est le changement. après la mise à jour de cette version, vous ne pouvez pas retourner à la version <= 1.10.3. Seule option est votre sauvegarde",
|
|
226
|
+
"it": "\"Cambiare il cambiamento. dopo l'aggiornamento a questa versione non si può tornare alla versione <= 1.10.3. Solo l'opzione è il backup",
|
|
227
|
+
"es": "\"Cambiando. después de la actualización a esta versión no puede volver a la versión 0 = 1.10.3. La única opción es tu Backup",
|
|
228
|
+
"pl": "\"ZMIENIONA ZMIANA. po aktualizacji do tej wersji nie można wrócić do wersji < = 1.10.3. Jedyną opcją jest kopia zapasowa",
|
|
229
|
+
"uk": "\"Бреагування ЗМІНИ. після оновлення цієї версії ви не можете повернутися до версії <= 1.10.3. Тільки варіант - Ваш Резервне копіювання",
|
|
230
|
+
"zh-cn": "\"呼吸变化。 更新到此版本后, 您不能返回到 QQ 1. 10. 3. 版本 。 唯一的选项是您的备份"
|
|
221
231
|
},
|
|
222
232
|
"link": "https://github.com/ioBroker/ioBroker.zigbee/blob/master/README.md",
|
|
223
233
|
"level": "warn",
|
|
@@ -255,7 +265,8 @@
|
|
|
255
265
|
"external": "",
|
|
256
266
|
"startWithInconsistent": false,
|
|
257
267
|
"warnOnDeviceAnnouncement": true,
|
|
258
|
-
"baudRate": 115200
|
|
268
|
+
"baudRate": 115200,
|
|
269
|
+
"flowCTRL": false
|
|
259
270
|
},
|
|
260
271
|
"instanceObjects": [
|
|
261
272
|
{
|
package/lib/backup.js
CHANGED
|
@@ -117,7 +117,6 @@ class Backup {
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
// eslint-disable-next-line no-unused-vars
|
|
121
120
|
delBackupsFiles(options, files) {
|
|
122
121
|
const arr = files.length;
|
|
123
122
|
if (arr > 10) {
|
|
@@ -134,7 +133,7 @@ class Backup {
|
|
|
134
133
|
}
|
|
135
134
|
}
|
|
136
135
|
|
|
137
|
-
|
|
136
|
+
|
|
138
137
|
async listbackups(obj) {
|
|
139
138
|
|
|
140
139
|
}
|
package/lib/binding.js
CHANGED
|
@@ -43,32 +43,34 @@ class Binding {
|
|
|
43
43
|
* @param {ioBroker.Message} obj
|
|
44
44
|
*/
|
|
45
45
|
onMessage(obj) {
|
|
46
|
-
if (
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.
|
|
70
|
-
|
|
71
|
-
|
|
46
|
+
if (obj) {
|
|
47
|
+
if (typeof obj === 'object' && obj.command) {
|
|
48
|
+
switch (obj.command) {
|
|
49
|
+
case 'addBinding':
|
|
50
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
51
|
+
this.addBinding(obj.from, obj.command, obj.message, err =>
|
|
52
|
+
this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case 'editBinding':
|
|
56
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
57
|
+
this.editBinding(obj.from, obj.command, obj.message, err =>
|
|
58
|
+
this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
case 'getBinding':
|
|
62
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
63
|
+
this.getBinding(binding =>
|
|
64
|
+
this.adapter.sendTo(obj.from, obj.command, binding, obj.callback));
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
case 'delBinding':
|
|
68
|
+
if (obj.message) {
|
|
69
|
+
this.delBinding(obj.from, obj.command, obj.message, err =>
|
|
70
|
+
this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
}
|
package/lib/commands.js
CHANGED
|
@@ -46,73 +46,75 @@ class Commands {
|
|
|
46
46
|
* @param {ioBroker.Message} obj
|
|
47
47
|
*/
|
|
48
48
|
onMessage(obj) {
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
49
|
+
if (obj) {
|
|
50
|
+
if (typeof obj === 'object' && obj.command) {
|
|
51
|
+
switch (obj.command) {
|
|
52
|
+
case 'reset':
|
|
53
|
+
if (obj.message && obj.message.mode == 'delNvbackup') {
|
|
54
|
+
this.delNvBackup(obj.from, obj.command, obj.message, obj.callback);
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
case 'letsPairing':
|
|
58
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
59
|
+
this.letsPairing(obj.from, obj.command, obj.message, obj.callback);
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
case 'touchlinkReset':
|
|
63
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
64
|
+
this.touchlinkReset(obj.from, obj.command, obj.message, obj.callback);
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
case 'getDevices':
|
|
68
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
69
|
+
this.getDevices(obj.from, obj.command, null, obj.callback);
|
|
70
|
+
}
|
|
71
|
+
break;
|
|
72
|
+
case 'renameDevice':
|
|
73
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
74
|
+
this.renameDevice(obj.from, obj.command, obj.message, obj.callback);
|
|
75
|
+
}
|
|
76
|
+
break;
|
|
77
|
+
case 'deleteDevice':
|
|
78
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
79
|
+
this.deleteDevice(obj.from, obj.command, obj.message, obj.callback);
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
case 'getChannels':
|
|
83
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
84
|
+
this.getChannels(obj.from, obj.command, obj.message, obj.callback);
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
case 'getCoordinatorInfo':
|
|
88
|
+
if (obj && obj.message && typeof obj.message === 'object') {
|
|
89
|
+
this.getCoordinatorInfo(obj.from, obj.command, obj.callback);
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
case 'cleanDeviceStates':
|
|
93
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
94
|
+
this.cleanDeviceStates(obj.from, obj.command, obj.message, obj.callback);
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
case 'setState':
|
|
98
|
+
if (obj.message && typeof obj.message === 'object' && obj.message.id) {
|
|
99
|
+
this.stController.setState_typed(obj.message.id, obj.message.val, false, undefined, obj.callback);
|
|
100
|
+
}
|
|
101
|
+
break;
|
|
102
|
+
case 'getDevice':
|
|
103
|
+
if (obj.message && typeof obj.message === 'object' && obj.message.id) {
|
|
104
|
+
this.getDevices(obj.from, obj.command, obj.message.id, obj.callback);
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
case 'reconfigure':
|
|
108
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
109
|
+
this.reconfigure(obj.from, obj.command, obj.message, obj.callback);
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
case 'setDeviceActivated':
|
|
113
|
+
if (obj.message && typeof obj.message === 'object') {
|
|
114
|
+
this.setDeviceActivated(obj.from, obj.command, obj.message, obj.callback);
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
}
|
|
@@ -132,8 +134,10 @@ class Commands {
|
|
|
132
134
|
if (this.zbController) {
|
|
133
135
|
let devId = '';
|
|
134
136
|
if (message) {
|
|
135
|
-
if (message.id
|
|
136
|
-
|
|
137
|
+
if (message.id && message.id != undefined) {
|
|
138
|
+
devId = getZbId(message.id);
|
|
139
|
+
}
|
|
140
|
+
if (message.code && message.code != undefined) {
|
|
137
141
|
try {
|
|
138
142
|
this.debug(`letsPairing called with code ${message.code}`);
|
|
139
143
|
const success = await this.zbController.addPairingCode(message.code);
|
|
@@ -273,19 +277,20 @@ class Commands {
|
|
|
273
277
|
// get group members and store them
|
|
274
278
|
const match = /zigbee.\d.group_([0-9]+)/.exec(devInfo._id);
|
|
275
279
|
if (match && match.length > 1) {
|
|
276
|
-
const
|
|
277
|
-
|
|
280
|
+
const groupID = Number(match[1]);
|
|
281
|
+
const groupmembers = await this.zbController.getGroupMembersFromController(groupID);
|
|
282
|
+
this.debug(`group members for group ${groupID}: ${JSON.stringify(groupmembers)}`);
|
|
278
283
|
if (groupmembers && groupmembers.length > 0) {
|
|
279
284
|
const memberinfo = [];
|
|
280
285
|
for (const member of groupmembers) {
|
|
281
286
|
if (groups) {
|
|
282
287
|
const grouparray = groups[member.ieee];
|
|
283
288
|
if (grouparray) {
|
|
284
|
-
if (!grouparray.includes(
|
|
285
|
-
groups[member.ieee].push(
|
|
289
|
+
if (!grouparray.includes(groupID)) {
|
|
290
|
+
groups[member.ieee].push(groupID);
|
|
286
291
|
}
|
|
287
292
|
} else {
|
|
288
|
-
groups[member.ieee] = [
|
|
293
|
+
groups[member.ieee] = [groupID];
|
|
289
294
|
}
|
|
290
295
|
}
|
|
291
296
|
const device = await this.adapter.getObjectAsync(`${this.adapter.namespace}.${member.ieee.substr(2)}`);
|
package/lib/developer.js
CHANGED
|
@@ -31,6 +31,10 @@ class Developer {
|
|
|
31
31
|
this.adapter.log.debug(msg);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
warn(msg) {
|
|
35
|
+
this.adapter.log.warn(msg);
|
|
36
|
+
}
|
|
37
|
+
|
|
34
38
|
/**
|
|
35
39
|
* @param {ioBroker.Message} obj
|
|
36
40
|
*/
|
|
@@ -57,7 +61,7 @@ class Developer {
|
|
|
57
61
|
const zcl = ZigbeeHerdsman.Zcl;
|
|
58
62
|
const result = {};
|
|
59
63
|
if (key === 'cidList') {
|
|
60
|
-
result.list = zcl.
|
|
64
|
+
result.list = zcl.Clusters;
|
|
61
65
|
} else if (key === 'attrIdList') {
|
|
62
66
|
const cid = obj.message.cid;
|
|
63
67
|
result.list = zcl.Utils.getCluster(cid).attributes;
|
|
@@ -133,7 +137,7 @@ class Developer {
|
|
|
133
137
|
// report exceptions
|
|
134
138
|
// happens for example if user tries to send write command but did not provide value/type
|
|
135
139
|
// or unsupported attribute was addressed.
|
|
136
|
-
const ZclStatusError = require('zigbee-herdsman/dist/zcl/zclStatusError').
|
|
140
|
+
const ZclStatusError = require('zigbee-herdsman/dist/zspec/zcl/zclStatusError').ZclStatusError;
|
|
137
141
|
if (exception instanceof ZclStatusError) {
|
|
138
142
|
const result = {};
|
|
139
143
|
result.msg = `Zigbee error ${exception.code} received!`;
|