iobroker.zigbee 1.8.1 → 1.8.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/admin/words.js CHANGED
@@ -96,8 +96,8 @@ systemDictionary = {
96
96
  "zigbee-shepherd": { "uk": "Ви можете редагувати сирі дані для надсилання сюди. Не використовуйте це, якщо ви не впевнені в тому, що робите! Використовуйте формат JSON (імена атрибутів у подвійних лапках!). Також можуть бути додані додаткові атрибути. Дивіться приклади вище. (Формат, який використовує zigbee-shepherd)", "en": "You may edit the raw data to send here. Do not use this if you are not sure of what you are doing! Use JSON format (attribute names in double quotes!). Additional properties may be added too. See examples above. (Format as used by zigbee-shepherd)", "de": "Sie können die zu sendenden Rohdaten hier bearbeiten. Verwenden Sie diese nicht, wenn Sie sich nicht sicher sind, was Sie tun! Verwenden Sie das JSON-Format (Attributnamen in doppelten Anführungszeichen!). Es können auch zusätzliche Eigenschaften hinzugefügt werden. Siehe Beispiele oben. (Format wie von zigbee-shepherd verwendet)", "ru": "Вы можете редактировать необработанные данные для отправки сюда. Не используйте это, если не уверены в том, что делаете! Используйте формат JSON (имена атрибутов в двойных кавычках!). Также могут быть добавлены дополнительные свойства. См. Примеры выше. (Формат, используемый zigbee-shepherd)", "pt": "Você pode editar os dados brutos para enviar aqui. Não use isso se não tiver certeza do que está fazendo! Use o formato JSON (nomes de atributos entre aspas duplas!). Propriedades adicionais também podem ser adicionadas. Veja os exemplos acima. (Formato usado pelo pastor zigbee)", "nl": "U kunt de onbewerkte gegevens bewerken om hier naartoe te sturen. Gebruik dit niet als u niet zeker weet wat u doet! Gebruik het JSON-formaat (attribuutnamen tussen dubbele aanhalingstekens!). Er kunnen ook aanvullende eigenschappen worden toegevoegd. Zie voorbeelden hierboven. (Formaat zoals gebruikt door zigbee-shepherd)", "fr": "Vous pouvez modifier les données brutes à envoyer ici. Ne l'utilisez pas si vous n'êtes pas sûr de ce que vous faites ! Utilisez le format JSON (noms d'attributs entre guillemets !). Des propriétés supplémentaires peuvent également être ajoutées. Voir les exemples ci-dessus. (Format utilisé par zigbee-shepherd)", "it": "Puoi modificare i dati grezzi da inviare qui. Non usarlo se non sei sicuro di quello che stai facendo! Usa il formato JSON (nomi di attributi tra virgolette doppie!). Possono essere aggiunte anche proprietà aggiuntive. Vedi esempi sopra. (Formato usato da zigbee-shepherd)", "es": "Puede editar los datos sin procesar para enviar aquí. ¡No use esto si no está seguro de lo que está haciendo! Utilice el formato JSON (nombres de atributos entre comillas dobles). También se pueden agregar propiedades adicionales. Vea los ejemplos anteriores. (Formato utilizado por zigbee-shepherd)", "pl": "Tutaj możesz edytować nieprzetworzone dane do wysłania. Nie używaj tego, jeśli nie jesteś pewien, co robisz! Użyj formatu JSON (nazwy atrybutów w podwójnych cudzysłowach!). Można również dodać dodatkowe właściwości. Zobacz przykłady powyżej. (Format używany przez zigbee-shepherd)", "zh-cn": "您可以编辑原始数据以发送到此处。如果不确定自己在做什么,请不要使用它!使用JSON格式(属性名称用双引号引起来!)。也可以添加其他属性。请参阅上面的示例。 (格式由zigbee-shepherd使用)"},
97
97
  "№": { "uk": "№", "en": "№", "de": "Nr.", "ru": "№", "pt": "№", "nl": "№", "fr": "№", "it": "№", "es": "№", "pl": "Nr", "zh-cn": "№"},
98
98
  "Excludes": { "uk": "виключити", "en": "to exclude", "de": "ausschließen", "ru": "Исключить", "nl": "uitsluiten", "fr": "d'exclure", "pl": "wyklucz"},
99
- "ExcludeTextTranslation": { "uk": "Тут ви можете додати деякі пристрої, які слід виключити з нашого опису. Вони використовують лише \"викриття (exposes)\" від zigbee-herdsman-converter. Після додавання перезапустіть адаптер.", "en": "Here you can add some devices that should be excluded from our description. They only use \"exposes\" from zigbee-herdsman-converter. After adding, please restart the adapter.", "de": "Sie können hier einige Geräte hinzufügen, die von unserer Verarbeitungausgeschlossen werden sollten. Sie verwenden dann nur exposes vom ZigBee-Herdsman-Converter. Nach dem Hinzufügen starten Sie bitte den Adapter neu.", "ru": "Здесь вы можете добавить устройства, для которых надо исключить представление заданное адаптером (iobroker.zigbee). В этом случае они будут использовать \"exposes\" из zigbee-herdsman-converter. После добавления перезапустите адаптер.", "nl": "Hier kunt u enkele apparaten toevoegen die moeten worden uitgesloten van onze beschrijving. Ze gebruiken alleen \"exposes\" van zigbee-herdsman-converter. Na het toevoegen moet u de adapter opnieuw opstarten.", "fr": "Ici, vous pouvez ajouter certains dispositifs qui doivent être exclus de notre description. Ils utilisent uniquement les \"exposes\" de zigbee-herdsman-converter. Après l'ajout, veuillez redémarrer l'adaptateur.", "pl": "Możesz dodać tutaj kilka urządzeń, które powinny zostać wyłączone z naszego opisu. Używasz tylko ekspozycji z zigbee-herdsman-converter. Po dodaniu zrestartuj adapter"},
100
- "SettingsExclude": { "uk": "Примусовий запуск адаптера з не цілісною конфігурацією (не рекомендується). Оновіть адаптер до сумісної версії мікропрограми та перестворіть свою мережу якомога швидше.", "en": "Force start adapter with inconsistent configuration (not recommended). Please update the adapter to compatible firmware and recreate your network as soon as possible.", "de": "Erzwingen Sie den Start des Adapters mit inkonsistenter Konfiguration (nicht empfohlen). Bitte aktualisieren Sie den Adapter auf kompatible Firmware und erstellen Sie Ihr Netzwerk so schnell wie möglich neu.", "ru": "Принудительный запуск адаптера с несовместимой конфигурацией (не рекомендуется). Пожалуйста, обновите адаптер до совместимой прошивки и воссоздайте сеть как можно скорее.", "nl": "Forceer de adapter met een inconsistente configuratie (niet aanbevolen). Update de adapter naar compatibele firmware en maak uw netwerk zo snel mogelijk opnieuw aan.", "fr": "Démarrage forcé de l'adaptateur avec une configuration incohérente (non recommandé). Veuillez mettre à jour l'adaptateur avec un micrologiciel compatible et recréer votre réseau dès que possible.", "pl": "Wystaruj Adapter bez zgodnej konfiguracji (uwaga). Zaktualizuj adapter i jak najszybciej odtwórz sieć."},
99
+ "ExcludeTextTranslation": { "uk": "Тут ви можете додати деякі пристрої, які слід виключити з нашого опису. Вони використовують лише \"викриття (exposes)\" від zigbee-herdsman-converter. Після додавання перезапустіть адаптер.", "en": "Here you can add some devices that should be excluded from our description. They only use \"exposes\" from zigbee-herdsman-converter. After adding, please restart the adapter.", "de": "Sie können hier einige Geräte hinzufügen, die von unserer Verarbeitung ausgeschlossen werden sollten. Sie verwenden dann nur exposes vom ZigBee-Herdsman-Converter. Nach dem Hinzufügen starten Sie bitte den Adapter neu.", "ru": "Здесь вы можете добавить устройства, для которых надо исключить представление заданное адаптером (iobroker.zigbee). В этом случае они будут использовать \"exposes\" из zigbee-herdsman-converter. После добавления перезапустите адаптер.", "nl": "Hier kunt u enkele apparaten toevoegen die moeten worden uitgesloten van onze beschrijving. Ze gebruiken alleen \"exposes\" van zigbee-herdsman-converter. Na het toevoegen moet u de adapter opnieuw opstarten.", "fr": "Ici, vous pouvez ajouter certains dispositifs qui doivent être exclus de notre description. Ils utilisent uniquement les \"exposes\" de zigbee-herdsman-converter. Après l'ajout, veuillez redémarrer l'adaptateur.", "pl": "Możesz dodać tutaj kilka urządzeń, które powinny zostać wyłączone z naszego opisu. Używasz tylko ekspozycji z zigbee-herdsman-converter. Po dodaniu zrestartuj adapter"},
100
+ "SettingsExclude": { "uk": "Примусовий запуск адаптера з не цілісною конфігурацією (не рекомендується). Оновіть адаптер до сумісної версії мікропрограми та перестворіть свою мережу якомога швидше.", "en": "Force start adapter with inconsistent configuration (not recommended). Please update the adapter to compatible firmware and recreate your network as soon as possible.", "de": "Den Start des Adapters mit inkonsistenter Konfiguration erzwingen (nicht empfohlen). Bitte aktualisieren Sie den Adapter auf kompatible Firmware und erstellen Sie Ihr Netzwerk so schnell wie möglich neu.", "ru": "Принудительный запуск адаптера с несовместимой конфигурацией (не рекомендуется). Пожалуйста, обновите адаптер до совместимой прошивки и воссоздайте сеть как можно скорее.", "nl": "Forceer de adapter met een inconsistente configuratie (niet aanbevolen). Update de adapter naar compatibele firmware en maak uw netwerk zo snel mogelijk opnieuw aan.", "fr": "Démarrage forcé de l'adaptateur avec une configuration incohérente (non recommandé). Veuillez mettre à jour l'adaptateur avec un micrologiciel compatible et recréer votre réseau dès que possible.", "pl": "Wystaruj Adapter bez zgodnej konfiguracji (uwaga). Zaktualizuj adapter i jak najszybciej odtwórz sieć."},
101
101
  "Others": { "uk": "інші налаштування", "en": "other settings", "de": "andere Einstellungen", "ru": "другие настройки", "nl": "andere instellingen", "fr": "autres réglages", "pl": "inne ustawienia"},
102
102
  "disable internal Backup": { "uk": "вимкнути внутрішнє резервне копіювання", "en": "disable internal Backup", "de": "Deaktiviere die interne Sicherung", "ru": "отключить внутреннее резервное копирование", "nl": "interne back-up uitschakelen", "fr": "désactiver la sauvegarde interne", "pl": "wyłącz wewnętrzną kopię"},
103
103
  "Disable active availability check": { "uk": "Вимкнути активну перевірку доступності", "en": "Disable active availability check", "de": "Aktive Verfügbarkeitsprüfung deaktivieren", "ru": "Отключить активную проверку доступности", "nl": "Actieve beschikbaarheidscontrole uitschakelen", "fr": "Désactiver le contrôle de disponibilité actif", "pl": "Wyłącz aktywne sprawdzanie dostępności"},
package/io-package.json CHANGED
@@ -1,8 +1,41 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zigbee",
4
- "version": "1.8.1",
4
+ "version": "1.8.5",
5
5
  "news": {
6
+ "1.8.5": {
7
+ "en": "fix for new code",
8
+ "de": "fix für neuen code",
9
+ "ru": "исправить для нового кода",
10
+ "pt": "corrigir para novo código",
11
+ "nl": "vertaling:",
12
+ "fr": "correction du nouveau code",
13
+ "it": "correzione per nuovo codice",
14
+ "es": "fijar para nuevo código",
15
+ "pl": "naprawić nowy kod",
16
+ "uk": "виправити для нового коду",
17
+ "zh-cn": "f 新的守则的ix"
18
+ },
19
+ "1.8.4": {
20
+ "en": "fix for new code"
21
+ },
22
+ "1.8.3": {
23
+ "en": "back to old source",
24
+ "de": "zurück zur alten quelle",
25
+ "ru": "назад к старому источнику",
26
+ "pt": "voltar para a velha fonte",
27
+ "nl": "terug naar de oude bron",
28
+ "fr": "retour à la vieille source",
29
+ "it": "torna alla vecchia fonte",
30
+ "es": "volver a la vieja fuente",
31
+ "pl": "tył",
32
+ "uk": "назад до старого джерела",
33
+ "zh-cn": "背 景"
34
+ },
35
+ "1.8.2": {
36
+ "en": "back to old source",
37
+ "de": "back to old source"
38
+ },
6
39
  "1.8.1": {
7
40
  "en": "Packages updated\nAdded names of serial ports in configuration dialog",
8
41
  "de": "Pakete aktualisiert\nNamen der seriellen Ports im Konfigurationsdialog hinzugefügt",
@@ -23,54 +56,6 @@
23
56
  "1.7.6": {
24
57
  "en": "ikea fix ",
25
58
  "de": "ikea fix "
26
- },
27
- "1.7.5": {
28
- "en": "error message for undefined devices or icons ",
29
- "de": "Fehlermeldung für undefinierte Geräte oder Symbole",
30
- "ru": "сообщение об ошибке для неопределенных устройств или значков",
31
- "pt": "mensagem de erro para dispositivos ou ícones indefinidos",
32
- "nl": "foutmelding voor ongedefinieerde apparaten of pictogrammen",
33
- "fr": "message d'erreur pour les périphériques ou les icônes non définis",
34
- "it": "messaggio di errore per dispositivi o icone non definiti",
35
- "es": "mensaje de error para dispositivos o iconos no definidos",
36
- "pl": "komunikat o błędzie dla niezdefiniowanych urządzeń lub ikon",
37
- "zh-cn": "未定义设备或图标的错误消息"
38
- },
39
- "1.7.4": {
40
- "en": "missing icons with multiple description",
41
- "de": "fehlende Symbole mit mehrfacher Beschreibung",
42
- "ru": "отсутствующие значки с несколькими описаниями",
43
- "pt": "ícones ausentes com descrição múltipla",
44
- "nl": "ontbrekende pictogrammen met meerdere beschrijvingen",
45
- "fr": "icônes manquantes avec plusieurs descriptions",
46
- "it": "icone mancanti con descrizione multipla",
47
- "es": "faltan iconos con descripción múltiple",
48
- "pl": "brakujące ikony z wieloma opisami",
49
- "zh-cn": "缺少具有多个描述的图标"
50
- },
51
- "1.7.2": {
52
- "en": "corr download missing icon",
53
- "de": "korrektur download fehlendes Icon",
54
- "ru": "Корр скачать отсутствует значок",
55
- "pt": "corr baixar ícone ausente",
56
- "nl": "corr download ontbreekt icoon",
57
- "fr": "corr télécharger l'icône manquante",
58
- "it": "corr download icona mancante",
59
- "es": "falta el icono de descarga corr",
60
- "pl": "brak ikony pobierania corr",
61
- "zh-cn": "更正下载丢失的图标"
62
- },
63
- "1.7.1": {
64
- "en": "Device status is displayed in admin interface with color and icon.\nInternal adapter backups can be disabled (for backups with BackItUp Adapter).\nOnly last 10 backups are kept (currently they accumulate and need to be deleted manually).\nNew function for missing icons in Admin Object tree.",
65
- "de": "Der Gerätestatus wird in der Admin-Oberfläche mit Farbe und Symbol angezeigt.\nInterne Adapter-Backups können deaktiviert werden (für Backups mit BackItUp Adapter).\nNur die letzten 10 Backups werden aufbewahrt (derzeit sammeln sie sich an und müssen manuell gelöscht werden).\nNeue Funktion für fehlende Symbole im Admin-Objektbaum.",
66
- "ru": "Состояние устройства отображается в административном интерфейсе цветом и значком.\nВнутренние резервные копии адаптера могут быть отключены (для резервных копий с помощью BackItUp Adapter).\nХранятся только последние 10 резервных копий (в настоящее время они накапливаются и должны быть удалены вручную).\nНовая функция для отсутствуют значки в дереве объектов администрирования.",
67
- "pt": "O status do dispositivo é exibido na interface de administração com cor e ícone.\nOs backups do adaptador interno podem ser desabilitados (para backups com o BackItUp Adapter).\nSomente os últimos 10 backups são mantidos (atualmente eles se acumulam e precisam ser excluídos manualmente).\nNova função para ícones ausentes na árvore de objetos de administração.",
68
- "nl": "Apparaatstatus wordt weergegeven in de beheerdersinterface met kleur en pictogram.\nInterne adapterback-ups kunnen worden uitgeschakeld (voor back-ups met BackItUp Adapter).\nAlleen de laatste 10 back-ups worden bewaard (momenteel worden deze verzameld en moeten ze handmatig worden verwijderd).\nNieuwe functie voor ontbrekende pictogrammen in Admin Object-structuur.",
69
- "fr": "L'état de l'appareil est affiché dans l'interface d'administration avec une couleur et une icône.\nLes sauvegardes de l'adaptateur interne peuvent être désactivées (pour les sauvegardes avec l'adaptateur BackItUp).\nSeules les 10 dernières sauvegardes sont conservées (actuellement, elles s'accumulent et doivent être supprimées manuellement).\nNouvelle fonction pour icônes manquantes dans l'arborescence des objets d'administration.",
70
- "it": "Lo stato del dispositivo viene visualizzato nell'interfaccia di amministrazione con un colore e un'icona.\nI backup interni dell'adattatore possono essere disabilitati (per i backup con l'adattatore BackItUp).\nSono conservati solo gli ultimi 10 backup (attualmente si accumulano e devono essere eliminati manualmente).\nNuova funzione per icone mancanti nell'albero degli oggetti amministratore.",
71
- "es": "El estado del dispositivo se muestra en la interfaz de administración con color e icono.\nLas copias de seguridad del adaptador interno se pueden desactivar (para copias de seguridad con el adaptador BackItUp).\nSolo se conservan las últimas 10 copias de seguridad (actualmente se acumulan y deben eliminarse manualmente).\nNueva función para Faltan iconos en el árbol de objetos de administración.",
72
- "pl": "Stan urządzenia jest wyświetlany w interfejsie administratora za pomocą koloru i ikony.\nWewnętrzne kopie adaptera można wyłączyć (dla kopii zapasowych z BackItUp Adapter).\nZachowywanych jest tylko 10 ostatnich kopii (obecnie są one gromadzone i należy je usunąć ręcznie).\nNowa funkcja dla brakujące ikony w drzewie Admin Object.",
73
- "zh-cn": "设备状态以颜色和图标显示在管理界面中。\n可以禁用内部适配器备份(对于使用 BackItUp 适配器的备份)。\n仅保留最后 10 个备份(当前它们累积并需要手动删除)。\n新功能管理对象树中缺少图标。"
74
59
  }
75
60
  },
76
61
  "title": "Zigbee",
package/lib/commands.js CHANGED
@@ -11,7 +11,7 @@ const disallowedDashStates = [
11
11
  class Commands {
12
12
  constructor(adapter) {
13
13
  this.adapter = adapter;
14
- this.adapter.on('message', this.onMessage.bind(this));
14
+ this.adapter.on('message', obj => this.onMessage(obj));
15
15
  }
16
16
 
17
17
  start(zbController, stController) {
package/lib/devices.js CHANGED
@@ -3092,8 +3092,8 @@ const groupStates = [states.brightness_step].concat(lightStatesWithColor);
3092
3092
  function getByModel() {
3093
3093
  const byModel = new Map();
3094
3094
  for (const device of devices) {
3095
- for (const model of device.models) {
3096
- const stripModel = model.replace(/0.*$/g, '').trim();
3095
+ for (const model of device.models) {
3096
+ const stripModel = model.replace(/\0.*$/g, '').trim();
3097
3097
  byModel.set(stripModel, device);
3098
3098
  }
3099
3099
  }
@@ -3121,7 +3121,7 @@ function removeEmptyStates(devices) {
3121
3121
 
3122
3122
  function findModel(model) {
3123
3123
  const byModel = getByModel();
3124
- const stripModel = model ? model.replace(/0.*$/g, '').trim() : '';
3124
+ const stripModel = (model) ? model.replace(/\0.*$/g, '').trim() : '';
3125
3125
  return byModel.get(stripModel);
3126
3126
  }
3127
3127
 
@@ -41,7 +41,7 @@ class ZigbeeController extends EventEmitter {
41
41
  super();
42
42
  this.adapter = adapter;
43
43
  this._permitJoinTime = 0;
44
- this.herdsman_started = false;
44
+ this.herdsmanStarted = false;
45
45
  this.extensions = [
46
46
  new DeviceAvailabilityExt(this, {}),
47
47
  new DeviceConfigureExt(this, {}),
@@ -98,8 +98,8 @@ class ZigbeeController extends EventEmitter {
98
98
  try {
99
99
  //this.debug(`Using zigbee-herdsman with settings2: ${JSON.stringify(this)}`);
100
100
  this.debug(`Starting zigbee-herdsman...`);
101
- await this.herdsman.start();
102
101
 
102
+ // install event handlers before start
103
103
  this.herdsman.on('adapterDisconnected', this.handleDisconnected.bind(this));
104
104
  this.herdsman.on('deviceAnnounce', this.handleDeviceAnnounce.bind(this));
105
105
  this.herdsman.on('deviceInterview', this.handleDeviceInterview.bind(this));
@@ -107,8 +107,10 @@ class ZigbeeController extends EventEmitter {
107
107
  this.herdsman.on('deviceLeave', this.handleDeviceLeave.bind(this));
108
108
  this.herdsman.on('message', this.handleMessage.bind(this));
109
109
 
110
+ await this.herdsman.start();
111
+
110
112
  this.debug('zigbee-herdsman started');
111
- this.herdsman_started = true;
113
+ this.herdsmanStarted = true;
112
114
  this.info(`Coordinator firmware version: ${JSON.stringify(await this.herdsman.getCoordinatorVersion())}`);
113
115
 
114
116
  // debug info from herdsman getNetworkParameters
@@ -256,7 +258,7 @@ class ZigbeeController extends EventEmitter {
256
258
  if (all) {
257
259
  return devices;
258
260
  } else {
259
- return devices.filter((device) => device.type !== 'Coordinator');
261
+ return devices.filter(device => device.type !== 'Coordinator');
260
262
  }
261
263
  } else {
262
264
  return [];
@@ -265,7 +267,11 @@ class ZigbeeController extends EventEmitter {
265
267
 
266
268
  async getGroups() {
267
269
  try {
268
- return await this.herdsman.getGroups();
270
+ if (this.herdsman) {
271
+ return await this.herdsman.getGroups();
272
+ } else {
273
+ return null;
274
+ }
269
275
  } catch (error) {
270
276
  this.sendError(error);
271
277
  this.error(JSON.stringify(error));
@@ -303,7 +309,6 @@ class ZigbeeController extends EventEmitter {
303
309
  } else {
304
310
  this.debug(`verifyGroupExists: group ${nid} exists`);
305
311
  }
306
-
307
312
  }
308
313
 
309
314
  async getGroupMembersFromController(id) {
@@ -311,8 +316,8 @@ class ZigbeeController extends EventEmitter {
311
316
  try {
312
317
  const group = await this.getGroupByID(id);
313
318
  if (group) {
314
- const groupmembers = group.members;
315
- for (const member of groupmembers) {
319
+ const groupMembers = group.members;
320
+ for (const member of groupMembers) {
316
321
  const epid = member.ID ? member.ID : -1;
317
322
  const nwk = member.deviceNetworkAddress;
318
323
  const device = this.getDeviceByNetworkAddress(nwk);
@@ -328,7 +333,6 @@ class ZigbeeController extends EventEmitter {
328
333
  } else {
329
334
  return undefined;
330
335
  }
331
-
332
336
  } catch (error) {
333
337
  this.sendError(error);
334
338
  if (error) {
@@ -353,7 +357,7 @@ class ZigbeeController extends EventEmitter {
353
357
  }
354
358
 
355
359
  async resolveEntity(key, ep) {
356
- //assert(typeof key === 'string' || key.constructor.name === 'Device', `Wrong type '${typeof key}'`);
360
+ // assert(typeof key === 'string' || key.constructor.name === 'Device', `Wrong type '${typeof key}'`);
357
361
 
358
362
  if (typeof key === 'string') {
359
363
  if (key === 'coordinator') {
@@ -390,8 +394,6 @@ class ZigbeeController extends EventEmitter {
390
394
  endpoints: device.endpoints,
391
395
  name: key,
392
396
  };
393
- } else {
394
- return;
395
397
  }
396
398
  }
397
399
  } else if (typeof key === 'number') {
@@ -442,21 +444,21 @@ class ZigbeeController extends EventEmitter {
442
444
  await this.herdsman.stop();
443
445
  } catch (error) {
444
446
  this.sendError(error);
445
- if (this.herdsman_started)
447
+ if (this.herdsmanStarted) {
446
448
  this.error(`Failed to stop zigbee (${error.stack})`);
447
- else {
449
+ } else {
448
450
  this.warn(`Failed to stop zigbee during startup`);
449
451
  }
450
452
  }
451
453
  }
452
454
 
453
455
  async handleDisconnected() {
454
- this.herdsman_started = false;
456
+ this.herdsmanStarted = false;
455
457
  this.emit('disconnect');
456
458
  }
457
459
 
458
460
  connected() {
459
- return this.herdsman_started;
461
+ return this.herdsmanStarted;
460
462
  }
461
463
 
462
464
  // Permit join
@@ -590,7 +592,6 @@ class ZigbeeController extends EventEmitter {
590
592
  }
591
593
  }
592
594
 
593
-
594
595
  async handleDeviceJoined(message) {
595
596
  this.debug('handleDeviceJoined', message);
596
597
  //const entity = await this.resolveEntity(message.device || message.ieeeAddr);
@@ -607,7 +608,7 @@ class ZigbeeController extends EventEmitter {
607
608
  const entity = await this.resolveEntity(message.device || message.ieeeAddr);
608
609
  const friendlyName = entity.name;
609
610
  if (message.status === 'successful') {
610
- this.info(`Successfully interviewed '${friendlyName}', device has succesfully been paired`);
611
+ this.info(`Successfully interviewed '${friendlyName}', device has successfully been paired`);
611
612
 
612
613
  if (entity.mapped) {
613
614
  const {vendor, description, model} = entity.mapped;
@@ -634,7 +635,7 @@ class ZigbeeController extends EventEmitter {
634
635
  this.emit('new', entity);
635
636
  }
636
637
  } else if (message.status === 'failed') {
637
- this.error(`Failed to interview '${friendlyName}', device has not succesfully been paired. ${message.error}`);
638
+ this.error(`Failed to interview '${friendlyName}', device has not successfully been paired. ${message.error}`);
638
639
  this.emit('pairing', 'Interview failed', friendlyName);
639
640
  } else {
640
641
  if (message.status === 'started') {
@@ -676,8 +677,7 @@ class ZigbeeController extends EventEmitter {
676
677
  result = await device.lqi();
677
678
  } catch (error) {
678
679
  this.sendError(error);
679
- if (error)
680
- this.debug(`Failed to execute LQI for '${resolved.name}'. ${safeJsonStringify(error.stack)}`);
680
+ error && this.debug(`Failed to execute LQI for '${resolved.name}'. ${safeJsonStringify(error.stack)}`);
681
681
 
682
682
  lqis.push({
683
683
  parent: 'undefined',
@@ -806,7 +806,6 @@ class ZigbeeController extends EventEmitter {
806
806
  await (ep.addToGroup(group.mapped));
807
807
  }
808
808
  }
809
-
810
809
  } else {
811
810
  if (entity.endpoint.inputClusters.includes(4)) {
812
811
  this.debug(`adding endpoint ${entity.endpoint.ID} to group`);
@@ -866,7 +865,7 @@ class ZigbeeController extends EventEmitter {
866
865
  await ep.removefromAllGroups();
867
866
  }
868
867
  }
869
- //await entity.endpoint.removeFromAllGroups();
868
+ // await entity.endpoint.removeFromAllGroups();
870
869
  } catch (error) {
871
870
  this.sendError(error);
872
871
  this.error(`Exception when trying remove ${devId} from all groups`, error);
@@ -939,12 +938,12 @@ class ZigbeeController extends EventEmitter {
939
938
  nwkmanageraddr: 0x0000
940
939
  };
941
940
  const energyScan = this.herdsman.adapter.znp.waitFor(
942
- 2, //unpi_1.Constants.Type.AREQ,
943
- 5, //Subsystem.ZDO,
941
+ 2, // unpi_1.Constants.Type.AREQ,
942
+ 5, // Subsystem.ZDO,
944
943
  'mgmtNwkUpdateNotify'
945
944
  );
946
945
  await this.herdsman.adapter.znp.request(
947
- 0x5, //Subsystem.ZDO
946
+ 0x5, // Subsystem.ZDO
948
947
  'mgmtNwkUpdateReq',
949
948
  payload,
950
949
  energyScan.ID
package/main.js CHANGED
@@ -64,9 +64,9 @@ class Zigbee extends utils.Adapter {
64
64
  name: 'zigbee',
65
65
  systemConfig: true,
66
66
  }));
67
- this.on('ready', this.onReady.bind(this));
68
- this.on('unload', this.onUnload.bind(this));
69
- this.on('message', this.onMessage.bind(this));
67
+ this.on('ready', () => this.onReady());
68
+ this.on('unload', callback => this.onUnload(callback));
69
+ this.on('message', obj => this.onMessage(obj));
70
70
 
71
71
  this.query_device_block = [];
72
72
 
@@ -313,12 +313,12 @@ class Zigbee extends utils.Adapter {
313
313
  }
314
314
 
315
315
  async onZigbeeAdapterReady() {
316
- if (this.reconnectTimer) clearTimeout(this.reconnectTimer);
316
+ this.reconnectTimer && clearTimeout(this.reconnectTimer);
317
317
  this.log.info(`Zigbee started`);
318
318
  // https://github.com/ioBroker/ioBroker.zigbee/issues/668
319
319
  const extPanIdFix = this.config.extPanIdFix ? this.config.extPanIdFix : false;
320
320
  if (!extPanIdFix) {
321
- const configExtPanId = this.config.extPanID ? '0x' + this.config.extPanID.toLowerCase() : '0xdddddddddddddddd';
321
+ const configExtPanId = this.config.extPanID ? `0x${this.config.extPanID.toLowerCase()}` : '0xdddddddddddddddd';
322
322
  let networkExtPanId = (await this.zbController.herdsman.getNetworkParameters()).extendedPanID;
323
323
  let needChange = false;
324
324
  this.log.debug(`Config value ${configExtPanId} : Network value ${networkExtPanId}`);
@@ -340,7 +340,7 @@ class Zigbee extends utils.Adapter {
340
340
  2, // ZnpCommandStatus.INVALID_PARAM
341
341
  ]
342
342
  );
343
- const nwExtPanId = '0x' + result.payload.value.reverse().toString('hex');
343
+ const nwExtPanId = `0x${result.payload.value.reverse().toString('hex')}`;
344
344
  this.log.debug(`Config value ${configExtPanId} : nw value ${nwExtPanId}`);
345
345
  if (configExtPanId !== nwExtPanId) {
346
346
  networkExtPanId = nwExtPanId;
@@ -417,7 +417,7 @@ class Zigbee extends utils.Adapter {
417
417
  this.log.debug(`Type ${type} device ${safeJsonStringify(entity)} incoming event: ${safeJsonStringify(message)}`);
418
418
  const device = entity.device;
419
419
  const mappedModel = entity.mapped;
420
- const model = (entity.mapped) ? entity.mapped.model : entity.device.modelID;
420
+ const model = entity.mapped ? entity.mapped.model : entity.device.modelID;
421
421
  const cluster = message.cluster;
422
422
  const devId = device.ieeeAddr.substr(2);
423
423
  const meta = {device};
@@ -735,9 +735,8 @@ class Zigbee extends utils.Adapter {
735
735
  const model = (entity.mapped) ? entity.mapped.model : entity.device.modelID;
736
736
  this.log.debug(`new device ${dev.ieeeAddr} ${dev.networkAddress} ${model} `);
737
737
  this.logToPairing(`New device joined '${dev.ieeeAddr}' model ${model}`, true);
738
- this.stController.updateDev(dev.ieeeAddr.substr(2), model, model, () => {
739
- this.stController.syncDevStates(dev, model);
740
- });
738
+ this.stController.updateDev(dev.ieeeAddr.substr(2), model, model, () =>
739
+ this.stController.syncDevStates(dev, model));
741
740
  }
742
741
  // else this.log.warn(`Device ${safeJsonStringify(entity)} rejoined, no new device`);
743
742
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.zigbee",
3
- "version": "1.8.1",
3
+ "version": "1.8.5",
4
4
  "author": {
5
5
  "name": "Kirov Ilya",
6
6
  "email": "kirovilya@gmail.com"
@@ -21,11 +21,11 @@
21
21
  "serialport": "^10.5.0"
22
22
  },
23
23
  "dependencies": {
24
- "zigbee-herdsman": "0.14.76",
25
- "zigbee-herdsman-converters": "14.0.676",
26
24
  "@iobroker/adapter-core": "^2.6.7",
27
25
  "tar": "^6.1.12",
28
- "typescript": "^4.9.3"
26
+ "typescript": "^4.9.3",
27
+ "zigbee-herdsman": "0.14.76",
28
+ "zigbee-herdsman-converters": "14.0.678"
29
29
  },
30
30
  "description": "Zigbee devices",
31
31
  "devDependencies": {
@@ -34,15 +34,15 @@
34
34
  "@alcalzone/release-script-plugin-license": "^3.5.9",
35
35
  "@iobroker/testing": "^4.1.0",
36
36
  "axios": "^1.2.0",
37
- "mixin-deep": "^2.0.1",
37
+ "chai": "^4.3.7",
38
+ "chai-as-promised": "^7.1.1",
38
39
  "eslint": "^8.28.0",
39
40
  "eslint-config-prettier": "^8.5.0",
40
41
  "eslint-plugin-prettier": "^4.2.1",
41
- "chai": "^4.3.7",
42
- "chai-as-promised": "^7.1.1",
43
42
  "gulp": "^4.0.2",
44
43
  "gulp-jsdoc3": "^3.0.0",
45
44
  "gulp-replace": "^1.1.3",
45
+ "mixin-deep": "^2.0.1",
46
46
  "mocha": "^10.1.0"
47
47
  },
48
48
  "homepage": "https://github.com/ioBroker/ioBroker.zigbee",