iobroker.zigbee 1.10.12 → 1.10.14

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018-2024 Kirov Ilya <kirovilya@gmail.com>
3
+ Copyright (c) 2018-2025 Kirov Ilya <kirovilya@gmail.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -9,8 +9,9 @@
9
9
  [![Translation status](https://weblate.iobroker.net/widgets/adapters/-/zigbee/svg-badge.svg)](https://weblate.iobroker.net/engage/adapters/?utm_source=widget)
10
10
  [![Downloads](https://img.shields.io/npm/dm/iobroker.zigbee.svg)](https://www.npmjs.com/package/iobroker.zigbee)
11
11
 
12
- ## ioBroker adapter for Zigbee devices via TI cc2531/cc2530/cc26x2r/cc2538 and deCONZ ConBee/RaspBee.
13
-
12
+ ## ioBroker adapter for Zigbee devices via TI cc26x2r/cc2538/cc26x2px and deCONZ ConBee/RaspBee.
13
+ ### cc2531/cc2530 are obsolet
14
+
14
15
  With the Zigbee-coordinator based on Texas Instruments SoC, deCONZ ConBee/RaspBee modules, Silicon Labs EZSP v8 or ZIGate USB-TTL it creates its own zigbee-network, into which zigbee-devices are connected.
15
16
 
16
17
 
@@ -136,6 +137,14 @@ You can thank the authors by these links:
136
137
 
137
138
  -----------------------------------------------------------------------------------------------------
138
139
  ## Changelog
140
+ ### 1.10.14 (2025-01-01)
141
+ * (arteck) Herdsman 2.1.9, Converters 20.58.0
142
+ * (asgothian) Fix: Aqara T1M (CL-L02D)
143
+ * (arteck) deleteDeviceStates change to deleteObj
144
+
145
+ ### 1.10.13 (2024-11-10)
146
+ * (arteck) corr icon download bug (axios)
147
+
139
148
  ### 1.10.12 (2024-11-03)
140
149
  * (asgothian) corr Channel Scan
141
150
 
@@ -189,407 +198,7 @@ You can thank the authors by these links:
189
198
  * (arteck) new zigbee-herdsman-converters 18.x
190
199
  * (arteck) configure message is now a warning
191
200
 
192
- ### 1.9.7 (2024-01-05)
193
- * (arteck) corr configure for some devices
194
-
195
- ### 1.9.6 (2024-01-01)
196
- * (arteck) corr ikea bug
197
- * (crckmc) trv child lock works
198
-
199
- ### 1.9.5 (2023-12-29)
200
- * (arteck) update dependency
201
- * (arteck) min node 18.x.
202
-
203
- ### 1.9.4 (2023-12-29)
204
- * (arteck) typo
205
-
206
- ### 1.9.3 (2023-12-26)
207
- * (arteck) last zhc Version 16.x
208
- * (arteck) corr reboot in statecontroller
209
-
210
- ### 1.9.2 (2023-12-25)
211
- * (arteck) gen states from exposes as function
212
- * (arteck) rebuild dev_names.json with state cleanup button
213
-
214
- ### 1.9.1 (2023-12-23)
215
- * (arteck) corr TypeError: Cannot read properties of undefined (reading 'state')
216
-
217
- ### 1.9.0 (2023-12-22)
218
- * (arteck) up to new zhc
219
- * (arteck) update dependency
220
-
221
- ### 1.8.27 (2023-12-22)
222
- * (arteck) update dependency
223
-
224
- ### 1.8.26 (2023-12-22)
225
- * (arteck) corr toZigbee message
226
- * (arteck) add deviceManager
227
-
228
- ### 1.8.25 (2023-12-17)
229
- * zhc 16.x
230
- * (arteck) corr group from exclude dialog
231
-
232
- ### 1.8.24 (2023-09-05)
233
- * (arteck) switch to exposes tab for some Aqara Devices [more infos](https://github.com/ioBroker/ioBroker.zigbee/wiki/Exposes-for-device-integration)
234
-
235
- ### 1.8.23 (2023-08-10)
236
- * (arteck) query from xiaomi is now better
237
-
238
- ### 1.8.22 (2023-08-05)
239
- * (arteck) crash when meta is empty
240
-
241
- ### 1.8.21 (2023-07-31)
242
- * (arteck) no converter found
243
-
244
- ### 1.8.20 (2023-07-31)
245
- * (arteck) add log
246
-
247
- ### 1.8.19 (2023-07-31)
248
- * (arteck) fix occupancy_timeout
249
- * (arteck) fix battery percentage and voltage
250
-
251
- ### 1.8.18 (2023-07-16)
252
- * (arteck) little fix sentry and error log
253
-
254
- ### 1.8.17 (2023-07-15)
255
- * (arteck) sentry corr
256
-
257
- ### 1.8.16 (2023-07-11)
258
- * (arteck) battery corr
259
-
260
- ### 1.8.15 (2023-07-11)
261
- * (arteck) corr battery status
262
-
263
- ### 1.8.13 (2023-07-09)
264
- * (arteck) ota corr
265
- * (arteck) devices are wrong with enum exposes
266
- * (arteck) select field for groups is larger
267
- * (kirovilya) tuya.whitelabel corr
268
-
269
- ### 1.8.12 (2023-06-30)
270
- * (arteck) new Documentation (thx Stefan)
271
-
272
- ### 1.8.11 (2022-12-10)
273
- * (arteck) fix compsite exposes with a list
274
-
275
- ### 1.8.10 (2022-12-12)
276
- * (asgothian) fix group access
277
- * (asgothian) add option for pairing code:
278
- A new icon allows opening the network after first entering a pairing code
279
- listed on the device
280
- * (asgothian) easier use of external converters
281
- - external converters can now be placed in the zigbee adapter data folder
282
- - no absolite path is required to access them
283
- - external converters posted on the GitHub for zigbee-herdsman-converters
284
- should work as they are - folders for libraries are rewritten to match
285
- the expected location when 'required' from within the zigbee adapter
286
- - Log entries will identify which files are entered as converters. Errors
287
- in these files should not cause the adapter to crash - instead, use of
288
- external converters may be unavailable.
289
-
290
- ### 1.8.9 (2022-12-10)
291
- * (arteck) fix lidl plug
292
-
293
- ### 1.8.7 (2022-12-01)
294
- * (arteck) fix exposes
295
-
296
- ### 1.8.5 (2022-11-30)
297
- * (arteck) fix for new code
298
-
299
- ### 1.8.3 (2022-11-30)
300
- * (arteck) back to old source
301
-
302
- ### 1.8.1 (2022-11-28)
303
- * (bluefox) Packages updated
304
- * (bluefox) Added names of serial ports in configuration dialog
305
-
306
- ### 1.7.7 (2022-11-24)
307
- * dep update
308
-
309
- ### 1.7.6 (2022-07-23)
310
- * (kirovilya) fix selecting nodes in admin
311
- * (arteck) ikea fix
312
-
313
- ### 1.7.5 (2022-06-01)
314
- * (arteck) error message for undefined devices or icons
315
-
316
- ### 1.7.4 (2022-05-30)
317
- * (arteck) missing icons with multiple description
318
-
319
- ### 1.7.2 (2022-05-28)
320
- * (arteck) download missing icons corr
321
-
322
- ### 1.7.1 (2022-05-28)
323
- * (arteck) available status in admin is colored
324
- * (arteck) disable Backups checkbox in settings
325
- * (arteck) we keep last 10 backup files
326
- * (arteck) download missing icons automatically (manual upload needed)
327
-
328
- ### 1.6.18 (2022-04-21)
329
- * (arteck) fix pairing modus
330
-
331
- ### 1.6.17 (2022-04)
332
- rollback
333
-
334
- ### 1.6.16 (2022-02-16)
335
- * (arteck) admin dep fix
336
- * (arteck) colored objects for online/offline state
337
-
338
- ### 1.6.15 (2022-02-08)
339
- * (arteck) Battery status % calculation was changed for xiaomi devices
340
-
341
- ### 1.6.14 (2022-01)
342
- * (asgothian) OTA limitation
343
- - devices with the available state set to false are excluded from OTA updates (and the update check)
344
- - devices with link_quality 0 are excluded from OTA updates (and the update check)
345
- * (asgothian) Device deactivation:
346
- - Devices can be marked inactive from the device card.
347
- - inactive devices are not pinged
348
- - state changes by the user are not sent to inactive devices.
349
- - when a pingable device is marked active (from being inactive) it will be pinged again.
350
- - inactive devices are excluded from OTA updates.
351
- * (asgothian) Group rework part 2:
352
- - state device.groups will now be deleted with state Cleanup
353
- - state info.groups is now obsolete and will be deleted at adapter start (after transferring data to
354
- the new storage)
355
- * (asgothian) Device name persistance.
356
- - Changes to device names made within the zigbee adapter are stored in the file dev_names.json. This file
357
- is not deleted when the adapter is removed, and will be referenced when a device is added to the zigbee adapter. Deleting and reinstalling the adapter will no longer remove custom device names, nor will deleting and adding the device anew.
358
- * (asgothian) Readme edit to reflect the current information on zigbee coordinator hardware.
359
- * (arteck) Zigbee-Herdsman 0.14.4, Zigbee-Herdsman-Converters 14.0.394
360
-
361
- ### 1.6.13 (2022-01)
362
-
363
- * (kirovilya) update to Zigbee-Herdsman 0.14
364
-
365
- ### 1.6.12 (2022-01)
366
- * (asgothian) Groups were newly revised (read [here](https://github.com/ioBroker/ioBroker.zigbee/pull/1327) )
367
- - object device.groups is obsolet..the old one is no longer up to date
368
-
369
- ### 1.6.9 (2021-12)
370
- * (simatec) fix admin Dark-Mode
371
- * (asgothian) Expose Access Handling
372
- * (arteck) translations
373
- * (asgothian) fix groups
374
- * (agross) use different normalization rules
375
-
376
- ### 1.6.1 (2021-08)
377
- * (kirovilya) herdsman compatibility
378
-
379
- ### 1.6.0 (2021-08-09)
380
-
381
- ### 1.5.6 (2021-05-26)
382
- * (kirovilya) new UI add
383
-
384
- ### 1.5.5 (2021-05-05)
385
- * Fixes for new zigbee-herdsman-converters
386
- * UI fixes
387
-
388
- ### 1.5.3 (2021-04-30)
389
- * (arteck) Fix for js-controller 3.3.*
390
-
391
- ### 1.5.2 (2021-04-29)
392
- * (asgothian) Groups on dashboard
393
-
394
- ### 1.5.1 (2021-04-14)
395
- * (kirovilya) Dashboard
396
- * (asgothian) Groups (reworked)
397
- * [Experimental support EZSP protocol for EFR32 chips](https://github.com/Koenkk/zigbee-herdsman/issues/319) (zigbee-herdsman)
398
-
399
- ### 1.4.4 (2021-02-14)
400
- * (kirovilya) External converters https://www.zigbee2mqtt.io/information/configuration.html#external-converters-configuration
401
- * (asgothian) Enhancement ping process
402
- * (asgothian) Devive query state-button
403
- * (asgothian) State Cleanup button
404
- * (arteck) Setting to use exposes instead of internal device description
405
-
406
- ### 1.4.1 (2020-12)
407
- * (o0shojo0o) added a kelvin possibility into colortemp
408
- * (asgothian) Hue_calibration for exposed devices (Use requires PR on zigbee-herdsman-converters, PR is being worked on)
409
- * (asgothian) fix Tuya Thermostat: restore lost property "preset"
410
- * (asgothian) Change for Device Availability: Stagger initial ping by 200 ms to prevent network congestion due to a large number of ping requests
411
- * (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
412
- * (asgothian) Change for Device Availability: Set link Quality to 0 when a device is not connected, 10 when it is reconnecting.
413
- * (asgothian) fix for message "illegal properties x,y" - remove color and color_temp from readable states on device available again (Issue #607)
414
- * (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)
415
- * (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
416
- * (asgothian) change in OTA: Message that a device does not respond for OTA query downgraded to "info" from "error"
417
- * (asgothian) new coordinator card
418
-
419
- ### 1.4.0 (2020-12)
420
- * Many new devices available
421
-
422
- Starting from version 1.4.0, new devices in iobroker.zigbee will be added automatically, based on the *exposes* described in zigbee-herdsman-converters.
423
- The *exposes* section describes the device's capabilities, events and control commands. In iobroker.zigbee these descriptions are converted to iobroker states.
424
- 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).
425
-
426
- 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/*.
427
- 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*:
428
- ```
429
- {
430
- models: [‘01MINIZB’],
431
- icon: 'img/ITEAD01ZBMINI. png',
432
- }
433
- ```
434
- in this case, the *states* attribute will be formed based on the *exposes* description and the image will be local.
435
-
436
- ### 1.3.1 (2020-10-30)
437
- * [Experimental Zigate support](https://github.com/Koenkk/zigbee-herdsman/issues/242) (zigbee-herdsman)
438
- * New devices by:
439
- asgothian, arteck, kirovilya, PaulchenPlump
440
-
441
- ### 1.3.0 (2020-10-07)
442
- * More stable (zigbee-herdsman)
443
- * Backup prior database and nv-data (for z-stack 3) before start adapter
444
- * Allow to select bind cluster
445
- * Admin Tab support (experimental)
446
- * (UncleSamSwiss, DutchmanNL) Translation
447
- * New devices by:
448
- arteck, kirovilya, Shade, krumbholz, fre, Alex18081, ae, asgothian,
449
- Strunzdesign, kairauer, VLGorskij, Hesse-Bub, PaulchenPlump, blackrozes
450
-
451
- ### 1.2.1 (2020-08-16)
452
- * Fixes after changing device identify method
453
- * (Garfonso) Allow unbinding from coordinator
454
-
455
- ### 1.2.0 (2020-08-09)
456
- * Serialport 9.0.0. (zigbee-herdsman)
457
- * Drop support Node < 10 (zigbee-herdsman)
458
- * Device now identify (for zigbee-herdsman-converters) by model not zigbeeModel
459
-
460
- Improvements and fixes:
461
- * (Strunzdesign) Fixed the mapping between bulb levels and adapter levels
462
- * (kirovilya) Fix ota for unavailable devices
463
- * (kirovilya) Lazy states - created only when an event arrives
464
- * (kirovilya) States generator - states are created depending on the device and its endpoints
465
- * (Shade) Fixed WXKG11LM clicks
466
- * (allofmex) Improved DeveloperTab logs
467
- * (allofmex) Add humidity and temperature calibration state to Tuya RH3052
468
- * (kirovilya) Fixed a typo due to which extPanID was not set
469
- * (allofmex) Retry reconnect gateway all the time for TCP-connected gateway
470
- * (kirovilya) Allow collecting zigbee-herdsman logs to iobroker logs
471
- * (kirovilya) Additional states for QBKG12LM
472
-
473
- New devices:
474
- * (kirovilya) BlitzWolf BW-IS3, Paulmann 500.67, Paulmann 798.09
475
- * (kirovilya) DiY Geiger counter https://modkam.ru/?p=1591
476
- * (kirovilya) DiY 8 Relays + 8 switches https://modkam.ru/?p=1638
477
- * (kirovilya) DiY Freepad https://github.com/diyruz/freepad
478
- * (kirovilya) Neo Zigbee Siren Alarm https://szneo.com/en/products/show.php?id=241
479
- * (Shade) RB 278 T
480
- * (arteck) TS0601_thermostat
481
- * (arteck) TS0121
482
- * (arteck) GL-D-004Z
483
- * (Shade) WXKG07LM
484
- * (drohne200) 1746430P7
485
- * (sebastian) 4058075816459
486
- * (itProfi) SGMHM-I1
487
- * (arteck) owvfni3
488
- * (arteck) TS0001, TS0111
489
- * (Daniel Dreier) Paulmann 500.45
490
- * (arteck) ZK-EU-2U
491
- * (Newan) Busch-Jaeger 6735/6736/6737
492
- * (andrico21) ZM-L03E-Z
493
- * (arteck) 915005106701, 9290018187B
494
- * (frankjoke) HGZB-20-UK, GL-W-001Z
495
- * (arteck) 4034031P7, 3435011P7
496
- * (arteck) TS0041
497
- * (agross) 5062231P7, 5062431P7
498
- * (kirovilya) TI0001-switch, TI0001-socket
499
- * (arteck) RB 178 T
500
- * (arteck) HGZB-07A, AV2010/22, AV2010/22A, TS0041, TS0043
501
- * (nbars) E1744
502
- * (Florian Look) GS361A-H04
503
- * (arteck) ICZB-IW11SW
504
- * (kirovilya) HS2WD-E
505
- * (Sacred-Shadow) FL 130 C
506
- * (arteck) HS3SA, 9290022169, 4096730U7, AC10787, SP 220, SP 222, SP 224, 07004D, BW-IS2, InstaRemote
507
- * (kirovilya) MCLH-08, MCLH-05
508
- * (Sacred-Shadow) 1746130P7
509
- * (mar565) GUNNARP panel round
510
- * (Erdnuss3003) 4090531P7
511
-
512
- ### 1.1.1 (2020-04-17)
513
- * (kirovilya) Critical. Fixed error starting adapter if cc-chip was only flashed
514
- * (kirovilya) Nue/3A FNB56-ZSW02LX2.0
515
- * (Strunzdesign) Added missing raw button events for Philips Hue Smart Button ROM001
516
- * (Sacred-Shadow) Fix Color for Outdoor Lantern W RGBW OSRAM
517
-
518
- ### 1.1.0 (2020-04-12)
519
- new Zigbee-herdsman features:
520
- * ConBee/RaspBee (experimental support) https://github.com/Koenkk/zigbee-herdsman/issues/72
521
- * OTA update for some devices (IKEA, OSRAM and other) https://github.com/Koenkk/zigbee2mqtt/issues/2921
522
- * Touchlink reset and join https://github.com/Koenkk/zigbee2mqtt/issues/2396
523
- * Green Power devices support https://github.com/Koenkk/zigbee2mqtt/issues/3322
524
- * (peterfido) iCasa KPD14S und KPD18S hinzu
525
- * (kirovilya) Moes Zigbee Thermostatic Radiator
526
- * (kirovilya) LifeControl power plug MCLH-03, bulb MCLH-02, water leak MCLH-07, door sensor MCLH-04
527
- * (kirovilya) Philips LCT002, LCT011, LTW015, LWG004
528
- * (kirovilya) Gledopto GL-C-007 with a channel
529
- * (MultivitaminJuice) Iluminize 511.040
530
- * (Sacred-Shadow) Bitron 902010/24
531
- * (kirovilya) Color indication of LQI and Battery icon
532
- * (kirovilya) Device info modal dialog
533
- * (arteck) Philips LCT026
534
- * (obakuhl) Improvements Osram switch mini
535
- * (arteck) Nue / 3A FB56+ZSW1GKJ2.5, LXN-1S27LX1.0
536
- * (agross) Philips Signe Floor and Table
537
- * (arteck) TRADFRI bulb E14 WS 470lm, OSRAM PAR16 TW Z3
538
- * (kirovilya) Smart remote controller (4 buttons)
539
- * (allofmex) OTA updates
540
- * (kirovilya) Aqara opple change mode keys (for binding)
541
- * (palsch) Heiman HS2WD-E siren
542
-
543
- ### 1.0.4 (2020-03-14)
544
- * (kirovilya) Philips Hue Adore Bathroom Mirror Light
545
- * (kirovilya) Oujiabao Gas and carbon monoxide alarm
546
- * (kirovilya) Tuya SOS button
547
- * (Erdnuss3003) Schwaiger ZBT-DIMLight-GLS0800
548
- * (arteck) Smart Home Pty FB56-ZCW11HG1.4, LXT56-LS27LX1.7
549
- * (arteck) Xiaomi plug lumi.plug.mmeu01
550
- * (arteck) Innr RS 228 T, RS 230 C
551
- * (arteck) Gledopto GL-MC-001, GL-D-003ZS
552
- * (allmyjoes) Bitron AV2010/21A
553
- * (arteck) Osram Panel TW 595 UGR22
554
- * (kirovilya) IKEA SURTE door WS 38x64
555
- * (andigandi) Philips Hue LCG002, Hue LTG002
556
- * (arteck) iCasa ICZB-FC
557
- * (arteck) Osram A60 DIM Z3
558
- * (arteck) Paulmann 371000001
559
- * (DaCHRIS) Osram PAR16 DIM Z3
560
- * (DaCHRIS) Philips LWG001
561
- * (DaCHRIS) Illuminize 511.202
562
- * (SchumyHao) TERNCY-SD01 knob dimmer
563
- * (SchumyHao) Xiaomi lumi.lock.aq1
564
- * (kirovilya) New eWeLink devices: button, TH sensor, contact sensor, motion sensor
565
- * (kirovilya) Allow pairing to routers (again)
566
- * (Erdnuss3003) Philips Hue LCT021
567
- * (root) Trust ZWLD-100 water leak sensor
568
- * (smartpran) Bitron AV2010/32
569
-
570
- ### 1.0.3 (2020-02-09)
571
- * (Tw1nh34d) Hornbach FLAIR LED
572
- * (asgothian) Hue smart button, Heiman smoke sensor
573
- * (kirovilya) Philips LTC014, LTC015
574
- * (kirovilya) Power states for QBKG11LM
575
- * (Garfonso) Change role for occupancy state to 'sensor.motion'
576
- * (kirovilya) Change illuminance state to illuminance_lux (for lux value)
577
- * (arteck) Philips LCF002
578
- * (arteck) TRADFRI open/close remote
579
- * (kirovilya) Tuya sensor TS0201
580
-
581
- ### 1.0.2 (2020-01-29)
582
- * (kirovilya) All button events for Aqara Opple switch
583
- * (ma-john) OSRAM PAR16 RGBW Z3
584
- * (arteck) Phillips LWA004
585
- * (MiniMe6666) Heiman SmokeSendor-N-3.0
586
- * (kirovilya) Force remove device
587
- * (kirovilya) Fix some networkmap bugs
588
- * (kirovilya) Extended info button
589
- * (kirovilya) Long press for WXKG01LM
590
-
591
- ### 1.0.1 (2020-01-23)
592
- * fix for old z-stack firmware
201
+ ***********************************************
593
202
 
594
203
  ### 1.0.0 (2020-01-22)
595
204
  * Powered by new [zigbee-herdsman](https://github.com/Koenkk/zigbee-herdsman) library and new [converters database](https://github.com/Koenkk/zigbee-herdsman-converters)
@@ -599,25 +208,4 @@ new Zigbee-herdsman features:
599
208
  * Some design update
600
209
  * Binding
601
210
 
602
- ## License
603
- The MIT License (MIT)
604
-
605
- Copyright (c) 2018-2024 Kirov Ilya <kirovilya@gmail.com>
606
-
607
- Permission is hereby granted, free of charge, to any person obtaining a copy
608
- of this software and associated documentation files (the "Software"), to deal
609
- in the Software without restriction, including without limitation the rights
610
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
611
- copies of the Software, and to permit persons to whom the Software is
612
- furnished to do so, subject to the following conditions:
613
-
614
- The above copyright notice and this permission notice shall be included in
615
- all copies or substantial portions of the Software.
616
-
617
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
618
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
619
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
620
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
621
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
622
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
623
- THE SOFTWARE.
211
+ ------------------------------------------------------------------------------
Binary file
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zigbee",
4
- "version": "1.10.12",
4
+ "version": "1.10.14",
5
5
  "news": {
6
+ "1.10.14": {
7
+ "en": "Herdsman 2.1.9, Converters 20.58.0\nFix: Aqara T1M (CL-L02D) \ndeleteDeviceStates change to deleteObj",
8
+ "de": "Herdsman 2.1.9, Konverter 20.58.0\nFix: Aqara T1M (CL-L02D)\nlöschen DeviceState Änderung zum Löschen Ob",
9
+ "ru": "Herdsman 2.1.9, Converters 20.58.0\nFix: Aqara T1M (CL-L02D)\nудалить Устройства меняются для удаления Obj",
10
+ "pt": "Herdsman 2.1.9, Conversores 20.58.0\nFix: Aqara T1M (CL-L02D)\nexcluir DeviceStates mudam para excluir Objecção",
11
+ "nl": "Herdsman 2.1.9, Converters 20.58.0\nFix: Aqara T1M (CL-L02D)\nverwijderen Apparaatstaten wijzigen om te verwijderen Obj",
12
+ "fr": "Herdsman 2.1.9, Convertisseurs 20.58.0\nCorrection: Aqara T1M (CL-L02D)\nsupprimer Les états de périphérique changent pour supprimer OBJ",
13
+ "it": "Herdsman 2.1.9, Convertitori 20.58.0\nFisso: Aqara T1M (CL-L02D)\ncancella DeviceStates modifica per eliminare Obj",
14
+ "es": "Herdsman 2.1.9, convertidores 20.58.0\nFijación: Aqara T1M (CL-L02D)\nborrar Los Estados de dispositivos cambian para eliminar Obj",
15
+ "pl": "Herdsman 2.1.9, konwertery 20.58.0\nFix: Aqara T1M (CL- L02D)\nusuń DeviceStates zmienić, aby usunąć Obj",
16
+ "uk": "Herdsman 2.1.9, Конвертер 20.58.0\nФіксація: Aqara T1M (CL-L02D)\nвидалити Зміна стану пристроїв для видалення Офіціант",
17
+ "zh-cn": "牧民2.1.9,转换器 20.58.0\n修补:Aqara T1M(CL-L02D)\n删除 设备状态更改以删除 欧比"
18
+ },
19
+ "1.10.13": {
20
+ "en": "corr icon download bug (axios)",
21
+ "de": "corr icon download bug (axios)",
22
+ "ru": "значок скачать bug (axios)",
23
+ "pt": "corr ícone de download bug (eixos)",
24
+ "nl": "corr pictogram download bug (axios)",
25
+ "fr": "corr icône de téléchargement bug (axios)",
26
+ "it": "corr icon download bug (assios)",
27
+ "es": "corr icono descargar bug (axios)",
28
+ "pl": "corr ikona pobierz błąd (axios)",
29
+ "uk": "корр іконки завантажити помилку (axios)",
30
+ "zh-cn": "corr 图标下载错误( axios)"
31
+ },
6
32
  "1.10.12": {
7
33
  "en": "corr Channel Scan",
8
34
  "de": "corr Channel Scan",
@@ -67,32 +93,6 @@
67
93
  "pl": "ustawienia admin corr\ndodaj nową wersję eslint\n",
68
94
  "uk": "корр налаштування адміністратора\nдодати нову версію eslint\n",
69
95
  "zh-cn": "corr 管理员设置\n添加新的 eslint 版本\n"
70
- },
71
- "1.10.7": {
72
- "en": "add flow control option \nadd new NewHerdsman\nadd new ezsp coordinator Firmware (7.4.1.0)",
73
- "de": "möglichkeit der durchflussregelung\nneues hinzufügen NewHerdsman\nezsp Koordinator Firmware hinzufügen (7.4.1.0)",
74
- "ru": "добавить параметр управления потоком\nдобавить новый NewHerdsman\nдобавить новый координатор ezsp Firmware (7.4.1.0)",
75
- "pt": "adicionar opção de controle de fluxo\nadicionar novo NewHerdsman\nadicionar novo coordenador ezsp Firmware (7.4.1.0)",
76
- "nl": "flow control optie toevoegen\nnieuwe NewHerdsman toevoegen\nnieuwe ezsp coördinator Firmware (7.4.1.0) toevoegen",
77
- "fr": "ajouter l'option de contrôle du débit\najouter un nouveau NewHerdsman\najouter un nouveau logiciel ezsp coordinator (7.4.1.0)",
78
- "it": "aggiungere opzione di controllo del flusso\naggiungere nuovo NewHerdsman\naggiungere nuovo coordinatore ezsp Firmware (7.4.1.0)",
79
- "es": "añadir opción de control de flujo\nañadir nuevo NewHerdsman\nañadir nuevo coordinador de ezsp Firmware (7.4.1.0)",
80
- "pl": "dodaj opcję kontroli przepływu\ndodaj nowy NewHerdsman\ndodaj nowego koordynatora ezsp Firmware (7.4.1.0)",
81
- "uk": "додати варіант контролю потоку\nдодати новийHerdsman\nadd new ezsp manager Прошивка (7.4.1.0)",
82
- "zh-cn": "添加流量控制选项\n添加新赫兹曼\n添加新的 ezsp 协调员 Firmware (7.4.1.0)"
83
- },
84
- "1.10.6": {
85
- "en": "core update\ndependency update",
86
- "de": "kern-update\naktualisierung der abhängigkeit",
87
- "ru": "обновление\nобновление",
88
- "pt": "atualização do núcleo\natualização de dependência",
89
- "nl": "kernupdate\nafhankelijkheidsupdate",
90
- "fr": "mise à jour de base\nmise à jour de la dépendance",
91
- "it": "aggiornamento del core\naggiornamento della dipendenza",
92
- "es": "actualización básica\nactualización de la dependencia",
93
- "pl": "podstawowa aktualizacja\naktualizacja zależności",
94
- "uk": "оновлення ядра\nоновлення залежності",
95
- "zh-cn": "核心更新\n依赖性更新"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/lib/commands.js CHANGED
@@ -474,13 +474,13 @@ class Commands {
474
474
  if (!dev) {
475
475
  this.debug('Not found!');
476
476
  this.debug(`Try delete dev ${devId} from iobroker.`);
477
- this.stController.deleteDeviceStates(devId, () =>
477
+ this.stController.deleteObj(devId, () =>
478
478
  this.adapter.sendTo(from, command, {}, callback));
479
479
  return;
480
480
  }
481
481
  this.zbController.remove(sysid, force, err => {
482
482
  if (!err) {
483
- this.stController.deleteDeviceStates(devId, () =>
483
+ this.stController.deleteObj(devId, () =>
484
484
  this.adapter.sendTo(from, command, {}, callback));
485
485
  } else {
486
486
  this.debug(`Error on remove! ${err}`);
package/lib/devices.js CHANGED
@@ -306,7 +306,8 @@ const generator = {
306
306
  setattr: 'state',
307
307
  });
308
308
  }
309
- if (endpoint.supportsOutputCluster('genMultistateInput')) {
309
+ if (endpoint.supportsOutputCluster('genMultistateInput') || endpoint.clusters.hasOwnProperty('genMultistateInput'))
310
+ {
310
311
  devstates.push({
311
312
  id: `channel_${epID}.click`,
312
313
  prop: 'action',
@@ -343,6 +344,18 @@ const generator = {
343
344
  isEvent: true,
344
345
  getter: payload => payload.action === `tripple_${epName}` ? true : undefined,
345
346
  });
347
+ devstates.push({
348
+ id: `channel_${epID}.hold`,
349
+ prop: 'action',
350
+ name: `long click event`,
351
+ icon: undefined,
352
+ role: 'button',
353
+ write: false,
354
+ read: true,
355
+ type: 'boolean',
356
+ isEvent: true,
357
+ getter: payload => payload.action === `hold_${epName}` ? true : undefined,
358
+ });
346
359
  }
347
360
  if (endpoint.supportsOutputCluster('genLevelCtrl')) {
348
361
  devstates.push({
@@ -487,7 +500,7 @@ const generator = {
487
500
  });
488
501
  return icasa_states;
489
502
  },
490
- ptvo_switch: (entity) => {
503
+ /*ptvo_switch: (entity) => {
491
504
  const devstates = [];
492
505
  for (const endpoint of entity.device.endpoints) {
493
506
  const epID = endpoint.ID;
@@ -566,7 +579,7 @@ const generator = {
566
579
  }
567
580
  }
568
581
  return devstates;
569
- },
582
+ },*/
570
583
  };
571
584
 
572
585
  function states_with_epname(entity, states) {
@@ -3094,6 +3107,10 @@ const devices = [
3094
3107
  models: ['E2204'],
3095
3108
  icon: 'img/E2204.png',
3096
3109
  },
3110
+ {
3111
+ models: ['L1(ZW)'],
3112
+ icon: 'img/TS0502B.png',
3113
+ },
3097
3114
  ];
3098
3115
 
3099
3116
  const commonStates = [
package/lib/groups.js CHANGED
@@ -93,28 +93,28 @@ class Groups {
93
93
 
94
94
  async getGroups(obj) {
95
95
  const response = {groups: {}};
96
- try {
97
- // const groupsState = await this.adapter.getStateAsync('info.groups');
98
- const herdsmanGroups = await this.zbController.getGroups();
99
-
100
- // const groups = (groupsState && groupsState.val) ? JSON.parse(groupsState.val) : {};
101
96
 
102
- const groups = {};
103
- if (typeof herdsmanGroups === 'object') {
104
- for (const group of herdsmanGroups) {
105
- const gid = group.groupID;
106
- if (gid) {
107
- groups[gid] = this.stController.verifyDeviceName(`group_${gid}`, `Group ${gid}`);
97
+ const isEnable = await this.adapter.getStateAsync('info.connection');
98
+ if (isEnable.val) {
99
+ try {
100
+ const herdsmanGroups = await this.zbController.getGroups();
101
+ const groups = {};
102
+ if (typeof herdsmanGroups === 'object') {
103
+ for (const group of herdsmanGroups) {
104
+ const gid = group.groupID;
105
+ if (gid) {
106
+ groups[gid] = this.stController.verifyDeviceName(`group_${gid}`, `Group ${gid}`);
107
+ }
108
108
  }
109
109
  }
110
+ this.debug(`getGroups result: ${JSON.stringify(groups)}`);
111
+ response.groups = groups;
112
+ } catch (error) {
113
+ response.error = `res getGroups: caught error: ${error}`;
114
+ this.error(`getGroups: caught error: ${error}`);
115
+ } finally {
116
+ obj && this.adapter.sendTo(obj.from, obj.command, response, obj.callback);
110
117
  }
111
- this.debug(`getGroups result: ${JSON.stringify(groups)}`);
112
- response.groups = groups;
113
- } catch (error) {
114
- response.error = `getGroups: caught error: ${error}`;
115
- this.error(`getGroups: caught error: ${error}`);
116
- } finally {
117
- obj && this.adapter.sendTo(obj.from, obj.command, response, obj.callback);
118
118
  }
119
119
  return response.groups;
120
120
  }
@@ -207,7 +207,7 @@ class Groups {
207
207
 
208
208
  async deleteGroup(from, command, message) {
209
209
  await this.zbController.removeGroupById(message);
210
- await this.stController.deleteGroupById(`group_${parseInt(message)}`);
210
+ await this.stController.deleteObj(`group_${parseInt(message)}`);
211
211
  }
212
212
 
213
213
  async renameGroup(from, command, message) {
@@ -223,8 +223,6 @@ class Groups {
223
223
  this.warn(`renameGroup caught error ${JSON.stringify(e.code)}`);
224
224
  }
225
225
  }
226
- // objGroups[message.id.toString()] = message.name;
227
- // await this.adapter.setStateAsync('info.groups', JSON.stringify(objGroups), true);
228
226
 
229
227
  const group = await this.adapter.getStateAsync(id);
230
228
  if (!group) {
@@ -306,7 +304,7 @@ class Groups {
306
304
  if (dev.common.type === 'group') {
307
305
  const groupid = parseInt(dev.native.id);
308
306
  if (!usedGroupsIds.includes(groupid)) {
309
- this.stController.deleteDeviceStates(`group_${groupid}`);
307
+ this.stController.deleteObj(`group_${groupid}`);
310
308
  }
311
309
  }
312
310
  });
@@ -8,7 +8,7 @@ const fs = require('fs');
8
8
  const axios = require('axios');
9
9
 
10
10
  let savedDeviceNamesDB = {};
11
- const knownUndefinedDevices = {};
11
+
12
12
 
13
13
  class StatesController extends EventEmitter {
14
14
  constructor(adapter) {
@@ -75,7 +75,6 @@ class StatesController extends EventEmitter {
75
75
  }
76
76
  });
77
77
 
78
- this.adapter.setStateAsync(`info.undefinedDevices`, JSON.stringify(knownUndefinedDevices), true);
79
78
  }
80
79
 
81
80
  checkDebugDevice(dev) {
@@ -95,9 +94,6 @@ class StatesController extends EventEmitter {
95
94
  if (!this.adapter.zbController || !this.adapter.zbController.connected()) {
96
95
  return;
97
96
  }
98
- if (this.debugDevices === undefined) {
99
- this.getDebugDevices();
100
- }
101
97
  if (state && !state.ack) {
102
98
  if (id.endsWith('pairingCountdown') || id.endsWith('pairingMessage') || id.endsWith('connection')) {
103
99
  return;
@@ -112,7 +108,8 @@ class StatesController extends EventEmitter {
112
108
  return;
113
109
  }
114
110
 
115
- if (this.checkDebugDevice(id)) this.warn(`ELEVATED: User stateChange ${id} ${JSON.stringify(state)}`);
111
+ if (this.checkDebugDevice(id))
112
+ this.warn(`ELEVATED O1: User state change of state ${id} with value ${state.val} (ack: ${state.ack}) from ${state.from}`);
116
113
 
117
114
  this.debug(`User stateChange ${id} ${JSON.stringify(state)}`);
118
115
  const devId = getAdId(this.adapter, id); // iobroker device id
@@ -191,13 +188,7 @@ class StatesController extends EventEmitter {
191
188
  } else {
192
189
  stateModel = statesMapping.findModel(model);
193
190
  if (!stateModel) {
194
- if (knownUndefinedDevices[deviceId]) {
195
- knownUndefinedDevices[deviceId]++;
196
- } else {
197
- knownUndefinedDevices[deviceId] = 1;
198
- this.info(`Device ${deviceId} "${model}" not present in statesMapping - relying on exposes for device definition.`);
199
- }
200
- this.adapter.setStateAsync(`info.undefinedDevices`, JSON.stringify(knownUndefinedDevices), true);
191
+ this.info(`Device ${deviceId} "${model}" not present in statesMapping - relying on exposes for device definition.`);
201
192
  states = statesMapping.commonStates;
202
193
  } else {
203
194
  states = stateModel.states;
@@ -217,15 +208,14 @@ class StatesController extends EventEmitter {
217
208
  }
218
209
 
219
210
  async publishFromState(deviceId, model, stateKey, state, options) {
220
- if (this.debugDevices === undefined) this.getDebugDevices();
221
211
  this.debug(`Change state '${stateKey}' at device ${deviceId} type '${model}'`);
222
212
  const elevated = this.checkDebugDevice(deviceId);
223
213
 
224
- if (elevated) this.warn(`ELEVATED Change state '${stateKey}' at device ${deviceId} type '${model}'`);
214
+ if (elevated) this.warn(`ELEVATED O2: Change state '${stateKey}' at device ${deviceId} type '${model}'`);
225
215
 
226
216
  const devStates = await this.getDevStates(deviceId, model);
227
217
  if (!devStates) {
228
- if (elevated) this.error(`ELEVATED no device states for device ${deviceId} type '${model}'`);
218
+ if (elevated) this.error(`ELEVATED OE1: no device states for device ${deviceId} type '${model}'`);
229
219
  return;
230
220
  }
231
221
  const commonStates = statesMapping.commonStates.find(statedesc => stateKey === statedesc.id);
@@ -238,7 +228,8 @@ class StatesController extends EventEmitter {
238
228
 
239
229
  const value = state.val;
240
230
  if (value === undefined || value === '') {
241
- if (elevated) this.error(`ELEVATED no value for device ${deviceId} type '${model}'`);
231
+ if (elevated)
232
+ this.error(`ELEVATED OE2: no value for device ${deviceId} type '${model}'`);
242
233
  return;
243
234
  }
244
235
  let stateList = [{stateDesc: stateDesc, value: value, index: 0, timeout: 0}];
@@ -308,18 +299,7 @@ class StatesController extends EventEmitter {
308
299
  return savedDeviceNamesDB[savedId];
309
300
  }
310
301
 
311
- deleteDeviceStates(devId, callback) {
312
- this.adapter.getStatesOf(devId, (err, states) => {
313
- if (!err && states) {
314
- states.forEach(state =>
315
- this.adapter.deleteState(devId, null, state._id));
316
- }
317
- this.adapter.delObject(devId, () =>
318
- callback && callback());
319
- });
320
- }
321
-
322
- async deleteGroupById(devId) {
302
+ async deleteObj(devId) {
323
303
  const options = { recursive:true };
324
304
  try {
325
305
  this.adapter.delObject(devId,options), (err) => { }
@@ -329,7 +309,6 @@ class StatesController extends EventEmitter {
329
309
  }
330
310
  }
331
311
 
332
-
333
312
  async deleteOrphanedDeviceStates(ieeeAddr, model, force, callback) {
334
313
  const devStates = await this.getDevStates(ieeeAddr, model);
335
314
  const commonStates = statesMapping.commonStates;
@@ -518,7 +497,7 @@ class StatesController extends EventEmitter {
518
497
  }
519
498
  icon = `img/${model_modif}.png`;
520
499
  } catch (e) {
521
- this.debug(`ERROR : icon not found from ${icon} saved into ${pathToIcon}`);
500
+ this.warn(`ERROR : icon not found from ${icon} saved into ${pathToIcon}`);
522
501
  }
523
502
  }
524
503
  }
@@ -560,7 +539,8 @@ class StatesController extends EventEmitter {
560
539
  writer.on('finish', resolve);
561
540
  writer.on('error', reject);
562
541
  }).catch(err => {
563
- reject(err);
542
+ // reject(err);
543
+ this.warn(`ERROR : icon path not found ${image_path}`);
564
544
  });
565
545
  });
566
546
  }
@@ -619,19 +599,20 @@ class StatesController extends EventEmitter {
619
599
  async publishToState(devId, model, payload) {
620
600
  const devStates = await this.getDevStates(`0x${devId}`, model);
621
601
  let has_debug = false;
622
- if (this.debugDevices === undefined) this.getDebugDevices();
623
602
  if (this.checkDebugDevice(devId))
624
603
  {
625
604
  if (!payload.hasOwnProperty('msg_from_zigbee')) {
626
- this.warn(`ELEVATED publishToState: message received '${JSON.stringify(payload)}' from device ${devId} type '${model}'`);
605
+ this.warn(`ELEVATED I1: message received '${JSON.stringify(payload)}' from device ${devId} type '${model}'`);
627
606
  has_debug = true;
628
607
  }
629
608
  }
630
609
  if (!devStates) {
631
- if (has_debug) this.error(`ELEVATED publishToState: no device states for device ${devId} type '${model}'`)
610
+ if (has_debug) this.error(`ELEVATED IE2: no device states for device ${devId} type '${model}'`)
632
611
  return;
633
612
  }
634
613
  // find states for payload
614
+ let has_published = false;
615
+
635
616
  if (devStates.states !== undefined) {
636
617
  try {
637
618
  const states = statesMapping.commonStates.concat(
@@ -654,7 +635,7 @@ class StatesController extends EventEmitter {
654
635
  let stateID = statedesc.id;
655
636
 
656
637
  if (has_debug && statedesc.id !== 'msg_from_zigbee') {
657
- this.warn(`ELEVATED publishToState: value generated '${JSON.stringify(value)}' from device ${devId} for '${statedesc.name}'`);
638
+ this.warn(`ELEVATED I2: value generated '${JSON.stringify(value)}' from device ${devId} for '${statedesc.name}'`);
658
639
  }
659
640
 
660
641
  const common = {
@@ -692,11 +673,22 @@ class StatesController extends EventEmitter {
692
673
  this.updateState(devId, stateID, value, common);
693
674
  }
694
675
  }
676
+ has_published = true;
695
677
  }
696
678
  } catch (e) {
697
679
  this.debug(`No states in device ${devId} : payload ${JSON.stringify(payload)}`);
680
+ if (has_debug)
681
+ this.error(`ELEVATED IE3: error when enumerating states of ${devId} for payload ${JSON.stringify(payload)}, ${(e ? e.name : 'undefined')} (${(e ? e.message : '')}).`);
682
+ }
683
+ if (!has_published && has_debug) {
684
+ this.error(`ELEVATED IE4: No value published for device ${devId}`);
685
+
698
686
  }
699
687
  }
688
+ else {
689
+ if (has_debug)
690
+ this.error(`ELEVATED IE5: No states matching the payload ${JSON.stringify(payload)} for device ${devId}`);
691
+ }
700
692
  }
701
693
  }
702
694
 
package/main.js CHANGED
@@ -441,7 +441,7 @@ class Zigbee extends utils.Adapter {
441
441
 
442
442
  Promise.all(chain)
443
443
  .then(() =>
444
- this.stController.deleteDeviceStates(devId, () =>
444
+ this.stController.deleteObj(devId, () =>
445
445
  this.stController.updateDev(devId, model, model, async () => {
446
446
  await this.stController.syncDevStates(device, model);
447
447
  resolve();
@@ -467,7 +467,9 @@ class Zigbee extends utils.Adapter {
467
467
  const devId = device.ieeeAddr.substr(2);
468
468
  const meta = {device};
469
469
 
470
- if (this.stController.checkDebugDevice(devId)) {
470
+ const has_elevated_debug = this.stController.checkDebugDevice(devId);
471
+
472
+ if (has_elevated_debug) {
471
473
  const shortMessage = {};
472
474
  for(const propertyName in message) {
473
475
  shortMessage[propertyName] = message[propertyName];
@@ -475,7 +477,7 @@ class Zigbee extends utils.Adapter {
475
477
  shortMessage.device = device.ieeeAddr;
476
478
  shortMessage.meta = undefined;
477
479
  shortMessage.endpoint = (message.endpoint.ID ? message.endpoint.ID: -1);
478
- this.log.warn(`ELEVATED: Zigbee Event of Type ${type} from device ${safeJsonStringify(device.ieeeAddr)}, incoming event: ${safeJsonStringify(shortMessage)}`);
480
+ this.log.warn(`ELEVATED I0: Zigbee Event of Type ${type} from device ${safeJsonStringify(device.ieeeAddr)}, incoming event: ${safeJsonStringify(shortMessage)}`);
479
481
  }
480
482
  // this assigment give possibility to use iobroker logger in code of the converters, via meta.logger
481
483
  meta.logger = this.log;
@@ -558,6 +560,8 @@ class Zigbee extends utils.Adapter {
558
560
  if (!converters.length) {
559
561
  if (type !== 'readResponse') {
560
562
  this.log.debug(`No converter available for '${mappedModel.model}' '${devId}' with cluster '${cluster}' and type '${type}'`);
563
+ if (has_elevated_debug)
564
+ this.log.warn(`ELEVATED IE0: No converter available for '${mappedModel.model}' '${devId}' with cluster '${cluster}' and type '${type}'`);
561
565
  }
562
566
  return;
563
567
  }
@@ -639,7 +643,7 @@ class Zigbee extends utils.Adapter {
639
643
 
640
644
  if (!mappedModel) {
641
645
  this.log.debug(`No mapped model for ${model}`);
642
- if (has_elevated_debug) this.log.warn(`ELEVATED: No mapped model for ${model}`)
646
+ if (has_elevated_debug) this.log.warn(`ELEVATED O2: No mapped model for ${model}`)
643
647
  return;
644
648
  }
645
649
 
@@ -715,26 +719,29 @@ class Zigbee extends utils.Adapter {
715
719
 
716
720
  if (!c.hasOwnProperty('convertSet')) continue;
717
721
  this.log.debug(`Type of toZigbee is '${typeof c}', Contains key ${(c.hasOwnProperty('key')?JSON.stringify(c.key):'false ')}`)
718
- if (!c.hasOwnProperty('key') && c.hasOwnProperty('convertSet') && converter === undefined)
722
+ if (!c.hasOwnProperty('key'))
719
723
  {
720
- converter = c;
721
-
722
- if (has_elevated_debug) this.log.warn(`ELEVATED: setting converter to keyless converter for ${deviceId} of type ${model}`)
723
- this.log.debug('setting converter to keyless converter')
724
+ if (c.hasOwnProperty('convertSet') && converter === undefined)
725
+ {
726
+ converter = c;
727
+ if (has_elevated_debug)
728
+ this.log.warn(`ELEVATED O3A: Setting converter to keyless converter for ${deviceId} of type ${model}`)
729
+ this.log.debug('setting converter to keyless converter')
730
+ }
731
+ else
732
+ {
733
+ if (has_elevated_debug) this.log.warn(`ELEVATED O3B: ignoring keyless converter for ${deviceId} of type ${model}`)
734
+ this.log.debug('ignoring keyless converter')
735
+ }
724
736
  continue;
725
737
  }
726
738
  if (c.key.includes(stateDesc.prop) || c.key.includes(stateDesc.setattr) || c.key.includes(stateDesc.id))
727
739
  {
728
740
  this.log.debug(`${(converter===undefined?'Setting':'Overriding')}' converter to converter with key(s)'${JSON.stringify(c.key)}}`)
729
- if (has_elevated_debug) this.log.warn(`ELEVATED: ${(converter===undefined?'Setting':'Overriding')}' converter to converter with key(s)'${JSON.stringify(c.key)}}`)
741
+ if (has_elevated_debug) this.log.warn(`ELEVATED O3C: ${(converter===undefined?'Setting':'Overriding')}' converter to converter with key(s)'${JSON.stringify(c.key)}}`)
730
742
  converter = c;
731
743
  }
732
-
733
744
  }
734
- /*
735
- if (!mappedModel.toZigbee[0].hasOwnProperty('key') && mappedModel.toZigbee[0].hasOwnProperty('convertSet')) converter = mappedModel.toZigbee[0];
736
- converter = mappedModel.toZigbee.find(c => c && c.hasOwnProperty('key') && (c.key.includes(stateDesc.prop) || c.key.includes(stateDesc.setattr) || c.key.includes(stateDesc.id)));
737
- */
738
745
  if (converter === undefined) {
739
746
  this.log.error(`No converter available for '${model}' with key '${stateDesc.id}' `);
740
747
  this.sendError(`No converter available for '${model}' with key '${stateDesc.id}' `);
@@ -755,9 +762,9 @@ class Zigbee extends utils.Adapter {
755
762
  }
756
763
 
757
764
  const epName = stateDesc.epname !== undefined ? stateDesc.epname : (stateDesc.prop || stateDesc.id);
758
- const key = stateDesc.prop || stateDesc.id || stateDesc.setattr;
765
+ const key = stateDesc.setattr || stateDesc.prop || stateDesc.id;
759
766
  this.log.debug(`convert ${key}, ${safeJsonStringify(preparedValue)}, ${safeJsonStringify(preparedOptions)}`);
760
- if (has_elevated_debug) this.log.warn(`ELEVATED: convert ${key}, ${safeJsonStringify(preparedValue)}, ${safeJsonStringify(preparedOptions)} for device ${deviceId}`);
767
+ if (has_elevated_debug) this.log.warn(`ELEVATED O4: convert ${key}, ${safeJsonStringify(preparedValue)}, ${safeJsonStringify(preparedOptions)} for device ${deviceId} with Endpoint ${epName}`);
761
768
 
762
769
  let target;
763
770
  if (model === 'group') {
@@ -797,24 +804,21 @@ class Zigbee extends utils.Adapter {
797
804
  try {
798
805
  const result = await converter.convertSet(target, key, preparedValue, meta);
799
806
  this.log.debug(`convert result ${safeJsonStringify(result)}`);
800
- if (has_elevated_debug) this.log.warn(`ELEVATED: convert result ${safeJsonStringify(result)} for device ${deviceId}`);
807
+ if (has_elevated_debug) this.log.warn(`ELEVATED O5: convert result ${safeJsonStringify(result)} for device ${deviceId}`);
801
808
  if (result !== undefined) {
802
809
  if (stateModel && !isGroup) {
803
810
  this.acknowledgeState(deviceId, model, stateDesc, value);
804
811
  }
805
812
  // process sync state list
806
813
  this.processSyncStatesList(deviceId, model, syncStateList);
807
-
808
- // if (isGroup) {
809
- // await this.callPluginMethod('queryGroupMemberState', [deviceId, stateDesc]);
810
- // this.acknowledgeState(deviceId, model, stateDesc, value);
811
- // }
812
814
  }
813
815
  else
814
- if (has_elevated_debug) this.log.warn(`Error convert result for ${key} with ${safeJsonStringify(preparedValue)} is undefined on device ${deviceId}.`);
816
+ if (has_elevated_debug)
817
+ this.log.error(`ELEVATED OE2: Error convert result for ${key} with ${safeJsonStringify(preparedValue)} is undefined on device ${deviceId}.`);
815
818
 
816
819
  } catch (error) {
817
- if (has_elevated_debug) this.log.warn(`caught error ${safeJsonStringify(error)} is undefined on device ${deviceId}.`);
820
+ if (has_elevated_debug)
821
+ this.log.error(`ELEVATED OE3: caught error ${safeJsonStringify(error)} when setting value for device ${deviceId}.`);
818
822
  this.filterError(`Error ${error.code} on send command to ${deviceId}.` +
819
823
  ` Error: ${error.stack}`, `Send command to ${deviceId} failed with`, error);
820
824
  }
@@ -934,7 +938,7 @@ class Zigbee extends utils.Adapter {
934
938
  if (ieeeAddr) {
935
939
  const devId = ieeeAddr.substr(2);
936
940
  this.log.debug(`Delete device ${devId} from iobroker.`);
937
- this.stController.deleteDeviceStates(devId);
941
+ this.stController.deleteObj(devId);
938
942
  }
939
943
  }
940
944
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.zigbee",
3
- "version": "1.10.12",
3
+ "version": "1.10.14",
4
4
  "author": {
5
5
  "name": "Kirov Ilya",
6
6
  "email": "kirovilya@gmail.com"
@@ -28,8 +28,8 @@
28
28
  "ajv": "^8.17.1",
29
29
  "uri-js": "^4.4.1",
30
30
  "typescript": "^5.6.3",
31
- "zigbee-herdsman": "2.1.4",
32
- "zigbee-herdsman-converters": "20.28.0"
31
+ "zigbee-herdsman": "2.1.9",
32
+ "zigbee-herdsman-converters": "20.58.0"
33
33
  },
34
34
  "description": "Zigbee devices",
35
35
  "devDependencies": {
@@ -40,7 +40,7 @@
40
40
  "@iobroker/testing": "^5.0.0",
41
41
  "chai": "^5.1.2",
42
42
  "chai-as-promised": "^7.1.1",
43
- "eslint": "^9.13.0",
43
+ "eslint": "^9.17.0",
44
44
  "eslint-config-prettier": "^9.1.0",
45
45
  "eslint-plugin-prettier": "^5.2.1",
46
46
  "gulp": "^4.0.2",