iobroker.zigbee 1.10.3 → 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/io-package.json CHANGED
@@ -1,98 +1,98 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zigbee",
4
- "version": "1.10.3",
4
+ "version": "1.10.11",
5
5
  "news": {
6
- "1.10.3": {
7
- "en": "dependency update\n",
8
- "de": "aktualisierung der abhängigkeit\n",
9
- "ru": "обновление\n",
10
- "pt": "atualização de dependência\n",
11
- "nl": "afhankelijkheidsupdate\n",
12
- "fr": "mise à jour de la dépendance\n",
13
- "it": "aggiornamento della dipendenza\n",
14
- "es": "actualización de la dependencia\n",
15
- "pl": "aktualizacja zależności\n",
16
- "uk": "оновлення залежності\n",
17
- "zh-cn": "依赖性更新\n"
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.2": {
20
- "en": "dependency update",
21
- "de": "aktualisierung der abhängigkeit",
22
- "ru": "обновление",
23
- "pt": "atualização de dependência",
24
- "nl": "afhankelijkheidsupdate",
25
- "fr": "mise à jour de la dépendance",
26
- "it": "aggiornamento della dipendenza",
27
- "es": "actualización de la dependencia",
28
- "pl": "aktualizacja zależności",
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.1": {
33
- "en": "Baudrate is now configurable. works ONLY with Deconz/Conbee( 38400 )\nadd nvbackup.json delete button",
34
- "de": "Baudrate ist jetzt konfigurierbar. funktioniert nur mit Deconz/Conbee( 38400 )\nnvbackup hinzufügen. json löschen taste",
35
- "ru": "Baudrate теперь настраиваемый. работает только с Deconz/Conbee (38400)\nдобавьте nvbackup. кнопка",
36
- "pt": "O Baudrate agora é configurável. funciona somente com Deconz/Conbee( 38400 )\nadicionar nvbackup. botão de exclusão json",
37
- "nl": "Baudrate is nu configureerbaar. ALLEEN werkt met Deconz/Conbee( 38400 )\nnvbackup toevoegen. json delete knop",
38
- "fr": "Baudrate est maintenant configurable. fonctionne uniquement avec Decanz/Conbee( 38400 )\najouter nvbackup. bouton de suppression de json",
39
- "it": "Baudrate è ora configurabile. funziona SOLO con Deconz/Conbee( 38400 )\naggiungere nvbackup. pulsante di cancellazione json",
40
- "es": "Baudrate es ahora configurable. sólo funciona con Deconz/Conbee( 38400 )\nañadir nvbackup. json delete botón",
41
- "pl": "Baudrate jest teraz konfigurowalny. działa tylko z Deconz / Conbee (38400)\ndodaj nvbackup. json usuń przycisk",
42
- "uk": "Baudrate тепер конфігурується. працює ONLY з Deconz/Conbee( 38400 )\nдодати nvbackup. json видалити кнопка",
43
- "zh-cn": "鲍德拉特现在可塑. 仅与Deconz/Conbee(38400)合作\n添加 nv 备份。 json 删除按钮"
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.10.0": {
46
- "en": "new zigbee-herdsman-converters 18.x\nconfigure message is now a warning",
47
- "de": "neue zickbee-herdsman-konverter 18.x\nkonfigurieren von meldungen",
48
- "ru": "новые зигби-гердсман-конвертеры 18.x\nнастройка сообщения - это предупреждение",
49
- "pt": "novos conversores de zigbee-herdsman 18.x\nconfigurar a mensagem é agora um aviso",
50
- "nl": "nieuwe zigbee-herdsman-converters 18.x\nconfigureren bericht is nu een waarschuwing",
51
- "fr": "nouveaux convertisseurs zigbee-herdsman 18.x\nconfigure message est maintenant un avertissement",
52
- "it": "nuovo zigbee-herdsman-converter 18.x\nconfigurare il messaggio è ora un avviso",
53
- "es": "nuevos zigbee-herdsman-converters 18.x\nmensaje de configuración es ahora una advertencia",
54
- "pl": "nowe konwertery zigbee- herdsman- 18 x\nkonfiguracja wiadomości jest teraz ostrzeżeniem",
55
- "uk": "новий zigbee-herdsman-converters 18.х\nналаштування повідомлення тепер попередження",
56
- "zh-cn": "新的 zigbee- herdsman- 转换器 18.x 电话\n配置信件现在是警告"
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.9.7": {
59
- "en": "corr configure for some devices",
60
- "de": "corr konfigurieren für einige geräte",
61
- "ru": "для некоторых устройств",
62
- "pt": "corr configurar para alguns dispositivos",
63
- "nl": "corr instellen voor sommige apparaten",
64
- "fr": "corr configure pour certains appareils",
65
- "it": "corr configurare per alcuni dispositivi",
66
- "es": "configuración de corr para algunos dispositivos",
67
- "pl": "configure corr dla niektórych urządzeń",
68
- "uk": "налаштовувати корр для деяких пристроїв",
69
- "zh-cn": "一些设备的corr配置"
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.9.6": {
72
- "en": "corr ikea bug \ntrv child lock works",
73
- "de": "corr ikea bug\nkinderschlösser funktioniert",
74
- "ru": "корр ikea баг\ntrv детские замки работает",
75
- "pt": "corr ikea bug\ntrabalhos de bloqueio de crianças",
76
- "nl": "_\nhet kinderslot werkt",
77
- "fr": "corr ikea bug\nverrouillage enfant trv fonctionne",
78
- "it": "corr ikea bug\ntrv bambino serratura lavori",
79
- "es": "corr ikea bug\ntrv niño cerradura funciona",
80
- "pl": "kor ikea bug\npracuje w trv childlock",
81
- "uk": "ikea помилка\ntrv дитячих замків",
82
- "zh-cn": "绑架\n童 工"
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.9.5": {
85
- "en": "update dependency\nmin node 18.x.",
86
- "de": "aktualisierung abhängigkeit\nmin node 18.x.",
87
- "ru": "обновление зависимости\nмин. нода 18.x.",
88
- "pt": "dependência de atualização\nmin node 18.x.",
89
- "nl": "vertaling:\n_.",
90
- "fr": "mettre à jour la dépendance\nmin node 18.x.",
91
- "it": "dipendenza da aggiornamento\nmin nodo 18.x.",
92
- "es": "actualización de la dependencia\nmin node 18.x.",
93
- "pl": "zależności\nwęzeł 18.x.",
94
- "uk": "оновлення залежності\nхв вузол 18.x.",
95
- "zh-cn": "更新\n第18.x条."
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": {
@@ -128,7 +128,10 @@
128
128
  "authors": [
129
129
  "Kirov Ilya<kirovilya@gmail.com>"
130
130
  ],
131
- "license": "MIT",
131
+ "licenseInformation": {
132
+ "license": "MIT",
133
+ "type": "free"
134
+ },
132
135
  "platform": "Javascript/Node.js",
133
136
  "mode": "daemon",
134
137
  "icon": "zigbee.png",
@@ -197,8 +200,8 @@
197
200
  "condition": {
198
201
  "operand": "and",
199
202
  "rules": [
200
- "oldVersion<=1.8.22",
201
- "newVersion>=1.8.24"
203
+ "oldVersion<=1.10.3",
204
+ "newVersion>=1.10.10"
202
205
  ]
203
206
  },
204
207
  "title": {
@@ -214,16 +217,17 @@
214
217
  "zh-cn": "重要通知!"
215
218
  },
216
219
  "text": {
217
- "en": "This new version use exposes for Aqara Button WXKG01LM. Plz select this device into exposes/Auschliessen tab",
218
- "ru": "Эта новая версия использует экспозиции для Aqara Button WXKG01LM. Пожалуйста, выберите это устройство в exposes/Auschliessen tab",
219
- "pt": "Esta nova versão usa expões para Aqara Button WXKG01LM. Por favor, selecione este dispositivo no separador exposes/Auschliessen",
220
- "nl": "Deze nieuwe versie gebruikt blootstellingen voor Aqara Button WXK01LM. Kies alsjeblieft dit apparaat uit in de openbare aanklagers",
221
- "fr": "Cette nouvelle version utilise pour Aqara Button WXKG01LM. Veuillez sélectionner cet appareil dans l'onglet Affichage/Auschliessen",
222
- "it": "Questa nuova versione utilizza per Aqara Button WXKG01LM. Si prega di selezionare questo dispositivo per exposes/Auschliessen scheda",
223
- "es": "Este nuevo uso expone para Aqara Button WXKG01LM. Por favor, seleccione este dispositivo en la pestaña exposes/Auschliessen",
224
- "pl": "Nowa wersja została udostępniona dla zmian Aqary Button WXKG01LM. Prosze dodać to do exposes/Auschliessen tabsena",
225
- "uk": "Ця нова версія використовується для кнопки Aqara Button WXKG01LM. Будь ласка, оберіть цей пристрій у вкладці ",
226
- "zh-cn": "这一新版本用于Aqara Button WXKG01LM。 请选择这一装置暴露/Auschliessen tab"
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. 版本 。 唯一的选项是您的备份"
227
231
  },
228
232
  "link": "https://github.com/ioBroker/ioBroker.zigbee/blob/master/README.md",
229
233
  "level": "warn",
@@ -261,7 +265,8 @@
261
265
  "external": "",
262
266
  "startWithInconsistent": false,
263
267
  "warnOnDeviceAnnouncement": true,
264
- "baudRate": 115200
268
+ "baudRate": 115200,
269
+ "flowCTRL": false
265
270
  },
266
271
  "instanceObjects": [
267
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
- // eslint-disable-next-line no-unused-vars
136
+
138
137
  async listbackups(obj) {
139
138
 
140
139
  }
package/lib/commands.js CHANGED
@@ -277,19 +277,20 @@ class Commands {
277
277
  // get group members and store them
278
278
  const match = /zigbee.\d.group_([0-9]+)/.exec(devInfo._id);
279
279
  if (match && match.length > 1) {
280
- const groupmembers = await this.zbController.getGroupMembersFromController(match[1]);
281
- this.debug(`group members: ${JSON.stringify(groupmembers)}`);
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)}`);
282
283
  if (groupmembers && groupmembers.length > 0) {
283
284
  const memberinfo = [];
284
285
  for (const member of groupmembers) {
285
286
  if (groups) {
286
287
  const grouparray = groups[member.ieee];
287
288
  if (grouparray) {
288
- if (!grouparray.includes(match[1])) {
289
- groups[member.ieee].push(match[1]);
289
+ if (!grouparray.includes(groupID)) {
290
+ groups[member.ieee].push(groupID);
290
291
  }
291
292
  } else {
292
- groups[member.ieee] = [match[1]];
293
+ groups[member.ieee] = [groupID];
293
294
  }
294
295
  }
295
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.Cluster;
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').default;
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!`;
package/lib/devices.js CHANGED
@@ -37,7 +37,7 @@ const comb = {
37
37
  }
38
38
  }
39
39
  },
40
- // eslint-disable-next-line no-unused-vars
40
+
41
41
  effectJson: (state, value, options, disableQueue) => {
42
42
  if (state.id === states.effect_json.id) {
43
43
  const effectjson = {};
@@ -1401,7 +1401,7 @@ const devices = [
1401
1401
  linkedStates: [comb.brightnessAndState],
1402
1402
  },
1403
1403
  {
1404
- models: ['LED1536G5', 'LED1903C5/LED1835C6'],
1404
+ models: ['LED1536G5', 'LED1835C6', 'LED1903C5/LED1835C6'],
1405
1405
  icon: 'img/ikea_e14_bulb.png',
1406
1406
  states: lightStatesWithColortemp,
1407
1407
  linkedStates: [comb.brightnessAndState],
@@ -3090,6 +3090,10 @@ const devices = [
3090
3090
  models: ['E1603/E1702/E1708'],
3091
3091
  icon: 'img/ikea_control_outlet.png',
3092
3092
  },
3093
+ {
3094
+ models: ['E2204'],
3095
+ icon: 'img/E2204.png',
3096
+ },
3093
3097
  ];
3094
3098
 
3095
3099
  const commonStates = [
package/lib/groups.js CHANGED
@@ -206,32 +206,8 @@ class Groups {
206
206
  }
207
207
 
208
208
  async deleteGroup(from, command, message) {
209
- /*
210
- const members = await this.getGroupMembersFromController(parseInt(message));
211
- if (members && members.length) {
212
- for (const member of members) {
213
- const devName = member.device.substring(2);
214
- const groupEntry = this.adapter.getStateAsync(`${devName}.groups`);
215
- const memberarray = (groupEntry && groupEntry.val) ? JSON.parse(groupEntry.val) : [];
216
- const index = memberarray.indexOf(message.toString());
217
- if (index > -1) {
218
- memberarray.splice(index, 1);
219
- }
220
- if (memberarray.length > 0) {
221
- await this.adapter.setStateAsync(`${devName}.groups`, JSON.stringify(memberarray), true);
222
- }
223
- else {
224
- await this.adapter.setStateAsync(`${devName}.groups`, '', true);
225
- }
226
- }
227
- }
228
- const groupsEntry = await this.adapter.getStateAsync('info.groups');
229
- const objGroups = (groupsEntry && groupsEntry.val ? JSON.parse(groupsEntry.val) : {});
230
- delete objGroups[message.toString()];
231
- await this.adapter.setStateAsync('info.groups', JSON.stringify(objGroups), true);
232
- */
233
209
  await this.zbController.removeGroupById(message);
234
- await this.stController.deleteDeviceStatesAsync(`group_${parseInt(message)}`);
210
+ await this.stController.deleteGroupById(`group_${parseInt(message)}`);
235
211
  }
236
212
 
237
213
  async renameGroup(from, command, message) {
package/lib/ota.js CHANGED
@@ -94,7 +94,7 @@ class Ota {
94
94
  this.debug(`Checking if firmware update is available for ${device.name}`);
95
95
 
96
96
  if (device && device.mapped.ota) {
97
- const available = await device.mapped.ota.isUpdateAvailable(device.device, this);
97
+ const available = await device.mapped.ota.isUpdateAvailable(device.device, null);
98
98
  result.status = available.available ? 'available' : 'not_available';
99
99
  if (available.currentFileVersion !== available.otaFileVersion) {
100
100
  this.warn(`current Firmware for ${device.name} is ${available.currentFileVersion} new is ${available.otaFileVersion}`);
@@ -155,7 +155,7 @@ class Ota {
155
155
  };
156
156
 
157
157
  const from_ = await this.readSoftwareBuildIDAndDateCode(device.device, false);
158
- await device.mapped.ota.updateToLatest(device.device, this, onProgress);
158
+ const fileVersion = await device.mapped.ota.updateToLatest(device.device, onProgress);
159
159
  const to = await this.readSoftwareBuildIDAndDateCode(device.device, true);
160
160
  const [fromS, toS] = [JSON.stringify(from_), JSON.stringify(to)];
161
161
  result.status = 'success';
@@ -5,7 +5,7 @@ const statesMapping = require('./devices');
5
5
  const getAdId = require('./utils').getAdId;
6
6
  const getZbId = require('./utils').getZbId;
7
7
  const fs = require('fs');
8
- const request = require('request');
8
+ const axios = require('axios');
9
9
 
10
10
  let savedDeviceNamesDB = {};
11
11
  const knownUndefinedDevices = {};
@@ -78,6 +78,19 @@ class StatesController extends EventEmitter {
78
78
  this.adapter.setStateAsync(`info.undefinedDevices`, JSON.stringify(knownUndefinedDevices), true);
79
79
  }
80
80
 
81
+ checkDebugDevice(dev) {
82
+ if (typeof dev != 'string' || dev == '') return false;
83
+ if (this.debugDevices === undefined) {
84
+ this.getDebugDevices();
85
+ }
86
+ for (const addressPart of this.debugDevices) {
87
+ if (typeof dev === 'string' && dev.includes(addressPart)) {
88
+ return true;
89
+ }
90
+ }
91
+ return false;
92
+ }
93
+
81
94
  onStateChange(id, state) {
82
95
  if (!this.adapter.zbController || !this.adapter.zbController.connected()) {
83
96
  return;
@@ -98,12 +111,9 @@ class StatesController extends EventEmitter {
98
111
  }
99
112
  return;
100
113
  }
101
- for (const addressPart of this.debugDevices) {
102
- if (typeof id === 'string' && id.includes(addressPart)) {
103
- this.warn(`ELEVATED: User stateChange ${id} ${JSON.stringify(state)}`);
104
- break;
105
- }
106
- }
114
+
115
+ if (this.checkDebugDevice(id)) this.warn(`ELEVATED: User stateChange ${id} ${JSON.stringify(state)}`);
116
+
107
117
  this.debug(`User stateChange ${id} ${JSON.stringify(state)}`);
108
118
  const devId = getAdId(this.adapter, id); // iobroker device id
109
119
  let deviceId = getZbId(id); // zigbee device id
@@ -185,7 +195,7 @@ class StatesController extends EventEmitter {
185
195
  knownUndefinedDevices[deviceId]++;
186
196
  } else {
187
197
  knownUndefinedDevices[deviceId] = 1;
188
- this.error(`Device ${deviceId} "${model}" not described in statesMapping.`);
198
+ this.info(`Device ${deviceId} "${model}" not present in statesMapping - relying on exposes for device definition.`);
189
199
  }
190
200
  this.adapter.setStateAsync(`info.undefinedDevices`, JSON.stringify(knownUndefinedDevices), true);
191
201
  states = statesMapping.commonStates;
@@ -209,14 +219,13 @@ class StatesController extends EventEmitter {
209
219
  async publishFromState(deviceId, model, stateKey, state, options) {
210
220
  if (this.debugDevices === undefined) this.getDebugDevices();
211
221
  this.debug(`Change state '${stateKey}' at device ${deviceId} type '${model}'`);
212
- for (const addressPart of this.debugDevices) {
213
- if (typeof deviceId === 'string' && deviceId.includes(addressPart)) {
214
- this.warn(`ELEVATED Change state '${stateKey}' at device ${deviceId} type '${model}'`);
215
- break;
216
- }
217
- }
222
+ const elevated = this.checkDebugDevice(deviceId);
223
+
224
+ if (elevated) this.warn(`ELEVATED Change state '${stateKey}' at device ${deviceId} type '${model}'`);
225
+
218
226
  const devStates = await this.getDevStates(deviceId, model);
219
227
  if (!devStates) {
228
+ if (elevated) this.error(`ELEVATED no device states for device ${deviceId} type '${model}'`);
220
229
  return;
221
230
  }
222
231
  const commonStates = statesMapping.commonStates.find(statedesc => stateKey === statedesc.id);
@@ -229,6 +238,7 @@ class StatesController extends EventEmitter {
229
238
 
230
239
  const value = state.val;
231
240
  if (value === undefined || value === '') {
241
+ if (elevated) this.error(`ELEVATED no value for device ${deviceId} type '${model}'`);
232
242
  return;
233
243
  }
234
244
  let stateList = [{stateDesc: stateDesc, value: value, index: 0, timeout: 0}];
@@ -304,22 +314,22 @@ class StatesController extends EventEmitter {
304
314
  states.forEach(state =>
305
315
  this.adapter.deleteState(devId, null, state._id));
306
316
  }
307
- this.adapter.deleteDevice(devId, () =>
317
+ this.adapter.delObject(devId, () =>
308
318
  callback && callback());
309
319
  });
310
320
  }
311
321
 
312
- async deleteDeviceStatesAsync(devId) {
313
- const states = await this.adapter.getStatesOf(devId);
314
- if (states) {
315
- for (const state of states) {
316
- await this.adapter.deleteState(devId, null, state._id);
317
- }
322
+ async deleteGroupById(devId) {
323
+ const options = { recursive:true };
324
+ try {
325
+ this.adapter.delObject(devId,options), (err) => { }
326
+
327
+ } catch (err) {
328
+ this.adapter.log.info(`Cannot delete Group ${devId}: ${err}`);
318
329
  }
319
- await this.adapter.deleteDevice(devId);
320
330
  }
321
331
 
322
- // eslint-disable-next-line no-unused-vars
332
+
323
333
  async deleteOrphanedDeviceStates(ieeeAddr, model, force, callback) {
324
334
  const devStates = await this.getDevStates(ieeeAddr, model);
325
335
  const commonStates = statesMapping.commonStates;
@@ -540,15 +550,17 @@ class StatesController extends EventEmitter {
540
550
  async downloadIcon(url, image_path) {
541
551
  if (!fs.existsSync(image_path)) {
542
552
  return new Promise((resolve, reject) => {
543
- request.head(url, (err, res, body) => {
544
- if (err) {
545
- return reject(err + ' ' + res + ' ' + body);
546
- }
547
- const stream = request(url);
548
- stream.pipe(
549
- fs.createWriteStream(image_path)
550
- .on('error', err => reject(err)))
551
- .on('close', () => resolve());
553
+ axios({
554
+ method: 'get',
555
+ url: url,
556
+ responseType: 'stream' // Dies ist wichtig, um den Stream direkt zu erhalten
557
+ }).then(response => {
558
+ const writer = fs.createWriteStream(image_path);
559
+ response.data.pipe(writer);
560
+ writer.on('finish', resolve);
561
+ writer.on('error', reject);
562
+ }).catch(err => {
563
+ reject(err);
552
564
  });
553
565
  });
554
566
  }
@@ -608,18 +620,15 @@ class StatesController extends EventEmitter {
608
620
  const devStates = await this.getDevStates(`0x${devId}`, model);
609
621
  let has_debug = false;
610
622
  if (this.debugDevices === undefined) this.getDebugDevices();
611
- for (const addressPart of this.debugDevices) {
612
- if (typeof(devId) == 'string' && devId.indexOf(addressPart) > -1) {
613
- if (payload.hasOwnProperty('msg_from_zigbee')) {
614
- break;
615
- }
616
-
623
+ if (this.checkDebugDevice(devId))
624
+ {
625
+ if (!payload.hasOwnProperty('msg_from_zigbee')) {
617
626
  this.warn(`ELEVATED publishToState: message received '${JSON.stringify(payload)}' from device ${devId} type '${model}'`);
618
627
  has_debug = true;
619
- break;
620
628
  }
621
629
  }
622
630
  if (!devStates) {
631
+ if (has_debug) this.error(`ELEVATED publishToState: no device states for device ${devId} type '${model}'`)
623
632
  return;
624
633
  }
625
634
  // find states for payload
package/lib/utils.js CHANGED
@@ -127,8 +127,11 @@ function getDeviceIcon(definition) {
127
127
  if (icon) {
128
128
  icon = icon.replace('${model}', sanitizeImageParameter(definition.model));
129
129
  }
130
+ // if (!icon) {
131
+ // icon = `https://www.zigbee2mqtt.io/images/devices/${sanitizeImageParameter(definition.model)}.jpg`;
132
+ // }
130
133
  if (!icon) {
131
- icon = `https://www.zigbee2mqtt.io/images/devices/${sanitizeImageParameter(definition.model)}.jpg`;
134
+ icon = `https://www.zigbee2mqtt.io/images/devices/${sanitizeImageParameter(definition.model)}.png`;
132
135
  }
133
136
  return icon;
134
137
  }