zigbee-herdsman-converters 14.0.360 → 14.0.364

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.
@@ -7351,7 +7351,7 @@ const converters = {
7351
7351
  case tuya.dataPoints.trsMotionSpeed:
7352
7352
  return {motion_speed: value};
7353
7353
  case tuya.dataPoints.trsMotionDirection:
7354
- return {motion_direction: {0: 'still', 1: 'forward', 2: 'backward'}[value]};
7354
+ return {motion_direction: {0: 'standing_still', 1: 'moving_forward', 2: 'moving_backward'}[value]};
7355
7355
  case tuya.dataPoints.trsScene:
7356
7356
  return {radar_scene: {'default': 0, 'area': 1, 'toilet': 2, 'bedroom': 3, 'parlour': 4, 'office': 5, 'hotel': 6}[value]};
7357
7357
  case tuya.dataPoints.trsSensitivity:
@@ -805,7 +805,7 @@ const converters = {
805
805
  if (state === 'toggle' || state === 'off' || (brightness === undefined && state === 'on')) {
806
806
  if (transition.specified) {
807
807
  if (state === 'toggle') {
808
- state = meta.state.state === 'ON' ? 'OFF' : 'ON';
808
+ state = meta.state.state === 'ON' ? 'off' : 'on';
809
809
  }
810
810
 
811
811
  if (state === 'off' && meta.state.brightness && meta.state.state === 'ON') {
@@ -327,7 +327,7 @@ module.exports = [
327
327
  extend: gledoptoExtend.light_onoff_brightness_colortemp_color(),
328
328
  },
329
329
  {
330
- zigbeeModel: ['GL-S-007Z'],
330
+ zigbeeModel: ['GL-S-007Z', 'GL-S-007Z(lk)'],
331
331
  model: 'GL-S-007Z',
332
332
  vendor: 'Gledopto',
333
333
  description: 'Zigbee 5W GU10 Bulb RGB+CCT',
@@ -1,5 +1,6 @@
1
1
  const ota = require('../lib/ota');
2
2
  const extend = require('../lib/extend');
3
+ const reporting = require('../lib/reporting');
3
4
 
4
5
  module.exports = [
5
6
  {
@@ -9,6 +10,11 @@ module.exports = [
9
10
  description: 'Smart Zigbee outdoor plug',
10
11
  extend: extend.switch(),
11
12
  ota: ota.ledvance,
13
+ configure: async (device, coordinatorEndpoint, logger) => {
14
+ const endpoint = device.getEndpoint(1);
15
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
16
+ await reporting.onOff(endpoint);
17
+ },
12
18
  },
13
19
  {
14
20
  zigbeeModel: ['Panel TW Z3'],
package/devices/lidl.js CHANGED
@@ -696,7 +696,7 @@ module.exports = [
696
696
  exposes.numeric('current_heating_setpoint_auto', ea.STATE_SET).withValueMin(0.5).withValueMax(29.5)
697
697
  .withValueStep(0.5).withUnit('°C').withDescription('Temperature setpoint automatic'),
698
698
  exposes.climate().withSetpoint('current_heating_setpoint', 0.5, 29.5, 0.5, ea.STATE_SET)
699
- .withLocalTemperature(ea.STATE).withLocalTemperatureCalibration(-30, 30, 0.1, ea.STATE_SET)
699
+ .withLocalTemperature(ea.STATE).withLocalTemperatureCalibration(-12.5, 5.5, 0.1, ea.STATE_SET)
700
700
  .withSystemMode(['off', 'heat', 'auto'], ea.STATE_SET)
701
701
  .withPreset(['schedule', 'manual', 'holiday', 'boost']),
702
702
  exposes.numeric('detectwindow_temperature', ea.STATE_SET).withUnit('°C').withDescription('Open window detection temperature')
@@ -29,6 +29,15 @@ const hueExtend = {
29
29
  };
30
30
 
31
31
  module.exports = [
32
+ {
33
+ zigbeeModel: ['929003054001'],
34
+ model: '929003054001',
35
+ vendor: 'Philips',
36
+ description: 'Hue Wellness table lamp',
37
+ meta: {turnsOffAtBrightness1: true},
38
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
39
+ ota: ota.zigbeeOTA,
40
+ },
32
41
  {
33
42
  zigbeeModel: ['4076131P6'],
34
43
  model: '4076131P6',
@@ -1913,6 +1922,39 @@ module.exports = [
1913
1922
  },
1914
1923
  ota: ota.zigbeeOTA,
1915
1924
  },
1925
+ {
1926
+ zigbeeModel: ['SML004'],
1927
+ model: '9290030674',
1928
+ vendor: 'Philips',
1929
+ description: 'Hue motion outdoor sensor',
1930
+ fromZigbee: [fz.battery, fz.occupancy, fz.temperature, fz.illuminance, fz.occupancy_timeout,
1931
+ fz.hue_motion_sensitivity, fz.hue_motion_led_indication],
1932
+ exposes: [e.temperature(), e.occupancy(), e.battery(), e.illuminance_lux(), e.illuminance(),
1933
+ exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']),
1934
+ exposes.binary('led_indication', ea.ALL, true, false).withDescription('Blink green LED on motion detection'),
1935
+ exposes.numeric('occupancy_timeout', ea.ALL).withUnit('second').withValueMin(0).withValueMax(65535)],
1936
+ toZigbee: [tz.occupancy_timeout, tz.hue_motion_sensitivity, tz.hue_motion_led_indication],
1937
+ endpoint: (device) => {
1938
+ return {
1939
+ 'default': 2, // default
1940
+ 'ep1': 1,
1941
+ 'ep2': 2, // e.g. for write to msOccupancySensing
1942
+ };
1943
+ },
1944
+ configure: async (device, coordinatorEndpoint, logger) => {
1945
+ const endpoint = device.getEndpoint(2);
1946
+ const binds = ['genPowerCfg', 'msIlluminanceMeasurement', 'msTemperatureMeasurement', 'msOccupancySensing'];
1947
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
1948
+ await reporting.batteryPercentageRemaining(endpoint);
1949
+ await reporting.occupancy(endpoint);
1950
+ await reporting.temperature(endpoint);
1951
+ await reporting.illuminance(endpoint);
1952
+ // read occupancy_timeout and motion_sensitivity
1953
+ await endpoint.read('msOccupancySensing', ['pirOToUDelay']);
1954
+ await endpoint.read('msOccupancySensing', [48], {manufacturerCode: 4107});
1955
+ },
1956
+ ota: ota.zigbeeOTA,
1957
+ },
1916
1958
  {
1917
1959
  zigbeeModel: ['LOM001'],
1918
1960
  model: '929002240401',
@@ -283,7 +283,7 @@ module.exports = [
283
283
  exposes: [e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'), e.action(['on_s*', 'off_s*'])],
284
284
  configure: async (device, coordinatorEndpoint, logger) => {
285
285
  device.endpoints.forEach(async (ep) => {
286
- if (ep.outputClusters.includes(6)) {
286
+ if (ep.outputClusters.includes(6) || ep.ID <= 2) {
287
287
  await reporting.bind(ep, coordinatorEndpoint, ['genOnOff']);
288
288
  if (ep.ID <= 2) {
289
289
  await reporting.onOff(ep);
package/devices/sinope.js CHANGED
@@ -151,14 +151,18 @@ module.exports = [
151
151
  await reporting.thermostatRunningState(endpoint);
152
152
  } catch (error) {/* Not all support this */}
153
153
 
154
- await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
155
154
  try {
155
+ await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
156
156
  await reporting.activePower(endpoint, {min: 10, max: 305, change: 1}); // divider 1: 1W
157
- } catch (error) {/* Do nothing*/}
157
+ } catch (error) {
158
+ endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {'acPowerMultiplier': 1, 'acPowerDivisor': 1});
159
+ }
158
160
  try {
161
+ await endpoint.read('haElectricalMeasurement', ['acCurrentMultiplier', 'acCurrentDivisor']);
159
162
  await reporting.rmsCurrent(endpoint, {min: 10, max: 306, change: 100}); // divider 1000: 0.1Arms
160
163
  } catch (error) {/* Do nothing*/}
161
164
  try {
165
+ await endpoint.read('haElectricalMeasurement', ['acVoltageMultiplier', 'acVoltageDivisor']);
162
166
  await reporting.rmsVoltage(endpoint, {min: 10, max: 307, change: 5}); // divider 10: 0.5Vrms
163
167
  } catch (error) {/* Do nothing*/}
164
168
 
@@ -133,12 +133,18 @@ module.exports = [
133
133
  model: 'IM6001-OTP05',
134
134
  vendor: 'SmartThings',
135
135
  description: 'Outlet',
136
- extend: extend.switch(),
136
+ fromZigbee: [fz.on_off, fz.electrical_measurement],
137
+ toZigbee: [tz.on_off],
137
138
  configure: async (device, coordinatorEndpoint, logger) => {
138
139
  const endpoint = device.getEndpoint(1);
139
- await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
140
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
140
141
  await reporting.onOff(endpoint);
142
+ await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
143
+ await reporting.activePower(endpoint);
144
+ await reporting.rmsCurrent(endpoint);
145
+ await reporting.rmsVoltage(endpoint);
141
146
  },
147
+ exposes: [e.switch(), e.power(), e.current(), e.voltage()],
142
148
  },
143
149
  {
144
150
  zigbeeModel: ['outletv4'],
package/devices/tuya.js CHANGED
@@ -133,7 +133,8 @@ module.exports = [
133
133
  {
134
134
  fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_rk2yzt0u'},
135
135
  {modelID: 'TS0001', manufacturerName: '_TZ3000_o4cjetlm'}, {manufacturerName: '_TZ3000_o4cjetlm'},
136
- {modelID: 'TS0001', manufacturerName: '_TZ3000_iedbgyxt'}, {modelID: 'TS0001', manufacturerName: '_TZ3000_h3noz0a5'}],
136
+ {modelID: 'TS0001', manufacturerName: '_TZ3000_iedbgyxt'}, {modelID: 'TS0001', manufacturerName: '_TZ3000_h3noz0a5'},
137
+ {modelID: 'TS0001', manufacturerName: '_TYZB01_4tlksk8a'}],
137
138
  model: 'ZN231392',
138
139
  vendor: 'TuYa',
139
140
  description: 'Smart water/gas valve',
@@ -181,7 +182,8 @@ module.exports = [
181
182
  meta: {applyRedFix: true, enhancedHue: false},
182
183
  },
183
184
  {
184
- fingerprint: [{modelID: 'TS0504B', manufacturerName: '_TZ3000_ukuvyhaa'}],
185
+ fingerprint: [{modelID: 'TS0504B', manufacturerName: '_TZ3000_ukuvyhaa'},
186
+ {modelID: 'TS0504B', manufacturerName: '_TZ3210_bfvybixd'}],
185
187
  model: 'TS0504B',
186
188
  vendor: 'TuYa',
187
189
  description: 'Zigbee RGBW light',
@@ -207,8 +209,10 @@ module.exports = [
207
209
  {modelID: 'TS0202', manufacturerName: '_TYZB01_qjqgmqxr'},
208
210
  {modelID: 'TS0202', manufacturerName: '_TZ3000_mmtwjmaq'},
209
211
  {modelID: 'TS0202', manufacturerName: '_TZ3000_kmh5qpmb'},
212
+ {modelID: 'TS0202', manufacturerName: '_TYZB01_zwvaj5wy'},
210
213
  {modelID: 'TS0202', manufacturerName: '_TZ3000_mcxw5ehu'},
211
214
  {modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'},
215
+ {modelID: 'TS0202', manufacturerName: '_TYZB01_tv3wxhcz'},
212
216
  {modelID: 'TS0202', manufacturerName: '_TYZB01_hqbdru35'},
213
217
  {modelID: 'WHD02', manufacturerName: '_TZ3000_hktqahrq'}],
214
218
  model: 'TS0202',
@@ -488,6 +492,7 @@ module.exports = [
488
492
  {modelID: 'TS0502B', manufacturerName: '_TZ3210_hi1ym4bl'},
489
493
  {modelID: 'TS0502B', manufacturerName: '_TZ3210_psgq7ysz'},
490
494
  {modelID: 'TS0502B', manufacturerName: '_TZ3000_zw7wr5uo'},
495
+ {modelID: 'TS0502B', manufacturerName: '_TZ3210_pz9zmxjj'},
491
496
  ],
492
497
  model: 'TS0502B',
493
498
  vendor: 'TuYa',
@@ -532,6 +537,15 @@ module.exports = [
532
537
  toZigbee: [],
533
538
  exposes: [e.battery(), e.temperature(), e.humidity(), e.battery_voltage()],
534
539
  },
540
+ {
541
+ fingerprint: [{modelID: 'TS0201', manufacturerName: '_TZ3000_bguser20'}],
542
+ model: 'WSD500A',
543
+ vendor: 'TuYa',
544
+ description: 'Temperature & humidity sensor',
545
+ fromZigbee: [fz.battery, fz.temperature, fz.humidity],
546
+ toZigbee: [],
547
+ exposes: [e.battery(), e.temperature(), e.humidity(), e.battery_voltage()],
548
+ },
535
549
  {
536
550
  fingerprint: [{modelID: 'SM0201', manufacturerName: '_TYZB01_cbiezpds'}],
537
551
  model: 'SM0201',
@@ -800,6 +814,7 @@ module.exports = [
800
814
  {modelID: 'TS0601', manufacturerName: '_TZE200_fzo2pocs'},
801
815
  {modelID: 'TS0601', manufacturerName: '_TZE200_5sbebbzs'},
802
816
  {modelID: 'TS0601', manufacturerName: '_TZE200_zuz7f94z'},
817
+ {modelID: 'TS0601', manufakturerName: '_TZE200_iossyxra'},
803
818
  ],
804
819
  model: 'TS0601_cover',
805
820
  vendor: 'TuYa',
@@ -862,7 +877,10 @@ module.exports = [
862
877
  exposes: [
863
878
  e.child_lock(), e.window_detection(), e.battery_low(), e.valve_detection(), e.position(),
864
879
  exposes.climate().withSetpoint('current_heating_setpoint', 5, 35, 0.5, ea.STATE_SET)
865
- .withLocalTemperature(ea.STATE).withSystemMode(['heat', 'auto', 'off'], ea.STATE_SET)
880
+ .withLocalTemperature(ea.STATE).withSystemMode(['heat', 'auto', 'off'], ea.STATE_SET,
881
+ 'Mode of this device, in the `heat` mode the TS0601 will remain continuously heating, i.e. it does not regulate ' +
882
+ 'to the desired temperature. If you want TRV to properly regulate the temperature you need to use mode `auto` ' +
883
+ 'instead setting the desired temperature.')
866
884
  .withLocalTemperatureCalibration(-30, 30, 0.1, ea.STATE_SET)
867
885
  .withAwayMode().withPreset(['schedule', 'manual', 'boost', 'complex', 'comfort', 'eco']),
868
886
  e.auto_lock(), e.away_mode(), e.away_preset_days(), e.boost_time(), e.comfort_temperature(), e.eco_temperature(), e.force(),
@@ -1142,22 +1160,25 @@ module.exports = [
1142
1160
  exposes: [e.switch().setAccess('state', ea.STATE_SET), e.voltage(), e.power(), e.current(), e.energy()],
1143
1161
  },
1144
1162
  {
1145
- fingerprint: [{modelID: 'TS1101', manufacturerName: '_TZ3000_7ysdnebc'},
1146
- {modelID: 'TS1101', manufacturerName: '_TZ3000_xfs39dbf'}],
1147
- model: 'TS1101_dimmer_module',
1163
+ fingerprint: [{modelID: 'TS1101', manufacturerName: '_TZ3000_xfs39dbf'}],
1164
+ model: 'TS1101_dimmer_module_1ch',
1148
1165
  vendor: 'TuYa',
1149
- description: '2CH Zigbee dimmer module',
1166
+ description: 'Zigbee dimmer module 1 channel',
1167
+ fromZigbee: extend.light_onoff_brightness().fromZigbee.concat([fz.tuya_min_brightness]),
1168
+ toZigbee: extend.light_onoff_brightness().toZigbee.concat([tz.tuya_min_brightness]),
1169
+ exposes: [e.light_brightness().withMinBrightness()],
1170
+ extend: extend.light_onoff_brightness(),
1171
+ },
1172
+ {
1173
+ fingerprint: [{modelID: 'TS1101', manufacturerName: '_TZ3000_7ysdnebc'}],
1174
+ model: 'TS1101_dimmer_module_2ch',
1175
+ vendor: 'TuYa',
1176
+ description: 'Zigbee dimmer module 2 channel',
1150
1177
  whiteLabel: [{vendor: 'OXT', model: 'SWTZ25'}],
1151
- fromZigbee: extend.light_onoff_brightness().fromZigbee.concat([
1152
- fz.tuya_min_brightness,
1153
- ]),
1154
- toZigbee: extend.light_onoff_brightness().toZigbee.concat([
1155
- tz.tuya_min_brightness,
1156
- ]),
1157
- exposes: [
1158
- e.light_brightness().withMinBrightness().withEndpoint('l1'),
1159
- e.light_brightness().withMinBrightness().withEndpoint('l2'),
1160
- ],
1178
+ fromZigbee: extend.light_onoff_brightness().fromZigbee.concat([fz.tuya_min_brightness]),
1179
+ toZigbee: extend.light_onoff_brightness().toZigbee.concat([tz.tuya_min_brightness]),
1180
+ exposes: [e.light_brightness().withMinBrightness().withEndpoint('l1'),
1181
+ e.light_brightness().withMinBrightness().withEndpoint('l2')],
1161
1182
  endpoint: (device) => {
1162
1183
  return {'l1': 1, 'l2': 2};
1163
1184
  },
@@ -1662,7 +1683,7 @@ module.exports = [
1662
1683
  e.illuminance_lux(), e.presence(),
1663
1684
  exposes.binary('motion', ea.STATE, [true, false]).withDescription('moving inside the range of the sensor'),
1664
1685
  exposes.numeric('motion_speed', ea.STATE).withDescription('Speed of movement'),
1665
- exposes.enum('motion_direction', ea.STATE, ['standing still', 'moving forward', 'moving backward'])
1686
+ exposes.enum('motion_direction', ea.STATE, ['standing_still', 'moving_forward', 'moving_backward'])
1666
1687
  .withDescription('direction of movement from the point of view of the radar'),
1667
1688
  exposes.numeric('radar_sensitivity', ea.STATE_SET).withValueMin(0).withValueMax(10).withValueStep(1)
1668
1689
  .withDescription('sensitivity of the radar'),
@@ -1771,4 +1792,13 @@ module.exports = [
1771
1792
  exposes.enum('clear_device_data', ea.SET, ['clear']),
1772
1793
  ],
1773
1794
  },
1795
+ {
1796
+ fingerprint: [{modelID: 'TS004F', manufacturerName: '_TZ3000_4fjiwweb'}],
1797
+ model: 'ERS-10TZBVK-AA',
1798
+ vendor: 'TuYa',
1799
+ description: 'Smart knob',
1800
+ fromZigbee: [fz.command_step, fz.command_toggle, fz.command_move_hue],
1801
+ toZigbee: [],
1802
+ exposes: [e.action(['toggle', 'brightness_step_up', 'brightness_step_down'])],
1803
+ },
1774
1804
  ];
package/devices/xiaomi.js CHANGED
@@ -47,7 +47,7 @@ module.exports = [
47
47
  description: 'Aqara E1 door & window contact sensor',
48
48
  fromZigbee: [fz.ias_contact_alarm_1, fz.aqara_opple],
49
49
  toZigbee: [],
50
- exposes: [e.contact(), e.battery(), e.battery_voltage()],
50
+ exposes: [e.contact(), e.battery(), e.temperature(), e.battery_voltage()],
51
51
  },
52
52
  {
53
53
  zigbeeModel: ['lumi.magnet.ac01'],
package/lib/exposes.js CHANGED
@@ -378,11 +378,11 @@ class Climate extends Base {
378
378
  return this;
379
379
  }
380
380
 
381
- withSystemMode(modes, access=a.ALL) {
381
+ withSystemMode(modes, access=a.ALL, description='Mode of this device') {
382
382
  assert(!this.endpoint, 'Cannot add feature after adding endpoint');
383
383
  const allowed = ['off', 'heat', 'cool', 'auto', 'dry', 'fan_only', 'sleep', 'emergency_heating'];
384
384
  modes.forEach((m) => assert(allowed.includes(m)));
385
- this.features.push(new Enum('system_mode', access, modes).withDescription('Mode of this device'));
385
+ this.features.push(new Enum('system_mode', access, modes).withDescription(description));
386
386
  return this;
387
387
  }
388
388
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.360",
3
+ "version": "14.0.364",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.360",
3
+ "version": "14.0.364",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [