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 +8 -215
- package/admin/i18n/pl/translations.json +2 -2
- package/admin/img/ikea_symfonisk_remote_gen2.png +0 -0
- package/admin/img/next_track.png +0 -0
- package/admin/img/play_pause.png +0 -0
- package/admin/img/previous_track.png +0 -0
- package/admin/words.js +3 -3
- package/io-package.json +36 -31
- package/lib/binding.js +28 -26
- package/lib/commands.js +73 -69
- package/lib/devices.js +8 -0
- package/lib/states.js +194 -2
- package/lib/zigbeecontroller.js +6 -2
- package/main.js +7 -6
- package/package.json +8 -8
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
|
-
|
|
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": "
|
|
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
|
|
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
|
|
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": "
|
|
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": "Зворотний відлік від
|
|
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.
|
|
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 (
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.
|
|
70
|
-
|
|
71
|
-
|
|
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 (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
|
136
|
-
|
|
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
|
|
1039
|
-
icon:
|
|
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',
|
package/lib/zigbeecontroller.js
CHANGED
|
@@ -505,7 +505,11 @@ class ZigbeeController extends EventEmitter {
|
|
|
505
505
|
if (isFunction(devid) && !isFunction(failure)) {
|
|
506
506
|
failure = devid;
|
|
507
507
|
} else {
|
|
508
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
747
|
-
if (preparedOptions
|
|
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.
|
|
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.
|
|
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.
|
|
30
|
-
"zigbee-herdsman-converters": "
|
|
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.
|
|
40
|
-
"chai": "^4.
|
|
39
|
+
"axios": "^1.6.8",
|
|
40
|
+
"chai": "^4.4.1",
|
|
41
41
|
"chai-as-promised": "^7.1.1",
|
|
42
|
-
"eslint": "^8.
|
|
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.
|
|
49
|
+
"mocha": "^10.4.0"
|
|
50
50
|
},
|
|
51
51
|
"homepage": "https://github.com/ioBroker/ioBroker.zigbee",
|
|
52
52
|
"keywords": [
|