zigbee-herdsman-converters 25.52.0 → 25.54.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 (65) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/converters/fromZigbee.d.ts.map +1 -1
  3. package/dist/converters/fromZigbee.js +21 -0
  4. package/dist/converters/fromZigbee.js.map +1 -1
  5. package/dist/devices/frient.d.ts.map +1 -1
  6. package/dist/devices/frient.js +3 -2
  7. package/dist/devices/frient.js.map +1 -1
  8. package/dist/devices/icasa.d.ts.map +1 -1
  9. package/dist/devices/icasa.js +7 -0
  10. package/dist/devices/icasa.js.map +1 -1
  11. package/dist/devices/innr.d.ts.map +1 -1
  12. package/dist/devices/innr.js +14 -0
  13. package/dist/devices/innr.js.map +1 -1
  14. package/dist/devices/ledvance.d.ts.map +1 -1
  15. package/dist/devices/ledvance.js +7 -0
  16. package/dist/devices/ledvance.js.map +1 -1
  17. package/dist/devices/lixee.d.ts.map +1 -1
  18. package/dist/devices/lixee.js +10 -5
  19. package/dist/devices/lixee.js.map +1 -1
  20. package/dist/devices/lumi.d.ts.map +1 -1
  21. package/dist/devices/lumi.js +1 -0
  22. package/dist/devices/lumi.js.map +1 -1
  23. package/dist/devices/moes.d.ts.map +1 -1
  24. package/dist/devices/moes.js +138 -0
  25. package/dist/devices/moes.js.map +1 -1
  26. package/dist/devices/nous.d.ts.map +1 -1
  27. package/dist/devices/nous.js +59 -0
  28. package/dist/devices/nous.js.map +1 -1
  29. package/dist/devices/philips.d.ts.map +1 -1
  30. package/dist/devices/philips.js +7 -0
  31. package/dist/devices/philips.js.map +1 -1
  32. package/dist/devices/schneider_electric.d.ts.map +1 -1
  33. package/dist/devices/schneider_electric.js +80 -0
  34. package/dist/devices/schneider_electric.js.map +1 -1
  35. package/dist/devices/sonoff.d.ts.map +1 -1
  36. package/dist/devices/sonoff.js +9 -0
  37. package/dist/devices/sonoff.js.map +1 -1
  38. package/dist/devices/tuya.d.ts.map +1 -1
  39. package/dist/devices/tuya.js +70 -66
  40. package/dist/devices/tuya.js.map +1 -1
  41. package/dist/devices/woox.js +1 -1
  42. package/dist/devices/woox.js.map +1 -1
  43. package/dist/devices/zemismart.d.ts.map +1 -1
  44. package/dist/devices/zemismart.js +34 -0
  45. package/dist/devices/zemismart.js.map +1 -1
  46. package/dist/devices/zigbeetlc.js +1 -1
  47. package/dist/devices/zigbeetlc.js.map +1 -1
  48. package/dist/lib/exposes.js +1 -1
  49. package/dist/lib/exposes.js.map +1 -1
  50. package/dist/lib/generateDefinition.d.ts.map +1 -1
  51. package/dist/lib/generateDefinition.js +2 -5
  52. package/dist/lib/generateDefinition.js.map +1 -1
  53. package/dist/lib/modernExtend.d.ts +1 -0
  54. package/dist/lib/modernExtend.d.ts.map +1 -1
  55. package/dist/lib/modernExtend.js +53 -0
  56. package/dist/lib/modernExtend.js.map +1 -1
  57. package/dist/lib/ota.d.ts.map +1 -1
  58. package/dist/lib/ota.js +3 -6
  59. package/dist/lib/ota.js.map +1 -1
  60. package/dist/lib/tuya.d.ts +5 -3
  61. package/dist/lib/tuya.d.ts.map +1 -1
  62. package/dist/lib/tuya.js +6 -4
  63. package/dist/lib/tuya.js.map +1 -1
  64. package/dist/models-index.json +1 -1
  65. package/package.json +4 -3
@@ -1229,34 +1229,47 @@ exports.definitions = [
1229
1229
  description: "Ultrasonic water meter",
1230
1230
  extend: [tuya.modernExtend.tuyaBase({ dp: true })],
1231
1231
  exposes: [
1232
- // Water consumption sensor
1233
- e
1234
- .numeric("water_consumed", ea.STATE)
1235
- .withUnit("")
1236
- .withDescription("Total water consumption")
1237
- .withValueMin(0)
1238
- .withValueStep(0.001),
1239
- // Flow rate sensor
1240
- e
1241
- .numeric("flow_rate", ea.STATE)
1242
- .withUnit("m³/h")
1243
- .withDescription("Instantaneous water flow rate")
1244
- .withValueMin(0)
1245
- .withValueStep(0.001),
1246
- // Temperature sensor
1247
- e.temperature(),
1248
- // Voltage monitoring
1249
- e.voltage(),
1232
+ e.numeric("water_consumed", ea.STATE).withUnit("m³").withDescription("Total water consumption").withValueMin(0).withValueStep(0.001),
1233
+ e.numeric("month_consumption", ea.STATE).withUnit("m³").withDescription("Monthly water consumption").withValueMin(0).withValueStep(0.001),
1234
+ e.numeric("daily_consumption", ea.STATE).withUnit("m³").withDescription("Daily water consumption").withValueMin(0).withValueStep(0.001),
1235
+ e.enum("report_period", ea.ALL, ["1h", "2h", "3h", "4h", "6h", "8h", "12h", "24h"]).withDescription("Report period (1h–24h)"),
1236
+ e.text("meter_id", ea.STATE).withDescription("Meter identification SN"),
1237
+ e.numeric("flow_rate", ea.STATE).withUnit("m³/h").withDescription("Instantaneous water flow rate").withValueMin(0).withValueStep(0.001),
1238
+ e.temperature().withDescription("Working temperature"),
1239
+ e.voltage().withDescription("Power supply voltage"),
1240
+ e.enum("fault", ea.STATE, ["empty_pipe", "no_fault"]).withDescription("Fault status"),
1250
1241
  ],
1251
1242
  meta: {
1252
1243
  tuyaDatapoints: [
1253
1244
  [1, "water_consumed", tuya.valueConverter.divideBy1000],
1245
+ [
1246
+ 4,
1247
+ "report_period",
1248
+ tuya.valueConverterBasic.lookup({
1249
+ "1h": 0,
1250
+ "2h": 1,
1251
+ "3h": 2,
1252
+ "4h": 3,
1253
+ "6h": 4,
1254
+ "8h": 5,
1255
+ "12h": 6,
1256
+ "24h": 7,
1257
+ }),
1258
+ ],
1259
+ [16, "meter_id", tuya.valueConverter.raw],
1254
1260
  [21, "flow_rate", tuya.valueConverter.divideBy1000],
1255
1261
  [22, "temperature", tuya.valueConverter.divideBy100],
1256
1262
  [26, "voltage", tuya.valueConverter.divideBy100],
1263
+ [
1264
+ 5,
1265
+ "fault",
1266
+ tuya.valueConverterBasic.lookup({
1267
+ empty_pipe: 6144,
1268
+ no_fault: 0,
1269
+ }),
1270
+ ],
1257
1271
  ],
1258
1272
  },
1259
- // Optional: Add device-specific options
1260
1273
  options: [
1261
1274
  exposes.options.precision("water_consumed"),
1262
1275
  exposes.options.calibration("water_consumed"),
@@ -2490,7 +2503,7 @@ exports.definitions = [
2490
2503
  "_TZ3000_n0lphcok",
2491
2504
  "_TZ3000_r80pzsb9",
2492
2505
  ]),
2493
- ...tuya.fingerprint("TS0001", ["_TZ3000_n0lphcok"]),
2506
+ ...tuya.fingerprint("TS0001", ["_TZ3000_n0lphcok", "_TZ3000_wn65ixz9"]),
2494
2507
  ],
2495
2508
  model: "TS0207_repeater",
2496
2509
  vendor: "Tuya",
@@ -2737,7 +2750,7 @@ exports.definitions = [
2737
2750
  ],
2738
2751
  },
2739
2752
  {
2740
- fingerprint: tuya.fingerprint("SGS02Z", ["_TZE284_nt4pquef"]),
2753
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE284_nt4pquef"]),
2741
2754
  model: "SGS02Z",
2742
2755
  vendor: "Tuya",
2743
2756
  description: "Soil sensor",
@@ -3882,7 +3895,7 @@ exports.definitions = [
3882
3895
  { vendor: "BlitzWolf", model: "BW-IS4" },
3883
3896
  tuya.whitelabel("Tuya", "TS0201_1", "Zigbee 3.0 temperature humidity sensor with display", ["_TZ3210_alxkwn0h"]),
3884
3897
  tuya.whitelabel("Tuya", "ZTH01/ZTH02", "Temperature and humidity sensor", ["_TZ3000_0s1izerx"]),
3885
- tuya.whitelabel("Tuya", "ZY-ZTH02", "Temperature and humidity sensor", ["_TZ3000_v1w2k9dd", "_TZ3000_rdhukkmi"]),
3898
+ tuya.whitelabel("Tuya", "ZY-ZTH02", "Temperature and humidity sensor", ["_TZ3000_v1w2k9dd", "_TZ3000_rdhukkmi", "Zbeacon"]),
3886
3899
  tuya.whitelabel("SEDEA", "eTH730", "Temperature and humidity sensor", ["_TZ3000_lqmvrwa2"]),
3887
3900
  tuya.whitelabel("Moes", "ZSS-S01-TH", "Temperature and humidity sensor", ["_TZ3000_f2bw0b6k"]),
3888
3901
  tuya.whitelabel("Danfoss", "014G2480", "Temperature and humidity sensor", ["_TZ3000_mxzo5rhf"]),
@@ -6739,7 +6752,7 @@ exports.definitions = [
6739
6752
  },
6740
6753
  },
6741
6754
  {
6742
- fingerprint: tuya.fingerprint("TS0601", ["_TZE204_qyr2m29i", "_TZE204_ltwbm23f"]),
6755
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE204_qyr2m29i", "_TZE204_ltwbm23f", "_TZE284_ltwbm23f"]),
6743
6756
  model: "TRV602Z",
6744
6757
  vendor: "Tuya",
6745
6758
  description: "Thermostatic radiator valve.",
@@ -7192,16 +7205,18 @@ exports.definitions = [
7192
7205
  tuya.whitelabel("Nous", "A7Z", "Smart Zigbee Socket", ["_TZ3210_rwmitwj4"]),
7193
7206
  tuya.whitelabel("Zbeacon", "TS011F_plug_1_1", "Smart plug (with power monitoring)", ["Zbeacon"]),
7194
7207
  tuya.whitelabel("NEO", "NAS-WR01B", "Smart plug (with electrical measurements)", ["_TZ3000_gjnozsaz"]),
7208
+ tuya.whitelabel("GreenSun", "HSC-ZW-EU", "Outdoor Smart Plug (with power monitoring)", ["_TZ3000_cicwjqth"]),
7195
7209
  ],
7196
7210
  ota: true,
7197
7211
  extend: [
7198
7212
  tuya.modernExtend.tuyaOnOff({
7199
7213
  electricalMeasurements: true,
7200
7214
  electricalMeasurementsFzConverter: fzLocal.TS011F_electrical_measurement,
7201
- powerOutageMemory: true,
7202
- indicatorMode: (manufacturerName) => manufacturerName !== "_TZ3000_ww6drja5",
7203
- childLock: true,
7204
- onOffCountdown: true,
7215
+ // Conditional features
7216
+ powerOutageMemory: (manufacturerName) => manufacturerName !== "_TZ3000_cicwjqth",
7217
+ indicatorMode: (manufacturerName) => manufacturerName === "_TZ3000_ww6drja5",
7218
+ childLock: (manufacturerName) => manufacturerName !== "_TZ3000_cicwjqth",
7219
+ onOffCountdown: (manufacturerName) => manufacturerName !== "_TZ3000_cicwjqth",
7205
7220
  }),
7206
7221
  ],
7207
7222
  configure: async (device, coordinatorEndpoint) => {
@@ -7214,14 +7229,14 @@ exports.definitions = [
7214
7229
  await reporting.rmsVoltage(endpoint, { change: 5 });
7215
7230
  await reporting.rmsCurrent(endpoint, { change: 50 });
7216
7231
  }
7217
- if (!["_TZ3000_0zfrhq4i", "_TZ3000_okaz9tjs", "_TZ3000_typdpbpg", "_TZ3000_ww6drja5", "Zbeacon"].includes(device.manufacturerName)) {
7232
+ if (!["_TZ3000_0zfrhq4i", "_TZ3000_okaz9tjs", "_TZ3000_typdpbpg", "_TZ3000_ww6drja5", "Zbeacon", "_TZ3000_cicwjqth"].includes(device.manufacturerName)) {
7218
7233
  // Gives INVALID_DATA_TYPE error for _TZ3000_0zfrhq4i (as well as a few others in issue 20028)
7219
7234
  // https://github.com/Koenkk/zigbee2mqtt/discussions/19680#discussioncomment-7667035
7220
7235
  // Don't do this for `_TZ3000_gjnozsaz` (was previously in the list, but removed after:
7221
7236
  // https://github.com/Koenkk/zigbee2mqtt/issues/28729#issuecomment-3370261334
7222
7237
  await reporting.activePower(endpoint, { change: 10 });
7223
7238
  }
7224
- const acCurrentDivisor = device.manufacturerName === "_TZ3000_typdpbpg" ? 2000 : 1000;
7239
+ const acCurrentDivisor = ["_TZ3000_typdpbpg"].includes(device.manufacturerName) ? 2000 : 1000;
7225
7240
  endpoint.saveClusterAttributeKeyValue("haElectricalMeasurement", {
7226
7241
  acCurrentDivisor,
7227
7242
  acCurrentMultiplier: 1,
@@ -9366,7 +9381,7 @@ exports.definitions = [
9366
9381
  extend: [m.illuminance()],
9367
9382
  },
9368
9383
  {
9369
- fingerprint: tuya.fingerprint("TS0222", ["_TZ3000_8uxxzz4b", "_TZ3000_hy6ncvmw", "_TZ3000_9kbbfeho", "_TZ3000_l6rsaipj"]),
9384
+ fingerprint: tuya.fingerprint("TS0222", ["_TZ3000_8uxxzz4b", "_TZ3000_9kbbfeho", "_TZ3000_l6rsaipj"]),
9370
9385
  model: "TS0222_light",
9371
9386
  vendor: "Tuya",
9372
9387
  description: "Light sensor",
@@ -9389,7 +9404,7 @@ exports.definitions = [
9389
9404
  extend: [m.illuminance()],
9390
9405
  },
9391
9406
  {
9392
- fingerprint: tuya.fingerprint("TS0222", ["_TYZB01_4mdqxxnn", "_TYZB01_m6ec2pgj", "_TZ3000_do6txrcw", "_TZ3000_7kscdesh"]),
9407
+ fingerprint: tuya.fingerprint("TS0222", ["_TYZB01_4mdqxxnn", "_TYZB01_m6ec2pgj", "_TZ3000_do6txrcw", "_TZ3000_7kscdesh", "_TZ3000_hy6ncvmw"]),
9393
9408
  model: "TS0222",
9394
9409
  vendor: "Tuya",
9395
9410
  description: "Light intensity sensor",
@@ -18525,7 +18540,7 @@ exports.definitions = [
18525
18540
  },
18526
18541
  {
18527
18542
  zigbeeModel: ["ZG-223Z"],
18528
- fingerprint: tuya.fingerprint("TS0601", ["_TZE200_jsaqgakf", "_TZE200_u6x1zyv2"]),
18543
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE200_jsaqgakf", "_TZE200_u6x1zyv2", "_TZE200_2pddnnrk"]),
18529
18544
  model: "ZG-223Z",
18530
18545
  vendor: "HOBEIAN",
18531
18546
  description: "Rainwater detection sensor",
@@ -19257,11 +19272,12 @@ exports.definitions = [
19257
19272
  ],
19258
19273
  },
19259
19274
  {
19260
- fingerprint: tuya.fingerprint("TS0601", ["_TZE204_3regm3h6"]),
19275
+ fingerprint: tuya.fingerprint("TS0601", ["_TZE204_3regm3h6", "_TZE204_0hcjew5p"]),
19261
19276
  model: "_TZE204_3regm3h6",
19262
19277
  vendor: "Tuya",
19263
19278
  description: "Smart thermostat for electric radiator with pilot wire",
19264
19279
  extend: [tuya.modernExtend.tuyaBase({ dp: true, timeStart: "1970" })],
19280
+ whiteLabel: [tuya.whitelabel("THALEOS", "TH-P1Z", "Smart thermostat for electric heater", ["_TZE204_0hcjew5p"])],
19265
19281
  exposes: [
19266
19282
  e.binary("state", ea.STATE_SET, "ON", "OFF").withDescription("Turn the heater on or off").withCategory("config"),
19267
19283
  e.child_lock(),
@@ -19840,59 +19856,49 @@ exports.definitions = [
19840
19856
  description: "Thermostatic radiator valve",
19841
19857
  extend: [tuya.modernExtend.tuyaBase({ dp: true, forceTimeUpdates: true, timeStart: "1970" })],
19842
19858
  exposes: [
19843
- e.child_lock(),
19844
- e.battery(),
19845
- e.battery_low(),
19846
- e.window_detection(),
19847
19859
  e
19848
19860
  .climate()
19849
19861
  .withSetpoint("current_heating_setpoint", 5, 35, 0.5, ea.STATE_SET)
19850
19862
  .withLocalTemperature(ea.STATE)
19851
- .withLocalTemperatureCalibration(-95, 95, 5, ea.STATE_SET),
19863
+ .withPreset(["manual", "schedule", "eco", "comfort", "frost_protection", "holiday", "off"])
19864
+ .withRunningState(["idle", "heat"], ea.STATE)
19865
+ .withLocalTemperatureCalibration(-9.5, 9.5, 0.5, ea.STATE_SET),
19866
+ e.child_lock(),
19867
+ e.battery(),
19868
+ e.battery_low(),
19869
+ e.window_detection(),
19852
19870
  ...tuya.exposes.scheduleAllDays(ea.STATE_SET, "HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C"),
19853
- e.holiday_temperature().withValueMin(5).withValueMax(35),
19854
- e.comfort_temperature().withValueMin(5).withValueMax(35),
19855
- e.eco_temperature().withValueMin(5).withValueMax(35),
19871
+ e.eco_temperature().withValueMin(5).withValueMax(35).withValueStep(0.5),
19872
+ e.comfort_temperature().withValueMin(5).withValueMax(35).withValueStep(0.5),
19873
+ e.holiday_temperature().withValueMin(5).withValueMax(35).withValueStep(0.5),
19874
+ e.binary("window_open", ea.STATE, "OPEN", "CLOSE"),
19875
+ e.binary("frost_protection", ea.STATE_SET, "ON", "OFF"),
19856
19876
  e.binary("scale_protection", ea.STATE_SET, "ON", "OFF"),
19857
- e
19858
- .binary("frost_protection", ea.STATE_SET, "ON", "OFF")
19859
- .withDescription("When the room temperature is lower than 5 °C, the valve opens; when the temperature rises to 8 °C, the valve closes."),
19860
19877
  e.numeric("error", ea.STATE).withDescription('If NTC is damaged, "Er" will be on the TRV display.'),
19861
19878
  e.binary("boost_heating", ea.STATE_SET, "ON", "OFF").withDescription("Boost Heating: the device will enter the boost heating mode."),
19862
- e.enum("mode", ea.STATE, ["normal", "auto", "eco", "comfort", "antifrost", "holiday", "off"]).withDescription("Mode"),
19863
- e.enum("work_state", ea.STATE, ["closed", "opened"]).withDescription("Work state"),
19864
- e.binary("window", ea.STATE, "CLOSE", "OPEN").withDescription("Window status closed or open "),
19865
- e.enum("switch", ea.STATE, ["closed", "opened"]).withDescription("Switch"),
19866
19879
  ],
19867
19880
  meta: {
19868
19881
  tuyaDatapoints: [
19869
19882
  [
19870
19883
  2,
19871
- "mode",
19884
+ "preset",
19872
19885
  tuya.valueConverterBasic.lookup({
19873
- normal: tuya.enum(0),
19874
- auto: tuya.enum(1),
19886
+ manual: tuya.enum(0),
19887
+ schedule: tuya.enum(1),
19875
19888
  eco: tuya.enum(2),
19876
19889
  comfort: tuya.enum(3),
19877
- antifrost: tuya.enum(4),
19890
+ frost_protection: tuya.enum(4),
19878
19891
  holiday: tuya.enum(5),
19879
19892
  off: tuya.enum(6),
19880
19893
  }),
19881
19894
  ],
19882
- [
19883
- 2,
19884
- "work_state",
19885
- tuya.valueConverterBasic.lookup({
19886
- closed: tuya.enum(0),
19887
- opened: tuya.enum(1),
19888
- }),
19889
- ],
19895
+ [3, "running_state", tuya.valueConverterBasic.lookup({ idle: 0, heat: 1 })],
19890
19896
  [4, "current_heating_setpoint", tuya.valueConverter.divideBy10],
19891
19897
  [5, "local_temperature", tuya.valueConverter.divideBy10],
19892
19898
  [6, "battery", tuya.valueConverter.raw],
19893
19899
  [7, "child_lock", tuya.valueConverter.lockUnlock],
19894
19900
  [14, "window_detection", tuya.valueConverter.onOff],
19895
- [15, "window", tuya.valueConverterBasic.lookup({ OPEN: 1, CLOSE: 0 })],
19901
+ [15, "window_open", tuya.valueConverterBasic.lookup({ CLOSE: 0, OPEN: 1 })],
19896
19902
  [21, "holiday_temperature", tuya.valueConverter.divideBy10],
19897
19903
  [28, "schedule_monday", tuya.valueConverter.thermostatScheduleDayMultiDPWithDayNumber(1)],
19898
19904
  [29, "schedule_tuesday", tuya.valueConverter.thermostatScheduleDayMultiDPWithDayNumber(2)],
@@ -19901,14 +19907,12 @@ exports.definitions = [
19901
19907
  [32, "schedule_friday", tuya.valueConverter.thermostatScheduleDayMultiDPWithDayNumber(5)],
19902
19908
  [33, "schedule_saturday", tuya.valueConverter.thermostatScheduleDayMultiDPWithDayNumber(6)],
19903
19909
  [34, "schedule_sunday", tuya.valueConverter.thermostatScheduleDayMultiDPWithDayNumber(7)],
19904
- [35, "fault_alarm", tuya.valueConverter.errorOrBatteryLow],
19910
+ [35, "battery_low", tuya.valueConverter.errorOrBatteryLow],
19905
19911
  [36, "frost_protection", tuya.valueConverter.onOff],
19906
- [47, "local_temperature_calibration", tuya.valueConverter.localTempCalibration2],
19907
- [101, "switch", tuya.valueConverter.onOff],
19908
- [103, "sensitivity_temperature", tuya.valueConverter.divideBy10],
19912
+ [47, "local_temperature_calibration", tuya.valueConverter.localTempCalibration3],
19909
19913
  [103, "eco_temperature", tuya.valueConverter.divideBy10],
19910
19914
  [104, "comfort_temperature", tuya.valueConverter.divideBy10],
19911
- [105, "antifrost_temperature", tuya.valueConverter.divideBy10],
19915
+ [105, "frost_protection_temperature", tuya.valueConverter.divideBy10],
19912
19916
  ],
19913
19917
  },
19914
19918
  },