zigbee-herdsman-converters 22.0.1 → 22.2.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 (96) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/converters/fromZigbee.d.ts +7 -0
  3. package/converters/fromZigbee.d.ts.map +1 -1
  4. package/converters/fromZigbee.js +10 -1
  5. package/converters/fromZigbee.js.map +1 -1
  6. package/converters/toZigbee.d.ts +9 -0
  7. package/converters/toZigbee.d.ts.map +1 -1
  8. package/converters/toZigbee.js +11 -1
  9. package/converters/toZigbee.js.map +1 -1
  10. package/devices/custom_devices_diy.d.ts.map +1 -1
  11. package/devices/custom_devices_diy.js +9 -0
  12. package/devices/custom_devices_diy.js.map +1 -1
  13. package/devices/ewelink.d.ts.map +1 -1
  14. package/devices/ewelink.js +14 -1
  15. package/devices/ewelink.js.map +1 -1
  16. package/devices/hampton_bay.js +1 -1
  17. package/devices/hampton_bay.js.map +1 -1
  18. package/devices/inovelli.d.ts.map +1 -1
  19. package/devices/inovelli.js +9 -4
  20. package/devices/inovelli.js.map +1 -1
  21. package/devices/lellki.js +1 -1
  22. package/devices/lellki.js.map +1 -1
  23. package/devices/mercator.js +1 -1
  24. package/devices/mercator.js.map +1 -1
  25. package/devices/multiterm.js +1 -1
  26. package/devices/multiterm.js.map +1 -1
  27. package/devices/orvibo.js +1 -1
  28. package/devices/orvibo.js.map +1 -1
  29. package/devices/owon.js +2 -2
  30. package/devices/owon.js.map +1 -1
  31. package/devices/philips.d.ts.map +1 -1
  32. package/devices/philips.js +7 -0
  33. package/devices/philips.js.map +1 -1
  34. package/devices/schneider_electric.js +1 -1
  35. package/devices/schneider_electric.js.map +1 -1
  36. package/devices/somfy.d.ts.map +1 -1
  37. package/devices/somfy.js +7 -0
  38. package/devices/somfy.js.map +1 -1
  39. package/devices/sonoff.d.ts.map +1 -1
  40. package/devices/sonoff.js +30 -4
  41. package/devices/sonoff.js.map +1 -1
  42. package/devices/sunricher.d.ts.map +1 -1
  43. package/devices/sunricher.js +986 -352
  44. package/devices/sunricher.js.map +1 -1
  45. package/devices/third_reality.d.ts.map +1 -1
  46. package/devices/third_reality.js +14 -9
  47. package/devices/third_reality.js.map +1 -1
  48. package/devices/tuya.d.ts.map +1 -1
  49. package/devices/tuya.js +165 -8
  50. package/devices/tuya.js.map +1 -1
  51. package/devices/ubisys.d.ts.map +1 -1
  52. package/devices/ubisys.js +1 -0
  53. package/devices/ubisys.js.map +1 -1
  54. package/lib/color.d.ts +1 -2
  55. package/lib/color.d.ts.map +1 -1
  56. package/lib/color.js +2 -6
  57. package/lib/color.js.map +1 -1
  58. package/lib/configureKey.js +0 -1
  59. package/lib/configureKey.js.map +1 -1
  60. package/lib/constants.js +0 -33
  61. package/lib/constants.js.map +1 -1
  62. package/lib/exposes.d.ts +14 -0
  63. package/lib/exposes.d.ts.map +1 -1
  64. package/lib/exposes.js +38 -13
  65. package/lib/exposes.js.map +1 -1
  66. package/lib/ikea.js +1 -1
  67. package/lib/ikea.js.map +1 -1
  68. package/lib/kelvinToXy.js +0 -1
  69. package/lib/kelvinToXy.js.map +1 -1
  70. package/lib/legacy.d.ts +2 -76
  71. package/lib/legacy.d.ts.map +1 -1
  72. package/lib/legacy.js +1 -64
  73. package/lib/legacy.js.map +1 -1
  74. package/lib/light.d.ts +2 -0
  75. package/lib/light.d.ts.map +1 -1
  76. package/lib/light.js +2 -6
  77. package/lib/light.js.map +1 -1
  78. package/lib/lumi.d.ts.map +1 -1
  79. package/lib/lumi.js +2 -17
  80. package/lib/lumi.js.map +1 -1
  81. package/lib/philips.d.ts +166 -1
  82. package/lib/philips.d.ts.map +1 -1
  83. package/lib/philips.js +12 -15
  84. package/lib/philips.js.map +1 -1
  85. package/lib/reporting.js +0 -51
  86. package/lib/reporting.js.map +1 -1
  87. package/lib/store.js +0 -5
  88. package/lib/store.js.map +1 -1
  89. package/lib/tuya.js +0 -19
  90. package/lib/tuya.js.map +1 -1
  91. package/lib/utils.js +1 -37
  92. package/lib/utils.js.map +1 -1
  93. package/lib/zosung.js +0 -3
  94. package/lib/zosung.js.map +1 -1
  95. package/models-index.json +1 -1
  96. package/package.json +1 -1
package/devices/tuya.js CHANGED
@@ -1077,6 +1077,7 @@ exports.definitions = [
1077
1077
  '_TZE204_yjjdcqsq',
1078
1078
  '_TZE204_jygvp6fk',
1079
1079
  '_TZE204_cirvgep4',
1080
+ '_TZE284_yjjdcqsq',
1080
1081
  ]),
1081
1082
  model: 'TS0601_temperature_humidity_sensor_2',
1082
1083
  vendor: 'Tuya',
@@ -1099,7 +1100,7 @@ exports.definitions = [
1099
1100
  ],
1100
1101
  },
1101
1102
  whiteLabel: [
1102
- tuya.whitelabel('Tuya', 'ZTH01', 'Temperature and humidity sensor', ['_TZE200_yjjdcqsq', '_TZE204_yjjdcqsq']),
1103
+ tuya.whitelabel('Tuya', 'ZTH01', 'Temperature and humidity sensor', ['_TZE200_yjjdcqsq', '_TZE204_yjjdcqsq', '_TZE284_yjjdcqsq']),
1103
1104
  tuya.whitelabel('Tuya', 'SZTH02', 'Temperature and humidity sensor', ['_TZE200_utkemkbs', '_TZE204_utkemkbs']),
1104
1105
  tuya.whitelabel('Tuya', 'ZTH02', 'Temperature and humidity sensor', ['_TZE200_9yapgbuv', '_TZE204_9yapgbuv']),
1105
1106
  tuya.whitelabel('Tuya', 'ZTH05', 'Temperature and humidity sensor', ['_TZE204_upagmta9', '_TZE200_upagmta9']),
@@ -4880,15 +4881,15 @@ exports.definitions = [
4880
4881
  e.battery_low(),
4881
4882
  e
4882
4883
  .climate()
4883
- .withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
4884
+ .withSetpoint('current_heating_setpoint', 5, 45, 0.5, ea.STATE_SET)
4884
4885
  .withLocalTemperature(ea.STATE)
4885
4886
  .withPreset(['schedule', 'holiday', 'manual', 'comfort', 'eco'])
4886
4887
  .withSystemMode(['off', 'heat'], ea.STATE)
4887
- .withLocalTemperatureCalibration(-3, 3, 1, ea.STATE_SET),
4888
+ .withLocalTemperatureCalibration(-12, 12, 0.5, ea.STATE_SET),
4888
4889
  ...tuya.exposes.scheduleAllDays(ea.STATE_SET, 'HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C HH:MM/C'),
4889
- e.holiday_temperature().withValueMin(5).withValueMax(30),
4890
- e.comfort_temperature().withValueMin(5).withValueMax(30),
4891
- e.eco_temperature().withValueMin(5).withValueMax(30),
4890
+ e.holiday_temperature().withValueMin(5).withValueMax(45),
4891
+ e.comfort_temperature().withValueMin(5).withValueMax(45),
4892
+ e.eco_temperature().withValueMin(5).withValueMax(45),
4892
4893
  e
4893
4894
  .binary('scale_protection', ea.STATE_SET, 'ON', 'OFF')
4894
4895
  .withDescription('If the heat sink is not fully opened within ' +
@@ -5695,7 +5696,7 @@ exports.definitions = [
5695
5696
  e.smoke(),
5696
5697
  e.battery(),
5697
5698
  tuya.exposes.silence(),
5698
- e.test(),
5699
+ tuya.exposes.selfTest(),
5699
5700
  e.numeric('smoke_concentration', ea.STATE).withUnit('ppm').withDescription('Parts per million of smoke detected'),
5700
5701
  e.binary('device_fault', ea.STATE, true, false).withDescription('Indicates a fault with the device'),
5701
5702
  ],
@@ -7317,7 +7318,7 @@ exports.definitions = [
7317
7318
  ],
7318
7319
  },
7319
7320
  {
7320
- fingerprint: tuya.fingerprint('TS011F', ['_TZ3000_qeuvnohg', '_TZ3000_6l1pjfqe']),
7321
+ fingerprint: tuya.fingerprint('TS011F', ['_TZ3000_qeuvnohg', '_TZ3000_6l1pjfqe', '_TZ3000_2iiimqs9']),
7321
7322
  model: 'TS011F_din_smart_relay_polling',
7322
7323
  description: 'Din smart relay (with power monitoring via polling)',
7323
7324
  vendor: 'Tuya',
@@ -7333,6 +7334,7 @@ exports.definitions = [
7333
7334
  whiteLabel: [
7334
7335
  tuya.whitelabel('Tongou', 'TO-Q-SY1-JZT', 'Din smart relay (with power monitoring via polling)', ['_TZ3000_qeuvnohg']),
7335
7336
  tuya.whitelabel('TOMZN', 'TOB9Z-63M', 'Din smart relay (with power monitoring via polling)', ['_TZ3000_6l1pjfqe']),
7337
+ tuya.whitelabel('Nous', 'D2Z', 'Din smart relay (with power monitoring via polling)', ['_TZ3000_2iiimqs9']),
7336
7338
  ],
7337
7339
  ota: true,
7338
7340
  configure: async (device, coordinatorEndpoint) => {
@@ -9560,6 +9562,11 @@ exports.definitions = [
9560
9562
  e.produced_energy().withDescription('Total reverse active energy'),
9561
9563
  e.power_factor().withUnit('%'),
9562
9564
  e.ac_frequency(),
9565
+ e
9566
+ .numeric('data_report_duration', ea.SET)
9567
+ .withValueMin(5)
9568
+ .withValueMax(3600)
9569
+ .withDescription('WARNING: You must update device firmware to V3.1.3 before changing this setting! Use Tuya gateway/app to update firmware. Data report duration set (Threshold value range 5~3600 seconds)'),
9563
9570
  ],
9564
9571
  meta: {
9565
9572
  tuyaDatapoints: [
@@ -9568,6 +9575,46 @@ exports.definitions = [
9568
9575
  // [6, null, tuya.valueConverter.phaseVariant3],
9569
9576
  [15, 'power_factor', tuya.valueConverter.raw],
9570
9577
  // [16, 'clear_energy', tuya.valueConverter.onOff],
9578
+ [
9579
+ 18,
9580
+ 'data_report_duration',
9581
+ {
9582
+ to: (v) => {
9583
+ const value = Math.max(5, Math.min(3600, Math.round(v)));
9584
+ const byte1 = (value >> 8) & 0xff;
9585
+ const byte2 = value & 0xff;
9586
+ return [
9587
+ // Unknown what these bytes mean, possibly configures other settings of the device
9588
+ 0x01,
9589
+ 0x01,
9590
+ 0x00,
9591
+ 0x3c,
9592
+ 0x03,
9593
+ 0x01,
9594
+ 0x00,
9595
+ 0xfd,
9596
+ 0x04,
9597
+ 0x00,
9598
+ 0x00,
9599
+ 0xb4,
9600
+ 0x07,
9601
+ 0x01,
9602
+ 0x00,
9603
+ 0x00,
9604
+ 0x08,
9605
+ 0x01,
9606
+ // Report duration
9607
+ byte1,
9608
+ byte2,
9609
+ // Unknown what these bytes mean, possibly configures other settings of the device
9610
+ 0x09,
9611
+ 0x00,
9612
+ 0x00,
9613
+ 0x00,
9614
+ ];
9615
+ },
9616
+ },
9617
+ ],
9571
9618
  [101, 'ac_frequency', tuya.valueConverter.divideBy100],
9572
9619
  [102, 'voltage', tuya.valueConverter.divideBy10],
9573
9620
  [103, 'current', tuya.valueConverter.divideBy1000],
@@ -12145,6 +12192,116 @@ exports.definitions = [
12145
12192
  },
12146
12193
  whiteLabel: [{ vendor: 'ELECTSMART', model: 'EST-120Z' }],
12147
12194
  },
12195
+ {
12196
+ fingerprint: tuya.fingerprint('TS0601', ['_TZE284_khah2lkr']),
12197
+ model: 'TE-1Z',
12198
+ vendor: 'Tuya',
12199
+ description: 'Floor heating thermostat',
12200
+ fromZigbee: [tuya.fz.datapoints],
12201
+ toZigbee: [tuya.tz.datapoints],
12202
+ onEvent: tuya.onEventSetTime,
12203
+ configure: tuya.configureMagicPacket,
12204
+ exposes: [
12205
+ // e.binary('system_mode', ea.STATE_SET, 'ON', 'OFF')
12206
+ // .withDescription('Turn system on or standby mode'),
12207
+ e.binary('state', ea.STATE_SET, 'ON', 'OFF').withDescription('Turn system on or standby mode'),
12208
+ e
12209
+ .climate()
12210
+ .withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
12211
+ .withRunningState(['idle', 'heat'], ea.STATE)
12212
+ // you can change preset, but can't make auto back remotely so I would set this readonly
12213
+ .withPreset(['auto', 'manual', 'mixed'])
12214
+ .withLocalTemperatureCalibration(-9, 9, 1, ea.STATE_SET)
12215
+ .withLocalTemperature(ea.STATE),
12216
+ e.child_lock(),
12217
+ // you can change it to IN remotely but can not set it back, so I set it read only
12218
+ e
12219
+ .enum('sensor_mode', ea.STATE, ['IN', 'OU', 'AL'])
12220
+ .withDescription('IN - internal sensor, no heat protection. OU - external sensor, no heat protection. AL - internal sensor for room temperature, external for heat protection'),
12221
+ e
12222
+ .binary('high_temperature_protection_state', ea.STATE_SET, 'ON', 'OFF')
12223
+ .withDescription('If temperature hit the HIGH temperature limit, it ' +
12224
+ 'will turn off heating until it drops for amount of deadzone/hysteresis ' +
12225
+ 'degrees'),
12226
+ e.binary('low_temperature_protection_state', ea.STATE_SET, 'ON', 'OFF'),
12227
+ e
12228
+ .numeric('high_temperature_protection_setting', ea.STATE_SET)
12229
+ .withUnit('°C')
12230
+ .withValueMin(20)
12231
+ .withValueMax(70)
12232
+ .withDescription('Alarm temperature max')
12233
+ .withPreset('default', 45, 'Default value'),
12234
+ e
12235
+ .numeric('low_temperature_protection_setting', ea.STATE_SET)
12236
+ .withUnit('°C')
12237
+ .withValueMin(1)
12238
+ .withValueMax(10)
12239
+ .withDescription('Alarm temperature min')
12240
+ .withPreset('default', 5, 'Default value'),
12241
+ e.numeric('temperature_sensor', ea.STATE).withUnit('°C').withDescription('Floor temperature from external sensor'),
12242
+ e
12243
+ .deadzone_temperature()
12244
+ .withValueMin(1)
12245
+ .withValueMax(9)
12246
+ .withValueStep(1)
12247
+ .withUnit('°C')
12248
+ .withDescription('Hysteresis')
12249
+ .withPreset('default', 1, 'Default value'),
12250
+ e.max_temperature().withValueMin(20).withValueMax(70).withPreset('default', 35, 'Default value'),
12251
+ // @todo not tested
12252
+ tuya.exposes.errorStatus(),
12253
+ ],
12254
+ meta: {
12255
+ tuyaDatapoints: [
12256
+ // internal sensor temperature
12257
+ [16, 'local_temperature', tuya.valueConverter.divideBy10],
12258
+ [50, 'current_heating_setpoint', tuya.valueConverter.divideBy10],
12259
+ // data type 1
12260
+ [102, 'running_state', tuya.valueConverterBasic.lookup({ idle: false, heat: true })],
12261
+ [103, 'temperature_sensor', tuya.valueConverter.divideBy10],
12262
+ // can be changed by setting 112 below 20, data type 1
12263
+ [106, 'high_temperature_protection_state', tuya.valueConverter.onOff],
12264
+ // can be changed by setting 113 over 10, data type 1
12265
+ [107, 'low_temperature_protection_state', tuya.valueConverter.onOff],
12266
+ // range -9 to +9, data type 2, affects shown room temperature (even tho sensors detect its 19, you can make it show 21 by setting this to 2)
12267
+ [109, 'local_temperature_calibration', tuya.valueConverter.localTempCalibration3],
12268
+ // according to manual settable betwwen 0.5 and 2.5 degree.
12269
+ // staring with 5 as 0.5 degree, and 25 as 2.5 degree (data type 2)
12270
+ [110, 'temperature_return_difference', tuya.valueConverter.raw],
12271
+ // range 1-9. How far should temperature drop to turn back heating, if hight temp protection kicked in
12272
+ [111, 'deadzone_temperature', tuya.valueConverter.raw],
12273
+ // High temperature protection
12274
+ // range 20-70, trying to turn below 20 keeps this datapoint at 20 but turns 106 to 0
12275
+ [112, 'high_temperature_protection_setting', tuya.valueConverter.raw],
12276
+ // range 1-10, trying to turn over 10 keeps this datapoint at 10, but turns 107 to 0
12277
+ [113, 'low_temperature_protection_setting', tuya.valueConverter.raw],
12278
+ [114, 'max_temperature', tuya.valueConverter.raw],
12279
+ // choose_sensor
12280
+ // 0: device sensor. Switches "higsyht_temperature_protection_state" off
12281
+ // 1: external sensor / hight temperature protection off
12282
+ // 2: internal for room + external for high temperature protection. Switches "hight_temperature_protection_state" on
12283
+ [116, 'sensor_mode', tuya.valueConverterBasic.lookup({ IN: 0, OU: 1, AL: 2 })],
12284
+ // once every 24h it provides an array of numbers, maybe device fingerprint or something
12285
+ // [119, 'unknown_119', tuya.valueConverter.raw],
12286
+ // [120, 'unknown_120', tuya.valueConverter.raw],
12287
+ // [121, 'unknown_121', tuya.valueConverter.raw],
12288
+ // [122, 'unknown_122', tuya.valueConverter.raw],
12289
+ // device state
12290
+ // 0: standby mode - displays temperature but will not turn heating. Manual configuration is accessible only in this state
12291
+ // 1: fully functional, can turn on heating
12292
+ [125, 'system_mode', tuya.valueConverter.onOff],
12293
+ [125, 'state', tuya.valueConverter.onOff],
12294
+ // manual_mode
12295
+ // 1: automatically turns heating when protection levels hit
12296
+ // 2: you can turn off heating if it heats. You can set up target temperature
12297
+ // 3: you can set up target temperature and it will automatically try to maintain it
12298
+ [128, 'preset', tuya.valueConverterBasic.lookup({ auto: 1, manual: 0, mixed: 3 })],
12299
+ [129, 'child_lock', tuya.valueConverter.lockUnlock],
12300
+ // data type 5. Was [0] but went [16] when high temperature protection went into alert mode
12301
+ [130, 'error_status', tuya.valueConverter.raw],
12302
+ ],
12303
+ },
12304
+ },
12148
12305
  {
12149
12306
  fingerprint: tuya.fingerprint('TS0601', ['_TZE204_tagezcph']),
12150
12307
  model: 'PRO-900Z',