zigbee-clusters 2.5.1 → 2.7.2

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.
@@ -1,16 +1,628 @@
1
1
  'use strict';
2
2
 
3
3
  const Cluster = require('../Cluster');
4
+ const { ZCLDataTypes } = require('../zclTypes');
4
5
 
5
6
  const ATTRIBUTES = {
7
+ // Lock Information (0x0000 - 0x000F)
8
+ lockState: { // Mandatory
9
+ id: 0x0000,
10
+ type: ZCLDataTypes.enum8({
11
+ notFullyLocked: 0,
12
+ locked: 1,
13
+ unlocked: 2,
14
+ undefined: 255,
15
+ }),
16
+ },
17
+ lockType: { // Mandatory
18
+ id: 0x0001,
19
+ type: ZCLDataTypes.enum8({
20
+ deadBolt: 0,
21
+ magnetic: 1,
22
+ other: 2,
23
+ mortise: 3,
24
+ rim: 4,
25
+ latchBolt: 5,
26
+ cylindricalLock: 6,
27
+ tubularLock: 7,
28
+ interconnectedLock: 8,
29
+ deadLatch: 9,
30
+ doorFurniture: 10,
31
+ }),
32
+ },
33
+ actuatorEnabled: { id: 0x0002, type: ZCLDataTypes.bool }, // Mandatory
34
+ doorState: { // Optional
35
+ id: 0x0003,
36
+ type: ZCLDataTypes.enum8({
37
+ open: 0,
38
+ closed: 1,
39
+ errorJammed: 2,
40
+ errorForcedOpen: 3,
41
+ errorUnspecified: 4,
42
+ undefined: 255,
43
+ }),
44
+ },
45
+ doorOpenEvents: { id: 0x0004, type: ZCLDataTypes.uint32 }, // Optional
46
+ doorClosedEvents: { id: 0x0005, type: ZCLDataTypes.uint32 }, // Optional
47
+ openPeriod: { id: 0x0006, type: ZCLDataTypes.uint16 }, // Optional
48
+
49
+ // User/PIN/RFID Configuration (0x0010 - 0x001F)
50
+ numberOfLogRecordsSupported: { id: 0x0010, type: ZCLDataTypes.uint16 }, // 16, Optional
51
+ numberOfTotalUsersSupported: { id: 0x0011, type: ZCLDataTypes.uint16 }, // 17, Optional
52
+ numberOfPINUsersSupported: { id: 0x0012, type: ZCLDataTypes.uint16 }, // 18, Conditional¹
53
+ numberOfRFIDUsersSupported: { id: 0x0013, type: ZCLDataTypes.uint16 }, // 19, Conditional²
54
+ numberOfWeekDaySchedulesSupportedPerUser: { // Conditional³
55
+ id: 0x0014, // 20
56
+ type: ZCLDataTypes.uint8,
57
+ },
58
+ numberOfYearDaySchedulesSupportedPerUser: { // Conditional⁴
59
+ id: 0x0015, // 21
60
+ type: ZCLDataTypes.uint8,
61
+ },
62
+ numberOfHolidaySchedulesSupported: { id: 0x0016, type: ZCLDataTypes.uint8 }, // 22, Conditional⁵
63
+ maxPINCodeLength: { id: 0x0017, type: ZCLDataTypes.uint8 }, // 23, Conditional¹
64
+ minPINCodeLength: { id: 0x0018, type: ZCLDataTypes.uint8 }, // 24, Conditional¹
65
+ maxRFIDCodeLength: { id: 0x0019, type: ZCLDataTypes.uint8 }, // 25, Conditional²
66
+ minRFIDCodeLength: { id: 0x001A, type: ZCLDataTypes.uint8 }, // 26, Conditional²
67
+ // ¹ PIN credential support
68
+ // ² RFID credential support
69
+ // ³ Week Day Schedule support
70
+ // ⁴ Year Day Schedule support
71
+ // ⁵ Holiday Schedule support
72
+
73
+ // Operational Settings (0x0020 - 0x002F)
74
+ enableLogging: { id: 0x0020, type: ZCLDataTypes.bool }, // 32, Optional
75
+ language: { id: 0x0021, type: ZCLDataTypes.string }, // 33, Optional
76
+ ledSettings: { id: 0x0022, type: ZCLDataTypes.uint8 }, // 34, Optional
77
+ autoRelockTime: { id: 0x0023, type: ZCLDataTypes.uint32 }, // 35, Optional
78
+ soundVolume: { id: 0x0024, type: ZCLDataTypes.uint8 }, // 36, Optional
79
+ operatingMode: { // Optional
80
+ id: 0x0025, // 37
81
+ type: ZCLDataTypes.enum8({
82
+ normal: 0,
83
+ vacation: 1,
84
+ privacy: 2,
85
+ noRFLockOrUnlock: 3,
86
+ passage: 4,
87
+ }),
88
+ },
89
+ supportedOperatingModes: { // Mandatory
90
+ id: 0x0026, // 38
91
+ type: ZCLDataTypes.map16(
92
+ 'normal',
93
+ 'vacation',
94
+ 'privacy',
95
+ 'noRFLockOrUnlock',
96
+ 'passage',
97
+ ),
98
+ },
99
+ defaultConfigurationRegister: { // Optional
100
+ id: 0x0027, // 39
101
+ type: ZCLDataTypes.map16(
102
+ 'enableLocalProgramming',
103
+ 'keypadInterfaceDefaultAccess',
104
+ 'rfInterfaceDefaultAccess',
105
+ 'reserved3',
106
+ 'reserved4',
107
+ 'soundEnabled',
108
+ 'autoRelockTimeSet',
109
+ 'ledSettingsSet',
110
+ ),
111
+ },
112
+ enableLocalProgramming: { id: 0x0028, type: ZCLDataTypes.bool }, // 40, Optional
113
+ enableOneTouchLocking: { id: 0x0029, type: ZCLDataTypes.bool }, // 41, Optional
114
+ enableInsideStatusLED: { id: 0x002A, type: ZCLDataTypes.bool }, // 42, Optional
115
+ enablePrivacyModeButton: { id: 0x002B, type: ZCLDataTypes.bool }, // 43, Optional
116
+
117
+ // Security Settings (0x0030 - 0x003F)
118
+ wrongCodeEntryLimit: { id: 0x0030, type: ZCLDataTypes.uint8 }, // 48, Optional
119
+ userCodeTemporaryDisableTime: { id: 0x0031, type: ZCLDataTypes.uint8 }, // 49, Optional
120
+ sendPINOverTheAir: { id: 0x0032, type: ZCLDataTypes.bool }, // 50, Optional
121
+ requirePINforRFOperation: { id: 0x0033, type: ZCLDataTypes.bool }, // 51, Optional
122
+ securityLevel: { // Optional
123
+ id: 0x0034, // 52
124
+ type: ZCLDataTypes.enum8({
125
+ network: 0,
126
+ apsSecurity: 1,
127
+ }),
128
+ },
129
+
130
+ // Alarm and Event Masks (0x0040 - 0x004F)
131
+ alarmMask: { // Optional
132
+ id: 0x0040, // 64
133
+ type: ZCLDataTypes.map16(
134
+ 'deadboltJammed',
135
+ 'lockResetToFactoryDefaults',
136
+ 'reserved2',
137
+ 'rfModulePowerCycled',
138
+ 'tamperAlarmWrongCodeEntryLimit',
139
+ 'tamperAlarmFrontEscutcheonRemoved',
140
+ 'forcedDoorOpenUnderDoorLockedCondition',
141
+ ),
142
+ },
143
+ keypadOperationEventMask: { // Optional
144
+ id: 0x0041, // 65
145
+ type: ZCLDataTypes.map16(
146
+ 'unknownOrManufacturerSpecificKeypadOperationEvent',
147
+ 'lockSourceKeypad',
148
+ 'unlockSourceKeypad',
149
+ 'lockSourceKeypadErrorInvalidPIN',
150
+ 'lockSourceKeypadErrorInvalidSchedule',
151
+ 'unlockSourceKeypadErrorInvalidCode',
152
+ 'unlockSourceKeypadErrorInvalidSchedule',
153
+ 'nonAccessUserOperationEventSourceKeypad',
154
+ ),
155
+ },
156
+ rfOperationEventMask: { // Optional
157
+ id: 0x0042, // 66
158
+ type: ZCLDataTypes.map16(
159
+ 'unknownOrManufacturerSpecificKeypadOperationEvent',
160
+ 'lockSourceRF',
161
+ 'unlockSourceRF',
162
+ 'lockSourceRFErrorInvalidCode',
163
+ 'lockSourceRFErrorInvalidSchedule',
164
+ 'unlockSourceRFErrorInvalidCode',
165
+ 'unlockSourceRFErrorInvalidSchedule',
166
+ ),
167
+ },
168
+ manualOperationEventMask: { // Optional
169
+ id: 0x0043, // 67
170
+ type: ZCLDataTypes.map16(
171
+ 'unknownOrManufacturerSpecificManualOperationEvent',
172
+ 'thumbturnLock',
173
+ 'thumbturnUnlock',
174
+ 'oneTouchLock',
175
+ 'keyLock',
176
+ 'keyUnlock',
177
+ 'autoLock',
178
+ 'scheduleLock',
179
+ 'scheduleUnlock',
180
+ 'manualLock',
181
+ 'manualUnlock',
182
+ ),
183
+ },
184
+ rfidOperationEventMask: { // Optional
185
+ id: 0x0044, // 68
186
+ type: ZCLDataTypes.map16(
187
+ 'unknownOrManufacturerSpecificKeypadOperationEvent',
188
+ 'lockSourceRFID',
189
+ 'unlockSourceRFID',
190
+ 'lockSourceRFIDErrorInvalidRFIDID',
191
+ 'lockSourceRFIDErrorInvalidSchedule',
192
+ 'unlockSourceRFIDErrorInvalidRFIDID',
193
+ 'unlockSourceRFIDErrorInvalidSchedule',
194
+ ),
195
+ },
196
+ keypadProgrammingEventMask: { // Optional
197
+ id: 0x0045, // 69
198
+ type: ZCLDataTypes.map16(
199
+ 'unknownOrManufacturerSpecificKeypadProgrammingEvent',
200
+ 'masterCodeChanged',
201
+ 'pinCodeAdded',
202
+ 'pinCodeDeleted',
203
+ 'pinCodeChanged',
204
+ ),
205
+ },
206
+ rfProgrammingEventMask: { // Optional
207
+ id: 0x0046, // 70
208
+ type: ZCLDataTypes.map16(
209
+ 'unknownOrManufacturerSpecificRFProgrammingEvent',
210
+ 'reserved1',
211
+ 'pinCodeAdded',
212
+ 'pinCodeDeleted',
213
+ 'pinCodeChanged',
214
+ 'rfidCodeAdded',
215
+ 'rfidCodeDeleted',
216
+ ),
217
+ },
218
+ rfidProgrammingEventMask: { // Optional
219
+ id: 0x0047, // 71
220
+ type: ZCLDataTypes.map16(
221
+ 'unknownOrManufacturerSpecificRFIDProgrammingEvent',
222
+ 'rfidCodeAdded',
223
+ 'rfidCodeDeleted',
224
+ ),
225
+ },
6
226
  };
7
227
 
8
- const COMMANDS = {};
228
+ // Reusable enum definitions
229
+ const USER_STATUS_ENUM = ZCLDataTypes.enum8({
230
+ available: 0,
231
+ occupiedEnabled: 1,
232
+ occupiedDisabled: 3,
233
+ notSupported: 255,
234
+ });
235
+
236
+ const USER_TYPE_ENUM = ZCLDataTypes.enum8({
237
+ unrestricted: 0,
238
+ yearDayScheduleUser: 1,
239
+ weekDayScheduleUser: 2,
240
+ masterUser: 3,
241
+ nonAccessUser: 4,
242
+ notSupported: 255,
243
+ });
244
+
245
+ const OPERATING_MODE_ENUM = ZCLDataTypes.enum8({
246
+ normal: 0,
247
+ vacation: 1,
248
+ privacy: 2,
249
+ noRFLockOrUnlock: 3,
250
+ passage: 4,
251
+ });
252
+
253
+ const COMMANDS = {
254
+ // --- Client to Server Commands ---
255
+
256
+ // Lock/Unlock Commands
257
+ lockDoor: { // Mandatory
258
+ id: 0x0000,
259
+ args: {
260
+ pinCode: ZCLDataTypes.octstr,
261
+ },
262
+ response: {
263
+ id: 0x0000,
264
+ args: { status: ZCLDataTypes.uint8 },
265
+ },
266
+ },
267
+ unlockDoor: { // Mandatory
268
+ id: 0x0001,
269
+ args: {
270
+ pinCode: ZCLDataTypes.octstr,
271
+ },
272
+ response: {
273
+ id: 0x0001,
274
+ args: { status: ZCLDataTypes.uint8 },
275
+ },
276
+ },
277
+ toggle: { // Optional
278
+ id: 0x0002,
279
+ args: {
280
+ pinCode: ZCLDataTypes.octstr,
281
+ },
282
+ response: {
283
+ id: 0x0002,
284
+ args: { status: ZCLDataTypes.uint8 },
285
+ },
286
+ },
287
+ unlockWithTimeout: { // Optional
288
+ id: 0x0003,
289
+ args: {
290
+ timeout: ZCLDataTypes.uint16,
291
+ pinCode: ZCLDataTypes.octstr,
292
+ },
293
+ response: {
294
+ id: 0x0003,
295
+ args: { status: ZCLDataTypes.uint8 },
296
+ },
297
+ },
298
+
299
+ // Logging Commands
300
+ getLogRecord: { // Optional
301
+ id: 0x0004,
302
+ args: {
303
+ logIndex: ZCLDataTypes.uint16,
304
+ },
305
+ response: {
306
+ id: 0x0004,
307
+ args: {
308
+ logEntryId: ZCLDataTypes.uint16,
309
+ timestamp: ZCLDataTypes.uint32,
310
+ eventType: ZCLDataTypes.uint8,
311
+ source: ZCLDataTypes.uint8,
312
+ eventIdOrAlarmCode: ZCLDataTypes.uint8,
313
+ userId: ZCLDataTypes.uint16,
314
+ pin: ZCLDataTypes.octstr,
315
+ },
316
+ },
317
+ },
318
+
319
+ // PIN Code Commands
320
+ setPINCode: { // Optional
321
+ id: 0x0005,
322
+ args: {
323
+ userId: ZCLDataTypes.uint16,
324
+ userStatus: USER_STATUS_ENUM,
325
+ userType: USER_TYPE_ENUM,
326
+ pinCode: ZCLDataTypes.octstr,
327
+ },
328
+ response: {
329
+ id: 0x0005,
330
+ args: { status: ZCLDataTypes.uint8 },
331
+ },
332
+ },
333
+ getPINCode: { // Optional
334
+ id: 0x0006,
335
+ args: {
336
+ userId: ZCLDataTypes.uint16,
337
+ },
338
+ response: {
339
+ id: 0x0006,
340
+ args: {
341
+ userId: ZCLDataTypes.uint16,
342
+ userStatus: USER_STATUS_ENUM,
343
+ userType: USER_TYPE_ENUM,
344
+ pinCode: ZCLDataTypes.octstr,
345
+ },
346
+ },
347
+ },
348
+ clearPINCode: { // Optional
349
+ id: 0x0007,
350
+ args: {
351
+ userId: ZCLDataTypes.uint16,
352
+ },
353
+ response: {
354
+ id: 0x0007,
355
+ args: { status: ZCLDataTypes.uint8 },
356
+ },
357
+ },
358
+ clearAllPINCodes: { // Optional
359
+ id: 0x0008,
360
+ response: {
361
+ id: 0x0008,
362
+ args: { status: ZCLDataTypes.uint8 },
363
+ },
364
+ },
365
+ setUserStatus: { // Optional
366
+ id: 0x0009,
367
+ args: {
368
+ userId: ZCLDataTypes.uint16,
369
+ userStatus: USER_STATUS_ENUM,
370
+ },
371
+ response: {
372
+ id: 0x0009,
373
+ args: { status: ZCLDataTypes.uint8 },
374
+ },
375
+ },
376
+ getUserStatus: { // Optional
377
+ id: 0x000A, // 10
378
+ args: {
379
+ userId: ZCLDataTypes.uint16,
380
+ },
381
+ response: {
382
+ id: 0x000A, // 10
383
+ args: {
384
+ userId: ZCLDataTypes.uint16,
385
+ userStatus: USER_STATUS_ENUM,
386
+ },
387
+ },
388
+ },
389
+
390
+ // Schedule Commands
391
+ setWeekDaySchedule: { // Optional
392
+ id: 0x000B, // 11
393
+ args: {
394
+ scheduleId: ZCLDataTypes.uint8,
395
+ userId: ZCLDataTypes.uint16,
396
+ daysMask: ZCLDataTypes.map8('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'),
397
+ startHour: ZCLDataTypes.uint8,
398
+ startMinute: ZCLDataTypes.uint8,
399
+ endHour: ZCLDataTypes.uint8,
400
+ endMinute: ZCLDataTypes.uint8,
401
+ },
402
+ response: {
403
+ id: 0x000B, // 11
404
+ args: { status: ZCLDataTypes.uint8 },
405
+ },
406
+ },
407
+ getWeekDaySchedule: { // Optional
408
+ id: 0x000C, // 12
409
+ args: {
410
+ scheduleId: ZCLDataTypes.uint8,
411
+ userId: ZCLDataTypes.uint16,
412
+ },
413
+ response: {
414
+ id: 0x000C, // 12
415
+ args: {
416
+ scheduleId: ZCLDataTypes.uint8,
417
+ userId: ZCLDataTypes.uint16,
418
+ status: ZCLDataTypes.uint8,
419
+ daysMask: ZCLDataTypes.map8('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'),
420
+ startHour: ZCLDataTypes.uint8,
421
+ startMinute: ZCLDataTypes.uint8,
422
+ endHour: ZCLDataTypes.uint8,
423
+ endMinute: ZCLDataTypes.uint8,
424
+ },
425
+ },
426
+ },
427
+ clearWeekDaySchedule: { // Optional
428
+ id: 0x000D, // 13
429
+ args: {
430
+ scheduleId: ZCLDataTypes.uint8,
431
+ userId: ZCLDataTypes.uint16,
432
+ },
433
+ response: {
434
+ id: 0x000D, // 13
435
+ args: { status: ZCLDataTypes.uint8 },
436
+ },
437
+ },
438
+ setYearDaySchedule: { // Optional
439
+ id: 0x000E, // 14
440
+ args: {
441
+ scheduleId: ZCLDataTypes.uint8,
442
+ userId: ZCLDataTypes.uint16,
443
+ localStartTime: ZCLDataTypes.uint32,
444
+ localEndTime: ZCLDataTypes.uint32,
445
+ },
446
+ response: {
447
+ id: 0x000E, // 14
448
+ args: { status: ZCLDataTypes.uint8 },
449
+ },
450
+ },
451
+ getYearDaySchedule: { // Optional
452
+ id: 0x000F, // 15
453
+ args: {
454
+ scheduleId: ZCLDataTypes.uint8,
455
+ userId: ZCLDataTypes.uint16,
456
+ },
457
+ response: {
458
+ id: 0x000F, // 15
459
+ args: {
460
+ scheduleId: ZCLDataTypes.uint8,
461
+ userId: ZCLDataTypes.uint16,
462
+ status: ZCLDataTypes.uint8,
463
+ localStartTime: ZCLDataTypes.uint32,
464
+ localEndTime: ZCLDataTypes.uint32,
465
+ },
466
+ },
467
+ },
468
+ clearYearDaySchedule: { // Optional
469
+ id: 0x0010, // 16
470
+ args: {
471
+ scheduleId: ZCLDataTypes.uint8,
472
+ userId: ZCLDataTypes.uint16,
473
+ },
474
+ response: {
475
+ id: 0x0010, // 16
476
+ args: { status: ZCLDataTypes.uint8 },
477
+ },
478
+ },
479
+ setHolidaySchedule: { // Optional
480
+ id: 0x0011, // 17
481
+ args: {
482
+ holidayScheduleId: ZCLDataTypes.uint8,
483
+ localStartTime: ZCLDataTypes.uint32,
484
+ localEndTime: ZCLDataTypes.uint32,
485
+ operatingModeDuringHoliday: OPERATING_MODE_ENUM,
486
+ },
487
+ response: {
488
+ id: 0x0011, // 17
489
+ args: { status: ZCLDataTypes.uint8 },
490
+ },
491
+ },
492
+ getHolidaySchedule: { // Optional
493
+ id: 0x0012, // 18
494
+ args: {
495
+ holidayScheduleId: ZCLDataTypes.uint8,
496
+ },
497
+ response: {
498
+ id: 0x0012, // 18
499
+ args: {
500
+ holidayScheduleId: ZCLDataTypes.uint8,
501
+ status: ZCLDataTypes.uint8,
502
+ localStartTime: ZCLDataTypes.uint32,
503
+ localEndTime: ZCLDataTypes.uint32,
504
+ operatingMode: OPERATING_MODE_ENUM,
505
+ },
506
+ },
507
+ },
508
+ clearHolidaySchedule: { // Optional
509
+ id: 0x0013, // 19
510
+ args: {
511
+ holidayScheduleId: ZCLDataTypes.uint8,
512
+ },
513
+ response: {
514
+ id: 0x0013, // 19
515
+ args: { status: ZCLDataTypes.uint8 },
516
+ },
517
+ },
518
+
519
+ // User Type Commands
520
+ setUserType: { // Optional
521
+ id: 0x0014, // 20
522
+ args: {
523
+ userId: ZCLDataTypes.uint16,
524
+ userType: USER_TYPE_ENUM,
525
+ },
526
+ response: {
527
+ id: 0x0014, // 20
528
+ args: { status: ZCLDataTypes.uint8 },
529
+ },
530
+ },
531
+ getUserType: { // Optional
532
+ id: 0x0015, // 21
533
+ args: {
534
+ userId: ZCLDataTypes.uint16,
535
+ },
536
+ response: {
537
+ id: 0x0015, // 21
538
+ args: {
539
+ userId: ZCLDataTypes.uint16,
540
+ userType: USER_TYPE_ENUM,
541
+ },
542
+ },
543
+ },
544
+
545
+ // RFID Code Commands
546
+ setRFIDCode: { // Optional
547
+ id: 0x0016, // 22
548
+ args: {
549
+ userId: ZCLDataTypes.uint16,
550
+ userStatus: USER_STATUS_ENUM,
551
+ userType: USER_TYPE_ENUM,
552
+ rfidCode: ZCLDataTypes.octstr,
553
+ },
554
+ response: {
555
+ id: 0x0016, // 22
556
+ args: { status: ZCLDataTypes.uint8 },
557
+ },
558
+ },
559
+ getRFIDCode: { // Optional
560
+ id: 0x0017, // 23
561
+ args: {
562
+ userId: ZCLDataTypes.uint16,
563
+ },
564
+ response: {
565
+ id: 0x0017, // 23
566
+ args: {
567
+ userId: ZCLDataTypes.uint16,
568
+ userStatus: USER_STATUS_ENUM,
569
+ userType: USER_TYPE_ENUM,
570
+ rfidCode: ZCLDataTypes.octstr,
571
+ },
572
+ },
573
+ },
574
+ clearRFIDCode: { // Optional
575
+ id: 0x0018, // 24
576
+ args: {
577
+ userId: ZCLDataTypes.uint16,
578
+ },
579
+ response: {
580
+ id: 0x0018, // 24
581
+ args: { status: ZCLDataTypes.uint8 },
582
+ },
583
+ },
584
+ clearAllRFIDCodes: { // Optional
585
+ id: 0x0019, // 25
586
+ response: {
587
+ id: 0x0019, // 25
588
+ args: { status: ZCLDataTypes.uint8 },
589
+ },
590
+ },
591
+
592
+ // --- Server to Client Commands ---
593
+
594
+ operationEventNotification: { // Optional
595
+ id: 0x0020, // 32
596
+ direction: Cluster.DIRECTION_SERVER_TO_CLIENT,
597
+ args: {
598
+ operationEventSource: ZCLDataTypes.uint8,
599
+ operationEventCode: ZCLDataTypes.uint8,
600
+ userId: ZCLDataTypes.uint16,
601
+ pin: ZCLDataTypes.octstr,
602
+ zigBeeLocalTime: ZCLDataTypes.uint32,
603
+ data: ZCLDataTypes.octstr,
604
+ },
605
+ },
606
+ programmingEventNotification: { // Optional
607
+ id: 0x0021, // 33
608
+ direction: Cluster.DIRECTION_SERVER_TO_CLIENT,
609
+ args: {
610
+ programEventSource: ZCLDataTypes.uint8,
611
+ programEventCode: ZCLDataTypes.uint8,
612
+ userId: ZCLDataTypes.uint16,
613
+ pin: ZCLDataTypes.octstr,
614
+ userType: USER_TYPE_ENUM,
615
+ userStatus: USER_STATUS_ENUM,
616
+ zigBeeLocalTime: ZCLDataTypes.uint32,
617
+ data: ZCLDataTypes.octstr,
618
+ },
619
+ },
620
+ };
9
621
 
10
622
  class DoorLockCluster extends Cluster {
11
623
 
12
624
  static get ID() {
13
- return 257;
625
+ return 0x0101; // 257
14
626
  }
15
627
 
16
628
  static get NAME() {