zigbee-herdsman-converters 14.0.636 → 14.0.638

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.
@@ -3327,6 +3327,12 @@ const converters = {
3327
3327
  await tuya.sendDataPointValue(entity, tuya.dataPoints.moesTempCalibration, value);
3328
3328
  },
3329
3329
  },
3330
+ moes_thermostat_min_temperature_limit: {
3331
+ key: ['min_temperature_limit'],
3332
+ convertSet: async (entity, key, value, meta) => {
3333
+ await tuya.sendDataPointValue(entity, tuya.dataPoints.moesMinTempLimit, value);
3334
+ },
3335
+ },
3330
3336
  moes_thermostat_max_temperature_limit: {
3331
3337
  key: ['max_temperature_limit'],
3332
3338
  convertSet: async (entity, key, value, meta) => {
package/devices/candeo.js CHANGED
@@ -1,5 +1,8 @@
1
+ const exposes = require('../lib/exposes');
2
+ const fz = require('../converters/fromZigbee');
1
3
  const reporting = require('../lib/reporting');
2
4
  const extend = require('../lib/extend');
5
+ const e = exposes.presets;
3
6
 
4
7
  module.exports = [
5
8
  {
@@ -21,4 +24,26 @@ module.exports = [
21
24
  await reporting.brightness(endpoint, {min: 1});
22
25
  },
23
26
  },
27
+ {
28
+ zigbeeModel: ['C204'],
29
+ model: 'C204',
30
+ vendor: 'Candeo',
31
+ description: 'Zigbee micro smart dimmer',
32
+ fromZigbee: extend.light_onoff_brightness().fromZigbee.concat([fz.electrical_measurement, fz.metering, fz.ignore_genOta]),
33
+ toZigbee: extend.light_onoff_brightness().toZigbee,
34
+ exposes: [e.light_brightness(), e.power(), e.voltage(), e.current(), e.energy()],
35
+ configure: async (device, coordinatorEndpoint, logger) => {
36
+ const endpoint = device.getEndpoint(1);
37
+ const binds = ['genOnOff', 'genLevelCtrl', 'haElectricalMeasurement', 'seMetering'];
38
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
39
+ await reporting.onOff(endpoint);
40
+ await reporting.brightness(endpoint);
41
+ await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
42
+ await reporting.activePower(endpoint);
43
+ await reporting.rmsCurrent(endpoint, {min: 10, change: 10});
44
+ await reporting.rmsVoltage(endpoint, {min: 10});
45
+ await reporting.readMeteringMultiplierDivisor(endpoint);
46
+ await reporting.currentSummDelivered(endpoint);
47
+ },
48
+ },
24
49
  ];
@@ -516,20 +516,23 @@ module.exports = [
516
516
  return {default: 35};
517
517
  },
518
518
  configure: async (device, coordinatorEndpoint, logger) => {
519
- const endpoint1 = device.getEndpoint(35);
520
- await reporting.bind(endpoint1, coordinatorEndpoint, ['genPowerCfg']);
521
- await reporting.batteryVoltage(endpoint1, {min: constants.repInterval.HOUR, max: 43200, change: 100});
522
- await endpoint1.read('genPowerCfg', ['batteryVoltage']);
523
- await endpoint1.read('genBasic', ['develcoLedControl'], manufacturerOptions);
524
- await endpoint1.read('ssIasZone', ['develcoAlarmOffDelay'], manufacturerOptions);
519
+ const endpoint35 = device.getEndpoint(35);
520
+ await reporting.bind(endpoint35, coordinatorEndpoint, ['genPowerCfg']);
521
+ await reporting.batteryVoltage(endpoint35, {min: constants.repInterval.HOUR, max: 43200, change: 100});
522
+ try {
523
+ await endpoint35.read('ssIasZone', ['develcoAlarmOffDelay'], manufacturerOptions);
524
+ await endpoint35.read('genBasic', ['develcoLedControl'], manufacturerOptions);
525
+ } catch (error) {/* some reports of timeouts on reading these */}
525
526
 
526
- const endpoint2 = device.getEndpoint(38);
527
- await reporting.bind(endpoint2, coordinatorEndpoint, ['msTemperatureMeasurement']);
528
- await reporting.temperature(endpoint2);
527
+ const endpoint38 = device.getEndpoint(38);
528
+ await reporting.bind(endpoint38, coordinatorEndpoint, ['msTemperatureMeasurement']);
529
+ await reporting.temperature(endpoint38,
530
+ {min: constants.repInterval.MINUTE, max: constants.repInterval.MINUTES_10, change: 100});
529
531
 
530
- const endpoint3 = device.getEndpoint(39);
531
- await reporting.bind(endpoint3, coordinatorEndpoint, ['msIlluminanceMeasurement']);
532
- await reporting.illuminance(endpoint3);
532
+ const endpoint39 = device.getEndpoint(39);
533
+ await reporting.bind(endpoint39, coordinatorEndpoint, ['msIlluminanceMeasurement']);
534
+ await reporting.illuminance(endpoint39,
535
+ {min: constants.repInterval.MINUTE, max: constants.repInterval.MINUTES_10, change: 500});
533
536
  },
534
537
  },
535
538
  {
package/devices/moes.js CHANGED
@@ -181,8 +181,8 @@ module.exports = [
181
181
  fromZigbee: [fz.moes_thermostat],
182
182
  toZigbee: [tz.moes_thermostat_child_lock, tz.moes_thermostat_current_heating_setpoint, tz.moes_thermostat_mode,
183
183
  tz.moes_thermostat_standby, tz.moes_thermostat_sensor, tz.moes_thermostat_calibration,
184
- tz.moes_thermostat_deadzone_temperature, tz.moes_thermostat_max_temperature_limit],
185
- exposes: [e.child_lock(), e.deadzone_temperature(), e.max_temperature_limit(),
184
+ tz.moes_thermostat_deadzone_temperature, tz.moes_thermostat_max_temperature_limit, tz.moes_thermostat_min_temperature_limit],
185
+ exposes: [e.child_lock(), e.deadzone_temperature(), e.max_temperature_limit(), e.min_temperature_limit(),
186
186
  exposes.climate().withSetpoint('current_heating_setpoint', 5, 30, 1, ea.STATE_SET)
187
187
  .withLocalTemperature(ea.STATE).withLocalTemperatureCalibration(-30, 30, 0.1, ea.STATE_SET)
188
188
  .withSystemMode(['off', 'heat'], ea.STATE_SET).withRunningState(['idle', 'heat', 'cool'], ea.STATE)
package/devices/nyce.js CHANGED
@@ -40,7 +40,6 @@ module.exports = [
40
40
  fromZigbee: [fz.occupancy, fz.humidity, fz.temperature, fz.ignore_basic_report, fz.ignore_genIdentify, fz.ignore_poll_ctrl,
41
41
  fz.battery, fz.ignore_iaszone_report, fz.ias_occupancy_alarm_2],
42
42
  toZigbee: [],
43
- meta: {battery: {dontDividePercentage: true}},
44
43
  exposes: [e.occupancy(), e.humidity(), e.temperature(), e.battery(), e.battery_low(), e.tamper()],
45
44
  },
46
45
  {
@@ -687,7 +687,7 @@ module.exports = [
687
687
  extend: hueExtend.light_onoff_brightness_colortemp_color(),
688
688
  },
689
689
  {
690
- zigbeeModel: ['4090531P9', '929003053601'],
690
+ zigbeeModel: ['4090531P9', '929003053601', '929003053501'],
691
691
  model: '4090531P9',
692
692
  vendor: 'Philips',
693
693
  description: 'Hue Flourish white and color ambiance ceiling light with Bluetooth',
package/devices/tuya.js CHANGED
@@ -2229,6 +2229,23 @@ module.exports = [
2229
2229
  .withDescription('Plug LED indicator mode'), e.child_lock()],
2230
2230
  onEvent: tuya.onEventMeasurementPoll,
2231
2231
  },
2232
+ {
2233
+ fingerprint: tuya.fingerprint('TS0601', ['_TZE200_ntcy3xu1']),
2234
+ model: 'TS0601_smoke_1',
2235
+ vendor: 'TuYa',
2236
+ description: 'Smoke sensor',
2237
+ fromZigbee: [tuya.fzDataPoints],
2238
+ toZigbee: [tuya.tzDataPoints],
2239
+ configure: tuya.configureMagicPacket,
2240
+ exposes: [e.smoke(), e.tamper(), e.battery_low()],
2241
+ meta: {
2242
+ tuyaDatapoints: [
2243
+ [1, 'smoke', tuya.valueConverter.true0ElseFalse],
2244
+ [4, 'tamper', tuya.valueConverter.raw],
2245
+ [14, 'battery_low', tuya.valueConverter.true0ElseFalse],
2246
+ ],
2247
+ },
2248
+ },
2232
2249
  {
2233
2250
  zigbeeModel: ['5p1vj8r'],
2234
2251
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_t5p1vj8r'}, {modelID: 'TS0601', manufacturerName: '_TZE200_uebojraa'}],
@@ -2240,7 +2257,7 @@ module.exports = [
2240
2257
  exposes: [e.smoke(), e.battery()],
2241
2258
  },
2242
2259
  {
2243
- fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_5d3vhjro'}, {modelID: 'TS0601', manufacturerName: '_TZE200_ntcy3xu1'}],
2260
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_5d3vhjro'}],
2244
2261
  model: 'SA12IZL',
2245
2262
  vendor: 'TuYa',
2246
2263
  description: 'Smart smoke alarm',
@@ -2255,7 +2272,7 @@ module.exports = [
2255
2272
  onEvent: tuya.onEventsetTime,
2256
2273
  },
2257
2274
  {
2258
- fingerprint: tuya.fingerprint('TS0601', ['_TZE200_lsanae15', '_TZE200_bkkmqmyo']),
2275
+ fingerprint: tuya.fingerprint('TS0601', ['_TZE200_lsanae15', '_TZE200_bkkmqmyo', '_TZE200_eaac7dkw']),
2259
2276
  model: 'TS0601_din_1',
2260
2277
  vendor: 'TuYa',
2261
2278
  description: 'Zigbee DIN energy meter',
@@ -2266,9 +2283,9 @@ module.exports = [
2266
2283
  meta: {
2267
2284
  tuyaDatapoints: [
2268
2285
  [1, 'energy', tuya.valueConverter.divideBy100],
2269
- [6, null, tuya.valueConverterMultiProperty.phaseA], // voltage and current
2286
+ [6, null, tuya.valueConverter.phaseA], // voltage and current
2270
2287
  [16, 'state', tuya.valueConverter.onOff],
2271
- [103, 'power', tuya.valueConverterBasic.raw],
2288
+ [103, 'power', tuya.valueConverter.raw],
2272
2289
  [105, 'ac_frequency', tuya.valueConverter.divideBy100],
2273
2290
  [111, 'power_factor', tuya.valueConverter.divideBy10],
2274
2291
  // Ignored for now; we don't know what the values mean
@@ -3165,6 +3182,7 @@ module.exports = [
3165
3182
  {
3166
3183
  fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_ikvncluo'},
3167
3184
  {modelID: 'TS0601', manufacturerName: '_TZE200_lyetpprm'},
3185
+ {modelID: 'TS0601', manufacturerName: '_TZE200_jva8ink8'},
3168
3186
  {modelID: 'TS0601', manufacturerName: '_TZE200_wukb7rhc'},
3169
3187
  {modelID: 'TS0601', manufacturerName: '_TZE200_ztc6ggyl'}],
3170
3188
  model: 'TS0601_smart_human_presense_sensor',
package/devices/ynoa.js CHANGED
@@ -6,6 +6,13 @@ const e = exposes.presets;
6
6
  const extend = require('..//lib/extend');
7
7
 
8
8
  module.exports = [
9
+ {
10
+ zigbeeModel: ['ZBT-CCTLight-GU100001'],
11
+ model: '8718801528273',
12
+ vendor: 'Ynoa',
13
+ description: 'Smart LED GU10 CCT',
14
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
15
+ },
9
16
  {
10
17
  zigbeeModel: ['ZBT-DIMSwitch-D0000'],
11
18
  model: '8718801528334',
package/lib/exposes.js CHANGED
@@ -588,7 +588,8 @@ module.exports = {
588
588
  max_heat_setpoint_limit: (min, max, step) => new Numeric('max_heat_setpoint_limit', access.ALL).withUnit('°C').withDescription('Maximum Heating set point limit').withValueMin(min).withValueMax(max).withValueStep(step),
589
589
  min_heat_setpoint_limit: (min, max, step) => new Numeric('min_heat_setpoint_limit', access.ALL).withUnit('°C').withDescription('Minimum Heating set point limit').withValueMin(min).withValueMax(max).withValueStep(step),
590
590
  max_temperature: () => new Numeric('max_temperature', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature').withValueMin(15).withValueMax(35),
591
- max_temperature_limit: () => new Numeric('max_temperature_limit', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature limit').withValueMin(0).withValueMax(35),
591
+ max_temperature_limit: () => new Numeric('max_temperature_limit', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature limit. Cuts the thermostat out regardless of air temperature if the external floor sensor exceeds this temperature. Only used by the thermostat when in AL sensor mode.').withValueMin(20).withValueMax(70),
592
+ min_temperature_limit: () => new Numeric('min_temperature_limit', access.STATE_SET).withUnit('°C').withDescription('Minimum temperature limit for frost protection. Turns the thermostat on regardless of setpoint if the tempreature drops below this.').withValueMin(1).withValueMax(5),
592
593
  min_temperature: () => new Numeric('min_temperature', access.STATE_SET).withUnit('°C').withDescription('Minimum temperature').withValueMin(1).withValueMax(15),
593
594
  noise: () => new Numeric('noise', access.STATE).withUnit('dBA').withDescription('The measured noise value'),
594
595
  noise_detected: () => new Binary('noise_detected', access.STATE, true, false).withDescription('Indicates whether the device detected noise'),
package/lib/tuya.js CHANGED
@@ -446,6 +446,7 @@ const dataPoints = {
446
446
  moesMaxTemp: 19,
447
447
  moesDeadZoneTemp: 20,
448
448
  moesLocalTemp: 24,
449
+ moesMinTempLimit: 26,
449
450
  moesTempCalibration: 27,
450
451
  moesValve: 36,
451
452
  moesChildLock: 40,
@@ -1183,7 +1184,9 @@ const valueConverterBasic = {
1183
1184
  scale: (min1, max1, min2, max2) => {
1184
1185
  return {to: (v) => utils.mapNumberRange(v, min1, max1, min2, max2), from: (v) => utils.mapNumberRange(v, min2, max2, min1, max1)};
1185
1186
  },
1186
- raw: {to: (v) => v, from: (v) => v},
1187
+ raw: () => {
1188
+ return {to: (v) => v, from: (v) => v};
1189
+ },
1187
1190
  divideBy: (value) => {
1188
1191
  return {to: (v) => v * value, from: (v) => v / value};
1189
1192
  },
@@ -1199,15 +1202,14 @@ const valueConverter = {
1199
1202
  scale0_1to0_1000: valueConverterBasic.scale(0, 1, 0, 1000),
1200
1203
  divideBy100: valueConverterBasic.divideBy(100),
1201
1204
  divideBy10: valueConverterBasic.divideBy(10),
1202
- };
1203
-
1204
- const valueConverterMultiProperty = {
1205
+ raw: valueConverterBasic.raw(),
1205
1206
  phaseA: {
1206
1207
  from: (v) => {
1207
1208
  const buffer = Buffer.from(v, 'base64');
1208
1209
  return {voltage: (buffer[14] | buffer[13] << 8) / 10, current: (buffer[12] | buffer[11] << 8) / 1000};
1209
1210
  },
1210
1211
  },
1212
+ true0ElseFalse: {from: (v) => v === 0},
1211
1213
  };
1212
1214
 
1213
1215
  const tzDataPoints = {
@@ -1270,9 +1272,8 @@ module.exports = {
1270
1272
  skip,
1271
1273
  configureMagicPacket,
1272
1274
  fingerprint,
1273
- valueConverterMultiProperty,
1274
- valueConverterBasic,
1275
1275
  valueConverter,
1276
+ valueConverterBasic,
1276
1277
  tzDataPoints,
1277
1278
  fzDataPoints,
1278
1279
  sendDataPoint,
package/lib/utils.js CHANGED
@@ -121,10 +121,12 @@ function postfixWithEndpointName(value, msg, definition, meta) {
121
121
  if (definition.meta && definition.meta.multiEndpoint) {
122
122
  const endpointName = definition.hasOwnProperty('endpoint') ?
123
123
  getKey(definition.endpoint(meta.device), msg.endpoint.ID) : msg.endpoint.ID;
124
- return `${value}_${endpointName}`;
125
- } else {
126
- return value;
124
+
125
+ // NOTE: endpointName can be undefined if we have a definition.endpoint and the endpoint is
126
+ // not listed.
127
+ if (endpointName) return `${value}_${endpointName}`;
127
128
  }
129
+ return value;
128
130
  }
129
131
 
130
132
  function getKey(object, value, fallback, convertTo) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.636",
3
+ "version": "14.0.638",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [