zigbee-herdsman-converters 14.0.614 → 14.0.615

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.
@@ -5119,7 +5119,7 @@ const converters = {
5119
5119
  '105_14': 'press_2_and_3_and_4', '105_15': 'press_all', '105_16': 'press_energy_bar', '106_0': 'release',
5120
5120
  };
5121
5121
 
5122
- const ID = `${commandID}_${msg.data.commandFrame.raw.join('_')}`;
5122
+ const ID = `${commandID}_${msg.data.commandFrame.raw.slice(0, 1).join('_')}`;
5123
5123
  if (!lookup.hasOwnProperty(ID)) {
5124
5124
  meta.logger.error(`PTM 216Z: missing command '${ID}'`);
5125
5125
  } else {
@@ -1430,6 +1430,7 @@ const converters = {
1430
1430
  }
1431
1431
  const minHeatSetpointLimit = result;
1432
1432
  await entity.write('hvacThermostat', {minHeatSetpointLimit});
1433
+ return {state: {min_heat_setpoint_limit: value}};
1433
1434
  },
1434
1435
  convertGet: async (entity, key, meta) => {
1435
1436
  await entity.read('hvacThermostat', ['minHeatSetpointLimit']);
@@ -1446,11 +1447,46 @@ const converters = {
1446
1447
  }
1447
1448
  const maxHeatSetpointLimit = result;
1448
1449
  await entity.write('hvacThermostat', {maxHeatSetpointLimit});
1450
+ return {state: {max_heat_setpoint_limit: value}};
1449
1451
  },
1450
1452
  convertGet: async (entity, key, meta) => {
1451
1453
  await entity.read('hvacThermostat', ['maxHeatSetpointLimit']);
1452
1454
  },
1453
1455
  },
1456
+ thermostat_min_cool_setpoint_limit: {
1457
+ key: ['min_cool_setpoint_limit'],
1458
+ convertSet: async (entity, key, value, meta) => {
1459
+ let result;
1460
+ if (meta.options.thermostat_unit === 'fahrenheit') {
1461
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1462
+ } else {
1463
+ result = (Math.round((value * 2).toFixed(1)) / 2).toFixed(1) * 100;
1464
+ }
1465
+ const minCoolSetpointLimit = result;
1466
+ await entity.write('hvacThermostat', {minCoolSetpointLimit});
1467
+ return {state: {min_cool_setpoint_limit: value}};
1468
+ },
1469
+ convertGet: async (entity, key, meta) => {
1470
+ await entity.read('hvacThermostat', ['minCoolSetpointLimit']);
1471
+ },
1472
+ },
1473
+ thermostat_max_cool_setpoint_limit: {
1474
+ key: ['max_cool_setpoint_limit'],
1475
+ convertSet: async (entity, key, value, meta) => {
1476
+ let result;
1477
+ if (meta.options.thermostat_unit === 'fahrenheit') {
1478
+ result = Math.round(utils.normalizeCelsiusVersionOfFahrenheit(value) * 100);
1479
+ } else {
1480
+ result = (Math.round((value * 2).toFixed(1)) / 2).toFixed(1) * 100;
1481
+ }
1482
+ const maxCoolSetpointLimit = result;
1483
+ await entity.write('hvacThermostat', {maxCoolSetpointLimit});
1484
+ return {state: {max_cool_setpoint_limit: value}};
1485
+ },
1486
+ convertGet: async (entity, key, meta) => {
1487
+ await entity.read('hvacThermostat', ['maxCoolSetpointLimit']);
1488
+ },
1489
+ },
1454
1490
  thermostat_ac_louver_position: {
1455
1491
  key: ['ac_louver_position'],
1456
1492
  convertSet: async (entity, key, value, meta) => {
package/devices/ecodim.js CHANGED
@@ -38,6 +38,11 @@ module.exports = [
38
38
  {ID: 1, profileID: 260, deviceID: 257, inputClusters: [0, 3, 4, 5, 6, 8, 2821, 4096], outputClusters: [25]},
39
39
  {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
40
40
  ]},
41
+ {type: 'Router', manufacturerName: 'EcoDim BV', modelID: 'EcoDim-Zigbee 3.0', endpoints: [
42
+ {ID: 1, profileID: 260, deviceID: 257, inputClusters: [0, 3, 4, 5, 6, 8, 2821, 4096], outputClusters: [25]},
43
+ {ID: 67, inputClusters: [], outputClusters: []},
44
+ {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
45
+ ]},
41
46
  ],
42
47
  zigbeeModel: ['Dimmer-Switch-ZB3.0'],
43
48
  model: 'Eco-Dim.07/Eco-Dim.10',
@@ -55,15 +55,16 @@ module.exports = [
55
55
  model: '99140-031',
56
56
  vendor: 'Kwikset',
57
57
  description: 'SmartCode traditional electronic deadbolt',
58
- fromZigbee: [fz.lock, fz.lock_operation_event, fz.battery],
59
- toZigbee: [tz.lock],
58
+ fromZigbee: [fz.lock, fz.lock_operation_event, fz.battery, fz.lock_programming_event, fz.lock_pin_code_response],
59
+ toZigbee: [tz.lock, tz.pincode_lock],
60
+ meta: {pinCodeCount: 30},
60
61
  configure: async (device, coordinatorEndpoint, logger) => {
61
62
  const endpoint = device.getEndpoint(2);
62
63
  await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
63
64
  await reporting.lockState(endpoint);
64
65
  await reporting.batteryPercentageRemaining(endpoint);
65
66
  },
66
- exposes: [e.lock(), e.battery(), e.lock_action(), e.lock_action_source_name(), e.lock_action_user()],
67
+ exposes: [e.lock(), e.battery(), e.pincode(), e.lock_action(), e.lock_action_source_name(), e.lock_action_user()],
67
68
  },
68
69
  {
69
70
  zigbeeModel: ['SMARTCODE_DEADBOLT_5'],
@@ -199,6 +199,29 @@ module.exports = [
199
199
  extend: extend.ledvance.light_onoff_brightness(),
200
200
  ota: ota.ledvance,
201
201
  },
202
-
202
+ {
203
+ zigbeeModel: ['A60 FIL DIM T'],
204
+ model: '4058075729209',
205
+ vendor: 'LEDVANCE',
206
+ description: 'SMART+ Filament Classic A 52 E27 Amber dimmable',
207
+ extend: extend.ledvance.light_onoff_brightness(),
208
+ ota: ota.ledvance,
209
+ },
210
+ {
211
+ zigbeeModel: ['EDISON60 FIL DIM T'],
212
+ model: '4058075729223',
213
+ vendor: 'LEDVANCE',
214
+ description: 'SMART+ Filament Edison 52 E27 Amber dimmable',
215
+ extend: extend.ledvance.light_onoff_brightness(),
216
+ ota: ota.ledvance,
217
+ },
218
+ {
219
+ zigbeeModel: ['GLOBE60 FIL DIM T'],
220
+ model: '4058075729247',
221
+ vendor: 'LEDVANCE',
222
+ description: 'SMART+ Filament Globe125 52 E27 Amber dimmable',
223
+ extend: extend.ledvance.light_onoff_brightness(),
224
+ ota: ota.ledvance,
225
+ },
203
226
 
204
227
  ];
package/devices/owon.js CHANGED
@@ -227,4 +227,51 @@ module.exports = [
227
227
  exposes.numeric('reactive_power_l3', ea.STATE).withUnit('VAr').withDescription('Phase 3 reactive power'),
228
228
  ],
229
229
  },
230
+ {
231
+ zigbeeModel: ['PCT504'],
232
+ model: 'PCT504',
233
+ vendor: 'OWON',
234
+ description: 'HVAC fan coil',
235
+ fromZigbee: [fz.fan, fz.thermostat, fz.humidity, fz.occupancy, fz.legacy.hvac_user_interface],
236
+ toZigbee: [tz.fan_mode, tz.thermostat_system_mode,
237
+ tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
238
+ tz.thermostat_occupied_cooling_setpoint, tz.thermostat_unoccupied_cooling_setpoint,
239
+ tz.thermostat_min_heat_setpoint_limit, tz.thermostat_max_heat_setpoint_limit,
240
+ tz.thermostat_min_cool_setpoint_limit, tz.thermostat_max_cool_setpoint_limit,
241
+ tz.thermostat_local_temperature, tz.thermostat_running_state,
242
+ tz.thermostat_keypad_lockout],
243
+ exposes: [e.local_temperature(), e.humidity(), e.occupancy(),
244
+ exposes.climate().withSystemMode(['off', 'heat', 'cool', 'fan_only']).withRunningState(['idle', 'heat', 'cool', 'fan_only'])
245
+ .withSetpoint('occupied_heating_setpoint', 5, 30, 0.5).withSetpoint('unoccupied_heating_setpoint', 5, 30, 0.5)
246
+ .withSetpoint('occupied_cooling_setpoint', 7, 35, 0.5).withSetpoint('unoccupied_cooling_setpoint', 7, 35, 0.5),
247
+ e.fan().withModes(['low', 'medium', 'high', 'on', 'auto']), e.keypad_lockout(),
248
+ e.max_heat_setpoint_limit(5, 30, 0.5), e.min_heat_setpoint_limit(5, 30, 0.5),
249
+ e.max_cool_setpoint_limit(7, 35, 0.5), e.min_cool_setpoint_limit(7, 35, 0.5)],
250
+ configure: async (device, coordinatorEndpoint, logger) => {
251
+ const endpoint = device.getEndpoint(1);
252
+ const binds = ['genBasic', 'genIdentify', 'genGroups', 'hvacThermostat', 'hvacUserInterfaceCfg', 'hvacFanCtrl',
253
+ 'msTemperatureMeasurement', 'msOccupancySensing'];
254
+ await reporting.bind(endpoint, coordinatorEndpoint, binds);
255
+ await reporting.fanMode(endpoint);
256
+ await reporting.bind(endpoint, coordinatorEndpoint, ['hvacThermostat']);
257
+ await reporting.thermostatOccupiedHeatingSetpoint(endpoint);
258
+ await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint);
259
+ await reporting.thermostatOccupiedCoolingSetpoint(endpoint);
260
+ await reporting.thermostatUnoccupiedCoolingSetpoint(endpoint);
261
+ await reporting.thermostatTemperature(endpoint, {min: 60, max: 600, change: 0.1});
262
+ await reporting.thermostatSystemMode(endpoint);
263
+ await reporting.humidity(endpoint, {min: 60, max: 600, change: 1});
264
+ await reporting.thermostatKeypadLockMode(endpoint);
265
+
266
+ await endpoint.read('hvacThermostat', ['systemMode', 'runningState', 'occupiedHeatingSetpoint', 'unoccupiedHeatingSetpoint',
267
+ 'occupiedCoolingSetpoint', 'unoccupiedCoolingSetpoint', 'localTemp'],
268
+ 'minHeatSetpointLimit', 'maxHeatSetpointLimit', 'minCoolSetpointLimit', 'maxCoolSetpointLimit');
269
+ await endpoint.read('msRelativeHumidity', ['measuredValue']);
270
+
271
+ const endpoint2 = device.getEndpoint(2);
272
+ await reporting.bind(endpoint2, coordinatorEndpoint, ['msOccupancySensing']);
273
+ await reporting.occupancy(endpoint2, {min: 1, max: 600, change: 1});
274
+ await endpoint2.read('msOccupancySensing', ['occupancy']);
275
+ },
276
+ },
230
277
  ];
@@ -87,7 +87,12 @@ module.exports = [
87
87
  ota: ota.salus,
88
88
  },
89
89
  {
90
- zigbeeModel: ['SS909ZB'],
90
+ zigbeeModel: [
91
+ 'SS909ZB',
92
+ 'PS600\u0000\u0000 �\u0001 ��\u0000\u0000\t\u0001@\u0011�u\u0000\u0000\u0018&\n\u0005\u0000B',
93
+ 'PS600\u0000\u0000 �\u0001 ��\u0000\u0000\t\u0001@\u0011�u\u0000\u0000\u0018\u0006\n\u0005\u0000',
94
+ 'PS600\u0000\u0000 �\u0001 ��\u0000\u0000\t\u0001@\u0011�u\u0000\u0000\u0018\u0006\n\u0005\u0000B',
95
+ ],
91
96
  model: 'PS600',
92
97
  vendor: 'Salus Controls',
93
98
  description: 'Pipe temperature sensor',
package/lib/constants.js CHANGED
@@ -24,6 +24,7 @@ const thermostatControlSequenceOfOperations = {
24
24
  const thermostatProgrammingOperationModes = {
25
25
  0: 'setpoint',
26
26
  1: 'schedule',
27
+ 4: 'eco',
27
28
  };
28
29
 
29
30
  const thermostatSystemModes = {
package/lib/exposes.js CHANGED
@@ -588,6 +588,10 @@ module.exports = {
588
588
  lock_action: () => new Enum('action', access.STATE, ['unknown', 'lock', 'unlock', 'lock_failure_invalid_pin_or_id', 'lock_failure_invalid_schedule', 'unlock_failure_invalid_pin_or_id', 'unlock_failure_invalid_schedule', 'one_touch_lock', 'key_lock', 'key_unlock', 'auto_lock', 'schedule_lock', 'schedule_unlock', 'manual_lock', 'manual_unlock', 'non_access_user_operational_event']).withDescription('Triggered action on the lock'),
589
589
  lock_action_source_name: () => new Enum('action_source_name', access.STATE, ['keypad', 'rfid', 'manual', 'rf']).withDescription('Source of the triggered action on the lock'),
590
590
  lock_action_user: () => new Numeric('action_user', access.STATE).withDescription('ID of user that triggered the action on the lock'),
591
+ max_cool_setpoint_limit: (min, max, step) => new Numeric('max_cool_setpoint_limit', access.ALL).withUnit('°C').withDescription('Maximum Cooling set point limit').withValueMin(min).withValueMax(max).withValueStep(step),
592
+ min_cool_setpoint_limit: (min, max, step) => new Numeric('min_cool_setpoint_limit', access.ALL).withUnit('°C').withDescription('Minimum Cooling point limit').withValueMin(min).withValueMax(max).withValueStep(step),
593
+ 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),
594
+ 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),
591
595
  max_temperature: () => new Numeric('max_temperature', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature').withValueMin(15).withValueMax(35),
592
596
  max_temperature_limit: () => new Numeric('max_temperature_limit', access.STATE_SET).withUnit('°C').withDescription('Maximum temperature limit').withValueMin(0).withValueMax(35),
593
597
  min_temperature: () => new Numeric('min_temperature', access.STATE_SET).withUnit('°C').withDescription('Minimum temperature').withValueMin(1).withValueMax(15),
@@ -608,7 +612,7 @@ module.exports = {
608
612
  power_outage_memory: () => new Binary('power_outage_memory', access.ALL, true, false).withDescription('Enable/disable the power outage memory, this recovers the on/off mode after power failure'),
609
613
  presence: () => new Binary('presence', access.STATE, true, false).withDescription('Indicates whether the device detected presence'),
610
614
  pressure: () => new Numeric('pressure', access.STATE).withUnit('hPa').withDescription('The measured atmospheric pressure'),
611
- programming_operation_mode: () => new Enum('programming_operation_mode', access.ALL, ['setpoint', 'schedule']).withDescription('Controls how programming affects the thermostat. Possible values: setpoint (only use specified setpoint), schedule (follow programmed setpoint schedule). Changing this value does not clear programmed schedules.'),
615
+ programming_operation_mode: () => new Enum('programming_operation_mode', access.ALL, ['setpoint', 'schedule', 'eco']).withDescription('Controls how programming affects the thermostat. Possible values: setpoint (only use specified setpoint), schedule (follow programmed setpoint schedule). Changing this value does not clear programmed schedules.'),
612
616
  smoke: () => new Binary('smoke', access.STATE, true, false).withDescription('Indicates whether the device detected smoke'),
613
617
  soil_moisture: () => new Numeric('soil_moisture', access.STATE).withUnit('%').withDescription('Measured soil moisture value'),
614
618
  sos: () => new Binary('sos', access.STATE, true, false).withDescription('SOS alarm'),
package/lib/tuya.js CHANGED
@@ -595,6 +595,8 @@ const dataPoints = {
595
595
  dinrailPowerMeterCurrent: 18,
596
596
  dinrailPowerMeterPower: 19,
597
597
  dinrailPowerMeterVoltage: 20,
598
+ dinrailPowerMeterTotalEnergy2: 101,
599
+ dinrailPowerMeterPower2: 103,
598
600
  // tuya smart air box
599
601
  tuyaSabCO2: 2,
600
602
  tuyaSabTemp: 18,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.614",
3
+ "version": "14.0.615",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [