zigbee-herdsman-converters 24.11.0 → 24.13.0

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 (40) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/devices/bosch.d.ts.map +1 -1
  3. package/dist/devices/bosch.js +1 -0
  4. package/dist/devices/bosch.js.map +1 -1
  5. package/dist/devices/frient.d.ts.map +1 -1
  6. package/dist/devices/frient.js +7 -0
  7. package/dist/devices/frient.js.map +1 -1
  8. package/dist/devices/index.d.ts.map +1 -1
  9. package/dist/devices/index.js +2 -0
  10. package/dist/devices/index.js.map +1 -1
  11. package/dist/devices/inovelli.d.ts.map +1 -1
  12. package/dist/devices/inovelli.js +54 -7
  13. package/dist/devices/inovelli.js.map +1 -1
  14. package/dist/devices/moes.d.ts.map +1 -1
  15. package/dist/devices/moes.js +572 -2
  16. package/dist/devices/moes.js.map +1 -1
  17. package/dist/devices/philips.d.ts.map +1 -1
  18. package/dist/devices/philips.js +16 -2
  19. package/dist/devices/philips.js.map +1 -1
  20. package/dist/devices/shelly.js +1 -1
  21. package/dist/devices/shelly.js.map +1 -1
  22. package/dist/devices/simpla_home.d.ts +7 -0
  23. package/dist/devices/simpla_home.d.ts.map +1 -0
  24. package/dist/devices/simpla_home.js +114 -0
  25. package/dist/devices/simpla_home.js.map +1 -0
  26. package/dist/devices/stello.d.ts.map +1 -1
  27. package/dist/devices/stello.js +8 -0
  28. package/dist/devices/stello.js.map +1 -1
  29. package/dist/devices/tuya.d.ts.map +1 -1
  30. package/dist/devices/tuya.js +78 -15
  31. package/dist/devices/tuya.js.map +1 -1
  32. package/dist/devices/ysrsai.js +1 -1
  33. package/dist/devices/ysrsai.js.map +1 -1
  34. package/dist/lib/legacy.d.ts.map +1 -1
  35. package/dist/lib/legacy.js +1 -7
  36. package/dist/lib/legacy.js.map +1 -1
  37. package/dist/lib/tuya.js +1 -1
  38. package/dist/lib/tuya.js.map +1 -1
  39. package/dist/models-index.json +1 -1
  40. package/package.json +4 -4
@@ -127,23 +127,392 @@ exports.definitions = [
127
127
  },
128
128
  },
129
129
  {
130
- fingerprint: tuya.fingerprint("TS0601", ["_TZE200_uenof8jd", "_TZE200_tzyy0rtq"]),
131
- model: "SFL02-Z",
130
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE284_a1ovdobn"]),
131
+ model: "ZS-D1",
132
+ vendor: "MOES",
133
+ description: "Intelligent dimming switch - 1 gang",
134
+ fromZigbee: [tuya.fz.datapoints],
135
+ toZigbee: [tuya.tz.datapoints],
136
+ onEvent: tuya.onEventSetTime,
137
+ configure: tuya.configureMagicPacket,
138
+ exposes: (device, options) => {
139
+ return [
140
+ e.switch().withEndpoint("l1"),
141
+ e.numeric("brightness_1", ea.STATE_SET).withValueMin(10).withValueMax(1000).withValueStep(1).withDescription("Channel 1 brightness"),
142
+ e
143
+ .numeric("brightness_min_1", ea.STATE_SET)
144
+ .withValueMin(10)
145
+ .withValueMax(1000)
146
+ .withValueStep(1)
147
+ .withDescription("Channel 1 minimum brightness"),
148
+ e
149
+ .numeric("brightness_max_1", ea.STATE_SET)
150
+ .withValueMin(10)
151
+ .withValueMax(1000)
152
+ .withValueStep(1)
153
+ .withDescription("Channel 1 maximum brightness"),
154
+ e
155
+ .numeric("countdown_1", ea.STATE_SET)
156
+ .withValueMin(0)
157
+ .withValueMax(86400)
158
+ .withValueStep(1)
159
+ .withUnit("s")
160
+ .withDescription("Channel 1 countdown"),
161
+ e.enum("relay_status", ea.STATE_SET, ["off", "on", "memory"]).withDescription("Relay mode after power restoration"),
162
+ e.enum("light_mode", ea.STATE_SET, ["none", "relay", "pos"]).withDescription("Indicator light mode"),
163
+ e.binary("switch_backlight", ea.STATE_SET, "ON", "OFF").withDescription("Backlight switch"),
164
+ ];
165
+ },
166
+ meta: {
167
+ multiEndpoint: true,
168
+ tuyaDatapoints: [
169
+ [1, "state_l1", tuya.valueConverter.onOff],
170
+ [2, "brightness_1", tuya.valueConverter.raw],
171
+ [3, "brightness_min_1", tuya.valueConverter.raw],
172
+ [5, "brightness_max_1", tuya.valueConverter.raw],
173
+ [6, "countdown_1", tuya.valueConverter.raw],
174
+ [
175
+ 14,
176
+ "relay_status",
177
+ tuya.valueConverterBasic.lookup({
178
+ off: tuya.enum(0),
179
+ on: tuya.enum(1),
180
+ memory: tuya.enum(2),
181
+ }),
182
+ ],
183
+ [
184
+ 21,
185
+ "light_mode",
186
+ tuya.valueConverterBasic.lookup({
187
+ none: tuya.enum(0),
188
+ relay: tuya.enum(1),
189
+ pos: tuya.enum(2),
190
+ }),
191
+ ],
192
+ [26, "switch_backlight", tuya.valueConverter.onOff],
193
+ ],
194
+ },
195
+ endpoint: (device) => {
196
+ return {
197
+ l1: 1,
198
+ };
199
+ },
200
+ },
201
+ {
202
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE200_rlqamjhp"]),
203
+ model: "ZS-D2",
204
+ vendor: "Moes",
205
+ description: "Intelligent dimming switch - 2 gang",
206
+ fromZigbee: [tuya.fz.datapoints],
207
+ toZigbee: [tuya.tz.datapoints],
208
+ onEvent: tuya.onEventSetTime,
209
+ configure: tuya.configureMagicPacket,
210
+ exposes: (device, options) => {
211
+ return [
212
+ e.switch().withEndpoint("l1"),
213
+ e.numeric("brightness_1", ea.STATE_SET).withValueMin(10).withValueMax(1000).withValueStep(1).withDescription("Channel 1 brightness"),
214
+ e
215
+ .numeric("brightness_min_1", ea.STATE_SET)
216
+ .withValueMin(10)
217
+ .withValueMax(1000)
218
+ .withValueStep(1)
219
+ .withDescription("Channel 1 minimum brightness"),
220
+ e
221
+ .numeric("brightness_max_1", ea.STATE_SET)
222
+ .withValueMin(10)
223
+ .withValueMax(1000)
224
+ .withValueStep(1)
225
+ .withDescription("Channel 1 maximum brightness"),
226
+ e
227
+ .numeric("countdown_1", ea.STATE_SET)
228
+ .withValueMin(0)
229
+ .withValueMax(86400)
230
+ .withValueStep(1)
231
+ .withUnit("s")
232
+ .withDescription("Channel 1 countdown"),
233
+ e.switch().withEndpoint("l2"),
234
+ e.numeric("brightness_2", ea.STATE_SET).withValueMin(10).withValueMax(1000).withValueStep(1).withDescription("Channel 2 brightness"),
235
+ e
236
+ .numeric("brightness_min_2", ea.STATE_SET)
237
+ .withValueMin(10)
238
+ .withValueMax(1000)
239
+ .withValueStep(1)
240
+ .withDescription("Channel 2 minimum brightness"),
241
+ e
242
+ .numeric("brightness_max_2", ea.STATE_SET)
243
+ .withValueMin(10)
244
+ .withValueMax(1000)
245
+ .withValueStep(1)
246
+ .withDescription("Channel 2 maximum brightness"),
247
+ e
248
+ .numeric("countdown_2", ea.STATE_SET)
249
+ .withValueMin(0)
250
+ .withValueMax(86400)
251
+ .withValueStep(1)
252
+ .withUnit("s")
253
+ .withDescription("Channel 2 countdown"),
254
+ e.enum("relay_status", ea.STATE_SET, ["off", "on", "memory"]).withDescription("Relay mode after power restoration"),
255
+ e.enum("light_mode", ea.STATE_SET, ["none", "relay", "pos"]).withDescription("Indicator light mode"),
256
+ e.binary("switch_backlight", ea.STATE_SET, "ON", "OFF").withDescription("Backlight switch"),
257
+ ];
258
+ },
259
+ meta: {
260
+ multiEndpoint: true,
261
+ tuyaDatapoints: [
262
+ [1, "state_l1", tuya.valueConverter.onOff],
263
+ [2, "brightness_1", tuya.valueConverter.raw],
264
+ [3, "brightness_min_1", tuya.valueConverter.raw],
265
+ [5, "brightness_max_1", tuya.valueConverter.raw],
266
+ [6, "countdown_1", tuya.valueConverter.raw],
267
+ [7, "state_l2", tuya.valueConverter.onOff],
268
+ [8, "brightness_2", tuya.valueConverter.raw],
269
+ [9, "brightness_min_2", tuya.valueConverter.raw],
270
+ [11, "brightness_max_2", tuya.valueConverter.raw],
271
+ [12, "countdown_2", tuya.valueConverter.raw],
272
+ [
273
+ 14,
274
+ "relay_status",
275
+ tuya.valueConverterBasic.lookup({
276
+ off: tuya.enum(0),
277
+ on: tuya.enum(1),
278
+ memory: tuya.enum(2),
279
+ }),
280
+ ],
281
+ [
282
+ 21,
283
+ "light_mode",
284
+ tuya.valueConverterBasic.lookup({
285
+ none: tuya.enum(0),
286
+ relay: tuya.enum(1),
287
+ pos: tuya.enum(2),
288
+ }),
289
+ ],
290
+ [26, "switch_backlight", tuya.valueConverter.onOff],
291
+ ],
292
+ },
293
+ endpoint: (device) => {
294
+ return {
295
+ l1: 1,
296
+ l2: 1,
297
+ };
298
+ },
299
+ },
300
+ {
301
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE284_vizxbhco"]),
302
+ model: "ZS-D3",
303
+ vendor: "Moes",
304
+ description: "Intelligent dimming switch - 3 gang",
305
+ fromZigbee: [tuya.fz.datapoints],
306
+ toZigbee: [tuya.tz.datapoints],
307
+ onEvent: tuya.onEventSetTime,
308
+ configure: tuya.configureMagicPacket,
309
+ exposes: (device, options) => {
310
+ return [
311
+ e.switch().withEndpoint("l1"),
312
+ e.switch().withEndpoint("l2"),
313
+ e.switch().withEndpoint("l3"),
314
+ e.numeric("brightness_1", ea.STATE_SET).withValueMin(10).withValueMax(1000).withValueStep(1).withDescription("Channel 1 brightness"),
315
+ e
316
+ .numeric("brightness_min_1", ea.STATE_SET)
317
+ .withValueMin(10)
318
+ .withValueMax(1000)
319
+ .withValueStep(1)
320
+ .withDescription("Channel 1 minimum brightness"),
321
+ e
322
+ .numeric("brightness_max_1", ea.STATE_SET)
323
+ .withValueMin(10)
324
+ .withValueMax(1000)
325
+ .withValueStep(1)
326
+ .withDescription("Channel 1 maximum brightness"),
327
+ e
328
+ .numeric("countdown_1", ea.STATE_SET)
329
+ .withValueMin(0)
330
+ .withValueMax(86400)
331
+ .withValueStep(1)
332
+ .withUnit("s")
333
+ .withDescription("Channel 1 countdown"),
334
+ e.numeric("brightness_2", ea.STATE_SET).withValueMin(10).withValueMax(1000).withValueStep(1).withDescription("Channel 2 brightness"),
335
+ e
336
+ .numeric("brightness_min_2", ea.STATE_SET)
337
+ .withValueMin(10)
338
+ .withValueMax(1000)
339
+ .withValueStep(1)
340
+ .withDescription("Channel 2 minimum brightness"),
341
+ e
342
+ .numeric("brightness_max_2", ea.STATE_SET)
343
+ .withValueMin(10)
344
+ .withValueMax(1000)
345
+ .withValueStep(1)
346
+ .withDescription("Channel 2 maximum brightness"),
347
+ e
348
+ .numeric("countdown_2", ea.STATE_SET)
349
+ .withValueMin(0)
350
+ .withValueMax(86400)
351
+ .withValueStep(1)
352
+ .withUnit("s")
353
+ .withDescription("Channel 2 countdown"),
354
+ e.enum("relay_status", ea.STATE_SET, ["off", "on", "memory"]).withDescription("Relay mode after power restoration"),
355
+ e.numeric("brightness_3", ea.STATE_SET).withValueMin(10).withValueMax(1000).withValueStep(1).withDescription("Channel 3 brightness"),
356
+ e
357
+ .numeric("brightness_min_3", ea.STATE_SET)
358
+ .withValueMin(10)
359
+ .withValueMax(1000)
360
+ .withValueStep(1)
361
+ .withDescription("Channel 3 minimum brightness"),
362
+ e
363
+ .numeric("brightness_max_3", ea.STATE_SET)
364
+ .withValueMin(10)
365
+ .withValueMax(1000)
366
+ .withValueStep(1)
367
+ .withDescription("Channel 3 maximum brightness"),
368
+ e
369
+ .numeric("countdown_3", ea.STATE_SET)
370
+ .withValueMin(0)
371
+ .withValueMax(86400)
372
+ .withValueStep(1)
373
+ .withUnit("s")
374
+ .withDescription("Channel 3 countdown"),
375
+ e.enum("light_mode", ea.STATE_SET, ["none", "relay", "pos"]).withDescription("Indicator light mode"),
376
+ e.binary("switch_backlight", ea.STATE_SET, "ON", "OFF").withDescription("Backlight switch"),
377
+ ];
378
+ },
379
+ meta: {
380
+ multiEndpoint: true,
381
+ tuyaDatapoints: [
382
+ [1, "state_l1", tuya.valueConverter.onOff],
383
+ [2, "brightness_1", tuya.valueConverter.raw],
384
+ [3, "brightness_min_1", tuya.valueConverter.raw],
385
+ [5, "brightness_max_1", tuya.valueConverter.raw],
386
+ [6, "countdown_1", tuya.valueConverter.raw],
387
+ [7, "state_l2", tuya.valueConverter.onOff],
388
+ [8, "brightness_2", tuya.valueConverter.raw],
389
+ [9, "brightness_min_2", tuya.valueConverter.raw],
390
+ [11, "brightness_max_2", tuya.valueConverter.raw],
391
+ [12, "countdown_2", tuya.valueConverter.raw],
392
+ [
393
+ 14,
394
+ "relay_status",
395
+ tuya.valueConverterBasic.lookup({
396
+ off: tuya.enum(0),
397
+ on: tuya.enum(1),
398
+ memory: tuya.enum(2),
399
+ }),
400
+ ],
401
+ [15, "state_l3", tuya.valueConverter.onOff],
402
+ [16, "brightness_3", tuya.valueConverter.raw],
403
+ [17, "brightness_min_3", tuya.valueConverter.raw],
404
+ [19, "brightness_max_3", tuya.valueConverter.raw],
405
+ [20, "countdown_3", tuya.valueConverter.raw],
406
+ [
407
+ 21,
408
+ "light_mode",
409
+ tuya.valueConverterBasic.lookup({
410
+ none: tuya.enum(0),
411
+ relay: tuya.enum(1),
412
+ pos: tuya.enum(2),
413
+ }),
414
+ ],
415
+ [26, "switch_backlight", tuya.valueConverter.onOff],
416
+ ],
417
+ },
418
+ endpoint: (device) => {
419
+ return {
420
+ l1: 1,
421
+ l2: 1,
422
+ l3: 1,
423
+ };
424
+ },
425
+ },
426
+ {
427
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE200_stvgmdjz", "_TZE200_ydkqbmpt", "_TZE200_z3u99qxt"]),
428
+ model: "SFL02-Z-1",
429
+ vendor: "MOES",
430
+ description: "Star feather smart switch 1 gang",
431
+ fromZigbee: [tuya.fz.datapoints],
432
+ toZigbee: [tuya.tz.datapoints],
433
+ configure: tuya.configureMagicPacket,
434
+ whiteLabel: [tuya.whitelabel("Nova Digital", "TPZ-1", "Topazio smart switch 1 gang", ["_TZE200_ydkqbmpt"])],
435
+ exposes: [
436
+ tuya.exposes.backlightModeOffOn().withAccess(ea.STATE_SET),
437
+ e.switch().withEndpoint("l1").setAccess("state", ea.STATE_SET),
438
+ tuya.exposes.countdown().withEndpoint("l1"),
439
+ e
440
+ .numeric("momentary_1", ea.STATE_SET)
441
+ .withValueMin(0)
442
+ .withValueMax(3600)
443
+ .withValueStep(1)
444
+ .withUnit("s")
445
+ .withDescription("Momentary switch timer (0=disable)"),
446
+ e.power_on_behavior().withAccess(ea.STATE_SET),
447
+ exposes.enum("mode", ea.STATE_SET, ["switch_1", "scene_1"]).withEndpoint("l1").withDescription("Switch1 mode"),
448
+ e.action(["scene_1"]),
449
+ exposes.enum("induction_mode", ea.ALL, ["ON", "OFF"]).withDescription("Induction mode"),
450
+ exposes.enum("vibration_mode", ea.ALL, ["Gear 0", "Gear 1", "Gear 2", "Gear 3"]).withDescription("Vibration"),
451
+ ],
452
+ onEvent: tuya.onEventSetTime,
453
+ endpoint: (device) => {
454
+ return {
455
+ l1: 1,
456
+ state: 1,
457
+ backlight: 1,
458
+ induction: 1,
459
+ };
460
+ },
461
+ meta: {
462
+ multiEndpoint: true,
463
+ tuyaDatapoints: [
464
+ [1, "action", tuya.valueConverter.static("scene_1")],
465
+ [18, "mode_l1", tuya.valueConverterBasic.lookup({ switch_1: tuya.enum(0), scene_1: tuya.enum(1) })],
466
+ [24, "state_l1", tuya.valueConverter.onOff],
467
+ [30, "countdown_l1", tuya.valueConverter.countdown],
468
+ [36, "backlight_mode", tuya.valueConverter.onOff],
469
+ [37, "indicator_mode", tuya.valueConverterBasic.lookup({ none: 0, relay: 1, pos: 2 })],
470
+ [38, "power_on_behavior", tuya.valueConverter.powerOnBehaviorEnum],
471
+ [103, "induction_mode", tuya.valueConverter.onOff],
472
+ [
473
+ 104,
474
+ "vibration_mode",
475
+ tuya.valueConverterBasic.lookup({ "Gear 0": tuya.enum(0), "Gear 1": tuya.enum(1), "Gear 2": tuya.enum(2), "Gear 3": tuya.enum(3) }),
476
+ ],
477
+ [105, "momentary_1", tuya.valueConverter.countdown],
478
+ ],
479
+ },
480
+ },
481
+ {
482
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE200_uenof8jd", "_TZE200_tzyy0rtq", "_TZE200_hktk6hze"]),
483
+ model: "SFL02-Z-2",
132
484
  vendor: "Moes",
133
485
  description: "Star feather smart switch 2 gangs",
134
486
  fromZigbee: [tuya.fz.datapoints],
135
487
  toZigbee: [tuya.tz.datapoints],
136
488
  configure: tuya.configureMagicPacket,
489
+ whiteLabel: [tuya.whitelabel("Nova Digital", "TPZ-2", "Topazio smart switch 2 gangs", ["_TZE200_hktk6hze"])],
137
490
  exposes: [
138
491
  tuya.exposes.backlightModeOffOn().withAccess(ea.STATE_SET),
139
492
  e.switch().withEndpoint("l1").setAccess("state", ea.STATE_SET),
140
493
  e.switch().withEndpoint("l2").setAccess("state", ea.STATE_SET),
141
494
  tuya.exposes.countdown().withEndpoint("l1"),
142
495
  tuya.exposes.countdown().withEndpoint("l2"),
496
+ e
497
+ .numeric("momentary_1", ea.STATE_SET)
498
+ .withValueMin(0)
499
+ .withValueMax(3600)
500
+ .withValueStep(1)
501
+ .withUnit("s")
502
+ .withDescription("Momentary switch timer (0=disable)"),
503
+ e
504
+ .numeric("momentary_2", ea.STATE_SET)
505
+ .withValueMin(0)
506
+ .withValueMax(3600)
507
+ .withValueStep(1)
508
+ .withUnit("s")
509
+ .withDescription("Momentary switch timer (0=disable)"),
143
510
  e.power_on_behavior().withAccess(ea.STATE_SET),
144
511
  exposes.enum("mode", ea.STATE_SET, ["switch_1", "scene_1"]).withEndpoint("l1").withDescription("Switch1 mode"),
145
512
  exposes.enum("mode", ea.STATE_SET, ["switch_2", "scene_2"]).withEndpoint("l2").withDescription("Switch2 mode"),
146
513
  e.action(["scene_1", "scene_2"]),
514
+ exposes.enum("induction_mode", ea.ALL, ["ON", "OFF"]).withDescription("Induction mode"),
515
+ exposes.enum("vibration_mode", ea.ALL, ["Gear 0", "Gear 1", "Gear 2", "Gear 3"]).withDescription("Vibration"),
147
516
  ],
148
517
  onEvent: tuya.onEventSetTime,
149
518
  endpoint: (device) => {
@@ -154,15 +523,216 @@ exports.definitions = [
154
523
  tuyaDatapoints: [
155
524
  [1, "action", tuya.valueConverter.static("scene_1")],
156
525
  [2, "action", tuya.valueConverter.static("scene_2")],
526
+ [18, "mode_l1", tuya.valueConverterBasic.lookup({ switch_1: tuya.enum(0), scene_1: tuya.enum(1) })],
527
+ [19, "mode_l2", tuya.valueConverterBasic.lookup({ switch_2: tuya.enum(0), scene_2: tuya.enum(1) })],
157
528
  [24, "state_l1", tuya.valueConverter.onOff],
158
529
  [25, "state_l2", tuya.valueConverter.onOff],
159
530
  [30, "countdown_l1", tuya.valueConverter.countdown],
160
531
  [31, "countdown_l2", tuya.valueConverter.countdown],
161
532
  [37, "indicator_mode", tuya.valueConverterBasic.lookup({ none: 0, relay: 1, pos: 2 })],
533
+ [36, "backlight_mode", tuya.valueConverter.onOff],
162
534
  [38, "power_on_behavior", tuya.valueConverter.powerOnBehaviorEnum],
535
+ [103, "induction_mode", tuya.valueConverter.onOff],
536
+ [
537
+ 104,
538
+ "vibration_mode",
539
+ tuya.valueConverterBasic.lookup({ "Gear 0": tuya.enum(0), "Gear 1": tuya.enum(1), "Gear 2": tuya.enum(2), "Gear 3": tuya.enum(3) }),
540
+ ],
541
+ [105, "momentary_1", tuya.valueConverter.countdown],
542
+ [106, "momentary_2", tuya.valueConverter.countdown],
543
+ ],
544
+ },
545
+ },
546
+ {
547
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE200_rd8cdssd", "_TZE200_wv9ukqca", "_TZE200_zo0cfekv"]),
548
+ model: "SFL02-Z-3",
549
+ vendor: "MOES",
550
+ description: "Star feather smart switch 3 gangs",
551
+ fromZigbee: [tuya.fz.datapoints],
552
+ toZigbee: [tuya.tz.datapoints],
553
+ configure: tuya.configureMagicPacket,
554
+ whiteLabel: [tuya.whitelabel("Nova Digital", "TPZ-3", "Topazio smart switch 3 gangs", ["_TZE200_rd8cdssd"])],
555
+ exposes: [
556
+ e.switch().withEndpoint("l1").setAccess("state", ea.STATE_SET),
557
+ e.switch().withEndpoint("l2").setAccess("state", ea.STATE_SET),
558
+ e.switch().withEndpoint("l3").setAccess("state", ea.STATE_SET),
559
+ tuya.exposes.countdown().withEndpoint("l1"),
560
+ tuya.exposes.countdown().withEndpoint("l2"),
561
+ tuya.exposes.countdown().withEndpoint("l3"),
562
+ e
563
+ .numeric("momentary_1", ea.STATE_SET)
564
+ .withValueMin(0)
565
+ .withValueMax(3600)
566
+ .withValueStep(1)
567
+ .withUnit("s")
568
+ .withDescription("Momentary switch timer (0=disable)"),
569
+ e
570
+ .numeric("momentary_2", ea.STATE_SET)
571
+ .withValueMin(0)
572
+ .withValueMax(3600)
573
+ .withValueStep(1)
574
+ .withUnit("s")
575
+ .withDescription("Momentary switch timer (0=disable)"),
576
+ e
577
+ .numeric("momentary_3", ea.STATE_SET)
578
+ .withValueMin(0)
579
+ .withValueMax(3600)
580
+ .withValueStep(1)
581
+ .withUnit("s")
582
+ .withDescription("Momentary switch timer (0=disable)"),
583
+ exposes.enum("mode", ea.STATE_SET, ["switch_1", "scene_1"]).withEndpoint("l1").withDescription("Switch1 mode"),
584
+ exposes.enum("mode", ea.STATE_SET, ["switch_2", "scene_2"]).withEndpoint("l2").withDescription("Switch2 mode"),
585
+ exposes.enum("mode", ea.STATE_SET, ["switch_3", "scene_3"]).withEndpoint("l3").withDescription("Switch3 mode"),
586
+ e.action(["scene_1", "scene_2", "scene_3"]),
587
+ tuya.exposes.backlightModeOffOn().withAccess(ea.STATE_SET),
588
+ e.power_on_behavior().withAccess(ea.STATE_SET),
589
+ exposes.enum("indicator_status", ea.ALL, ["Off", "Relay", "Invert"]).withDescription("Indicator status"),
590
+ exposes.enum("induction_mode", ea.ALL, ["ON", "OFF"]).withDescription("Induction mode"),
591
+ exposes.enum("vibration_mode", ea.ALL, ["Gear 0", "Gear 1", "Gear 2", "Gear 3"]).withDescription("Vibration"),
592
+ ],
593
+ onEvent: tuya.onEventSetTime,
594
+ endpoint: (device) => {
595
+ return {
596
+ l1: 1,
597
+ l2: 1,
598
+ l3: 1,
599
+ l4: 1,
600
+ state: 1,
601
+ backlight: 1,
602
+ induction: 1,
603
+ };
604
+ },
605
+ meta: {
606
+ multiEndpoint: true,
607
+ tuyaDatapoints: [
608
+ [1, "action", tuya.valueConverter.static("scene_1")],
609
+ [2, "action", tuya.valueConverter.static("scene_2")],
610
+ [3, "action", tuya.valueConverter.static("scene_3")],
611
+ [18, "mode_l1", tuya.valueConverterBasic.lookup({ switch_1: tuya.enum(0), scene_1: tuya.enum(1) })],
612
+ [19, "mode_l2", tuya.valueConverterBasic.lookup({ switch_2: tuya.enum(0), scene_2: tuya.enum(1) })],
613
+ [20, "mode_l3", tuya.valueConverterBasic.lookup({ switch_3: tuya.enum(0), scene_3: tuya.enum(1) })],
614
+ [24, "state_l1", tuya.valueConverter.onOff],
615
+ [25, "state_l2", tuya.valueConverter.onOff],
616
+ [26, "state_l3", tuya.valueConverter.onOff],
617
+ [30, "countdown_l1", tuya.valueConverter.countdown],
618
+ [31, "countdown_l2", tuya.valueConverter.countdown],
619
+ [32, "countdown_l3", tuya.valueConverter.countdown],
163
620
  [36, "backlight_mode", tuya.valueConverter.onOff],
621
+ [37, "indicator_status", tuya.valueConverterBasic.lookup({ off: tuya.enum(0), Relay: tuya.enum(1), Invert: tuya.enum(2) })],
622
+ [38, "power_on_behavior", tuya.valueConverter.powerOnBehaviorEnum],
623
+ [103, "induction_mode", tuya.valueConverter.onOff],
624
+ [
625
+ 104,
626
+ "vibration_mode",
627
+ tuya.valueConverterBasic.lookup({ "Gear 0": tuya.enum(0), "Gear 1": tuya.enum(1), "Gear 2": tuya.enum(2), "Gear 3": tuya.enum(3) }),
628
+ ],
629
+ [105, "momentary_1", tuya.valueConverter.countdown],
630
+ [106, "momentary_2", tuya.valueConverter.countdown],
631
+ [107, "momentary_3", tuya.valueConverter.countdown],
632
+ ],
633
+ },
634
+ },
635
+ {
636
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE200_dq8bu0pt", "_TZE200_hmabvy81", "_TZE200_9dhenr94"]),
637
+ model: "SFL02-Z-4",
638
+ vendor: "MOES",
639
+ description: "Star feather smart switch 4 gangs",
640
+ fromZigbee: [tuya.fz.datapoints],
641
+ toZigbee: [tuya.tz.datapoints],
642
+ configure: tuya.configureMagicPacket,
643
+ whiteLabel: [tuya.whitelabel("Nova Digital", "TPZ-4", "Topazio smart switch 4 gangs", ["_TZE200_hmabvy81"])],
644
+ exposes: [
645
+ e.switch().withEndpoint("l1").setAccess("state", ea.STATE_SET),
646
+ e.switch().withEndpoint("l2").setAccess("state", ea.STATE_SET),
647
+ e.switch().withEndpoint("l3").setAccess("state", ea.STATE_SET),
648
+ e.switch().withEndpoint("l4").setAccess("state", ea.STATE_SET),
649
+ tuya.exposes.countdown().withEndpoint("l1"),
650
+ tuya.exposes.countdown().withEndpoint("l2"),
651
+ tuya.exposes.countdown().withEndpoint("l3"),
652
+ tuya.exposes.countdown().withEndpoint("l4"),
653
+ e
654
+ .numeric("momentary_1", ea.STATE_SET)
655
+ .withValueMin(0)
656
+ .withValueMax(3600)
657
+ .withValueStep(1)
658
+ .withUnit("s")
659
+ .withDescription("Momentary switch timer (0=disable)"),
660
+ e
661
+ .numeric("momentary_2", ea.STATE_SET)
662
+ .withValueMin(0)
663
+ .withValueMax(3600)
664
+ .withValueStep(1)
665
+ .withUnit("s")
666
+ .withDescription("Momentary switch timer (0=disable)"),
667
+ e
668
+ .numeric("momentary_3", ea.STATE_SET)
669
+ .withValueMin(0)
670
+ .withValueMax(3600)
671
+ .withValueStep(1)
672
+ .withUnit("s")
673
+ .withDescription("Momentary switch timer (0=disable)"),
674
+ e
675
+ .numeric("momentary_4", ea.STATE_SET)
676
+ .withValueMin(0)
677
+ .withValueMax(3600)
678
+ .withValueStep(1)
679
+ .withUnit("s")
680
+ .withDescription("Momentary switch timer (0=disable)"),
681
+ exposes.enum("mode", ea.STATE_SET, ["switch_1", "scene_1"]).withEndpoint("l1").withDescription("Switch1 mode"),
682
+ exposes.enum("mode", ea.STATE_SET, ["switch_2", "scene_2"]).withEndpoint("l2").withDescription("Switch2 mode"),
683
+ exposes.enum("mode", ea.STATE_SET, ["switch_3", "scene_3"]).withEndpoint("l3").withDescription("Switch3 mode"),
684
+ exposes.enum("mode", ea.STATE_SET, ["switch_4", "scene_4"]).withEndpoint("l4").withDescription("Switch4 mode"),
685
+ e.action(["scene_1", "scene_2", "scene_3", "scene_4"]),
686
+ tuya.exposes.backlightModeOffOn().withAccess(ea.STATE_SET),
687
+ e.power_on_behavior().withAccess(ea.STATE_SET),
688
+ exposes.enum("indicator_status", ea.ALL, ["Off", "Relay", "Invert"]).withDescription("Indicator status"),
689
+ exposes.enum("induction_mode", ea.ALL, ["ON", "OFF"]).withDescription("Induction mode"),
690
+ exposes.enum("vibration_mode", ea.ALL, ["Gear 0", "Gear 1", "Gear 2", "Gear 3"]).withDescription("Vibration"),
691
+ ],
692
+ onEvent: tuya.onEventSetTime,
693
+ endpoint: (device) => {
694
+ return {
695
+ l1: 1,
696
+ l2: 1,
697
+ l3: 1,
698
+ l4: 1,
699
+ state: 1,
700
+ backlight: 1,
701
+ induction: 1,
702
+ };
703
+ },
704
+ meta: {
705
+ multiEndpoint: true,
706
+ tuyaDatapoints: [
707
+ [1, "action", tuya.valueConverter.static("scene_1")],
708
+ [2, "action", tuya.valueConverter.static("scene_2")],
709
+ [3, "action", tuya.valueConverter.static("scene_3")],
710
+ [4, "action", tuya.valueConverter.static("scene_4")],
164
711
  [18, "mode_l1", tuya.valueConverterBasic.lookup({ switch_1: tuya.enum(0), scene_1: tuya.enum(1) })],
165
712
  [19, "mode_l2", tuya.valueConverterBasic.lookup({ switch_2: tuya.enum(0), scene_2: tuya.enum(1) })],
713
+ [20, "mode_l3", tuya.valueConverterBasic.lookup({ switch_3: tuya.enum(0), scene_3: tuya.enum(1) })],
714
+ [21, "mode_l4", tuya.valueConverterBasic.lookup({ switch_4: tuya.enum(0), scene_4: tuya.enum(1) })],
715
+ [24, "state_l1", tuya.valueConverter.onOff],
716
+ [25, "state_l2", tuya.valueConverter.onOff],
717
+ [26, "state_l3", tuya.valueConverter.onOff],
718
+ [27, "state_l4", tuya.valueConverter.onOff],
719
+ [30, "countdown_l1", tuya.valueConverter.countdown],
720
+ [31, "countdown_l2", tuya.valueConverter.countdown],
721
+ [32, "countdown_l3", tuya.valueConverter.countdown],
722
+ [33, "countdown_l4", tuya.valueConverter.countdown],
723
+ [36, "backlight_mode", tuya.valueConverter.onOff],
724
+ [37, "indicator_status", tuya.valueConverterBasic.lookup({ off: tuya.enum(0), Relay: tuya.enum(1), Invert: tuya.enum(2) })],
725
+ [38, "power_on_behavior", tuya.valueConverter.powerOnBehaviorEnum],
726
+ [103, "induction_mode", tuya.valueConverter.onOff],
727
+ [
728
+ 104,
729
+ "vibration_mode",
730
+ tuya.valueConverterBasic.lookup({ "Gear 0": tuya.enum(0), "Gear 1": tuya.enum(1), "Gear 2": tuya.enum(2), "Gear 3": tuya.enum(3) }),
731
+ ],
732
+ [105, "momentary_1", tuya.valueConverter.countdown],
733
+ [106, "momentary_2", tuya.valueConverter.countdown],
734
+ [107, "momentary_3", tuya.valueConverter.countdown],
735
+ [108, "momentary_4", tuya.valueConverter.countdown],
166
736
  ],
167
737
  },
168
738
  },