zigbee-herdsman-converters 25.62.0 → 25.64.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 (43) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/converters/toZigbee.d.ts.map +1 -1
  3. package/dist/converters/toZigbee.js +3 -0
  4. package/dist/converters/toZigbee.js.map +1 -1
  5. package/dist/devices/candeo.d.ts.map +1 -1
  6. package/dist/devices/candeo.js +0 -1
  7. package/dist/devices/candeo.js.map +1 -1
  8. package/dist/devices/develco.d.ts.map +1 -1
  9. package/dist/devices/develco.js +48 -0
  10. package/dist/devices/develco.js.map +1 -1
  11. package/dist/devices/frient.d.ts.map +1 -1
  12. package/dist/devices/frient.js +0 -7
  13. package/dist/devices/frient.js.map +1 -1
  14. package/dist/devices/ikea.js +1 -1
  15. package/dist/devices/ikea.js.map +1 -1
  16. package/dist/devices/iluminize.d.ts.map +1 -1
  17. package/dist/devices/iluminize.js +16 -9
  18. package/dist/devices/iluminize.js.map +1 -1
  19. package/dist/devices/lumi.js +3 -3
  20. package/dist/devices/lumi.js.map +1 -1
  21. package/dist/devices/moes.js +1 -1
  22. package/dist/devices/moes.js.map +1 -1
  23. package/dist/devices/namron.d.ts.map +1 -1
  24. package/dist/devices/namron.js +20 -0
  25. package/dist/devices/namron.js.map +1 -1
  26. package/dist/devices/philips.d.ts.map +1 -1
  27. package/dist/devices/philips.js +5 -2
  28. package/dist/devices/philips.js.map +1 -1
  29. package/dist/devices/shelly.d.ts.map +1 -1
  30. package/dist/devices/shelly.js +272 -0
  31. package/dist/devices/shelly.js.map +1 -1
  32. package/dist/devices/tuya.d.ts.map +1 -1
  33. package/dist/devices/tuya.js +217 -2
  34. package/dist/devices/tuya.js.map +1 -1
  35. package/dist/devices/zigbeetlc.d.ts.map +1 -1
  36. package/dist/devices/zigbeetlc.js +2 -1
  37. package/dist/devices/zigbeetlc.js.map +1 -1
  38. package/dist/lib/develco.d.ts +13 -0
  39. package/dist/lib/develco.d.ts.map +1 -1
  40. package/dist/lib/develco.js +202 -0
  41. package/dist/lib/develco.js.map +1 -1
  42. package/dist/models-index.json +1 -1
  43. package/package.json +1 -1
@@ -733,6 +733,16 @@ const tzLocal = {
733
733
  });
734
734
  },
735
735
  },
736
+ // biome-ignore lint/style/useNamingConvention: ignored using `--suppress`
737
+ TS0004_backlight_mode: {
738
+ key: ["backlight_mode"],
739
+ convertSet: async (entity, key, value, meta) => {
740
+ const lookup = { red_when_on: 0, pink_when_on: 1, red_on_blue_off: 2, pink_on_blue_off: 3 };
741
+ const modeValue = utils.getFromLookup(value, lookup);
742
+ await entity.write("genOnOff", { tuyaBacklightMode: modeValue });
743
+ return { state: { backlight_mode: utils.getFromLookup(modeValue, lookup) } };
744
+ },
745
+ },
736
746
  };
737
747
  const fzLocal = {
738
748
  // biome-ignore lint/style/useNamingConvention: ignored using `--suppress`
@@ -962,6 +972,17 @@ const fzLocal = {
962
972
  }
963
973
  },
964
974
  },
975
+ // biome-ignore lint/style/useNamingConvention: ignored using `--suppress`
976
+ TS0004_backlight_mode: {
977
+ cluster: "genOnOff",
978
+ type: ["attributeReport", "readResponse"],
979
+ convert: (model, msg, publish, options, meta) => {
980
+ if (msg.data.tuyaBacklightMode !== undefined) {
981
+ const backlightLookup = { 0: "red_when_on", 1: "pink_when_on", 2: "red_on_blue_off", 3: "pink_on_blue_off" };
982
+ return { backlight_mode: backlightLookup[msg.data.tuyaBacklightMode] };
983
+ }
984
+ },
985
+ },
965
986
  };
966
987
  exports.definitions = [
967
988
  {
@@ -1105,7 +1126,7 @@ exports.definitions = [
1105
1126
  { vendor: "Cleverio", model: "SS100" },
1106
1127
  { vendor: "HOBEIAN", model: "ZG-102ZA", fingerprint: [{ modelID: "ZG-102Z" }] },
1107
1128
  tuya.whitelabel("Niceboy", "ORBIS Windows & Door Sensor", "Door sensor", ["_TZ3000_qrldbmfn"]),
1108
- tuya.whitelabel("Tuya", "ZD06", "Door window sensor", ["_TZ3000_rcuyhwe3"]),
1129
+ tuya.whitelabel("Tuya", "ZD06", "Door window sensor", ["_TZ3000_rcuyhwe3", "_TZ3000_996rpfy6"]),
1109
1130
  tuya.whitelabel("Tuya", "ZD08", "Door sensor", ["_TZ3000_7d8yme6f"]),
1110
1131
  tuya.whitelabel("Tuya", "MC500A", "Door sensor", ["_TZ3000_2mbfxlzr"]),
1111
1132
  tuya.whitelabel("Tuya", "19DZT", "Door sensor", ["_TZ3000_n2egfsli"]),
@@ -1123,7 +1144,8 @@ exports.definitions = [
1123
1144
  const exps = [e.contact(), e.battery(), e.battery_voltage()];
1124
1145
  const noTamperModels = [
1125
1146
  // manufacturerName for models without a tamper sensor
1126
- "_TZ3000_rcuyhwe3", // Tuya ZD06
1147
+ "_TZ3000_rcuyhwe3",
1148
+ "_TZ3000_996rpfy6", // Tuya ZD06
1127
1149
  "_TZ3000_2mbfxlzr", // Tuya MC500A
1128
1150
  "_TZ3000_n2egfsli", // Tuya 19DZT
1129
1151
  "_TZ3000_yfekcy3n", // Tuya DS04
@@ -2256,6 +2278,9 @@ exports.definitions = [
2256
2278
  color: true,
2257
2279
  }),
2258
2280
  ],
2281
+ meta: {
2282
+ moveToLevelWithOnOffDisable: true,
2283
+ },
2259
2284
  },
2260
2285
  {
2261
2286
  zigbeeModel: ["SM0001"],
@@ -8786,6 +8811,33 @@ exports.definitions = [
8786
8811
  await reporting.bind(device.getEndpoint(4), coordinatorEndpoint, ["genOnOff"]);
8787
8812
  },
8788
8813
  },
8814
+ {
8815
+ fingerprint: tuya.fingerprint("TS0004", ["_TZ3000_ncb6mkx8"]),
8816
+ model: "TS0004_fan_light_switch",
8817
+ vendor: "Tuya",
8818
+ description: "Fan and light controller with 3 speeds",
8819
+ fromZigbee: [fz.on_off, fzLocal.TS0004_backlight_mode],
8820
+ toZigbee: [tz.on_off, tzLocal.TS0004_backlight_mode],
8821
+ exposes: [
8822
+ e.switch().withEndpoint("lights").withDescription("Light control"),
8823
+ e.switch().withEndpoint("low").withDescription("Fan speed: low"),
8824
+ e.switch().withEndpoint("medium").withDescription("Fan speed: medium"),
8825
+ e.switch().withEndpoint("high").withDescription("Fan speed: high"),
8826
+ e
8827
+ .enum("backlight_mode", ea.ALL, ["red_when_on", "pink_when_on", "red_on_blue_off", "pink_on_blue_off"])
8828
+ .withDescription("Backlight color mode"),
8829
+ ],
8830
+ endpoint: (device) => {
8831
+ return { lights: 1, high: 2, low: 3, medium: 4 };
8832
+ },
8833
+ meta: { multiEndpoint: true },
8834
+ configure: async (device, coordinatorEndpoint) => {
8835
+ await tuya.configureMagicPacket(device, coordinatorEndpoint);
8836
+ for (const ID of [1, 2, 3, 4]) {
8837
+ await reporting.bind(device.getEndpoint(ID), coordinatorEndpoint, ["genOnOff"]);
8838
+ }
8839
+ },
8840
+ },
8789
8841
  {
8790
8842
  fingerprint: tuya.fingerprint("TS0726", ["_TZ3002_1s0vfmtv", "_TZ3002_gdwja9a7"]),
8791
8843
  model: "TS0726_2_gang",
@@ -14482,6 +14534,165 @@ exports.definitions = [
14482
14534
  ],
14483
14535
  },
14484
14536
  },
14537
+ {
14538
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE284_aai5grix", "_TZE204_aai5grix"]),
14539
+ model: "MTD285-ZB",
14540
+ vendor: "Wenzhi",
14541
+ description: "24GHz mmWave human presence sensor",
14542
+ extend: [tuya.modernExtend.tuyaBase({ dp: true })],
14543
+ exposes: [
14544
+ e.presence(),
14545
+ e.enum("state", ea.STATE, ["none", "presence", "move"]).withDescription("Presence state"),
14546
+ e.illuminance().withDescription("Measured illuminance"),
14547
+ e
14548
+ .numeric("min_distance", ea.STATE_SET)
14549
+ .withValueMin(0)
14550
+ .withValueMax(8.4)
14551
+ .withValueStep(0.1)
14552
+ .withUnit("m")
14553
+ .withDescription("Minimum detection distance"),
14554
+ e
14555
+ .numeric("max_distance", ea.STATE_SET)
14556
+ .withValueMin(0)
14557
+ .withValueMax(8.4)
14558
+ .withValueStep(0.1)
14559
+ .withUnit("m")
14560
+ .withDescription("Maximum detection distance"),
14561
+ e.numeric("target_distance", ea.STATE).withValueMin(0).withValueMax(9.9).withUnit("m").withDescription("Target distance"),
14562
+ ...Array.from({ length: 11 }, (_, i) => e
14563
+ .enum(`gate_enable_${String(i + 1).padStart(2, "0")}`, ea.STATE_SET, ["disable", "enable"])
14564
+ .withDescription(`Distance gate ${i + 1} enable`)),
14565
+ e.numeric("configuration_gate", ea.STATE_SET).withValueMin(1).withValueMax(11).withDescription("Select gate for threshold config"),
14566
+ e.numeric("move_threshold", ea.STATE_SET).withValueMin(0).withValueMax(99).withDescription("Configure motion detection threshold"),
14567
+ e.numeric("presence_threshold", ea.STATE_SET).withValueMin(0).withValueMax(99).withDescription("Configure presence detection threshold"),
14568
+ e.numeric("nearest_target_gate", ea.STATE).withValueMin(0).withValueMax(11).withDescription("Nearest active gate"),
14569
+ e
14570
+ .numeric("target_countdown", ea.STATE)
14571
+ .withValueMin(0)
14572
+ .withValueMax(3600)
14573
+ .withUnit("s")
14574
+ .withDescription("Target timeout countdown (debug only)"),
14575
+ e
14576
+ .numeric("target_velocity", ea.STATE)
14577
+ .withValueMin(-9.99)
14578
+ .withValueMax(9.99)
14579
+ .withUnit("m/s")
14580
+ .withDescription("Target speed with direction"),
14581
+ e.enum("debug_switch", ea.STATE_SET, ["off", "on"]).withDescription("Debug mode toggle"),
14582
+ e
14583
+ .enum("led_mode", ea.STATE_SET, ["silence", "status"]) // same as in the app
14584
+ .withDescription("LED indicator mode"),
14585
+ e.numeric("delay_time", ea.STATE_SET).withValueMin(5).withValueMax(3600).withUnit("s").withDescription("Departure delay time"),
14586
+ e
14587
+ .numeric("block_time", ea.STATE_SET)
14588
+ .withValueMin(0)
14589
+ .withValueMax(10)
14590
+ .withValueStep(0.5)
14591
+ .withUnit("s")
14592
+ .withDescription("Block time after unoccupancy"), // same as in the app
14593
+ e
14594
+ .enum("judge_logic", ea.STATE_SET, ["large_move", "small_move", "custom_move"]) // same as in the app
14595
+ .withDescription("Presence detection algorithm"),
14596
+ e
14597
+ .enum("environmental_noise_collect", ea.STATE_SET, ["start", "ongoing", "complete"])
14598
+ .withDescription("Environmental background noise collection status"),
14599
+ e.enum("device_control", ea.STATE_SET, ["no_action", "restart", "reset_param"]).withDescription("Device control commands"),
14600
+ e.enum("presence_sensitivity", ea.STATE_SET, ["high", "medium", "low", "custom"]).withDescription("Presence sensitivity"),
14601
+ e.enum("move_sensitivity", ea.STATE_SET, ["high", "medium", "low", "custom"]).withDescription("Motion sensitivity"),
14602
+ e
14603
+ .enum("scene_mode", ea.STATE_SET, [
14604
+ "custom", // more fitting and same as in the app
14605
+ "toilet",
14606
+ "kitchen",
14607
+ "corridor",
14608
+ "bedroom",
14609
+ "living_room",
14610
+ "meeting_room", // same as in the app
14611
+ ])
14612
+ .withDescription("Scene mode preset"),
14613
+ e.binary("illuminance_report", ea.STATE_SET, "on", "off").withDescription("Illuminance reporting toggle"),
14614
+ e.binary("move_detect", ea.STATE_SET, "on", "off").withDescription("Motion detection toggle"),
14615
+ e.binary("distance_report", ea.STATE_SET, "on", "off").withDescription("Distance reporting toggle"),
14616
+ e.binary("speed_report", ea.STATE_SET, "on", "off").withDescription("Speed reporting toggle"),
14617
+ ],
14618
+ meta: {
14619
+ tuyaDatapoints: [
14620
+ [
14621
+ 1,
14622
+ null,
14623
+ {
14624
+ from: (v) => ({
14625
+ presence: v !== 0,
14626
+ state: v === 0 ? "none" : v === 1 ? "presence" : "move",
14627
+ }),
14628
+ },
14629
+ ],
14630
+ [3, "min_distance", tuya.valueConverter.divideBy10],
14631
+ [4, "max_distance", tuya.valueConverter.divideBy10],
14632
+ [9, "target_distance", tuya.valueConverter.divideBy10],
14633
+ [101, "gate_enable_01", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14634
+ [102, "gate_enable_02", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14635
+ [103, "gate_enable_03", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14636
+ [104, "gate_enable_04", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14637
+ [105, "gate_enable_05", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14638
+ [106, "gate_enable_06", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14639
+ [107, "gate_enable_07", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14640
+ [108, "gate_enable_08", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14641
+ [109, "gate_enable_09", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14642
+ [110, "gate_enable_10", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14643
+ [111, "gate_enable_11", tuya.valueConverterBasic.lookup({ disable: tuya.enum(0), enable: tuya.enum(1) })],
14644
+ [112, "configuration_gate", tuya.valueConverter.raw],
14645
+ [113, "move_threshold", tuya.valueConverter.raw],
14646
+ [114, "presence_threshold", tuya.valueConverter.raw],
14647
+ [115, "nearest_target_gate", tuya.valueConverter.raw],
14648
+ [116, "target_countdown", tuya.valueConverter.raw],
14649
+ [117, "target_velocity", tuya.valueConverter.divideBy100],
14650
+ [118, "debug_switch", tuya.valueConverterBasic.lookup({ off: tuya.enum(0), on: tuya.enum(1) })],
14651
+ [119, "led_mode", tuya.valueConverterBasic.lookup({ silence: tuya.enum(0), status: tuya.enum(1) })],
14652
+ [120, "delay_time", tuya.valueConverter.raw],
14653
+ [121, "block_time", tuya.valueConverter.divideBy10],
14654
+ [
14655
+ 122,
14656
+ "judge_logic",
14657
+ tuya.valueConverterBasic.lookup({ large_move: tuya.enum(0), small_move: tuya.enum(1), custom_move: tuya.enum(2) }),
14658
+ ],
14659
+ [
14660
+ 123,
14661
+ "environmental_noise_collect",
14662
+ tuya.valueConverterBasic.lookup({ start: tuya.enum(0), ongoing: tuya.enum(1), complete: tuya.enum(2) }),
14663
+ ],
14664
+ [124, "device_control", tuya.valueConverterBasic.lookup({ no_action: tuya.enum(0), restart: tuya.enum(1), reset_param: tuya.enum(2) })],
14665
+ [125, "illuminance", tuya.valueConverter.raw],
14666
+ [
14667
+ 126,
14668
+ "presence_sensitivity",
14669
+ tuya.valueConverterBasic.lookup({ high: tuya.enum(0), medium: tuya.enum(1), low: tuya.enum(2), custom: tuya.enum(3) }),
14670
+ ],
14671
+ [
14672
+ 127,
14673
+ "move_sensitivity",
14674
+ tuya.valueConverterBasic.lookup({ high: tuya.enum(0), medium: tuya.enum(1), low: tuya.enum(2), custom: tuya.enum(3) }),
14675
+ ],
14676
+ [
14677
+ 128,
14678
+ "scene_mode",
14679
+ tuya.valueConverterBasic.lookup({
14680
+ custom: tuya.enum(0), // more fitting and same as in the app
14681
+ toilet: tuya.enum(1),
14682
+ kitchen: tuya.enum(2),
14683
+ corridor: tuya.enum(3),
14684
+ bedroom: tuya.enum(4),
14685
+ living_room: tuya.enum(5),
14686
+ meeting_room: tuya.enum(6), // same as in the app
14687
+ }),
14688
+ ],
14689
+ [129, "illuminance_report", tuya.valueConverterBasic.lookup({ off: tuya.enum(0), on: tuya.enum(1) })],
14690
+ [130, "move_detect", tuya.valueConverterBasic.lookup({ off: tuya.enum(0), on: tuya.enum(1) })],
14691
+ [131, "distance_report", tuya.valueConverterBasic.lookup({ off: tuya.enum(0), on: tuya.enum(1) })],
14692
+ [132, "speed_report", tuya.valueConverterBasic.lookup({ off: tuya.enum(0), on: tuya.enum(1) })],
14693
+ ],
14694
+ },
14695
+ },
14485
14696
  {
14486
14697
  fingerprint: tuya.fingerprint("TS0601", ["_TZE204_81yrt3lo", "_TZE284_81yrt3lo"]),
14487
14698
  model: "PJ-1203A",
@@ -16209,6 +16420,10 @@ exports.definitions = [
16209
16420
  .withDescription("Temperature threshold setting"),
16210
16421
  e.binary("clear_fault", ea.STATE_SET, "ON", "OFF").withDescription("Recover from an incident"),
16211
16422
  e.binary("factory_reset", ea.STATE_SET, "ON", "OFF").withDescription("Back to factory settings, USE WITH CAUTION"),
16423
+ e
16424
+ .binary("auto_reclosing", ea.STATE_SET, "ON", "OFF")
16425
+ .withLabel("Auto-Reclosing")
16426
+ .withDescription("When the circuit breaker trips due to voltage protection, it will automatically close when the circuit voItage returns to normal.(Note: For safety reasons, this function only applies to trips caused by voltage)"),
16212
16427
  ],
16213
16428
  meta: {
16214
16429
  tuyaDatapoints: [