@willieee802/zigbee-herdsman 0.49.0 → 0.49.1

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.
Files changed (114) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +38 -0
  3. package/biome.json +1 -1
  4. package/dist/adapter/adapter.d.ts.map +1 -0
  5. package/dist/adapter/adapterDiscovery.d.ts.map +1 -0
  6. package/dist/adapter/const.d.ts.map +1 -0
  7. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -0
  8. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -0
  9. package/dist/adapter/ember/adapter/endpoints.d.ts.map +1 -0
  10. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -0
  11. package/dist/adapter/ember/adapter/tokensManager.d.ts.map +1 -0
  12. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -0
  13. package/dist/adapter/ember/utils/initters.d.ts.map +1 -0
  14. package/dist/adapter/events.d.ts.map +1 -0
  15. package/dist/adapter/ezsp/adapter/backup.d.ts.map +1 -0
  16. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -0
  17. package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -0
  18. package/dist/adapter/ezsp/driver/index.d.ts.map +1 -0
  19. package/dist/adapter/ezsp/driver/multicast.d.ts.map +1 -0
  20. package/dist/adapter/index.d.ts.map +1 -0
  21. package/dist/adapter/z-stack/adapter/endpoints.d.ts.map +1 -0
  22. package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -0
  23. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -0
  24. package/dist/adapter/z-stack/models/startup-options.d.ts.map +1 -0
  25. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -0
  26. package/dist/adapter/zboss/driver.d.ts.map +1 -0
  27. package/dist/adapter/zboss/frame.d.ts.map +1 -0
  28. package/dist/adapter/zboss/frame.js +200 -0
  29. package/dist/adapter/zboss/frame.js.map +1 -0
  30. package/dist/adapter/zboss/uart.d.ts.map +1 -0
  31. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -0
  32. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +1 -0
  33. package/dist/adapter/zigate/driver/buffaloZiGate.js +198 -0
  34. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -0
  35. package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +1 -0
  36. package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -0
  37. package/dist/adapter/zoh/adapter/zohAdapter.d.ts.map +1 -0
  38. package/dist/controller/controller.d.ts.map +1 -0
  39. package/dist/controller/controller.js +874 -0
  40. package/dist/controller/controller.js.map +1 -0
  41. package/dist/controller/database.d.ts.map +1 -0
  42. package/dist/controller/events.d.ts.map +1 -0
  43. package/dist/controller/events.js +3 -0
  44. package/dist/controller/events.js.map +1 -0
  45. package/dist/controller/greenPower.d.ts.map +1 -0
  46. package/dist/controller/greenPower.js +425 -0
  47. package/dist/controller/greenPower.js.map +1 -0
  48. package/dist/controller/helpers/index.d.ts.map +1 -0
  49. package/dist/controller/helpers/ota.d.ts.map +1 -0
  50. package/dist/controller/helpers/ota.js +467 -0
  51. package/dist/controller/helpers/ota.js.map +1 -0
  52. package/dist/controller/helpers/request.d.ts.map +1 -0
  53. package/dist/controller/helpers/requestQueue.d.ts.map +1 -0
  54. package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -0
  55. package/dist/controller/helpers/zclFrameConverter.js +84 -0
  56. package/dist/controller/helpers/zclFrameConverter.js.map +1 -0
  57. package/dist/controller/index.d.ts.map +1 -0
  58. package/dist/controller/model/device.d.ts.map +1 -0
  59. package/dist/controller/model/device.js +1396 -0
  60. package/dist/controller/model/device.js.map +1 -0
  61. package/dist/controller/model/endpoint.d.ts.map +1 -0
  62. package/dist/controller/model/endpoint.js +822 -0
  63. package/dist/controller/model/endpoint.js.map +1 -0
  64. package/dist/controller/model/entity.d.ts.map +1 -0
  65. package/dist/controller/model/group.d.ts.map +1 -0
  66. package/dist/controller/model/group.js +343 -0
  67. package/dist/controller/model/group.js.map +1 -0
  68. package/dist/controller/model/index.d.ts.map +1 -0
  69. package/dist/controller/model/zigbeeEntity.d.ts.map +1 -0
  70. package/dist/controller/touchlink.d.ts.map +1 -0
  71. package/dist/controller/tstype.d.ts.map +1 -0
  72. package/dist/controller/tstype.js +3 -0
  73. package/dist/controller/tstype.js.map +1 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/utils/timeService.d.ts.map +1 -0
  76. package/dist/utils/timeService.js +127 -0
  77. package/dist/utils/timeService.js.map +1 -0
  78. package/dist/zspec/zcl/buffaloZcl.d.ts.map +1 -0
  79. package/dist/zspec/zcl/buffaloZcl.js +969 -0
  80. package/dist/zspec/zcl/buffaloZcl.js.map +1 -0
  81. package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -0
  82. package/dist/zspec/zcl/definition/cluster.js +7507 -0
  83. package/dist/zspec/zcl/definition/cluster.js.map +1 -0
  84. package/dist/zspec/zcl/definition/clusters-types.d.ts +8135 -0
  85. package/dist/zspec/zcl/definition/clusters-types.d.ts.map +1 -0
  86. package/dist/zspec/zcl/definition/clusters-types.js +3 -0
  87. package/dist/zspec/zcl/definition/clusters-types.js.map +1 -0
  88. package/dist/zspec/zcl/definition/foundation.d.ts.map +1 -0
  89. package/dist/zspec/zcl/definition/foundation.js +312 -0
  90. package/dist/zspec/zcl/definition/foundation.js.map +1 -0
  91. package/dist/zspec/zcl/definition/tstype.d.ts +273 -0
  92. package/dist/zspec/zcl/definition/tstype.d.ts.map +1 -0
  93. package/dist/zspec/zcl/definition/tstype.js +3 -0
  94. package/dist/zspec/zcl/definition/tstype.js.map +1 -0
  95. package/dist/zspec/zcl/index.d.ts.map +1 -0
  96. package/dist/zspec/zcl/index.js +57 -0
  97. package/dist/zspec/zcl/index.js.map +1 -0
  98. package/dist/zspec/zcl/utils.d.ts.map +1 -0
  99. package/dist/zspec/zcl/utils.js +419 -0
  100. package/dist/zspec/zcl/utils.js.map +1 -0
  101. package/dist/zspec/zcl/zclFrame.d.ts.map +1 -0
  102. package/dist/zspec/zcl/zclFrame.js +328 -0
  103. package/dist/zspec/zcl/zclFrame.js.map +1 -0
  104. package/dist/zspec/zcl/zclHeader.d.ts.map +1 -0
  105. package/dist/zspec/zcl/zclHeader.js +88 -0
  106. package/dist/zspec/zcl/zclHeader.js.map +1 -0
  107. package/package.json +90 -83
  108. package/src/controller/helpers/ota.ts +5 -2
  109. package/src/zspec/zcl/definition/cluster.ts +3 -294
  110. package/src/zspec/zcl/definition/clusters-types.ts +6 -355
  111. package/src/zspec/zcl/definition/tstype.ts +0 -14
  112. package/src/zspec/zcl/utils.ts +14 -31
  113. package/test/controller.test.ts +16 -8
  114. package/test/zcl.test.ts +36 -7
@@ -2378,7 +2378,7 @@ export interface TClusters {
2378
2378
  /** ID=0x0002 | type=BITMAP8 | write=true | required=true | default=0 */
2379
2379
  status: number;
2380
2380
  /** ID=0x0010 | type=UINT16 | write=true | required=true | min=1 | max=65534 | default=1 */
2381
- losedLimit: number;
2381
+ closedLimit: number;
2382
2382
  /** ID=0x0011 | type=ENUM8 | write=true | required=true | max=254 | default=0 */
2383
2383
  mode: number;
2384
2384
  };
@@ -2911,11 +2911,11 @@ export interface TClusters {
2911
2911
  accelerationTimeLift: number;
2912
2912
  /** ID=0x0016 | type=UINT16 | write=true | max=65535 | default=0 */
2913
2913
  decelerationTimeLift: number;
2914
- /** ID=0x0017 | type=BITMAP8 | required=true | default=4 */
2914
+ /** ID=0x0017 | type=BITMAP8 | write=true | required=true | default=4 */
2915
2915
  windowCoveringMode: number;
2916
- /** ID=0x0018 | type=OCTET_STR | default=1,0x0000 */
2916
+ /** ID=0x0018 | type=OCTET_STR | write=true | default=1,0x0000 */
2917
2917
  intermediateSetpointsLift: Buffer;
2918
- /** ID=0x0019 | type=OCTET_STR | default=1,0x0000 */
2918
+ /** ID=0x0019 | type=OCTET_STR | write=true | default=1,0x0000 */
2919
2919
  intermediateSetpointsTilt: Buffer;
2920
2920
  /** ID=0x000a | type=BITMAP8 */
2921
2921
  operationalStatus: number;
@@ -3189,48 +3189,14 @@ export interface TClusters {
3189
3189
  fourNoksHysteresisLow?: number;
3190
3190
  /** ID=0x0400 | type=ENUM8 | manufacturerCode=SINOPE_TECHNOLOGIES(0x119c) | write=true | max=255 */
3191
3191
  SinopeOccupancy?: number;
3192
- /** ID=0x0401 | type=UINT16 | write=true | max=65535 */
3193
- elkoLoad: number;
3194
3192
  /** ID=0x0401 | type=UINT16 | manufacturerCode=SINOPE_TECHNOLOGIES(0x119c) | write=true | max=65535 */
3195
3193
  SinopeMainCycleOutput?: number;
3196
3194
  /** ID=0x0402 | type=CHAR_STR | write=true */
3197
3195
  elkoDisplayText: string;
3198
3196
  /** ID=0x0402 | type=ENUM8 | manufacturerCode=SINOPE_TECHNOLOGIES(0x119c) | write=true | max=255 */
3199
3197
  SinopeBacklight?: number;
3200
- /** ID=0x0403 | type=ENUM8 | write=true | max=255 */
3201
- elkoSensor: number;
3202
- /** ID=0x0404 | type=UINT8 | write=true | max=255 */
3203
- elkoRegulatorTime: number;
3204
3198
  /** ID=0x0404 | type=UINT16 | manufacturerCode=SINOPE_TECHNOLOGIES(0x119c) | write=true | max=65535 */
3205
3199
  SinopeAuxCycleOutput?: number;
3206
- /** ID=0x0405 | type=BOOLEAN | write=true */
3207
- elkoRegulatorMode: number;
3208
- /** ID=0x0406 | type=BOOLEAN | write=true */
3209
- elkoPowerStatus: number;
3210
- /** ID=0x0407 | type=OCTET_STR | write=true */
3211
- elkoDateTime: Buffer;
3212
- /** ID=0x0408 | type=UINT16 | write=true | max=65535 */
3213
- elkoMeanPower: number;
3214
- /** ID=0x0409 | type=INT16 | write=true | min=-32768 | max=32767 */
3215
- elkoExternalTemp: number;
3216
- /** ID=0x0411 | type=BOOLEAN | write=true */
3217
- elkoNightSwitching: number;
3218
- /** ID=0x0412 | type=BOOLEAN | write=true */
3219
- elkoFrostGuard: number;
3220
- /** ID=0x0413 | type=BOOLEAN | write=true */
3221
- elkoChildLock: number;
3222
- /** ID=0x0414 | type=UINT8 | write=true | max=255 */
3223
- elkoMaxFloorTemp: number;
3224
- /** ID=0x0415 | type=BOOLEAN | write=true */
3225
- elkoRelayState: number;
3226
- /** ID=0x0416 | type=OCTET_STR | write=true */
3227
- elkoVersion: Buffer;
3228
- /** ID=0x0417 | type=INT8 | write=true | min=-128 | max=127 */
3229
- elkoCalibration: number;
3230
- /** ID=0x0418 | type=UINT8 | write=true | max=255 */
3231
- elkoLastMessageId: number;
3232
- /** ID=0x0419 | type=UINT8 | write=true | max=255 */
3233
- elkoLastMessageStatus: number;
3234
3200
  /** ID=0x4000 | type=ENUM8 | manufacturerCode=VIESSMANN_ELEKTRONIK_GMBH(0x1221) | write=true | max=255 */
3235
3201
  viessmannWindowOpenInternal?: number;
3236
3202
  /** ID=0x4000 | type=ENUM8 | manufacturerCode=DANFOSS_A_S(0x1246) | write=true | max=255 */
@@ -6607,9 +6573,9 @@ export interface TClusters {
6607
6573
  model: Buffer;
6608
6574
  /** ID=0x0007 | type=OCTET_STR | minLen=0 | maxLen=16 */
6609
6575
  partNumber: Buffer;
6610
- /** ID=0x0008 | type=OCTET_STR | minLen=0 | maxLen=16 */
6576
+ /** ID=0x0008 | type=OCTET_STR | minLen=0 | maxLen=6 */
6611
6577
  productRevision: Buffer;
6612
- /** ID=0x000a | type=OCTET_STR | minLen=0 | maxLen=16 */
6578
+ /** ID=0x000a | type=OCTET_STR | minLen=0 | maxLen=6 */
6613
6579
  softwareRevision: Buffer;
6614
6580
  /** ID=0x000b | type=CHAR_STR | minLen=0 | maxLen=16 */
6615
6581
  utilityName: string;
@@ -7410,27 +7376,6 @@ export interface TClusters {
7410
7376
  };
7411
7377
  };
7412
7378
  };
7413
- manuSpecificClusterAduroSmart: {
7414
- attributes: never;
7415
- commands: {
7416
- /** ID=0x00 */
7417
- cmd0: Record<string, never>;
7418
- };
7419
- commandResponses: never;
7420
- };
7421
- manuSpecificOsram: {
7422
- attributes: never;
7423
- commands: {
7424
- /** ID=0x01 */
7425
- saveStartupParams: Record<string, never>;
7426
- /** ID=0x02 */
7427
- resetStartupParams: Record<string, never>;
7428
- };
7429
- commandResponses: {
7430
- /** ID=0x00 */
7431
- saveStartupParamsRsp: Record<string, never>;
7432
- };
7433
- };
7434
7379
  manuSpecificPhilips: {
7435
7380
  attributes: {
7436
7381
  /** ID=0x0031 | type=BITMAP16 | write=true */
@@ -7565,33 +7510,6 @@ export interface TClusters {
7565
7510
  commands: never;
7566
7511
  commandResponses: never;
7567
7512
  };
7568
- manuSpecificLegrandDevices: {
7569
- attributes: never;
7570
- commands: never;
7571
- commandResponses: never;
7572
- };
7573
- manuSpecificLegrandDevices2: {
7574
- attributes: never;
7575
- commands: {
7576
- /** ID=0x00 */
7577
- command0: {
7578
- /** type=BUFFER */
7579
- data: Buffer;
7580
- };
7581
- };
7582
- commandResponses: never;
7583
- };
7584
- manuSpecificLegrandDevices3: {
7585
- attributes: never;
7586
- commands: {
7587
- /** ID=0x00 */
7588
- command0: {
7589
- /** type=BUFFER */
7590
- data: Buffer;
7591
- };
7592
- };
7593
- commandResponses: never;
7594
- };
7595
7513
  manuSpecificTuya: {
7596
7514
  attributes: never;
7597
7515
  commands: {
@@ -7817,14 +7735,6 @@ export interface TClusters {
7817
7735
  };
7818
7736
  commandResponses: never;
7819
7737
  };
7820
- manuSpecificCentraliteHumidity: {
7821
- attributes: {
7822
- /** ID=0x0000 | type=UINT16 | write=true | max=65535 */
7823
- measuredValue: number;
7824
- };
7825
- commands: never;
7826
- commandResponses: never;
7827
- };
7828
7738
  manuSpecificSmartThingsArrivalSensor: {
7829
7739
  attributes: never;
7830
7740
  commands: never;
@@ -7833,124 +7743,6 @@ export interface TClusters {
7833
7743
  arrivalSensorNotify: Record<string, never>;
7834
7744
  };
7835
7745
  };
7836
- manuSpecificSamsungAccelerometer: {
7837
- attributes: {
7838
- /** ID=0x0000 | type=UINT8 | write=true | max=255 */
7839
- motion_threshold_multiplier: number;
7840
- /** ID=0x0002 | type=UINT16 | write=true | max=65535 */
7841
- motion_threshold: number;
7842
- /** ID=0x0010 | type=BITMAP8 | write=true | max=255 */
7843
- acceleration: number;
7844
- /** ID=0x0012 | type=INT16 | write=true | min=-32768 | max=32767 */
7845
- x_axis: number;
7846
- /** ID=0x0013 | type=INT16 | write=true | min=-32768 | max=32767 */
7847
- y_axis: number;
7848
- /** ID=0x0014 | type=INT16 | write=true | min=-32768 | max=32767 */
7849
- z_axis: number;
7850
- };
7851
- commands: never;
7852
- commandResponses: never;
7853
- };
7854
- tradfriButton: {
7855
- attributes: never;
7856
- commands: {
7857
- /** ID=0x01 */
7858
- action1: {
7859
- /** type=UINT8 | max=255 */
7860
- data: number;
7861
- };
7862
- /** ID=0x02 */
7863
- action2: {
7864
- /** type=UINT8 | max=255 */
7865
- data: number;
7866
- };
7867
- /** ID=0x03 */
7868
- action3: {
7869
- /** type=UINT8 | max=255 */
7870
- data: number;
7871
- };
7872
- /** ID=0x04 */
7873
- action4: {
7874
- /** type=UINT8 | max=255 */
7875
- data: number;
7876
- };
7877
- /** ID=0x06 */
7878
- action6: {
7879
- /** type=UINT8 | max=255 */
7880
- data: number;
7881
- };
7882
- };
7883
- commandResponses: never;
7884
- };
7885
- schneiderSpecificPilotMode: {
7886
- attributes: {
7887
- /** ID=0x0031 | type=ENUM8 | write=true | max=255 */
7888
- pilotMode: number;
7889
- };
7890
- commands: never;
7891
- commandResponses: never;
7892
- };
7893
- manuSpecificSchneiderFanSwitchConfiguration: {
7894
- attributes: {
7895
- /** ID=0x0002 | type=UINT8 | write=true | max=255 */
7896
- ledIndication: number;
7897
- /** ID=0x0060 | type=UINT8 | write=true | max=255 */
7898
- ledOrientation: number;
7899
- };
7900
- commands: never;
7901
- commandResponses: never;
7902
- };
7903
- sprutVoc: {
7904
- attributes: {
7905
- /** ID=0x6600 | type=UINT16 | write=true | max=65535 */
7906
- voc: number;
7907
- };
7908
- commands: never;
7909
- commandResponses: never;
7910
- };
7911
- sprutNoise: {
7912
- attributes: {
7913
- /** ID=0x6600 | type=SINGLE_PREC | write=true */
7914
- noise: number;
7915
- /** ID=0x6601 | type=BITMAP8 | write=true */
7916
- noiseDetected: number;
7917
- /** ID=0x6602 | type=SINGLE_PREC | write=true */
7918
- noiseDetectLevel: number;
7919
- /** ID=0x6603 | type=UINT16 | write=true | max=65535 */
7920
- noiseAfterDetectDelay: number;
7921
- };
7922
- commands: never;
7923
- commandResponses: never;
7924
- };
7925
- sprutIrBlaster: {
7926
- attributes: never;
7927
- commands: {
7928
- /** ID=0x00 */
7929
- playStore: {
7930
- /** type=UINT8 | max=255 */
7931
- param: number;
7932
- };
7933
- /** ID=0x01 */
7934
- learnStart: {
7935
- /** type=UINT8 | max=255 */
7936
- value: number;
7937
- };
7938
- /** ID=0x02 */
7939
- learnStop: {
7940
- /** type=UINT8 | max=255 */
7941
- value: number;
7942
- };
7943
- /** ID=0x03 */
7944
- clearStore: Record<string, never>;
7945
- /** ID=0x04 */
7946
- playRam: Record<string, never>;
7947
- /** ID=0x05 */
7948
- learnRamStart: Record<string, never>;
7949
- /** ID=0x06 */
7950
- learnRamStop: Record<string, never>;
7951
- };
7952
- commandResponses: never;
7953
- };
7954
7746
  manuSpecificSiglisZigfred: {
7955
7747
  attributes: {
7956
7748
  /** ID=0x0008 | type=UINT32 | write=true | max=4294967295 */
@@ -8089,147 +7881,6 @@ export interface TClusters {
8089
7881
  };
8090
7882
  commandResponses: never;
8091
7883
  };
8092
- manuSpecificAssaDoorLock: {
8093
- attributes: {
8094
- /** ID=0x0012 | type=UINT8 | write=true | max=255 */
8095
- autoLockTime: number;
8096
- /** ID=0x0013 | type=UINT8 | write=true | max=255 */
8097
- wrongCodeAttempts: number;
8098
- /** ID=0x0014 | type=UINT8 | write=true | max=255 */
8099
- shutdownTime: number;
8100
- /** ID=0x0015 | type=UINT8 | write=true | max=255 */
8101
- batteryLevel: number;
8102
- /** ID=0x0016 | type=UINT8 | write=true | max=255 */
8103
- insideEscutcheonLED: number;
8104
- /** ID=0x0017 | type=UINT8 | write=true | max=255 */
8105
- volume: number;
8106
- /** ID=0x0018 | type=UINT8 | write=true | max=255 */
8107
- lockMode: number;
8108
- /** ID=0x0019 | type=UINT8 | write=true | max=255 */
8109
- language: number;
8110
- /** ID=0x001a | type=BOOLEAN | write=true */
8111
- allCodesLockout: number;
8112
- /** ID=0x001b | type=BOOLEAN | write=true */
8113
- oneTouchLocking: number;
8114
- /** ID=0x001c | type=BOOLEAN | write=true */
8115
- privacyButtonSetting: number;
8116
- /** ID=0x0021 | type=UINT16 | write=true | max=65535 */
8117
- numberLogRecordsSupported: number;
8118
- /** ID=0x0030 | type=UINT8 | write=true | max=255 */
8119
- numberPinsSupported: number;
8120
- /** ID=0x0040 | type=UINT8 | write=true | max=255 */
8121
- numberScheduleSlotsPerUser: number;
8122
- /** ID=0x0050 | type=UINT8 | write=true | max=255 */
8123
- alarmMask: number;
8124
- };
8125
- commands: {
8126
- /** ID=0x10 | response=0 */
8127
- getLockStatus: Record<string, never>;
8128
- /** ID=0x12 */
8129
- getBatteryLevel: Record<string, never>;
8130
- /** ID=0x13 */
8131
- setRFLockoutTime: Record<string, never>;
8132
- /** ID=0x30 */
8133
- userCodeSet: {
8134
- /** type=CHAR_STR */
8135
- payload: string;
8136
- };
8137
- /** ID=0x31 */
8138
- userCodeGet: {
8139
- /** type=CHAR_STR */
8140
- payload: string;
8141
- };
8142
- /** ID=0x32 */
8143
- userCodeClear: {
8144
- /** type=CHAR_STR */
8145
- payload: string;
8146
- };
8147
- /** ID=0x33 */
8148
- clearAllUserCodes: Record<string, never>;
8149
- /** ID=0x34 */
8150
- setUserCodeStatus: Record<string, never>;
8151
- /** ID=0x35 */
8152
- getUserCodeStatus: Record<string, never>;
8153
- /** ID=0x36 */
8154
- getLastUserIdEntered: Record<string, never>;
8155
- /** ID=0x37 */
8156
- userAdded: Record<string, never>;
8157
- /** ID=0x38 */
8158
- userDeleted: Record<string, never>;
8159
- /** ID=0x40 */
8160
- setScheduleSlot: {
8161
- /** type=CHAR_STR */
8162
- payload: string;
8163
- };
8164
- /** ID=0x41 */
8165
- getScheduleSlot: {
8166
- /** type=CHAR_STR */
8167
- payload: string;
8168
- };
8169
- /** ID=0x42 */
8170
- setScheduleSlotStatus: {
8171
- /** type=CHAR_STR */
8172
- payload: string;
8173
- };
8174
- /** ID=0x60 | response=1 */
8175
- reflash: {
8176
- /** type=CHAR_STR */
8177
- payload: string;
8178
- };
8179
- /** ID=0x61 | response=2 */
8180
- reflashData: {
8181
- /** type=CHAR_STR */
8182
- payload: string;
8183
- };
8184
- /** ID=0x62 | response=3 */
8185
- reflashStatus: {
8186
- /** type=CHAR_STR */
8187
- payload: string;
8188
- };
8189
- /** ID=0x90 */
8190
- getReflashLock: Record<string, never>;
8191
- /** ID=0xa0 */
8192
- getHistory: Record<string, never>;
8193
- /** ID=0xa1 */
8194
- getLogin: Record<string, never>;
8195
- /** ID=0xa2 */
8196
- getUser: Record<string, never>;
8197
- /** ID=0xa3 */
8198
- getUsers: Record<string, never>;
8199
- /** ID=0xb0 */
8200
- getMandatoryAttributes: Record<string, never>;
8201
- /** ID=0xb1 */
8202
- readAttribute: Record<string, never>;
8203
- /** ID=0xb2 */
8204
- writeAttribute: Record<string, never>;
8205
- /** ID=0xb3 */
8206
- configureReporting: Record<string, never>;
8207
- /** ID=0xb4 */
8208
- getBasicClusterAttributes: Record<string, never>;
8209
- };
8210
- commandResponses: {
8211
- /** ID=0x00 */
8212
- getLockStatusRsp: {
8213
- /** type=UINT8 | max=255 */
8214
- status: number;
8215
- };
8216
- /** ID=0x01 */
8217
- reflashRsp: {
8218
- /** type=UINT8 | max=255 */
8219
- status: number;
8220
- };
8221
- /** ID=0x02 */
8222
- reflashDataRsp: {
8223
- /** type=UINT8 | max=255 */
8224
- status: number;
8225
- };
8226
- /** ID=0x03 */
8227
- reflashStatusRsp: {
8228
- /** type=UINT8 | max=255 */
8229
- status: number;
8230
- };
8231
- };
8232
- };
8233
7884
  manuSpecificProfalux1: {
8234
7885
  attributes: {
8235
7886
  /** ID=0x0000 | type=UINT8 | write=true | max=255 */
@@ -416,31 +416,17 @@ export type ClusterName =
416
416
  | "haElectricalMeasurement"
417
417
  | "haDiagnostic"
418
418
  | "touchlink"
419
- | "manuSpecificClusterAduroSmart"
420
- | "manuSpecificOsram"
421
419
  | "manuSpecificPhilips"
422
420
  | "manuSpecificPhilips2"
423
421
  | "manuSpecificSinope"
424
- | "manuSpecificLegrandDevices"
425
- | "manuSpecificLegrandDevices2"
426
- | "manuSpecificLegrandDevices3"
427
422
  | "manuSpecificTuya"
428
423
  | "manuSpecificLumi"
429
424
  | "manuSpecificTuya2"
430
425
  | "manuSpecificTuya3"
431
- | "manuSpecificCentraliteHumidity"
432
426
  | "manuSpecificSmartThingsArrivalSensor"
433
- | "manuSpecificSamsungAccelerometer"
434
- | "tradfriButton"
435
- | "schneiderSpecificPilotMode"
436
- | "manuSpecificSchneiderFanSwitchConfiguration"
437
- | "sprutVoc"
438
- | "sprutNoise"
439
- | "sprutIrBlaster"
440
427
  | "manuSpecificSiglisZigfred"
441
428
  | "owonClearMetering"
442
429
  | "zosungIRTransmit"
443
430
  | "zosungIRControl"
444
- | "manuSpecificAssaDoorLock"
445
431
  | "manuSpecificProfalux1"
446
432
  | "manuSpecificAmazonWWAH";
@@ -70,18 +70,12 @@ const FOUNDATION_DISCOVER_RSP_IDS = [
70
70
 
71
71
  /** Runtime fast lookup */
72
72
  const ZCL_CLUSTERS_ID_TO_NAMES = (() => {
73
- const map = new Map<number, string[]>();
73
+ const map = new Map<number, ClusterName>();
74
74
 
75
75
  for (const clusterName in Clusters) {
76
76
  const cluster = Clusters[clusterName as ClusterName];
77
77
 
78
- const mapEntry = map.get(cluster.ID);
79
-
80
- if (mapEntry) {
81
- mapEntry.push(clusterName);
82
- } else {
83
- map.set(cluster.ID, [clusterName]);
84
- }
78
+ map.set(cluster.ID, clusterName as ClusterName);
85
79
  }
86
80
 
87
81
  return map;
@@ -106,11 +100,6 @@ function hasCustomClusters(customClusters: CustomClusters): boolean {
106
100
  return false;
107
101
  }
108
102
 
109
- /**
110
- * This can be greatly optimized when `clusters==ZCL` once these have been moved out of ZH (can just use fast lookup <id, name>):
111
- * - 'manuSpecificPhilips', 'manuSpecificAssaDoorLock'
112
- * - 'elkoSwitchConfigurationClusterServer', 'manuSpecificSchneiderLightSwitchConfiguration'
113
- */
114
103
  function findClusterNameByID(
115
104
  id: number,
116
105
  manufacturerCode: number | undefined,
@@ -122,27 +111,21 @@ function findClusterNameByID(
122
111
  let partialMatch = Boolean(manufacturerCode);
123
112
 
124
113
  if (zcl) {
125
- const zclNames = ZCL_CLUSTERS_ID_TO_NAMES.get(id);
114
+ const zclName = ZCL_CLUSTERS_ID_TO_NAMES.get(id);
126
115
 
127
- if (zclNames) {
128
- for (const zclName of zclNames) {
129
- const cluster = clusters[zclName as ClusterName];
116
+ if (zclName) {
117
+ const cluster = clusters[zclName];
130
118
 
131
- // priority on first match when matching only ID
132
- if (name === undefined) {
133
- name = zclName;
134
- }
135
-
136
- if (manufacturerCode && cluster.manufacturerCode === manufacturerCode) {
137
- name = zclName;
138
- partialMatch = false;
139
- break;
140
- }
119
+ // priority on first match when matching only ID
120
+ if (name === undefined) {
121
+ name = zclName;
122
+ }
141
123
 
142
- if (!cluster.manufacturerCode) {
143
- name = zclName;
144
- break;
145
- }
124
+ if (manufacturerCode && cluster.manufacturerCode === manufacturerCode) {
125
+ name = zclName;
126
+ partialMatch = false;
127
+ } else if (!cluster.manufacturerCode) {
128
+ name = zclName;
146
129
  }
147
130
  }
148
131
  } else {
@@ -631,7 +631,7 @@ describe("Controller", () => {
631
631
  expect(Group.byGroupID(2)).toBeUndefined();
632
632
 
633
633
  const group2 = controller.createGroup(2);
634
- group2.removeFromNetwork();
634
+ await group2.removeFromNetwork();
635
635
  // @ts-expect-error private
636
636
  expect(Group.groups.size).toStrictEqual(1);
637
637
  expect(Group.byGroupID(1)).toBeInstanceOf(Group);
@@ -5202,6 +5202,14 @@ describe("Controller", () => {
5202
5202
  const device = controller.getDeviceByIeeeAddr("0x129")!;
5203
5203
  const endpoint = device.getEndpoint(1)!;
5204
5204
  mocksendZclFrameToEndpoint.mockClear();
5205
+ device.addCustomCluster("manuSpecificAssaDoorLock", {
5206
+ ID: 0xfc00,
5207
+ attributes: {},
5208
+ commands: {
5209
+ getBatteryLevel: {ID: 0x12, parameters: []},
5210
+ },
5211
+ commandsResponse: {},
5212
+ });
5205
5213
  await endpoint.command("manuSpecificAssaDoorLock", "getBatteryLevel", {});
5206
5214
  expect(mocksendZclFrameToEndpoint.mock.calls[0][0]).toBe("0x129");
5207
5215
  expect(mocksendZclFrameToEndpoint.mock.calls[0][1]).toBe(129);
@@ -9664,7 +9672,7 @@ describe("Controller", () => {
9664
9672
  await controller.start();
9665
9673
  mockAdapterSendZdo.mockClear();
9666
9674
 
9667
- controller.sendRaw({
9675
+ await controller.sendRaw({
9668
9676
  profileId: Zdo.ZDO_PROFILE_ID,
9669
9677
  ieeeAddress: "0xf1f2f3f4f5f6f7f8",
9670
9678
  networkAddress: 129,
@@ -9681,7 +9689,7 @@ describe("Controller", () => {
9681
9689
  await controller.start();
9682
9690
  mocksendZclFrameInterPANToIeeeAddr.mockClear();
9683
9691
 
9684
- controller.sendRaw({
9692
+ await controller.sendRaw({
9685
9693
  interPan: true,
9686
9694
  ieeeAddress: "0xf1f2f3f4f5f6f7f8",
9687
9695
  networkAddress: 129,
@@ -9713,7 +9721,7 @@ describe("Controller", () => {
9713
9721
  await controller.start();
9714
9722
  mocksendZclFrameInterPANBroadcast.mockClear();
9715
9723
 
9716
- controller.sendRaw({
9724
+ await controller.sendRaw({
9717
9725
  interPan: true,
9718
9726
  zcl: {
9719
9727
  commandKey: "scanRequest",
@@ -9742,7 +9750,7 @@ describe("Controller", () => {
9742
9750
  await controller.start();
9743
9751
  mocksendZclFrameToGroup.mockClear();
9744
9752
 
9745
- controller.sendRaw({
9753
+ await controller.sendRaw({
9746
9754
  groupId: 123,
9747
9755
  clusterKey: "genScenes",
9748
9756
  srcEndpoint: 2,
@@ -9776,7 +9784,7 @@ describe("Controller", () => {
9776
9784
  await controller.start();
9777
9785
  mocksendZclFrameToAll.mockClear();
9778
9786
 
9779
- controller.sendRaw({
9787
+ await controller.sendRaw({
9780
9788
  networkAddress: 0xfff8,
9781
9789
  clusterKey: Zcl.Clusters.genIdentify.ID,
9782
9790
  srcEndpoint: 1,
@@ -9809,7 +9817,7 @@ describe("Controller", () => {
9809
9817
  await controller.start();
9810
9818
  mocksendZclFrameToEndpoint.mockClear();
9811
9819
 
9812
- controller.sendRaw({
9820
+ await controller.sendRaw({
9813
9821
  ieeeAddress: "0xf1f2f3f4f5f6f7f8",
9814
9822
  networkAddress: 129,
9815
9823
  clusterKey: Zcl.Clusters.genIdentify.ID,
@@ -9867,7 +9875,7 @@ describe("Controller", () => {
9867
9875
  },
9868
9876
  };
9869
9877
 
9870
- controller.sendRaw(
9878
+ await controller.sendRaw(
9871
9879
  {
9872
9880
  ieeeAddress: "0xf1f2f3f4f5f6f7f8",
9873
9881
  networkAddress: 129,