iobroker.zigbee 1.10.1 → 1.10.3

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 CHANGED
@@ -128,12 +128,18 @@ or
128
128
  ## Donate
129
129
 
130
130
  You can thank the authors by these links:
131
- * to Kirov Ilya https://www.paypal.me/goofyk
132
131
  * to Arthur Rupp https://paypal.me/ArthurRupp
133
132
 
134
133
  -----------------------------------------------------------------------------------------------------
135
134
 
136
135
  ## Changelog
136
+ ### 1.10.3 (2024-04-06)
137
+ * (arteck) dependency update
138
+ *
139
+
140
+ ### 1.10.2 (2024-01-25)
141
+ * (arteck) dependency update
142
+
137
143
  ### 1.10.1 (2024-01-21)
138
144
  * (arteck) Baudrate is now configurable. works ONLY with Deconz/Conbee( 38400 )
139
145
  * (arteck) add nvbackup.json delete button
@@ -329,220 +335,7 @@ You can thank the authors by these links:
329
335
  ### 1.6.1 (2021-08)
330
336
  * (kirovilya) herdsman compatibility
331
337
 
332
- ### 1.6.0 (2021-08-09)
333
-
334
- ### 1.5.6 (2021-05-26)
335
- * (kirovilya) new UI add
336
-
337
- ### 1.5.5 (2021-05-05)
338
- * Fixes for new zigbee-herdsman-converters
339
- * UI fixes
340
-
341
- ### 1.5.3 (2021-04-30)
342
- * (arteck) Fix for js-controller 3.3.*
343
-
344
- ### 1.5.2 (2021-04-29)
345
- * (asgothian) Groups on dashboard
346
-
347
- ### 1.5.1 (2021-04-14)
348
- * (kirovilya) Dashboard
349
- * (asgothian) Groups (reworked)
350
- * [Experimental support EZSP protocol for EFR32 chips](https://github.com/Koenkk/zigbee-herdsman/issues/319) (zigbee-herdsman)
351
-
352
- ### 1.4.4 (2021-02-14)
353
- * (kirovilya) External converters https://www.zigbee2mqtt.io/information/configuration.html#external-converters-configuration
354
- * (asgothian) Enhancement ping process
355
- * (asgothian) Devive query state-button
356
- * (asgothian) State Cleanup button
357
- * (arteck) Setting to use exposes instead of internal device description
358
-
359
- ### 1.4.1 (2020-12)
360
- * (o0shojo0o) added a kelvin possibility into colortemp
361
- * (asgothian) Hue_calibration for exposed devices (Use requires PR on zigbee-herdsman-converters, PR is being worked on)
362
- * (asgothian) fix Tuya Thermostat: restore lost property "preset"
363
- * (asgothian) Change for Device Availability: Stagger initial ping by 200 ms to prevent network congestion due to a large number of ping requests
364
- * (asgothian) Change for Device Availability: Ping request triggered on reconnect. Before the herdsman Ping function is used, the adapter attempts to read the "state" dp. If this is successful, no ping is sent and the state is set
365
- * (asgothian) Change for Device Availability: Set link Quality to 0 when a device is not connected, 10 when it is reconnecting.
366
- * (asgothian) fix for message "illegal properties x,y" - remove color and color_temp from readable states on device available again (Issue #607)
367
- * (asgothian) RGB Color can now be entered as "named" color. Implemented names are taken from the list of extended web colors on wikipedia (https://en.wikipedia.org/wiki/Web_colors)
368
- * (asgothian) change in how RGB color is parsed. Incomplete colors will now be parsed successfully. #FFF will result in R 0, G 15, B 255
369
- * (asgothian) change in OTA: Message that a device does not respond for OTA query downgraded to "info" from "error"
370
- * (asgothian) new coordinator card
371
-
372
- ### 1.4.0 (2020-12)
373
- * Many new devices available
374
-
375
- Starting from version 1.4.0, new devices in iobroker.zigbee will be added automatically, based on the *exposes* described in zigbee-herdsman-converters.
376
- The *exposes* section describes the device's capabilities, events and control commands. In iobroker.zigbee these descriptions are converted to iobroker states.
377
- This means that the new device is described correctly enough in zigbee-herdsman-converters to start working with iobroker.zigbee (do not need to add it to our /lib/devices files.js and /lib/states.js).
378
-
379
- The only thing that is not described (yet, it may change in the future) in zigbee-herdsman-converters is the device image. This is why the device icon on network map uses external links to the resource https://www.zigbee2mqtt.io/images/devices/*.
380
- If you want to use local images, then you need to put the image file in /admin/img and briefly describe the device in the /lib/devices.js file without the *states*:
381
- ```
382
- {
383
- models: [‘01MINIZB’],
384
- icon: 'img/ITEAD01ZBMINI. png',
385
- }
386
- ```
387
- in this case, the *states* attribute will be formed based on the *exposes* description and the image will be local.
388
-
389
- ### 1.3.1 (2020-10-30)
390
- * [Experimental Zigate support](https://github.com/Koenkk/zigbee-herdsman/issues/242) (zigbee-herdsman)
391
- * New devices by:
392
- asgothian, arteck, kirovilya, PaulchenPlump
393
-
394
- ### 1.3.0 (2020-10-07)
395
- * More stable (zigbee-herdsman)
396
- * Backup prior database and nv-data (for z-stack 3) before start adapter
397
- * Allow to select bind cluster
398
- * Admin Tab support (experimental)
399
- * (UncleSamSwiss, DutchmanNL) Translation
400
- * New devices by:
401
- arteck, kirovilya, Shade, krumbholz, fre, Alex18081, ae, asgothian,
402
- Strunzdesign, kairauer, VLGorskij, Hesse-Bub, PaulchenPlump, blackrozes
403
-
404
- ### 1.2.1 (2020-08-16)
405
- * Fixes after changing device identify method
406
- * (Garfonso) Allow to unbind from coordinator
407
-
408
- ### 1.2.0 (2020-08-09)
409
- * Serialport 9.0.0. (zigbee-herdsman)
410
- * Drop support Node < 10 (zigbee-herdsman)
411
- * Device now identify (for zigbee-herdsman-converters) by model not zigbeeModel
412
-
413
- Improvements and fixes:
414
- * (Strunzdesign) Fixed the mapping between bulb levels and adapter levels
415
- * (kirovilya) Fix ota for unavailable devices
416
- * (kirovilya) Lazy states - created only when an event arrives
417
- * (kirovilya) States generator - states are created depending on the device and its endpoints
418
- * (Shade) Fixed WXKG11LM clicks
419
- * (allofmex) Improved DeveloperTab logs
420
- * (allofmex) Add humidity and temperature calibration state to Tuya RH3052
421
- * (kirovilya) Fixed a typo due to which extPanID was not set
422
- * (allofmex) Retry reconnect gateway all the time for tcp connected gateway
423
- * (kirovilya) Allow to collect zigbee-herdsman logs to iobroker logs
424
- * (kirovilya) Additional states for QBKG12LM
425
-
426
- New devices:
427
- * (kirovilya) BlitzWolf BW-IS3, Paulmann 500.67, Paulmann 798.09
428
- * (kirovilya) DiY Geiger counter https://modkam.ru/?p=1591
429
- * (kirovilya) DiY 8 Relays + 8 switches https://modkam.ru/?p=1638
430
- * (kirovilya) DiY Freepad https://github.com/diyruz/freepad
431
- * (kirovilya) Neo Zigbee Siren Alarm https://szneo.com/en/products/show.php?id=241
432
- * (Shade) RB 278 T
433
- * (arteck) TS0601_thermostat
434
- * (arteck) TS0121
435
- * (arteck) GL-D-004Z
436
- * (Shade) WXKG07LM
437
- * (drohne200) 1746430P7
438
- * (sebastian) 4058075816459
439
- * (itProfi) SGMHM-I1
440
- * (arteck) owvfni3
441
- * (arteck) TS0001, TS0111
442
- * (Daniel Dreier) Paulmann 500.45
443
- * (arteck) ZK-EU-2U
444
- * (Newan) Busch-Jaeger 6735/6736/6737
445
- * (andrico21) ZM-L03E-Z
446
- * (arteck) 915005106701, 9290018187B
447
- * (frankjoke) HGZB-20-UK, GL-W-001Z
448
- * (arteck) 4034031P7, 3435011P7
449
- * (arteck) TS0041
450
- * (agross) 5062231P7, 5062431P7
451
- * (kirovilya) TI0001-switch, TI0001-socket
452
- * (arteck) RB 178 T
453
- * (arteck) HGZB-07A, AV2010/22, AV2010/22A, TS0041, TS0043
454
- * (nbars) E1744
455
- * (Florian Look) GS361A-H04
456
- * (arteck) ICZB-IW11SW
457
- * (kirovilya) HS2WD-E
458
- * (Sacred-Shadow) FL 130 C
459
- * (arteck) HS3SA, 9290022169, 4096730U7, AC10787, SP 220, SP 222, SP 224, 07004D, BW-IS2, InstaRemote
460
- * (kirovilya) MCLH-08, MCLH-05
461
- * (Sacred-Shadow) 1746130P7
462
- * (mar565) GUNNARP panel round
463
- * (Erdnuss3003) 4090531P7
464
-
465
- ### 1.1.1 (2020-04-17)
466
- * (kirovilya) Critical. Fixed error starting adapter if cc-chip was only flashed
467
- * (kirovilya) Nue/3A FNB56-ZSW02LX2.0
468
- * (Strunzdesign) Added missing raw button events for Philips Hue Smart Button ROM001
469
- * (Sacred-Shadow) Fix Color for Outdoor Lantern W RGBW OSRAM
470
-
471
- ### 1.1.0 (2020-04-12)
472
- new Zigbee-herdsman features:
473
- * ConBee/RaspBee (experimental support) https://github.com/Koenkk/zigbee-herdsman/issues/72
474
- * OTA update for some devices (IKEA, OSRAM and other) https://github.com/Koenkk/zigbee2mqtt/issues/2921
475
- * Touchlink reset and join https://github.com/Koenkk/zigbee2mqtt/issues/2396
476
- * Green Power devices support https://github.com/Koenkk/zigbee2mqtt/issues/3322
477
- * (peterfido) iCasa KPD14S und KPD18S hinzu
478
- * (kirovilya) Moes Zigbee Thermostatic Radiator
479
- * (kirovilya) LifeControl power plug MCLH-03, bulb MCLH-02, water leak MCLH-07, door sensor MCLH-04
480
- * (kirovilya) Philips LCT002, LCT011, LTW015, LWG004
481
- * (kirovilya) Gledopto GL-C-007 with with channel
482
- * (MultivitaminJuice) Iluminize 511.040
483
- * (Sacred-Shadow) Bitron 902010/24
484
- * (kirovilya) Color indication of LQI and Battery icon
485
- * (kirovilya) Device info modal dialog
486
- * (arteck) Philips LCT026
487
- * (obakuhl) Improvements Osram switch mini
488
- * (arteck) Nue / 3A FB56+ZSW1GKJ2.5, LXN-1S27LX1.0
489
- * (agross) Philips Signe Floor and Table
490
- * (arteck) TRADFRI bulb E14 WS 470lm, OSRAM PAR16 TW Z3
491
- * (kirovilya) Smart remote controller (4 buttons)
492
- * (allofmex) OTA updates
493
- * (kirovilya) Aqara opple change mode keys (for binding)
494
- * (palsch) Heiman HS2WD-E siren
495
-
496
- ### 1.0.4 (2020-03-14)
497
- * (kirovilya) Philips Hue Adore Bathroom Mirror Light
498
- * (kirovilya) Oujiabao Gas and carbon monoxide alarm
499
- * (kirovilya) Tuya SOS button
500
- * (Erdnuss3003) Schwaiger ZBT-DIMLight-GLS0800
501
- * (arteck) Smart Home Pty FB56-ZCW11HG1.4, LXT56-LS27LX1.7
502
- * (arteck) Xiaomi plug lumi.plug.mmeu01
503
- * (arteck) Innr RS 228 T, RS 230 C
504
- * (arteck) Gledopto GL-MC-001, GL-D-003ZS
505
- * (allmyjoes) Bitron AV2010/21A
506
- * (arteck) Osram Panel TW 595 UGR22
507
- * (kirovilya) IKEA SURTE door WS 38x64
508
- * (andigandi) Philips Hue LCG002, Hue LTG002
509
- * (arteck) iCasa ICZB-FC
510
- * (arteck) Osram A60 DIM Z3
511
- * (arteck) Paulmann 371000001
512
- * (DaCHRIS) Osram PAR16 DIM Z3
513
- * (DaCHRIS) Philips LWG001
514
- * (DaCHRIS) Illuminize 511.202
515
- * (SchumyHao) TERNCY-SD01 knob dimmer
516
- * (SchumyHao) Xiaomi lumi.lock.aq1
517
- * (kirovilya) New eWeLink devices: button, TH sensor, contact sensor, motion sensor
518
- * (kirovilya) Allow pairing to routers (again)
519
- * (Erdnuss3003) Philips Hue LCT021
520
- * (root) Trust ZWLD-100 water leak sensor
521
- * (smartpran) Bitron AV2010/32
522
-
523
- ### 1.0.3 (2020-02-09)
524
- * (Tw1nh34d) Hornbach FLAIR LED
525
- * (asgothian) Hue smart button, Heiman smoke sensor
526
- * (kirovilya) Philips LTC014, LTC015
527
- * (kirovilya) Power states for QBKG11LM
528
- * (Garfonso) Change role for occupancy state to 'sensor.motion'
529
- * (kirovilya) Change illuminance state to illuminance_lux (for lux value)
530
- * (arteck) Philips LCF002
531
- * (arteck) TRADFRI open/close remote
532
- * (kirovilya) Tuya sensor TS0201
533
-
534
- ### 1.0.2 (2020-01-29)
535
- * (kirovilya) All button events for Aqara Opple switch
536
- * (ma-john) OSRAM PAR16 RGBW Z3
537
- * (arteck) Phillips LWA004
538
- * (MiniMe6666) Heiman SmokeSendor-N-3.0
539
- * (kirovilya) Force remove device
540
- * (kirovilya) Fix some networkmap bugs
541
- * (kirovilya) Extended info button
542
- * (kirovilya) Long press for WXKG01LM
543
-
544
- ### 1.0.1 (2020-01-23)
545
- * fix for old z-stack firmware
338
+ ----
546
339
 
547
340
  ### 1.0.0 (2020-01-22)
548
341
  * Powered by new [zigbee-herdsman](https://github.com/Koenkk/zigbee-herdsman) library and new [converters database](https://github.com/Koenkk/zigbee-herdsman-converters)
@@ -5,7 +5,7 @@
5
5
  "Binding": "połączenie",
6
6
  "Binding configuration": "Konfiguracja wiązania",
7
7
  "COM port name": "Nazwa portu COM",
8
- "Cancel": "Pomiń",
8
+ "Cancel": "Odwołaj",
9
9
  "Channel": "Kanał",
10
10
  "ChannelChangeText": "Kanał ustawia używaną częstotliwość radiową. Można go zmienić, aby uniknąć konfliktów z istniejącymi sieciami Wi-Fi. <b>Podczas zmiany wszystkie urządzenia muszą zostać ponownie nauczone!</b>",
11
11
  "Check firmware updates": "Sprawdź aktualizacje oprogramowania układowego",
@@ -16,7 +16,7 @@
16
16
  "Command": "Komenda",
17
17
  "Command Type": "Typ polecenia",
18
18
  "Configure reporting": "Skonfiguruj raportowanie",
19
- "Countdown": "Countdown między 0 a 255 sekundem podczas parowania nowych komponentów Zigbee z koordynatorem",
19
+ "Countdown": "Countdown między 10 a 240 sekundem podczas łączenia",
20
20
  "Delete confirmation": "Usuń potwierdzenie",
21
21
  "Developer": "Developer",
22
22
  "Device": "Urządzenie",
Binary file
Binary file
Binary file
package/admin/words.js CHANGED
@@ -8,7 +8,7 @@ systemDictionary = {
8
8
  "Binding": { "uk": "Прив'язка", "en": "Binding", "de": "Binding", "ru": "Привязка", "pt": "Ligação", "nl": "Verbindend", "fr": "Contraignant", "it": "Rilegatura", "es": "Unión", "pl": "połączenie", "zh-cn": "捆绑"},
9
9
  "Binding configuration": { "uk": "Конфігурація привʼязки", "en": "Binding configuration", "de": "Binding konfiguration", "ru": "Конфигурация привязки", "pt": "Configuração de ligação", "nl": "Bindende configuratie", "fr": "Configuration de la liaison", "it": "Configurazione vincolante", "es": "Configuración de enlace", "pl": "Konfiguracja wiązania", "zh-cn": "绑定配置"},
10
10
  "COM port name": { "uk": "Імʼя COM порта", "en": "COM port name", "de": "COM-Anschlussname", "ru": "Имя или адрес порта", "pt": "Nome da porta COM", "nl": "COM-poortnaam", "fr": "Nom du port COM", "it": "Nome della porta COM", "es": "Nombre del puerto COM", "pl": "Nazwa portu COM", "zh-cn": "设备端口"},
11
- "Cancel": { "uk": "Скасувати", "en": "Cancel", "de": "Abbrechen", "ru": "Отмена", "pt": "Cancelar", "nl": "Annuleren", "fr": "Annuler", "it": "Annulla", "es": "Cancelar", "pl": "Pomiń", "zh-cn": "取消"},
11
+ "Cancel": { "uk": "Скасувати", "en": "Cancel", "de": "Abbrechen", "ru": "Отмена", "pt": "Cancelar", "nl": "Annuleren", "fr": "Annuler", "it": "Annulla", "es": "Cancelar", "pl": "Odwołaj", "zh-cn": "取消"},
12
12
  "Channel": { "uk": "Канал", "en": "Channel", "de": "Kanal", "ru": "Канал", "pt": "Canal", "nl": "Kanaal", "fr": "Canal", "it": "Canale", "es": "Canal", "pl": "Kanał", "zh-cn": "信道"},
13
13
  "Check firmware updates": { "uk": "Перевірити оновлення прошивок пристроїв", "en": "Check firmware updates", "de": "Auf Firmware-Updates überprüfen", "ru": "Проверить обновления прошивки", "pt": "Verifique as atualizações de firmware", "nl": "Controleer firmware-updates", "fr": "Vérifier les mises à jour du firmware", "it": "Controlla gli aggiornamenti del firmware", "es": "Verifique las actualizaciones de firmware", "pl": "Sprawdź aktualizacje oprogramowania układowego", "zh-cn": "检查固件更新"},
14
14
  "Choose channel": { "uk": "Виберіть канал", "en": "Choose channel", "de": "Kanal auswählen", "ru": "Выберите канал", "pt": "Escolha o canal", "nl": "Kies een kanaal", "fr": "Choisissez la chaîne", "it": "Scegli il canale", "es": "Elige canal", "pl": "Wybierz kanał", "zh-cn": "选择频道"},
@@ -17,7 +17,7 @@ systemDictionary = {
17
17
  "Command": { "uk": "Команда", "en": "Command", "de": "Befehl", "ru": "Команда", "pt": "Comando", "nl": "Commando", "fr": "Commande", "it": "Comando", "es": "Mando", "pl": "Komenda", "zh-cn": "命令"},
18
18
  "Command Type": { "uk": "Тип команди", "en": "Command type", "de": "Befehlstyp", "ru": "Тип команды", "pt": "Tipo de Comando", "nl": "Commando type", "fr": "Type de commande", "it": "Tipo di comando", "es": "Tipo de comando", "pl": "Typ polecenia", "zh-cn": "命令类型"},
19
19
  "Configure reporting": { "uk": "Налаштувати звітність", "en": "Configure reporting", "de": "Konfigurieren Sie die Berichterstellung", "ru": "Настроить отчеты", "pt": "Configurar relatórios", "nl": "Configureer rapportage", "fr": "Configurer les rapports", "it": "Configura i rapporti", "es": "Configurar informes", "pl": "Skonfiguruj raportowanie", "zh-cn": "配置报告"},
20
- "Countdown": { "uk": "Зворотний відлік від 10 до 240 секунд під час підʼєднання нових компонентів Zigbee до координатора.", "en": "Countdown between 10 and 240 sec during the pairing", "de": "Countdown zwischen 10 und 240 Sek während der Kopplung", "ru": "Обратный отсчет от 10 до 240 секунд во время сопряжения новых компонентов Zigbee с координатором.", "pt": "Contagem regressiva entre 10 e 240 seg", "nl": "Aftellen tussen 10 en 240 sec tijdens het pairen", "fr": "Compte à rebours entre 10 et 240 sec pendant l'assemblage de nouveaux composants", "it": "Conto alla rovescia tra 10 e 240 sec", "es": "Cuenta atrás entre 10 y 240 seg.", "pl": "Countdown między 10 a 240 sekundem podczas łączenia", "zh-cn": "倒计时(0-255秒)"},
20
+ "Countdown": { "uk": "Зворотний відлік від 0 до 255 секунд під час підʼєднання нових компонентів Zigbee до координатора.", "en": "Countdown between 10 and 240 sec during the pairing", "de": "Countdown zwischen 10 und 240 Sek während der Kopplung", "ru": "Обратный отсчет от 0 до 255 секунд во время сопряжения новых компонентов Zigbee с координатором.", "pt": "Contagem regressiva entre 0 e 255 seg", "nl": "Aftellen tussen 0 en 255 sec tijdens het pairen van nieuwe Zigbee componenten met de coördinator.", "fr": "Compte à rebours entre 0 et 255 sec pendant l'assemblage de nouveaux composants Zigbee avec le coordinateur.", "it": "Conto alla rovescia tra 0 e 255 sec", "es": "Cuenta atrás entre 0 y 255 seg.", "pl": "Countdown między 10 a 240 sekundem podczas łączenia", "zh-cn": "倒计时(0-255秒)"},
21
21
  "Delete confirmation": { "uk": "Підтвердження видалення", "en": "Delete confirmation", "de": "Löschen bestätigen", "ru": "Подтвердите удаление", "pt": "Excluir confirmação", "nl": "Bevestig verwijderen", "fr": "Confirmer la suppression", "it": "Cancella conferma", "es": "Eliminar confirmación", "pl": "Usuń potwierdzenie", "zh-cn": "确认删除?"},
22
22
  "Developer": { "uk": "Розробник", "en": "Developer", "de": "Entwickler", "ru": "Разработчику", "pt": "Developer", "nl": "Ontwikkelaar", "fr": "Développeur", "it": "Developer", "es": "Developer", "pl": "Developer", "zh-cn": "开发者页面"},
23
23
  "Device": { "uk": "Пристрій", "en": "Device", "de": "Gerät", "ru": "Устройство", "pt": "Dispositivo", "nl": "Apparaat", "fr": "Dispositif", "it": "Dispositivo", "es": "Dispositivo", "pl": "Urządzenie", "zh-cn": "设备"},
@@ -108,4 +108,4 @@ systemDictionary = {
108
108
  "The value to send to your device (use douple-quotes if a number is a string).": {"uk": "Значення, яке потрібно надіслати на ваш пристрій (використовуйте подвійні лапки, якщо число є строкою).", "en": "The value to send to your device (use double-quotes if a number is a string).", "de": "Der Wert der an Ihr Gerät gesendet werden soll (verwenden Sie doppelte Anführungszeichen wenn eine Zahl als Zeichenfolge gesendet werden soll).", "ru": "Значение для отправки на ваше устройство (используйте двойные кавычки, если число является строкой).", "pt": "O valor a ser enviado ao seu dispositivo (use aspas duplas se um número for uma string).", "nl": "De waarde die naar uw apparaat moet worden verzonden (gebruik dubbele aanhalingstekens als een getal een tekenreeks is).", "fr": "La valeur à envoyer à votre appareil (utilisez des guillemets doubles si un nombre est une chaîne).", "it": "Il valore da inviare al tuo dispositivo (usa virgolette doppie se un numero è una stringa).", "es": "El valor para enviar a su dispositivo (use comillas dobles si un número es una cadena).", "pl": "Wartość do wysłania do urządzenia (użyj podwójnych cudzysłowów, jeśli liczba jest łańcuchem).", "zh-cn": "要发送到设备的值(如果数字是字符串,请使用双引号)。"},
109
109
  "This page is needed only for advanced users that like to extend adapter functionalities!": {"uk": "Ця сторінка потрібна лише досвідченим користувачам, які хочуть розширити функціональність адаптера!", "en": "This page is needed only for advanced users that like to extend adapter functionalities!", "de": "Diese Seite ist nur für fortgeschrittene Benutzer gedacht, die den Adapter erweitern möchten!", "ru": "Эта страница нужна только опытным пользователям, которые хотят расширить функциональные возможности адаптера!", "pt": "Esta página é necessária apenas para usuários avançados que gostam de estender as funcionalidades do adaptador!", "nl": "Deze pagina is alleen bedoeld voor gevorderden welke de adapter functionaliteit uit willen breiden!", "fr": "Cette page n'est nécessaire que pour les utilisateurs avancés souhaitant étendre les fonctionnalités de l'adaptateur !", "it": "Questa pagina è necessaria solo per utenti avanzati che desiderano estendere le funzionalità dell'adattatore!", "es": "Esta página es necesaria solo para usuarios avanzados que deseen ampliar las funcionalidades del adaptador.", "pl": "Ta strona jest potrzebna tylko zaawansowanym użytkownikom, którzy lubią rozszerzać funkcje adaptera!", "zh-cn": "只有喜欢扩展适配器功能的高级用户才需要此页面!"},
110
110
  "Transport Key Text": { "uk": "Транспортний ключ – це ключ шифрування мережі. Будь ласка, виберіть випадкову послідовність символів, перш ніж приєднувати пристрої. Просто введіть 32 випадкових шістнадцяткових символи (a-f і 0-9). Якщо ви зміните ключ пізніше, вам доведеться переприєднати свої пристрої.", "en": "Transport Key is the network encryption key. Please choose a random key sequence before you pair your devices. Just enter 32 random hex character (a-f and 0-9). If you change the key later, you will have to repair your devices.", "de": "Transportschlüssel ist der Netzwerkverschlüsselungsschlüssel. Bitte wähle eine zufällige Schlüsselsequenz <b>bevor</b> du Geräte koppelst. Gib einfach 32 zufällige Hex-Zeichen ein (a-f und 0-9). Wenn du den Schlüssel später änderst, musst du alle Geräte neu koppeln.", "ru": "Транспортный ключ - это сетевой ключ шифрования. Пожалуйста, выберите случайную последовательность <b>перед</b> подключением устройств. Просто введите 32 случайных шестнадцатеричных символа (a-f и 0-9). Если вы поменяете ключ позже, вам придется снова спаривать свои устройства.", "pt": "Chave de transporte é a chave de criptografia da rede. ", "nl": "Transportsleutel is de netwerkversleutelingssleutel. Kies een willekeurige toetsenreeks <b> voordat </b> u uw apparaten koppelt. Voer gewoon 32 willekeurige hexadecimale tekens in (a-f en 0-9). Als u de sleutel later wijzigt, moet u alle apparaten opnieuw aanleren.", "fr": "La clé de transport est la clé de chiffrement du réseau. Choisissez s.v.p. une chaîne <b>avant</b> de coupler vos dispositifs. Entrez simplement 32 caractères hexadécimaux aléatoires (a-f et 0-9). Si vous changez la clé plus tard, vous devez re-coupler vos dispositifs.", "it": "La chiave di trasporto è la chiave di crittografia della rete. ", "es": "Transport Key es la clave de cifrado de red. ", "pl": "Klucz transportowy to sieciowy klucz szyfrowania.", "zh-cn": "传输密钥是网络加密密钥。"},
111
- };
111
+ };
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zigbee",
4
- "version": "1.10.1",
4
+ "version": "1.10.3",
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"
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": "依赖性更新"
31
+ },
6
32
  "1.10.1": {
7
33
  "en": "Baudrate is now configurable. works ONLY with Deconz/Conbee( 38400 )\nadd nvbackup.json delete button",
8
34
  "de": "Baudrate ist jetzt konfigurierbar. funktioniert nur mit Deconz/Conbee( 38400 )\nnvbackup hinzufügen. json löschen taste",
@@ -67,32 +93,6 @@
67
93
  "pl": "zależności\nwęzeł 18.x.",
68
94
  "uk": "оновлення залежності\nхв вузол 18.x.",
69
95
  "zh-cn": "更新\n第18.x条."
70
- },
71
- "1.9.4": {
72
- "en": "typo",
73
- "de": "typo",
74
- "ru": "тип",
75
- "pt": "tipo",
76
- "nl": "type",
77
- "fr": "type",
78
- "it": "tipo",
79
- "es": "tipo",
80
- "pl": "typ",
81
- "uk": "тип",
82
- "zh-cn": "类型"
83
- },
84
- "1.9.3": {
85
- "en": "last zhc Version 16.x\ncorr reboot in statecontroller",
86
- "de": "letzte Version 16.x\nkorr reboot in statecontroller",
87
- "ru": "последняя версия zhc 16.x\nкорр перезагрузка в государственный контролер",
88
- "pt": "última versão zhc 16.x\nreboot de corr no controlador de estado",
89
- "nl": "laatste Zhc Version 16\ncorr reboot in staatscontroller",
90
- "fr": "dernière version zhc 16.x\ncorr reboot in statecontroller",
91
- "it": "ultima versione zhc 16.x\nreboot corr in statocontroller",
92
- "es": "última versión 16.x\nreboot de corr en statecontroller",
93
- "pl": "ostatnia wersja 16.x\nkor reboot w systemie kontroli państwa",
94
- "uk": "остання версія jc 16.x\nперезавантаження коренів в держконтролері",
95
- "zh-cn": "上一次zhc Version 16x\n州控制容忍的报复"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -121,6 +121,10 @@
121
121
  "pl": "Adapter Zigbee do urządzeń Xiaomi (i innych) za pośrednictwem Chip cc26xx/cc25xx",
122
122
  "zh-cn": "适用于小米(和其他)设备的Zigbee适配器,通过Chip cc26xx/cc25xx"
123
123
  },
124
+ "docs": {
125
+ "en": "docs/en/readme.md",
126
+ "de": "docs/en/readme.md"
127
+ },
124
128
  "authors": [
125
129
  "Kirov Ilya<kirovilya@gmail.com>"
126
130
  ],
@@ -144,15 +148,17 @@
144
148
  "readme": "https://github.com/ioBroker/ioBroker.zigbee/blob/master/README.md",
145
149
  "loglevel": "info",
146
150
  "type": "hardware",
147
- "materialize": true,
148
151
  "supportedMessages": {
149
152
  "deviceManager": true
150
153
  },
154
+ "adminUI": {
155
+ "config": "materialize",
156
+ "tab": "materialize"
157
+ },
151
158
  "messagebox": true,
152
159
  "stopBeforeUpdate": true,
153
160
  "dataFolder": "zigbee_%INSTANCE%",
154
161
  "compact": true,
155
- "materializeTab": true,
156
162
  "connectionType": "local",
157
163
  "dataSource": "push",
158
164
  "tier": 2,
@@ -238,8 +244,7 @@
238
244
  "cancel"
239
245
  ]
240
246
  }
241
- ],
242
- "installedFrom": "ioBroker/ioBroker.zigbee#ed32d2bb7a65c9c5c47f6633a4cb97aeb2b3e002"
247
+ ]
243
248
  },
244
249
  "native": {
245
250
  "port": "",
package/lib/binding.js CHANGED
@@ -43,32 +43,34 @@ class Binding {
43
43
  * @param {ioBroker.Message} obj
44
44
  */
45
45
  onMessage(obj) {
46
- if (typeof obj === 'object' && obj.command) {
47
- switch (obj.command) {
48
- case 'addBinding':
49
- if (obj && obj.message && typeof obj.message === 'object') {
50
- this.addBinding(obj.from, obj.command, obj.message, err =>
51
- this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
52
- }
53
- break;
54
- case 'editBinding':
55
- if (obj && obj.message && typeof obj.message === 'object') {
56
- this.editBinding(obj.from, obj.command, obj.message, err =>
57
- this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
58
- }
59
- break;
60
- case 'getBinding':
61
- if (obj && obj.message && typeof obj.message === 'object') {
62
- this.getBinding(binding =>
63
- this.adapter.sendTo(obj.from, obj.command, binding, obj.callback));
64
- }
65
- break;
66
- case 'delBinding':
67
- if (obj && obj.message) {
68
- this.delBinding(obj.from, obj.command, obj.message, err =>
69
- this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
70
- }
71
- break;
46
+ if (obj) {
47
+ if (typeof obj === 'object' && obj.command) {
48
+ switch (obj.command) {
49
+ case 'addBinding':
50
+ if (obj.message && typeof obj.message === 'object') {
51
+ this.addBinding(obj.from, obj.command, obj.message, err =>
52
+ this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
53
+ }
54
+ break;
55
+ case 'editBinding':
56
+ if (obj.message && typeof obj.message === 'object') {
57
+ this.editBinding(obj.from, obj.command, obj.message, err =>
58
+ this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
59
+ }
60
+ break;
61
+ case 'getBinding':
62
+ if (obj.message && typeof obj.message === 'object') {
63
+ this.getBinding(binding =>
64
+ this.adapter.sendTo(obj.from, obj.command, binding, obj.callback));
65
+ }
66
+ break;
67
+ case 'delBinding':
68
+ if (obj.message) {
69
+ this.delBinding(obj.from, obj.command, obj.message, err =>
70
+ this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
71
+ }
72
+ break;
73
+ }
72
74
  }
73
75
  }
74
76
  }
package/lib/commands.js CHANGED
@@ -46,73 +46,75 @@ class Commands {
46
46
  * @param {ioBroker.Message} obj
47
47
  */
48
48
  onMessage(obj) {
49
- if (typeof obj === 'object' && obj.command) {
50
- switch (obj.command) {
51
- case 'reset':
52
- if (obj && obj.message && obj.message.mode == 'delNvbackup') {
53
- this.delNvBackup(obj.from, obj.command, obj.message, obj.callback);
54
- }
55
- break;
56
- case 'letsPairing':
57
- if (obj && obj.message && typeof obj.message === 'object') {
58
- this.letsPairing(obj.from, obj.command, obj.message, obj.callback);
59
- }
60
- break;
61
- case 'touchlinkReset':
62
- if (obj && obj.message && typeof obj.message === 'object') {
63
- this.touchlinkReset(obj.from, obj.command, obj.message, obj.callback);
64
- }
65
- break;
66
- case 'getDevices':
67
- if (obj && obj.message && typeof obj.message === 'object') {
68
- this.getDevices(obj.from, obj.command, null, obj.callback);
69
- }
70
- break;
71
- case 'renameDevice':
72
- if (obj && obj.message && typeof obj.message === 'object') {
73
- this.renameDevice(obj.from, obj.command, obj.message, obj.callback);
74
- }
75
- break;
76
- case 'deleteDevice':
77
- if (obj && obj.message && typeof obj.message === 'object') {
78
- this.deleteDevice(obj.from, obj.command, obj.message, obj.callback);
79
- }
80
- break;
81
- case 'getChannels':
82
- if (obj && obj.message && typeof obj.message === 'object') {
83
- this.getChannels(obj.from, obj.command, obj.message, obj.callback);
84
- }
85
- break;
86
- case 'getCoordinatorInfo':
87
- if (obj && obj.message && typeof obj.message === 'object') {
88
- this.getCoordinatorInfo(obj.from, obj.command, obj.callback);
89
- }
90
- break;
91
- case 'cleanDeviceStates':
92
- if (obj && obj.message && typeof obj.message === 'object') {
93
- this.cleanDeviceStates(obj.from, obj.command, obj.message, obj.callback);
94
- }
95
- break;
96
- case 'setState':
97
- if (obj && obj.message && typeof obj.message === 'object' && obj.message.id) {
98
- this.stController.setState_typed(obj.message.id, obj.message.val, false, undefined, obj.callback);
99
- }
100
- break;
101
- case 'getDevice':
102
- if (obj && obj.message && typeof obj.message === 'object' && obj.message.id) {
103
- this.getDevices(obj.from, obj.command, obj.message.id, obj.callback);
104
- }
105
- break;
106
- case 'reconfigure':
107
- if (obj && obj.message && typeof obj.message === 'object') {
108
- this.reconfigure(obj.from, obj.command, obj.message, obj.callback);
109
- }
110
- break;
111
- case 'setDeviceActivated':
112
- if (obj && obj.message && typeof obj.message === 'object') {
113
- this.setDeviceActivated(obj.from, obj.command, obj.message, obj.callback);
114
- }
115
- break;
49
+ if (obj) {
50
+ if (typeof obj === 'object' && obj.command) {
51
+ switch (obj.command) {
52
+ case 'reset':
53
+ if (obj.message && obj.message.mode == 'delNvbackup') {
54
+ this.delNvBackup(obj.from, obj.command, obj.message, obj.callback);
55
+ }
56
+ break;
57
+ case 'letsPairing':
58
+ if (obj.message && typeof obj.message === 'object') {
59
+ this.letsPairing(obj.from, obj.command, obj.message, obj.callback);
60
+ }
61
+ break;
62
+ case 'touchlinkReset':
63
+ if (obj.message && typeof obj.message === 'object') {
64
+ this.touchlinkReset(obj.from, obj.command, obj.message, obj.callback);
65
+ }
66
+ break;
67
+ case 'getDevices':
68
+ if (obj.message && typeof obj.message === 'object') {
69
+ this.getDevices(obj.from, obj.command, null, obj.callback);
70
+ }
71
+ break;
72
+ case 'renameDevice':
73
+ if (obj.message && typeof obj.message === 'object') {
74
+ this.renameDevice(obj.from, obj.command, obj.message, obj.callback);
75
+ }
76
+ break;
77
+ case 'deleteDevice':
78
+ if (obj.message && typeof obj.message === 'object') {
79
+ this.deleteDevice(obj.from, obj.command, obj.message, obj.callback);
80
+ }
81
+ break;
82
+ case 'getChannels':
83
+ if (obj.message && typeof obj.message === 'object') {
84
+ this.getChannels(obj.from, obj.command, obj.message, obj.callback);
85
+ }
86
+ break;
87
+ case 'getCoordinatorInfo':
88
+ if (obj && obj.message && typeof obj.message === 'object') {
89
+ this.getCoordinatorInfo(obj.from, obj.command, obj.callback);
90
+ }
91
+ break;
92
+ case 'cleanDeviceStates':
93
+ if (obj.message && typeof obj.message === 'object') {
94
+ this.cleanDeviceStates(obj.from, obj.command, obj.message, obj.callback);
95
+ }
96
+ break;
97
+ case 'setState':
98
+ if (obj.message && typeof obj.message === 'object' && obj.message.id) {
99
+ this.stController.setState_typed(obj.message.id, obj.message.val, false, undefined, obj.callback);
100
+ }
101
+ break;
102
+ case 'getDevice':
103
+ if (obj.message && typeof obj.message === 'object' && obj.message.id) {
104
+ this.getDevices(obj.from, obj.command, obj.message.id, obj.callback);
105
+ }
106
+ break;
107
+ case 'reconfigure':
108
+ if (obj.message && typeof obj.message === 'object') {
109
+ this.reconfigure(obj.from, obj.command, obj.message, obj.callback);
110
+ }
111
+ break;
112
+ case 'setDeviceActivated':
113
+ if (obj.message && typeof obj.message === 'object') {
114
+ this.setDeviceActivated(obj.from, obj.command, obj.message, obj.callback);
115
+ }
116
+ break;
117
+ }
116
118
  }
117
119
  }
118
120
  }
@@ -132,8 +134,10 @@ class Commands {
132
134
  if (this.zbController) {
133
135
  let devId = '';
134
136
  if (message) {
135
- if (message.id) devId = getZbId(message.id);
136
- if (message.code) {
137
+ if (message.id && message.id != undefined) {
138
+ devId = getZbId(message.id);
139
+ }
140
+ if (message.code && message.code != undefined) {
137
141
  try {
138
142
  this.debug(`letsPairing called with code ${message.code}`);
139
143
  const success = await this.zbController.addPairingCode(message.code);
package/lib/devices.js CHANGED
@@ -1516,6 +1516,14 @@ const devices = [
1516
1516
  states: [states.button_action_skip_back, states.button_action_skip_forward, states.action_play_pause,
1517
1517
  states.rotate_left, states.rotate_right, states.rotate_stop, states.battery],
1518
1518
  },
1519
+ {
1520
+ models: ['E2123'],
1521
+ icon: 'img/ikea_symfonisk_remote_gen2.png',
1522
+ states: [states.battery, states.action_play_pause, states.action_track_previous, states.action_track_next,
1523
+ states.action_volume_up, states.action_volume_down, states.action_volume_up_hold, states.action_volume_down_hold,
1524
+ states.action_dots_1_initial_press, states.action_dots_2_initial_press, states.action_dots_1_long_press, states.action_dots_2_long_press, states.action_dots_1_short_release,
1525
+ states.action_dots_2_short_release, states.action_dots_1_long_release, states.action_dots_2_long_release, states.action_dots_1_double_press, states.action_dots_2_double_press],
1526
+ },
1519
1527
  // Hive
1520
1528
  {
1521
1529
  models: ['HALIGHTDIMWWE27'],
package/lib/states.js CHANGED
@@ -1035,8 +1035,8 @@ const states = {
1035
1035
  action_play_pause: {
1036
1036
  id: 'button_play_pause',
1037
1037
  prop: 'action',
1038
- name: 'Play/Pause Button',
1039
- icon: undefined,
1038
+ name: 'Play/Pause button',
1039
+ icon: 'img/play_pause.png',
1040
1040
  role: 'button',
1041
1041
  write: false,
1042
1042
  read: true,
@@ -1044,6 +1044,198 @@ const states = {
1044
1044
  isEvent: true,
1045
1045
  getter: payload => (payload.action === 'play_pause') ? true : undefined,
1046
1046
  },
1047
+ action_track_previous: {
1048
+ id: 'button_track_previous',
1049
+ prop: 'action',
1050
+ name: 'Previous track button',
1051
+ icon: 'img/previous_track.png',
1052
+ role: 'button',
1053
+ write: false,
1054
+ read: true,
1055
+ type: 'boolean',
1056
+ isEvent: true,
1057
+ getter: payload => (payload.action === 'track_previous') ? true : undefined,
1058
+ },
1059
+ action_track_next: {
1060
+ id: 'button_track_next',
1061
+ prop: 'action',
1062
+ name: 'Next track button',
1063
+ icon: 'img/next_track.png',
1064
+ role: 'button',
1065
+ write: false,
1066
+ read: true,
1067
+ type: 'boolean',
1068
+ isEvent: true,
1069
+ getter: payload => (payload.action === 'track_next') ? true : undefined,
1070
+ },
1071
+ action_volume_up: {
1072
+ id: 'button_volume_up',
1073
+ prop: 'action',
1074
+ name: 'Volume up button',
1075
+ icon: undefined,
1076
+ role: 'button',
1077
+ write: false,
1078
+ read: true,
1079
+ type: 'boolean',
1080
+ isEvent: true,
1081
+ getter: payload => (payload.action === 'volume_up') ? true : undefined,
1082
+ },
1083
+ action_volume_down: {
1084
+ id: 'button_volume_down',
1085
+ prop: 'action',
1086
+ name: 'Volume down button',
1087
+ icon: undefined,
1088
+ role: 'button',
1089
+ write: false,
1090
+ read: true,
1091
+ type: 'boolean',
1092
+ isEvent: true,
1093
+ getter: payload => (payload.action === 'volume_down') ? true : undefined,
1094
+ },
1095
+ action_volume_up_hold: {
1096
+ id: 'button_volume_up_hold',
1097
+ prop: 'action',
1098
+ name: 'Volume up button hold',
1099
+ icon: undefined,
1100
+ role: 'button',
1101
+ write: false,
1102
+ read: true,
1103
+ type: 'boolean',
1104
+ isEvent: true,
1105
+ getter: payload => (payload.action === 'volume_up_hold') ? true : undefined,
1106
+ },
1107
+ action_volume_down_hold: {
1108
+ id: 'button_volume_down_hold',
1109
+ prop: 'action',
1110
+ name: 'Volume down button hold',
1111
+ icon: undefined,
1112
+ role: 'button',
1113
+ write: false,
1114
+ read: true,
1115
+ type: 'boolean',
1116
+ isEvent: true,
1117
+ getter: payload => (payload.action === 'volume_down_hold') ? true : undefined,
1118
+ },
1119
+ action_dots_1_initial_press: {
1120
+ id: 'button_dots_1_initial_pressd',
1121
+ prop: 'action',
1122
+ name: 'Dot1 button press init',
1123
+ icon: undefined,
1124
+ role: 'button',
1125
+ write: false,
1126
+ read: true,
1127
+ type: 'boolean',
1128
+ isEvent: true,
1129
+ getter: payload => (payload.action === 'dots_1_initial_press') ? true : undefined,
1130
+ },
1131
+ action_dots_1_long_press: {
1132
+ id: 'button_dots_1_long_press',
1133
+ prop: 'action',
1134
+ name: 'Dot1 button long press',
1135
+ icon: undefined,
1136
+ role: 'button',
1137
+ write: false,
1138
+ read: true,
1139
+ type: 'boolean',
1140
+ isEvent: false,
1141
+ getter: payload => (payload.action === 'dots_1_long_press') ? true : (payload.action === 'dots_1_long_release') ? false : undefined,
1142
+ },
1143
+ action_dots_1_short_release: {
1144
+ id: 'dots_1_short_release',
1145
+ prop: 'action',
1146
+ name: 'Dot1 button short release',
1147
+ icon: undefined,
1148
+ role: 'button',
1149
+ write: false,
1150
+ read: true,
1151
+ type: 'boolean',
1152
+ isEvent: true,
1153
+ getter: payload => (payload.action === 'dots_1_short_release') ? true : undefined,
1154
+ },
1155
+ action_dots_1_long_release: {
1156
+ id: 'dots_1_long_release',
1157
+ prop: 'action',
1158
+ name: 'Dot1 button long release',
1159
+ icon: undefined,
1160
+ role: 'button',
1161
+ write: false,
1162
+ read: true,
1163
+ type: 'boolean',
1164
+ isEvent: true,
1165
+ getter: payload => (payload.action === 'dots_1_long_release') ? true : undefined,
1166
+ },
1167
+ action_dots_1_double_press: {
1168
+ id: 'dots_1_double_press',
1169
+ prop: 'action',
1170
+ name: 'Dot1 button double press',
1171
+ icon: undefined,
1172
+ role: 'button',
1173
+ write: false,
1174
+ read: true,
1175
+ type: 'boolean',
1176
+ isEvent: true,
1177
+ getter: payload => (payload.action === 'dots_1_double_press') ? true : undefined,
1178
+ },
1179
+ action_dots_2_initial_press: {
1180
+ id: 'button_dots_2_initial_press',
1181
+ prop: 'action',
1182
+ name: 'Dot2 button press init',
1183
+ icon: undefined,
1184
+ role: 'button',
1185
+ write: false,
1186
+ read: true,
1187
+ type: 'boolean',
1188
+ isEvent: true,
1189
+ getter: payload => (payload.action === 'dots_2_initial_press') ? true : undefined,
1190
+ },
1191
+ action_dots_2_long_press: {
1192
+ id: 'button_dots_2_long_press',
1193
+ prop: 'action',
1194
+ name: 'Dot2 button long press',
1195
+ icon: undefined,
1196
+ role: 'button',
1197
+ write: false,
1198
+ read: true,
1199
+ type: 'boolean',
1200
+ isEvent: false,
1201
+ getter: payload => (payload.action === 'dots_2_long_press') ? true : (payload.action === 'dots_2_long_release') ? false : undefined,
1202
+ },
1203
+ action_dots_2_short_release: {
1204
+ id: 'dots_2_short_release',
1205
+ prop: 'action',
1206
+ name: 'Dot2 button short release',
1207
+ icon: undefined,
1208
+ role: 'button',
1209
+ write: false,
1210
+ read: true,
1211
+ type: 'boolean',
1212
+ isEvent: true,
1213
+ getter: payload => (payload.action === 'dots_2_short_release') ? true : undefined,
1214
+ },
1215
+ action_dots_2_long_release: {
1216
+ id: 'dots_2_long_release',
1217
+ prop: 'action',
1218
+ name: 'Dot2 button long release',
1219
+ icon: undefined,
1220
+ role: 'button',
1221
+ write: false,
1222
+ read: true,
1223
+ type: 'boolean',
1224
+ isEvent: true,
1225
+ getter: payload => (payload.action === 'dots_2_long_release') ? true : undefined,
1226
+ },
1227
+ action_dots_2_double_press: {
1228
+ id: 'dots_2_double_press',
1229
+ prop: 'action',
1230
+ name: 'Dot2 button double press',
1231
+ icon: undefined,
1232
+ role: 'button',
1233
+ write: false,
1234
+ read: true,
1235
+ type: 'boolean',
1236
+ isEvent: true,
1237
+ getter: payload => (payload.action === 'dots_2_double_press') ? true : undefined,
1238
+ },
1047
1239
  load_power: {
1048
1240
  id: 'load_power',
1049
1241
  prop: 'power',
@@ -505,7 +505,11 @@ class ZigbeeController extends EventEmitter {
505
505
  if (isFunction(devid) && !isFunction(failure)) {
506
506
  failure = devid;
507
507
  } else {
508
- permitDev = this.getDevice(devid);
508
+ if (devid != '') {
509
+ permitDev = this.getDevice(devid);
510
+ } else {
511
+ permitDev = '';
512
+ }
509
513
  }
510
514
 
511
515
  if (permitTime) {
@@ -518,7 +522,7 @@ class ZigbeeController extends EventEmitter {
518
522
  if (permitTime && !this.herdsman.getPermitJoin()) {
519
523
  clearInterval(this._permitJoinInterval);
520
524
  this._permitJoinTime = permitTime;
521
- await this.herdsman.permitJoin(true, permitDev);
525
+ await this.herdsman.permitJoin(true, permitDev, this._permitJoinTime);
522
526
  this._permitJoinInterval = setInterval(async () => {
523
527
  this.emit('pairing', 'Pairing time left', this._permitJoinTime);
524
528
  if (this._permitJoinTime === 0) {
package/main.js CHANGED
@@ -281,9 +281,10 @@ class Zigbee extends utils.Adapter {
281
281
  const toAdd = {...definition};
282
282
  delete toAdd['homeassistant'];
283
283
  try {
284
- zigbeeHerdsmanConverters.addDeviceDefinition(toAdd);
285
- } catch {
284
+ zigbeeHerdsmanConverters.addDefinition(toAdd);
285
+ } catch (e) {
286
286
  this.log.error(`unable to apply external converter ${JSON.stringify(toAdd)}`);
287
+ this.log.error(`${e}`);
287
288
  }
288
289
  }
289
290
  }
@@ -536,12 +537,12 @@ class Zigbee extends utils.Adapter {
536
537
  }
537
538
 
538
539
  let converters = mappedModel.fromZigbee.filter(c => c && c.cluster === cluster && (
539
- (c.type instanceof Array) ? c.type.includes(type) : c.type === type));
540
+ Array.isArray(c.type) ? c.type.includes(type) : c.type === type));
540
541
 
541
542
 
542
543
  if (!converters.length && type === 'readResponse') {
543
544
  converters = mappedModel.fromZigbee.filter(c => c.cluster === cluster && (
544
- (c.type instanceof Array) ? c.type.includes('attributeReport') : c.type === 'attributeReport'));
545
+ Array.isArray(c.type) ? c.type.includes('attributeReport') : c.type === 'attributeReport'));
545
546
  }
546
547
 
547
548
  if (!converters.length) {
@@ -743,8 +744,8 @@ class Zigbee extends utils.Adapter {
743
744
  }
744
745
  }
745
746
 
746
- if (preparedOptions.hasOwnProperty('state')) {
747
- if (preparedOptions !== undefined) {
747
+ if (preparedOptions !== undefined) {
748
+ if (preparedOptions.hasOwnProperty('state')) {
748
749
  meta.state = preparedOptions.state;
749
750
  }
750
751
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.zigbee",
3
- "version": "1.10.1",
3
+ "version": "1.10.3",
4
4
  "author": {
5
5
  "name": "Kirov Ilya",
6
6
  "email": "kirovilya@gmail.com"
@@ -21,13 +21,13 @@
21
21
  "serialport": "^12.0.0"
22
22
  },
23
23
  "dependencies": {
24
- "@iobroker/adapter-core": "^3.0.4",
24
+ "@iobroker/adapter-core": "^3.0.6",
25
25
  "@iobroker/dm-utils": "^0.1.9",
26
26
  "humanize-duration": "^3.31.0",
27
27
  "tar": "^6.2.0",
28
28
  "typescript": "^5.3.3",
29
- "zigbee-herdsman": "0.32.7",
30
- "zigbee-herdsman-converters": "18.17.0"
29
+ "zigbee-herdsman": "0.41.2",
30
+ "zigbee-herdsman-converters": "19.15.0"
31
31
  },
32
32
  "description": "Zigbee devices",
33
33
  "devDependencies": {
@@ -36,17 +36,17 @@
36
36
  "@alcalzone/release-script-plugin-license": "^3.7.0",
37
37
  "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
38
38
  "@iobroker/testing": "^4.1.0",
39
- "axios": "^1.6.3",
40
- "chai": "^4.3.5",
39
+ "axios": "^1.6.8",
40
+ "chai": "^4.4.1",
41
41
  "chai-as-promised": "^7.1.1",
42
- "eslint": "^8.52.0",
42
+ "eslint": "^8.57.0",
43
43
  "eslint-config-prettier": "^9.1.0",
44
44
  "eslint-plugin-prettier": "^5.0.0",
45
45
  "gulp": "^4.0.2",
46
46
  "gulp-jsdoc3": "^3.0.0",
47
47
  "gulp-replace": "^1.1.4",
48
48
  "mixin-deep": "^2.0.1",
49
- "mocha": "^10.2.0"
49
+ "mocha": "^10.4.0"
50
50
  },
51
51
  "homepage": "https://github.com/ioBroker/ioBroker.zigbee",
52
52
  "keywords": [