iobroker.zigbee 2.0.3 → 2.0.4
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 +38 -51
- package/admin/admin.js +19 -211
- package/admin/img/philips_hue_lom001.png +0 -0
- package/admin/tab_m.html +8 -13
- package/docs/tutorial/groups-1.png +0 -0
- package/docs/tutorial/groups-2.png +0 -0
- package/docs/tutorial/tab-dev-1.png +0 -0
- package/io-package.json +62 -28
- package/lib/commands.js +1 -16
- package/lib/developer.js +0 -0
- package/lib/exposes.js +1 -1
- package/lib/groups.js +8 -6
- package/lib/localConfig.js +2 -1
- package/lib/ota.js +6 -6
- package/lib/statescontroller.js +97 -270
- package/lib/zbDeviceAvailability.js +2 -2
- package/lib/zbDeviceConfigure.js +15 -22
- package/lib/zigbeecontroller.js +6 -13
- package/main.js +193 -131
- package/package.json +2 -2
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "zigbee",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.4",
|
|
5
5
|
"news": {
|
|
6
|
+
"2.0.4": {
|
|
7
|
+
"en": "back to 2.0.2",
|
|
8
|
+
"de": "zurück zu 2.0.2",
|
|
9
|
+
"ru": "вернуться в 2.0.2",
|
|
10
|
+
"pt": "voltar para 2.0.2",
|
|
11
|
+
"nl": "terug naar 2.0.2",
|
|
12
|
+
"fr": "retour à 2.0.2",
|
|
13
|
+
"it": "torna a 2.0.2",
|
|
14
|
+
"es": "volver a 2.0.2",
|
|
15
|
+
"pl": "powrót do 2.0.2",
|
|
16
|
+
"uk": "до 2.0.2",
|
|
17
|
+
"zh-cn": "返回到2.0.2"
|
|
18
|
+
},
|
|
6
19
|
"2.0.3": {
|
|
7
20
|
"en": "fix configured info\nfix battery voltage (V -> mV)\nenable debug interface v1.0\nPush Zigbee-Herdsman to 3.5.7\nPush Zigbee-Herdsman-Converters to 23.1.1\nfix configure on message\nremove extra warning messages\nfix Adapter-Checker notes\nimprove base64 image detection\nremoved unused adaptert objects (info.groups, excludes) from adapter config\n",
|
|
8
21
|
"de": "die konfigurierten informationen\nbatteriespannung fixieren (V -> mV)\ndebug interface v1.0\nPush Zigbee-Herdsman auf 3.5.7\nPush Zigbee-Herdsman-Konverter auf 23.1.1\nkonfigurieren der nachricht\nzusätzliche warnmeldungen entfernen\nfix Adapter-Checker-Noten\nverbesserung der bilderkennung von base64\nentfernte ungenutzte adapterobjekte (info.groups, ausgenommen) von adapter config\n",
|
|
@@ -42,6 +55,19 @@
|
|
|
42
55
|
"uk": "БРЕАКІНГОВІ ЗМІНИ\n\nперемикач на перетворювачі 21 змінює висадки для великої кількості пристроїв (найбільш віддалені)\nновий метод контролю кольору на основі підканалів для rgb, hs і xy\nЗа замовчуванням для всіх пристроїв. Використання старого визначення як варіант\nВимагає Node 20.x або нові\n\nФіксація Пірсинг\nзмінити пінг\nгенерація карти затримки до освіження активується, повідомлення після генерації\nвидалити вкладку в'язання з вкладки zigbee\nвкладка зворотного замовлення в конфігурації\nвидалити вкладку з конфігурації\nвидалити карту з конфігурації\nadd debug до zigbee tab\nEnglish, Українська, Français..\nЕкспози як за замовчуванням, використання застарілих параметрів пристрою, як необов'язковий\nКористувальницькі специфічні зображення (моделі на основі пристрою)\nУдосконалено редагування груп - видалення членів з групової картки",
|
|
43
56
|
"zh-cn": "裂变\n\n21 更改大量设备(大多为远程设备)的曝光量\n基于 rgb、 hs 和 xy 子通道的新的颜色控制方法\n曝光为默认所有设备 。 仅将旧定义用作选项\n需要节点 20.x 或更新\n\n修复对齐\n更改键\n将映射生成延迟到刷新启动, 映射消息生成后\n从 zigbee 标签中删除绑定标签\n在配置中重新排序标签\n从配置中删除绑定标签\n从配置中删除地图\n添加调试到 zigbee 标签\n牧民 3.2.5,转换器 21.30.0\n将曝光作为默认, 将旧设备定义作为遗留选项\n用户特定图像( 基于模型、 设备)\n改进组编辑 - 从组卡中删除成员"
|
|
44
57
|
},
|
|
58
|
+
"1.11.2": {
|
|
59
|
+
"en": "debug for states",
|
|
60
|
+
"de": "debug for states",
|
|
61
|
+
"ru": "debug for states",
|
|
62
|
+
"pt": "debug for states",
|
|
63
|
+
"nl": "debug for states",
|
|
64
|
+
"fr": "debug for states",
|
|
65
|
+
"it": "debug for states",
|
|
66
|
+
"es": "debug for states",
|
|
67
|
+
"pl": "debug for states",
|
|
68
|
+
"uk": "debug for states",
|
|
69
|
+
"zh-cn": "debug for states"
|
|
70
|
+
},
|
|
45
71
|
"1.10.14": {
|
|
46
72
|
"en": "Herdsman 2.1.9, Converters 20.58.0\nFix: Aqara T1M (CL-L02D) \ndeleteDeviceStates change to deleteObj",
|
|
47
73
|
"de": "Herdsman 2.1.9, Konverter 20.58.0\nFix: Aqara T1M (CL-L02D)\nlöschen DeviceState Änderung zum Löschen Ob",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
93
|
"pl": "corr ikona pobierz błąd (axios)",
|
|
68
94
|
"uk": "корр іконки завантажити помилку (axios)",
|
|
69
95
|
"zh-cn": "corr 图标下载错误( axios)"
|
|
70
|
-
},
|
|
71
|
-
"1.10.12": {
|
|
72
|
-
"en": "corr Channel Scan",
|
|
73
|
-
"de": "corr Channel Scan",
|
|
74
|
-
"ru": "корректор канала",
|
|
75
|
-
"pt": "escaneamento do canal de cortiça",
|
|
76
|
-
"nl": "corr kanaalscan",
|
|
77
|
-
"fr": "balayage du canal corr",
|
|
78
|
-
"it": "corr Channel Scansione",
|
|
79
|
-
"es": "corr Channel Scan",
|
|
80
|
-
"pl": "corr Channel Scan",
|
|
81
|
-
"uk": "сканування каналу",
|
|
82
|
-
"zh-cn": "频道扫描"
|
|
83
|
-
},
|
|
84
|
-
"1.10.11": {
|
|
85
|
-
"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",
|
|
86
|
-
"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",
|
|
87
|
-
"ru": "ОБМЕН\n\nжуки: ChannelScan в настоящее время не доступен\n\n\nисправление ошибок\nотключить отображение карты для деактивированных устройств\nновый вариант на карте: отключить взаимодействие физики\n20.28.0\n2.1.1\nПозволить использовать бесключевые конвертеры (используемые для TuYa и совместимые устройства в zigbee-herdsman-конвертерах\nсвопа от запроса к axios\nудалить группы снова",
|
|
88
|
-
"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",
|
|
89
|
-
"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",
|
|
90
|
-
"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",
|
|
91
|
-
"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",
|
|
92
|
-
"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",
|
|
93
|
-
"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",
|
|
94
|
-
"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видалити групи знову",
|
|
95
|
-
"zh-cn": "破坏变化\n\n错误 : 频道扫描目前不可用\n\n\n修正线性错误\n禁用已停用设备的地图显示\n地图上的新选项: 禁用物理交互\n新齐格比-牧民-转换器 20.28.0\n新齐格比牧民 2.1.1\n允许使用无密钥转换器( 用于 TuYa 和 Zigbee- herdsman- 转换器中的兼容设备)\n从请求转换为轴\n再次删除组工作"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
},
|
|
188
188
|
"globalDependencies": [
|
|
189
189
|
{
|
|
190
|
-
"admin": ">=
|
|
190
|
+
"admin": ">=5.1.25"
|
|
191
191
|
}
|
|
192
192
|
],
|
|
193
193
|
"dependencies": [
|
|
@@ -270,6 +270,27 @@
|
|
|
270
270
|
"flowCTRL": false
|
|
271
271
|
},
|
|
272
272
|
"instanceObjects": [
|
|
273
|
+
{
|
|
274
|
+
"_id": "exclude",
|
|
275
|
+
"type": "channel",
|
|
276
|
+
"common": {
|
|
277
|
+
"name": "exclude devs from devices.js"
|
|
278
|
+
},
|
|
279
|
+
"native": {}
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"_id": "exclude.all",
|
|
283
|
+
"type": "state",
|
|
284
|
+
"common": {
|
|
285
|
+
"role": "state",
|
|
286
|
+
"name": "all",
|
|
287
|
+
"type": "string",
|
|
288
|
+
"read": true,
|
|
289
|
+
"write": true,
|
|
290
|
+
"def": "[]"
|
|
291
|
+
},
|
|
292
|
+
"native": {}
|
|
293
|
+
},
|
|
273
294
|
{
|
|
274
295
|
"_id": "info",
|
|
275
296
|
"type": "channel",
|
|
@@ -330,6 +351,19 @@
|
|
|
330
351
|
},
|
|
331
352
|
"native": {}
|
|
332
353
|
},
|
|
354
|
+
{
|
|
355
|
+
"_id": "info.groups",
|
|
356
|
+
"type": "state",
|
|
357
|
+
"common": {
|
|
358
|
+
"role": "state",
|
|
359
|
+
"name": "Groups",
|
|
360
|
+
"type": "string",
|
|
361
|
+
"read": true,
|
|
362
|
+
"write": false,
|
|
363
|
+
"def": ""
|
|
364
|
+
},
|
|
365
|
+
"native": {}
|
|
366
|
+
},
|
|
333
367
|
{
|
|
334
368
|
"_id": "info.undefinedDevices",
|
|
335
369
|
"type": "state",
|
package/lib/commands.js
CHANGED
|
@@ -154,10 +154,6 @@ class Commands {
|
|
|
154
154
|
if (obj) {
|
|
155
155
|
this.adapter.sendTo(obj.from, obj.command, {clean:this.stController.CleanupRequired(), errors:this.stController.getStashedErrors()}, obj.callback);
|
|
156
156
|
}
|
|
157
|
-
case 'getDebugMessages':
|
|
158
|
-
if (obj) {
|
|
159
|
-
this.adapter.sendTo(obj.from, obj.command, {byId:this.adapter.deviceDebug.collectDebugData()},obj.callback);
|
|
160
|
-
}
|
|
161
157
|
}
|
|
162
158
|
}
|
|
163
159
|
}
|
|
@@ -356,18 +352,6 @@ class Commands {
|
|
|
356
352
|
|
|
357
353
|
const id = getZbId(devInfo._id);
|
|
358
354
|
devInfo.info = await this.zbController.resolveEntity(id);
|
|
359
|
-
// check configuration
|
|
360
|
-
try {
|
|
361
|
-
if (devInfo.info) {
|
|
362
|
-
const result = await this.zbController.callExtensionMethod(
|
|
363
|
-
'shouldConfigure',
|
|
364
|
-
[devInfo.info.device, devInfo.info.mapped],
|
|
365
|
-
);
|
|
366
|
-
if (result.length > 0) devInfo.isConfigured = !result[0];
|
|
367
|
-
}
|
|
368
|
-
} catch (error) {
|
|
369
|
-
this.warn('error calling shouldConfigure: ' + error && error.message ? error.message : 'no error message');
|
|
370
|
-
}
|
|
371
355
|
|
|
372
356
|
devInfo.rooms = [];
|
|
373
357
|
for (const room in rooms) {
|
|
@@ -669,6 +653,7 @@ class Commands {
|
|
|
669
653
|
'doConfigure',
|
|
670
654
|
[entity.device, entity.mapped],
|
|
671
655
|
);
|
|
656
|
+
this.warn('do configure result is ' + JSON.stringify(result));
|
|
672
657
|
const msg = result.join(',');
|
|
673
658
|
if (msg.length > 5)
|
|
674
659
|
this.adapter.sendTo(from, command, {error: msg}, callback);
|
package/lib/developer.js
CHANGED
|
File without changes
|
package/lib/exposes.js
CHANGED
package/lib/groups.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const json = require('iobroker.zigbee/lib/json');
|
|
4
4
|
const statesMapping = require('./devices');
|
|
5
|
+
const { numberWithinRange } = require('zigbee-herdsman-converters/lib/utils');
|
|
5
6
|
const idRegExp = new RegExp(/group_(\d+)/);
|
|
6
7
|
|
|
7
8
|
|
|
@@ -167,7 +168,7 @@ class Groups {
|
|
|
167
168
|
for (const gpid of groups[epid]) {
|
|
168
169
|
const gpidn = parseInt(gpid);
|
|
169
170
|
if (gpidn < 0) {
|
|
170
|
-
this.
|
|
171
|
+
this.warn(`calling removeDevFromGroup with ${sysid}, ${-gpidn}, ${epid}` );
|
|
171
172
|
const response = await this.zbController.removeDevFromGroup(sysid, (-gpidn), epid);
|
|
172
173
|
if (response && response.error) {
|
|
173
174
|
errors.push(response.error);
|
|
@@ -175,7 +176,7 @@ class Groups {
|
|
|
175
176
|
}
|
|
176
177
|
const icon = this.stController.getDefaultGroupIcon(-gpidn)
|
|
177
178
|
} else if (gpidn > 0) {
|
|
178
|
-
this.
|
|
179
|
+
this.warn(`calling addDevToGroup with ${sysid}, ${gpidn}, ${epid}` );
|
|
179
180
|
const response = await this.zbController.addDevToGroup(sysid, (gpidn), epid);
|
|
180
181
|
if (response && response.error) {
|
|
181
182
|
errors.push(response.error);
|
|
@@ -232,7 +233,7 @@ class Groups {
|
|
|
232
233
|
throw error;
|
|
233
234
|
}
|
|
234
235
|
if (result.unread.length > 0) {
|
|
235
|
-
this.
|
|
236
|
+
this.warn(`unread ${stateDesc.id} change for group members ${JSON.stringify(result.unread)}`);
|
|
236
237
|
}
|
|
237
238
|
}
|
|
238
239
|
|
|
@@ -253,10 +254,11 @@ class Groups {
|
|
|
253
254
|
if (message.remove) {
|
|
254
255
|
for (const member of message.remove) {
|
|
255
256
|
const response = await this.zbController.removeDevFromGroup(member.id, id, member.ep);
|
|
256
|
-
this.
|
|
257
|
+
this.warn('trying to remove ' + member.id + (member.ep ? '.'+member.ep : '') + ' ' + ' from group ' + message.id + ' response is '+JSON.stringify(response));
|
|
257
258
|
}
|
|
258
259
|
}
|
|
259
260
|
if (icon.match(/img\/group_\d+\.png/g)) {
|
|
261
|
+
this.warn('.');
|
|
260
262
|
icon = await this.zbController.rebuildGroupIcon(group);
|
|
261
263
|
}
|
|
262
264
|
} catch (e) {
|
|
@@ -268,7 +270,7 @@ class Groups {
|
|
|
268
270
|
this.warn(`rename group name ${name}, id ${id}, icon ${icon} remove ${JSON.stringify(message.removeMembers)}`);
|
|
269
271
|
const group = await this.adapter.getObjectAsync(id);
|
|
270
272
|
if (!group) {
|
|
271
|
-
this.
|
|
273
|
+
this.warn('group object doesnt exist ')
|
|
272
274
|
// assume we have to create the group
|
|
273
275
|
this.adapter.setObjectNotExists(id, {
|
|
274
276
|
type: 'device',
|
|
@@ -299,7 +301,7 @@ class Groups {
|
|
|
299
301
|
});
|
|
300
302
|
}
|
|
301
303
|
else {
|
|
302
|
-
this.
|
|
304
|
+
this.warn('group object exists');
|
|
303
305
|
this.adapter.extendObject(id, {common: {name, type: 'group', icon: icon}});
|
|
304
306
|
}
|
|
305
307
|
}
|
package/lib/localConfig.js
CHANGED
|
@@ -220,6 +220,7 @@ class localConfig extends EventEmitter {
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
async updateFromDeviceNames() {
|
|
223
|
+
this.warn('updateFromDeviceNames');
|
|
223
224
|
const fn = this.adapter.expandFileName('dev_names').replace('.', '_').concat('.json');
|
|
224
225
|
fs.readFile(fn, (err, content) => {
|
|
225
226
|
if (!err) {
|
|
@@ -285,7 +286,7 @@ class localConfig extends EventEmitter {
|
|
|
285
286
|
const files= fs.readdirSync(_path, {withFileTypes: true, recursive: true}).filter(item => (!item.isDirectory() && item.name.endsWith('.png')));
|
|
286
287
|
files.forEach((item) => {
|
|
287
288
|
const fn = path.join(item.parentPath, item.name);
|
|
288
|
-
rv.push({file: fn, name: item.name, data: fs.readFileSync(path.join(item.parentPath, item.name), 'base64')
|
|
289
|
+
rv.push({file: fn, name: item.name, data: fs.readFileSync(path.join(item.parentPath, item.name), 'base64')})
|
|
289
290
|
});
|
|
290
291
|
//this.warn('enumerateImages for ' + _path + ' is ' + JSON.stringify(rv));
|
|
291
292
|
}
|
package/lib/ota.js
CHANGED
|
@@ -55,7 +55,7 @@ class Ota {
|
|
|
55
55
|
async checkOtaAvail(obj) {
|
|
56
56
|
const device = await this.getDeviceForMessage(obj);
|
|
57
57
|
if (!device) {
|
|
58
|
-
this.
|
|
58
|
+
this.debug(`Device ${obj.message.devId} is unavailable`);
|
|
59
59
|
this.adapter.sendTo(obj.from, obj.command, {
|
|
60
60
|
status: 'fail',
|
|
61
61
|
device: getZbId(obj.message.devId),
|
|
@@ -64,13 +64,13 @@ class Ota {
|
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
66
66
|
if (this.inProgress.has(device.device.ieeeAddr)) {
|
|
67
|
-
this.
|
|
67
|
+
this.warn(`Update or check already in progress for '${device.name}', skipping...`);
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
70
|
// do not attempt update for a device which has been deactivated or is unavailable
|
|
71
71
|
const stateObj = await this.adapter.getObjectAsync(obj.message.devId);
|
|
72
72
|
if (stateObj && stateObj.common && stateObj.common.deactivated) {
|
|
73
|
-
this.
|
|
73
|
+
this.warn(`Device ${obj.message.devId} is deactivated, skipping...`);
|
|
74
74
|
this.adapter.sendTo(obj.from, obj.command, {
|
|
75
75
|
status: 'fail',
|
|
76
76
|
device: getZbId(obj.message.devId),
|
|
@@ -81,7 +81,7 @@ class Ota {
|
|
|
81
81
|
const availablestate = await this.adapter.getStateAsync(`${obj.message.devId.replace(this.namespace + '.', '')}.available`);
|
|
82
82
|
const lqi = await this.adapter.getStateAsync(`${obj.message.devId.replace(this.namespace + '.', '')}.link_quality`);
|
|
83
83
|
if ((availablestate && (!availablestate.val)) || (lqi && lqi.val < 1)) {
|
|
84
|
-
this.
|
|
84
|
+
this.warn(`Device ${obj.message.devId} is marked unavailable, skipping...`);
|
|
85
85
|
this.adapter.sendTo(obj.from, obj.command, {
|
|
86
86
|
status: 'fail',
|
|
87
87
|
device: getZbId(obj.message.devId),
|
|
@@ -133,13 +133,13 @@ class Ota {
|
|
|
133
133
|
// do not attempt update for a device which has been deactivated or is unavailable
|
|
134
134
|
const stateObj = await this.adapter.getObjectAsync(obj.message.devId);
|
|
135
135
|
if (stateObj && stateObj.common && stateObj.common.deactivated) {
|
|
136
|
-
this.
|
|
136
|
+
this.warn(`Device ${obj.message.devId} is deactivated, skipping...`);
|
|
137
137
|
return;
|
|
138
138
|
}
|
|
139
139
|
const availablestate = await this.adapter.getStateAsync(`${obj.message.devId.replace(this.namespace + '.', '')}.available`);
|
|
140
140
|
const lqi = await this.adapter.getStateAsync(`${obj.message.devId.replace(this.namespace + '.', '')}.link_quality`);
|
|
141
141
|
if ((availablestate && (!availablestate.val)) || (lqi && lqi.val < 1)) {
|
|
142
|
-
this.
|
|
142
|
+
this.warn(`Device ${obj.message.devId} is marked unavailable, skipping...`);
|
|
143
143
|
return;
|
|
144
144
|
}
|
|
145
145
|
this.inProgress.add(device.device.ieeeAddr);
|