iobroker.zigbee 2.0.4 → 2.0.5
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 +83 -56
- package/admin/admin.js +217 -19
- package/admin/img/philips_hue_lom001.png +0 -0
- package/admin/tab_m.html +13 -8
- 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 +15 -49
- package/lib/DeviceDebug.js +4 -2
- package/lib/commands.js +21 -2
- package/lib/developer.js +0 -0
- package/lib/exposes.js +8 -3
- package/lib/groups.js +6 -8
- package/lib/localConfig.js +4 -5
- package/lib/ota.js +6 -6
- package/lib/statescontroller.js +276 -101
- package/lib/zbDeviceAvailability.js +2 -2
- package/lib/zbDeviceConfigure.js +92 -58
- package/lib/zigbeecontroller.js +44 -46
- package/main.js +143 -217
- package/package.json +5 -5
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.5",
|
|
5
5
|
"news": {
|
|
6
|
+
"2.0.5": {
|
|
7
|
+
"en": "ZHC 23.6.0\nZH 3.3.x\nremoved extra logging\nfixed memory issue.\nConfigure on Message - 5 attempts.\nupdate transmitPower\nfix crash in ZigbeeController.ByteArrayToString\ndevice designation for devices without mapped model (allows use in groups and bindings)\n",
|
|
8
|
+
"de": "ZHC 23.6.0\nZH 3.3.x\nentfernte zusätzliche protokollierung\nfeste speicherausgabe.\nKonfigurieren auf Nachricht - 5 Versuche.\nupdate sendPower\ncrash in ZigbeeController beheben. ByteArrayToString\ngerätebezeichnung für geräte ohne abgebildetes modell (ermöglicht die verwendung in gruppen und bindungen)\n",
|
|
9
|
+
"ru": "ZHC 23.6.0\nZH 3.3.x\nудаленный дополнительный лес\nпроблемы с памятью.\nНастройка на сообщение - 5 попыток.\nобновление передатчика\nкрушение в ZigbeeController. Разработчик:teArrayToString\nобозначение устройства для устройств без картографической модели (позволяет использовать в группах и привязках)\n",
|
|
10
|
+
"pt": "ZHC 23.6.0\nZH 3.3.x\nretirada extra\nproblema de memória fixa.\nConfigurar na Mensagem - 5 tentativas.\natualização de energia\ncorrigir acidente em ZigbeeController. Linha de produção\ndesignação do dispositivo para dispositivos sem modelo mapeado (permite o uso em grupos e encadernações)\n",
|
|
11
|
+
"nl": "ZHC 23.6.0\nZH 3.3.x\nextra loggen verwijderd\nvast geheugen probleem.\nConfigureren op Bericht - 5 pogingen.\nupdate transmitPower\nherstel crash in ZigbeeController. ByteArrayToString\napparaataanduiding voor apparaten zonder in kaart gebracht model (kan worden gebruikt in groepen en bindingen)\n",
|
|
12
|
+
"fr": "ZHC 23.6.0\nZH 3.3.x\nretrait de l'exploitation supplémentaire\nproblème de mémoire fixe.\nConfigurer sur Message - 5 tentatives.\nmise à jour de transmissionPower\nréparer l'accident dans ZigbeeController. ByteArrayToString\ndésignation de l'appareil pour les dispositifs sans modèle cartographié (permet d'utiliser en groupes et de fixations)\n",
|
|
13
|
+
"it": "ZHC 23.6.0\nZH 3.3.x\nrimosso extra logging\nproblema di memoria fisso.\nConfigurare su Messaggio - 5 tentativi.\naggiornamento trasmetterePower\nfissare l'incidente a ZigbeeController. ByteArrayToString\ndesignazione del dispositivo per dispositivi senza modello mappato (permette l'uso in gruppi e binding)\n",
|
|
14
|
+
"es": "ZHC 23.6.0\nZH 3.3.x\nextra de registro\nproblema de memoria fijo.\nConfigurar en el Mensaje - 5 intentos.\ntransmisión de actualizaciónPower\narregla el accidente en ZigbeeController. ByteArrayToString\ndesignación de dispositivos para dispositivos sin modelo mapeado (permite el uso en grupos y encuadernaciones)\n",
|
|
15
|
+
"pl": "ZHC 23.6.0\nZH 3.3.x\nusunięte dodatkowe logowanie\nproblemy z pamięcią stałą.\nKonfiguracja wiadomości - 5 prób.\ntransmiter aktualizacji Power\nnaprawić wypadek w ZigbeeController. ByteArrayToString\noznaczenie urządzenia dla urządzeń bez mapowanego modelu (pozwala na stosowanie w grupach i wiązaniach)\n",
|
|
16
|
+
"uk": "ЗХК 23.6.0\nZH 3.3.x\nвидалення додаткового входу\nвиправлено проблему пам'яті.\nНастроювання повідомлення - 5 спроб.\nоновлення трансмісії\nфіксувати аварійну аварійну аварійність в ZigbeeController. ByteArrayToString\nпозначення пристрою для пристроїв без картографічної моделі ( дозволяє використовувати в групах і зв'язках)\n",
|
|
17
|
+
"zh-cn": "ZHC 23.6.0\nZH 3.3.x 电话\n已删除的额外日志\n固定记忆问题.\n配置信件 - 5 个尝试 .\n更新传输\n修复Zigbee控制器的崩溃。 字节箭头结构\n没有绘图模型的设备指定(分组和捆绑中的允许使用)\n"
|
|
18
|
+
},
|
|
6
19
|
"2.0.4": {
|
|
7
20
|
"en": "back to 2.0.2",
|
|
8
21
|
"de": "zurück zu 2.0.2",
|
|
@@ -55,19 +68,6 @@
|
|
|
55
68
|
"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Удосконалено редагування груп - видалення членів з групової картки",
|
|
56
69
|
"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改进组编辑 - 从组卡中删除成员"
|
|
57
70
|
},
|
|
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
|
-
},
|
|
71
71
|
"1.10.14": {
|
|
72
72
|
"en": "Herdsman 2.1.9, Converters 20.58.0\nFix: Aqara T1M (CL-L02D) \ndeleteDeviceStates change to deleteObj",
|
|
73
73
|
"de": "Herdsman 2.1.9, Konverter 20.58.0\nFix: Aqara T1M (CL-L02D)\nlöschen DeviceState Änderung zum Löschen Ob",
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
},
|
|
188
188
|
"globalDependencies": [
|
|
189
189
|
{
|
|
190
|
-
"admin": ">=
|
|
190
|
+
"admin": ">=6.0.0"
|
|
191
191
|
}
|
|
192
192
|
],
|
|
193
193
|
"dependencies": [
|
|
@@ -270,27 +270,6 @@
|
|
|
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
|
-
},
|
|
294
273
|
{
|
|
295
274
|
"_id": "info",
|
|
296
275
|
"type": "channel",
|
|
@@ -351,19 +330,6 @@
|
|
|
351
330
|
},
|
|
352
331
|
"native": {}
|
|
353
332
|
},
|
|
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
|
-
},
|
|
367
333
|
{
|
|
368
334
|
"_id": "info.undefinedDevices",
|
|
369
335
|
"type": "state",
|
package/lib/DeviceDebug.js
CHANGED
|
@@ -6,6 +6,7 @@ class DeviceDebug extends EventEmitter {
|
|
|
6
6
|
this.adapter = adapter;
|
|
7
7
|
this.dataByID = { };
|
|
8
8
|
this.dataByDevice = { };
|
|
9
|
+
this.logStatus = true;
|
|
9
10
|
|
|
10
11
|
}
|
|
11
12
|
|
|
@@ -65,14 +66,15 @@ class DeviceDebug extends EventEmitter {
|
|
|
65
66
|
target.push(item);
|
|
66
67
|
this.dataByDevice[item.deviceID] = DevData;
|
|
67
68
|
}
|
|
68
|
-
if (message.hasOwnProperty('message')) {
|
|
69
|
+
if (message.hasOwnProperty('message') && this.logStatus) {
|
|
69
70
|
this.warn(`ELEVATED:${flag} (${dataId.toString(16).slice(-4)}) ${message.message}`)
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
collectDebugData() {
|
|
76
|
+
collectDebugData(logStatus) {
|
|
77
|
+
this.logStatus = logStatus;
|
|
76
78
|
return this.dataByDevice;
|
|
77
79
|
}
|
|
78
80
|
}
|
package/lib/commands.js
CHANGED
|
@@ -154,6 +154,10 @@ 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.message.inlog)},obj.callback);
|
|
160
|
+
}
|
|
157
161
|
}
|
|
158
162
|
}
|
|
159
163
|
}
|
|
@@ -352,6 +356,18 @@ class Commands {
|
|
|
352
356
|
|
|
353
357
|
const id = getZbId(devInfo._id);
|
|
354
358
|
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
|
+
}
|
|
355
371
|
|
|
356
372
|
devInfo.rooms = [];
|
|
357
373
|
for (const room in rooms) {
|
|
@@ -588,7 +604,7 @@ class Commands {
|
|
|
588
604
|
async getLocalImages(from, command, msg, callback) {
|
|
589
605
|
if (this.stController) {
|
|
590
606
|
const id = msg.id;
|
|
591
|
-
const result = await this.stController.localConfig.enumerateImages(utils.getAbsoluteInstanceDataDir(this.adapter).replace('.','
|
|
607
|
+
const result = await this.stController.localConfig.enumerateImages(utils.getAbsoluteInstanceDataDir(this.adapter).replace('zigbee.','zigbee_'));
|
|
592
608
|
this.adapter.sendTo(from, command, {imageData:result}, callback)
|
|
593
609
|
}
|
|
594
610
|
}
|
|
@@ -623,6 +639,10 @@ class Commands {
|
|
|
623
639
|
const target = msg.target.replace(`${this.adapter.namespace}.`, '');
|
|
624
640
|
const entity = await this.zbController.resolveEntity(target);
|
|
625
641
|
//this.warn('entity for ' + target + ' is '+ JSON.stringify(entity))
|
|
642
|
+
if (entity && !entity.mapped) {
|
|
643
|
+
this.warn('unable to set local Override for device whithout mapped model');
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
626
646
|
if (msg.data)
|
|
627
647
|
{
|
|
628
648
|
for (const prop in msg.data) {
|
|
@@ -653,7 +673,6 @@ class Commands {
|
|
|
653
673
|
'doConfigure',
|
|
654
674
|
[entity.device, entity.mapped],
|
|
655
675
|
);
|
|
656
|
-
this.warn('do configure result is ' + JSON.stringify(result));
|
|
657
676
|
const msg = result.join(',');
|
|
658
677
|
if (msg.length > 5)
|
|
659
678
|
this.adapter.sendTo(from, command, {error: msg}, callback);
|
package/lib/developer.js
CHANGED
|
File without changes
|
package/lib/exposes.js
CHANGED
|
@@ -594,7 +594,7 @@ function createFromExposes(model, def, device, log) {
|
|
|
594
594
|
break;
|
|
595
595
|
|
|
596
596
|
case 'voltage':
|
|
597
|
-
state =
|
|
597
|
+
state = genState(expose);
|
|
598
598
|
break;
|
|
599
599
|
|
|
600
600
|
case 'temperature':
|
|
@@ -885,9 +885,14 @@ function applyExposes(mappedDevices, byModel) {
|
|
|
885
885
|
}
|
|
886
886
|
}
|
|
887
887
|
|
|
888
|
-
async function applyExposeForDevice(mappedDevices, byModel, device) {
|
|
888
|
+
async function applyExposeForDevice(mappedDevices, byModel, device, logger) {
|
|
889
|
+
const t = Date.now();
|
|
889
890
|
const deviceDef = await zigbeeHerdsmanConverters.findByDevice(device);
|
|
890
|
-
if (!deviceDef)
|
|
891
|
+
if (!deviceDef) {
|
|
892
|
+
//logger.warn(`ZHC02,${Date.now()},${Date.now()-t},${device && device.ieeeAddr ? device.ieeeAddr : '0x0'}, failed`);
|
|
893
|
+
return false;
|
|
894
|
+
}
|
|
895
|
+
//logger.warn(`ZHC02,${Date.now()},${Date.now()-t},${device && device.ieeeAddr ? device.ieeeAddr : '0x0'}, passed`);
|
|
891
896
|
applyDeviceDef(mappedDevices, byModel, deviceDef, device);
|
|
892
897
|
return true;
|
|
893
898
|
}
|
package/lib/groups.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
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');
|
|
6
5
|
const idRegExp = new RegExp(/group_(\d+)/);
|
|
7
6
|
|
|
8
7
|
|
|
@@ -168,7 +167,7 @@ class Groups {
|
|
|
168
167
|
for (const gpid of groups[epid]) {
|
|
169
168
|
const gpidn = parseInt(gpid);
|
|
170
169
|
if (gpidn < 0) {
|
|
171
|
-
this.
|
|
170
|
+
this.debug(`calling removeDevFromGroup with ${sysid}, ${-gpidn}, ${epid}` );
|
|
172
171
|
const response = await this.zbController.removeDevFromGroup(sysid, (-gpidn), epid);
|
|
173
172
|
if (response && response.error) {
|
|
174
173
|
errors.push(response.error);
|
|
@@ -176,7 +175,7 @@ class Groups {
|
|
|
176
175
|
}
|
|
177
176
|
const icon = this.stController.getDefaultGroupIcon(-gpidn)
|
|
178
177
|
} else if (gpidn > 0) {
|
|
179
|
-
this.
|
|
178
|
+
this.debug(`calling addDevToGroup with ${sysid}, ${gpidn}, ${epid}` );
|
|
180
179
|
const response = await this.zbController.addDevToGroup(sysid, (gpidn), epid);
|
|
181
180
|
if (response && response.error) {
|
|
182
181
|
errors.push(response.error);
|
|
@@ -233,7 +232,7 @@ class Groups {
|
|
|
233
232
|
throw error;
|
|
234
233
|
}
|
|
235
234
|
if (result.unread.length > 0) {
|
|
236
|
-
this.
|
|
235
|
+
this.debug(`unread ${stateDesc.id} change for group members ${JSON.stringify(result.unread)}`);
|
|
237
236
|
}
|
|
238
237
|
}
|
|
239
238
|
|
|
@@ -254,11 +253,10 @@ class Groups {
|
|
|
254
253
|
if (message.remove) {
|
|
255
254
|
for (const member of message.remove) {
|
|
256
255
|
const response = await this.zbController.removeDevFromGroup(member.id, id, member.ep);
|
|
257
|
-
this.
|
|
256
|
+
this.debug('trying to remove ' + member.id + (member.ep ? '.'+member.ep : '') + ' ' + ' from group ' + message.id + ' response is '+JSON.stringify(response));
|
|
258
257
|
}
|
|
259
258
|
}
|
|
260
259
|
if (icon.match(/img\/group_\d+\.png/g)) {
|
|
261
|
-
this.warn('.');
|
|
262
260
|
icon = await this.zbController.rebuildGroupIcon(group);
|
|
263
261
|
}
|
|
264
262
|
} catch (e) {
|
|
@@ -270,7 +268,7 @@ class Groups {
|
|
|
270
268
|
this.warn(`rename group name ${name}, id ${id}, icon ${icon} remove ${JSON.stringify(message.removeMembers)}`);
|
|
271
269
|
const group = await this.adapter.getObjectAsync(id);
|
|
272
270
|
if (!group) {
|
|
273
|
-
this.
|
|
271
|
+
this.debug('group object doesnt exist ')
|
|
274
272
|
// assume we have to create the group
|
|
275
273
|
this.adapter.setObjectNotExists(id, {
|
|
276
274
|
type: 'device',
|
|
@@ -301,7 +299,7 @@ class Groups {
|
|
|
301
299
|
});
|
|
302
300
|
}
|
|
303
301
|
else {
|
|
304
|
-
this.
|
|
302
|
+
this.debug('group object exists');
|
|
305
303
|
this.adapter.extendObject(id, {common: {name, type: 'group', icon: icon}});
|
|
306
304
|
}
|
|
307
305
|
}
|
package/lib/localConfig.js
CHANGED
|
@@ -138,7 +138,7 @@ class localConfig extends EventEmitter {
|
|
|
138
138
|
try {
|
|
139
139
|
this.adapter.fileExists(namespace, rv, (err, result) => {
|
|
140
140
|
if (result) return;
|
|
141
|
-
const src = this.adapter.expandFileName(iconPath).replace('.','
|
|
141
|
+
const src = this.adapter.expandFileName(iconPath).replace('zigbee.','zigbee_');
|
|
142
142
|
fs.readFile(src, (err, data) => {
|
|
143
143
|
if (err) {
|
|
144
144
|
this.error('unable to read ' + src + ' : '+ (err && err.message? err.message:' no message given'))
|
|
@@ -220,8 +220,7 @@ class localConfig extends EventEmitter {
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
async updateFromDeviceNames() {
|
|
223
|
-
this.
|
|
224
|
-
const fn = this.adapter.expandFileName('dev_names').replace('.', '_').concat('.json');
|
|
223
|
+
const fn = this.adapter.expandFileName('dev_names').replace('zigbee.', 'zigbee_').concat('.json');
|
|
225
224
|
fs.readFile(fn, (err, content) => {
|
|
226
225
|
if (!err) {
|
|
227
226
|
let data_js = {};
|
|
@@ -250,7 +249,7 @@ class localConfig extends EventEmitter {
|
|
|
250
249
|
|
|
251
250
|
async init() {
|
|
252
251
|
this.info('init localConfig');
|
|
253
|
-
const fn = this.adapter.expandFileName('LocalOverrides').replace('.','
|
|
252
|
+
const fn = this.adapter.expandFileName('LocalOverrides').replace('zigbee.','zigbee_').concat('.json');
|
|
254
253
|
this.filename = fn;
|
|
255
254
|
this.basefolder = path.dirname(fn);
|
|
256
255
|
|
|
@@ -286,7 +285,7 @@ class localConfig extends EventEmitter {
|
|
|
286
285
|
const files= fs.readdirSync(_path, {withFileTypes: true, recursive: true}).filter(item => (!item.isDirectory() && item.name.endsWith('.png')));
|
|
287
286
|
files.forEach((item) => {
|
|
288
287
|
const fn = path.join(item.parentPath, item.name);
|
|
289
|
-
rv.push({file: fn, name: item.name, data: fs.readFileSync(path.join(item.parentPath, item.name), 'base64')})
|
|
288
|
+
rv.push({file: fn, name: item.name, data: fs.readFileSync(path.join(item.parentPath, item.name), 'base64'), isBase64:true});
|
|
290
289
|
});
|
|
291
290
|
//this.warn('enumerateImages for ' + _path + ' is ' + JSON.stringify(rv));
|
|
292
291
|
}
|
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.info(`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.info(`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.info(`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.info(`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.info(`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.info(`Device ${obj.message.devId} is marked unavailable, skipping...`);
|
|
143
143
|
return;
|
|
144
144
|
}
|
|
145
145
|
this.inProgress.add(device.device.ieeeAddr);
|