zigbee-herdsman-converters 14.0.345 → 14.0.346

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.
@@ -652,6 +652,18 @@ const converters = {
652
652
  return payload;
653
653
  },
654
654
  },
655
+ EKO09738_metering: {
656
+ /**
657
+ * Elko EKO09738 and EKO09716 reports power in mW, scale to W
658
+ */
659
+ cluster: 'seMetering',
660
+ type: ['attributeReport', 'readResponse'],
661
+ convert: (model, msg, publish, options, meta) => {
662
+ const result = converters.metering.convert(model, msg, publish, options, meta);
663
+ result.power /= 1000;
664
+ return result;
665
+ },
666
+ },
655
667
  develco_metering: {
656
668
  cluster: 'seMetering',
657
669
  type: ['attributeReport', 'readResponse'],
@@ -3104,6 +3116,9 @@ const converters = {
3104
3116
  result[postfixWithEndpointName('external_measured_room_sensor', msg, model)] =
3105
3117
  msg.data['danfossExternalMeasuredRoomSensor'];
3106
3118
  }
3119
+ if (msg.data.hasOwnProperty('danfossRadiatorCovered')) {
3120
+ result[postfixWithEndpointName('radiator_covered', msg, model)] = (msg.data['danfossRadiatorCovered'] === 1);
3121
+ }
3107
3122
  if (msg.data.hasOwnProperty('danfossViewingDirection')) {
3108
3123
  result[postfixWithEndpointName('viewing_direction', msg, model)] = (msg.data['danfossViewingDirection'] === 1);
3109
3124
  }
@@ -2467,6 +2467,16 @@ const converters = {
2467
2467
  await entity.read('hvacThermostat', ['danfossExternalMeasuredRoomSensor'], manufacturerOptions.danfoss);
2468
2468
  },
2469
2469
  },
2470
+ danfoss_radiator_covered: {
2471
+ key: ['radiator_covered'],
2472
+ convertSet: async (entity, key, value, meta) => {
2473
+ await entity.write('hvacThermostat', {'danfossRadiatorCovered': value}, manufacturerOptions.danfoss);
2474
+ return {readAfterWriteTime: 200, state: {'radiator_covered': value}};
2475
+ },
2476
+ convertGet: async (entity, key, meta) => {
2477
+ await entity.read('hvacThermostat', ['danfossRadiatorCovered'], manufacturerOptions.danfoss);
2478
+ },
2479
+ },
2470
2480
  danfoss_viewing_direction: {
2471
2481
  key: ['viewing_direction'],
2472
2482
  convertSet: async (entity, key, value, meta) => {
@@ -311,4 +311,25 @@ module.exports = [
311
311
  },
312
312
  exposes: [e.battery(), e.temperature(), e.humidity(), e.pressure()],
313
313
  },
314
+ {
315
+ zigbeeModel: ['EFEKTA_PWS_Max'],
316
+ model: 'EFEKTA_PWS_Max',
317
+ vendor: 'Custom devices (DiY)',
318
+ description: '[Plant watering sensor EFEKTA PWS max](http://efektalab.com/PWS_Max)',
319
+ fromZigbee: [fz.temperature, fz.humidity, fz.illuminance, fz.soil_moisture, fz.battery],
320
+ toZigbee: [tz.factory_reset],
321
+ configure: async (device, coordinatorEndpoint, logger) => {
322
+ const firstEndpoint = device.getEndpoint(1);
323
+ await reporting.bind(firstEndpoint, coordinatorEndpoint, [
324
+ 'genPowerCfg', 'msTemperatureMeasurement', 'msRelativeHumidity', 'msIlluminanceMeasurement', 'msSoilMoisture']);
325
+ const overides = {min: 0, max: 21600, change: 0};
326
+ await reporting.batteryVoltage(firstEndpoint, overides);
327
+ await reporting.batteryPercentageRemaining(firstEndpoint, overides);
328
+ await reporting.temperature(firstEndpoint, overides);
329
+ await reporting.humidity(firstEndpoint, overides);
330
+ await reporting.illuminance(firstEndpoint, overides);
331
+ await reporting.soil_moisture(firstEndpoint, overides);
332
+ },
333
+ exposes: [e.soil_moisture(), e.battery(), e.illuminance(), e.temperature(), e.humidity()],
334
+ },
314
335
  ];
@@ -20,8 +20,8 @@ module.exports = [
20
20
  tz.danfoss_mounted_mode_control, tz.danfoss_thermostat_vertical_orientation, tz.danfoss_algorithm_scale_factor,
21
21
  tz.danfoss_heat_available, tz.danfoss_heat_required, tz.danfoss_day_of_week, tz.danfoss_trigger_time,
22
22
  tz.danfoss_window_open_internal, tz.danfoss_window_open_external, tz.danfoss_load_estimate,
23
- tz.danfoss_viewing_direction, tz.danfoss_external_measured_room_sensor, tz.thermostat_keypad_lockout,
24
- tz.thermostat_system_mode, tz.danfoss_load_balancing_enable, tz.danfoss_load_room_mean],
23
+ tz.danfoss_viewing_direction, tz.danfoss_external_measured_room_sensor, tz.danfoss_radiator_covered,
24
+ tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.danfoss_load_balancing_enable, tz.danfoss_load_room_mean],
25
25
  exposes: [e.battery(), e.keypad_lockout(),
26
26
  exposes.binary('mounted_mode_active', ea.STATE_GET, true, false)
27
27
  .withDescription('Is the unit in mounting mode. This is set to `false` for mounted (already on ' +
@@ -44,9 +44,14 @@ module.exports = [
44
44
  exposes.climate().withSetpoint('occupied_heating_setpoint', 5, 32, 0.5).withLocalTemperature().withPiHeatingDemand()
45
45
  .withSystemMode(['heat']).withRunningState(['idle', 'heat'], ea.STATE),
46
46
  exposes.numeric('external_measured_room_sensor', ea.ALL)
47
- .withDescription('Set at maximum 3 hours interval but not more often than every 30 minutes and 0.1 ' +
48
- 'degrees difference. Resets every 3hours to standard. e.g. 21C = 2100 (-8000=undefined).')
47
+ .withDescription('If `radiator_covered` is `true`: Set at maximum 30 minutes interval but not more often than every ' +
48
+ '5 minutes and 0.1 degrees difference. Resets every 35 minutes to standard. If `radiator_covered` is `false`: ' +
49
+ 'Set at maximum 3 hours interval but not more often than every 30 minutes and 0.1 degrees difference. ' +
50
+ 'Resets every 3 hours to standard. Value 21C = 2100 (-8000=undefined).')
49
51
  .withValueMin(-8000).withValueMax(3500),
52
+ exposes.binary('radiator_covered', ea.ALL, true, false)
53
+ .withDescription('Set if the TRV should solely rely on external_measured_room_sensor or operate in offset mode. ' +
54
+ '`false` = Auto Offset Mode or `true` = Room Sensor Mode'),
50
55
  exposes.numeric('window_open_internal', ea.STATE_GET).withValueMin(0).withValueMax(4)
51
56
  .withDescription('0=Quarantine, 1=Windows are closed, 2=Hold - Windows are maybe about to open, ' +
52
57
  '3=Open window detected, 4=In window open state from external but detected closed locally'),
@@ -116,6 +121,7 @@ module.exports = [
116
121
  'danfossMountedModeControl',
117
122
  'danfossMountedModeActive',
118
123
  'danfossExternalMeasuredRoomSensor',
124
+ 'danfossRadiatorCovered',
119
125
  'danfossLoadBalancingEnable',
120
126
  'danfossLoadRoomMean',
121
127
  ], options);
package/devices/robb.js CHANGED
@@ -162,4 +162,26 @@ module.exports = [
162
162
  },
163
163
  exposes: [e.power(), e.current(), e.voltage().withAccess(ea.STATE), e.switch(), e.energy()],
164
164
  },
165
+ {
166
+ zigbeeModel: ['ROB_200-017-1'],
167
+ model: 'ROB_200-017-1',
168
+ vendor: 'ROBB',
169
+ description: 'Zigbee smart plug',
170
+ fromZigbee: [fz.electrical_measurement, fz.on_off, fz.ignore_genLevelCtrl_report, fz.metering, fz.temperature],
171
+ toZigbee: [tz.on_off],
172
+ configure: async (device, coordinatorEndpoint, logger) => {
173
+ const endpoint = device.getEndpoint(1);
174
+ await reporting.bind(endpoint, coordinatorEndpoint,
175
+ ['genOnOff', 'haElectricalMeasurement', 'seMetering', 'msTemperatureMeasurement']);
176
+ await reporting.onOff(endpoint);
177
+ await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
178
+ await reporting.readMeteringMultiplierDivisor(endpoint);
179
+ await reporting.rmsVoltage(endpoint);
180
+ await reporting.rmsCurrent(endpoint);
181
+ await reporting.activePower(endpoint);
182
+ await reporting.temperature(endpoint);
183
+ await reporting.currentSummDelivered(endpoint);
184
+ },
185
+ exposes: [e.power(), e.current(), e.voltage().withAccess(ea.STATE), e.switch(), e.energy(), e.temperature()],
186
+ },
165
187
  ];
@@ -533,4 +533,40 @@ module.exports = [
533
533
  await reporting.batteryPercentageRemaining(endpoint);
534
534
  },
535
535
  },
536
+ {
537
+ zigbeeModel: ['SOCKET/OUTLET/2'],
538
+ model: 'EKO09738',
539
+ vendor: 'Schneider Electric',
540
+ description: 'Zigbee smart socket with power meter',
541
+ fromZigbee: [fz.on_off, fz.electrical_measurement, fz.EKO09738_metering, fz.power_on_behavior],
542
+ toZigbee: [tz.on_off, tz.power_on_behavior],
543
+ exposes: [e.switch(), e.power(), e.energy(), exposes.enum('power_on_behavior', ea.ALL, ['off', 'previous', 'on'])
544
+ .withDescription('Controls the behaviour when the device is powered on'), e.current(), e.voltage()],
545
+ configure: async (device, coordinatorEndpoint, logger) => {
546
+ const endpoint = device.getEndpoint(6);
547
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
548
+ await reporting.onOff(endpoint);
549
+ // Unit supports acVoltage and acCurrent, but only acCurrent divisor/multiplier can be read
550
+ await endpoint.read('haElectricalMeasurement', ['acCurrentDivisor', 'acCurrentMultiplier']);
551
+ await reporting.readMeteringMultiplierDivisor(endpoint);
552
+ },
553
+ },
554
+ {
555
+ zigbeeModel: ['SOCKET/OUTLET/1'],
556
+ model: 'EKO09716',
557
+ vendor: 'Schneider Electric',
558
+ description: 'Zigbee smart socket with power meter',
559
+ fromZigbee: [fz.on_off, fz.electrical_measurement, fz.EKO09738_metering, fz.power_on_behavior],
560
+ toZigbee: [tz.on_off, tz.power_on_behavior],
561
+ exposes: [e.switch(), e.power(), e.energy(), exposes.enum('power_on_behavior', ea.ALL, ['off', 'previous', 'on'])
562
+ .withDescription('Controls the behaviour when the device is powered on'), e.current(), e.voltage()],
563
+ configure: async (device, coordinatorEndpoint, logger) => {
564
+ const endpoint = device.getEndpoint(6);
565
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
566
+ await reporting.onOff(endpoint);
567
+ // Unit supports acVoltage and acCurrent, but only acCurrent divisor/multiplier can be read
568
+ await endpoint.read('haElectricalMeasurement', ['acCurrentDivisor', 'acCurrentMultiplier']);
569
+ await reporting.readMeteringMultiplierDivisor(endpoint);
570
+ },
571
+ },
536
572
  ];
@@ -38,4 +38,11 @@ module.exports = [
38
38
  description: 'LED candle bulb E14 470 lumen, dimmable, color, white 2700K',
39
39
  extend: extend.light_onoff_brightness(),
40
40
  },
41
+ {
42
+ fingerprint: [{modelID: 'ZBT-CCTLight-GU100904', manufacturerName: 'LDS'}],
43
+ model: 'HAL500',
44
+ vendor: 'Schwaiger',
45
+ description: 'LED bulb GU10 350 lumen, dimmable, color, white 2700-6500K',
46
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
47
+ },
41
48
  ];
package/devices/sinope.js CHANGED
@@ -56,7 +56,7 @@ module.exports = [
56
56
  model: 'TH1124ZB',
57
57
  vendor: 'Sinopé',
58
58
  description: 'Zigbee line volt thermostat',
59
- fromZigbee: [fz.legacy.thermostat_att_report, fz.legacy.hvac_user_interface, fz.electrical_measurement, fz.metering,
59
+ fromZigbee: [fz.legacy.sinope_thermostat_att_report, fz.legacy.hvac_user_interface, fz.electrical_measurement, fz.metering,
60
60
  fz.ignore_temperature_report, fz.legacy.sinope_thermostat_state],
61
61
  toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
62
62
  tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.thermostat_running_state,
@@ -113,7 +113,7 @@ module.exports = [
113
113
  model: 'TH1300ZB',
114
114
  vendor: 'Sinopé',
115
115
  description: 'Zigbee smart floor heating thermostat',
116
- fromZigbee: [fz.legacy.thermostat_att_report, fz.legacy.hvac_user_interface, fz.ignore_temperature_report,
116
+ fromZigbee: [fz.legacy.sinope_thermostat_att_report, fz.legacy.hvac_user_interface, fz.ignore_temperature_report,
117
117
  fz.legacy.sinope_thermostat_state, fz.sinope_TH1300ZB_specific],
118
118
  toZigbee: [tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
119
119
  tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout, tz.thermostat_system_mode, tz.thermostat_running_state,
package/devices/tuya.js CHANGED
@@ -490,6 +490,7 @@ module.exports = [
490
490
  model: 'TS0201',
491
491
  vendor: 'TuYa',
492
492
  description: 'Temperature & humidity sensor with display',
493
+ whiteLabel: [{vendor: 'BlitzWolf', model: 'BW-IS4'}],
493
494
  fromZigbee: [fz.battery, fz.temperature, fz.humidity],
494
495
  toZigbee: [],
495
496
  exposes: [e.battery(), e.temperature(), e.humidity(), e.battery_voltage()],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.345",
3
+ "version": "14.0.346",
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.345",
3
+ "version": "14.0.346",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [