zigbee-herdsman-converters 14.0.522 → 14.0.523

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.
@@ -2257,7 +2257,9 @@ const converters = {
2257
2257
  const value = tuya.getDataValue(dpValue);
2258
2258
 
2259
2259
  switch (dp) {
2260
- case tuya.dataPoints.coverPosition: // Started moving to position (triggered from Zigbee)
2260
+ case tuya.dataPoints.coverPosition: { // Started moving to position (triggered from Zigbee)
2261
+ return {running: true};
2262
+ }
2261
2263
  case tuya.dataPoints.coverArrived: { // Arrived at position
2262
2264
  const running = dp === tuya.dataPoints.coverArrived ? false : true;
2263
2265
  const invert = tuya.isCoverInverted(meta.device.manufacturerName) ? !options.invert_cover : options.invert_cover;
@@ -5529,6 +5531,9 @@ const converters = {
5529
5531
  if (definition.exposes.find((e) => e.name === 'temperature')) {
5530
5532
  result.push(exposes.options.precision('temperature'), exposes.options.calibration('temperature'));
5531
5533
  }
5534
+ if (definition.exposes.find((e) => e.name === 'device_temperature')) {
5535
+ result.push(exposes.options.precision('device_temperature'), exposes.options.calibration('device_temperature'));
5536
+ }
5532
5537
  if (definition.exposes.find((e) => e.name === 'illuminance')) {
5533
5538
  result.push(exposes.options.precision('illuminance'), exposes.options.calibration('illuminance', 'percentual'));
5534
5539
  }
@@ -5550,6 +5555,9 @@ const converters = {
5550
5555
  if (definition.exposes.find((e) => e.name === 'temperature')) {
5551
5556
  result.push(exposes.options.precision('temperature'), exposes.options.calibration('temperature'));
5552
5557
  }
5558
+ if (definition.exposes.find((e) => e.name === 'device_temperature')) {
5559
+ result.push(exposes.options.precision('device_temperature'), exposes.options.calibration('device_temperature'));
5560
+ }
5553
5561
  return result;
5554
5562
  },
5555
5563
  convert: (model, msg, publish, options, meta) => {
@@ -5569,6 +5577,9 @@ const converters = {
5569
5577
  if (definition.exposes.find((e) => e.name === 'temperature')) {
5570
5578
  result.push(exposes.options.precision('temperature'), exposes.options.calibration('temperature'));
5571
5579
  }
5580
+ if (definition.exposes.find((e) => e.name === 'device_temperature')) {
5581
+ result.push(exposes.options.precision('device_temperature'), exposes.options.calibration('device_temperature'));
5582
+ }
5572
5583
  if (definition.exposes.find((e) => e.name === 'illuminance')) {
5573
5584
  result.push(exposes.options.precision('illuminance'), exposes.options.calibration('illuminance', 'percentual'));
5574
5585
  }
@@ -161,36 +161,10 @@ module.exports = [
161
161
  extend: extend.light_onoff_brightness(),
162
162
  },
163
163
  {
164
- zigbeeModel: ['3157100'],
164
+ fingerprint: [{modelID: '3157100', manufacturerName: 'Centralite'}, {modelID: '3157100-E', manufacturerName: 'Centralite'}],
165
165
  model: '3157100',
166
166
  vendor: 'Centralite',
167
- description: '3-Series pearl touch thermostat,',
168
- fromZigbee: [fz.battery, fz.legacy.thermostat_att_report, fz.fan, fz.ignore_time_read],
169
- toZigbee: [tz.factory_reset, tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
170
- tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_cooling_setpoint,
171
- tz.thermostat_setpoint_raise_lower, tz.thermostat_remote_sensing,
172
- tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
173
- tz.thermostat_relay_status_log, tz.fan_mode, tz.thermostat_running_state],
174
- exposes: [e.battery(), exposes.climate().withSetpoint('occupied_heating_setpoint', 10, 30, 1).withLocalTemperature()
175
- .withSystemMode(['off', 'heat', 'cool', 'emergency_heating'])
176
- .withRunningState(['idle', 'heat', 'cool', 'fan_only']).withFanMode(['auto', 'on'])
177
- .withSetpoint('occupied_cooling_setpoint', 10, 30, 1)
178
- .withLocalTemperatureCalibration(-30, 30, 0.1)],
179
- meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
180
- configure: async (device, coordinatorEndpoint, logger) => {
181
- const endpoint = device.getEndpoint(1);
182
- await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'hvacThermostat', 'hvacFanCtrl']);
183
- await reporting.batteryVoltage(endpoint);
184
- await reporting.thermostatRunningState(endpoint);
185
- await reporting.thermostatTemperature(endpoint);
186
- await reporting.fanMode(endpoint);
187
- },
188
- },
189
- {
190
- zigbeeModel: ['3157100-E'],
191
- model: '3157100-E',
192
- vendor: 'Centralite',
193
- description: '3-Series pearl touch thermostat,',
167
+ description: '3-Series pearl touch thermostat',
194
168
  fromZigbee: [fz.battery, fz.thermostat, fz.fan, fz.ignore_time_read],
195
169
  toZigbee: [tz.factory_reset, tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
196
170
  tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_cooling_setpoint,
@@ -200,11 +174,11 @@ module.exports = [
200
174
  exposes: [e.battery(),
201
175
  exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
202
176
  .withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.'),
203
- exposes.climate().withSetpoint('occupied_heating_setpoint', 10, 30, 1).withLocalTemperature()
177
+ exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
204
178
  .withSystemMode(['off', 'heat', 'cool', 'emergency_heating'])
205
179
  .withRunningState(['idle', 'heat', 'cool', 'fan_only']).withFanMode(['auto', 'on'])
206
- .withSetpoint('occupied_cooling_setpoint', 10, 30, 1)
207
- .withLocalTemperatureCalibration(-30, 30, 0.1)],
180
+ .withSetpoint('occupied_cooling_setpoint', 7, 30, 1)
181
+ .withLocalTemperatureCalibration(-2.5, 2.5, 0.1)],
208
182
  meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
209
183
  configure: async (device, coordinatorEndpoint, logger) => {
210
184
  const endpoint = device.getEndpoint(1);
@@ -222,7 +196,7 @@ module.exports = [
222
196
  vendor: 'Centralite',
223
197
  description: 'HA thermostat',
224
198
  fromZigbee: [fz.battery, fz.thermostat, fz.fan, fz.ignore_time_read],
225
- toZigbee: [tz.factory_reset, tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
199
+ toZigbee: [tz.factory_reset, tz.thermostat_local_temperature,
226
200
  tz.thermostat_occupied_heating_setpoint, tz.thermostat_occupied_cooling_setpoint,
227
201
  tz.thermostat_setpoint_raise_lower, tz.thermostat_remote_sensing,
228
202
  tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
@@ -230,11 +204,10 @@ module.exports = [
230
204
  exposes: [e.battery(),
231
205
  exposes.binary('temperature_setpoint_hold', ea.ALL, true, false)
232
206
  .withDescription('Prevent changes. `false` = run normally. `true` = prevent from making changes.'),
233
- exposes.climate().withSetpoint('occupied_heating_setpoint', 6.66, 30, 1).withLocalTemperature()
207
+ exposes.climate().withSetpoint('occupied_heating_setpoint', 7, 30, 1).withLocalTemperature()
234
208
  .withSystemMode(['off', 'heat', 'cool', 'emergency_heating'])
235
209
  .withRunningState(['idle', 'heat', 'cool', 'fan_only']).withFanMode(['auto', 'on'])
236
- .withSetpoint('occupied_cooling_setpoint', 6.66, 30, 1)
237
- .withLocalTemperatureCalibration(-30, 30, 0.1)],
210
+ .withSetpoint('occupied_cooling_setpoint', 7, 30, 1)],
238
211
  meta: {battery: {voltageToPercentage: '3V_1500_2800'}},
239
212
  configure: async (device, coordinatorEndpoint, logger) => {
240
213
  const endpoint = device.getEndpoint(1);
package/devices/innr.js CHANGED
@@ -60,7 +60,8 @@ module.exports = [
60
60
  model: 'OPL 130 C',
61
61
  vendor: 'Innr',
62
62
  description: 'Outdoor smart pedestal light colour',
63
- extend: extend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 555], supportsHS: true}),
63
+ extend: extend.light_onoff_brightness_colortemp_color(
64
+ {colorTempRange: [153, 555], supportsHS: true, disableColorTempStartup: true}),
64
65
  meta: {applyRedFix: true, turnsOffAtBrightness1: true},
65
66
  },
66
67
  {
package/devices/insta.js CHANGED
@@ -21,7 +21,7 @@ module.exports = [
21
21
  ota: ota.zigbeeOTA,
22
22
  },
23
23
  {
24
- zigbeeModel: ['Generic UP Device'],
24
+ zigbeeModel: ['NEXENTRO Blinds Actuator', 'Generic UP Device'],
25
25
  model: '57008000',
26
26
  vendor: 'Insta',
27
27
  description: 'Blinds actor with lift/tilt calibration & with with inputs for wall switches',
@@ -25,6 +25,15 @@ module.exports = [
25
25
  toZigbee: [tz.tuya_cover_control, tz.tuya_cover_options],
26
26
  exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
27
27
  },
28
+ {
29
+ zigbeeModel: ['sbordckq'],
30
+ model: 'SM-1CTW-EU',
31
+ vendor: 'Somgoms',
32
+ description: 'Curtain switch',
33
+ fromZigbee: [fz.tuya_cover, fz.ignore_basic_report],
34
+ toZigbee: [tz.tuya_cover_control, tz.tuya_cover_options],
35
+ exposes: [e.cover_position().setAccess('position', ea.STATE_SET)],
36
+ },
28
37
  {
29
38
  zigbeeModel: ['hpb9yts'],
30
39
  model: 'ZSTY-SM-1DMZG-US-W',
package/devices/tuya.js CHANGED
@@ -1100,7 +1100,6 @@ module.exports = [
1100
1100
  {modelID: 'zo2pocs\u0000', manufacturerName: '_TYST11_fzo2pocs'},
1101
1101
  {modelID: 'TS0601', manufacturerName: '_TZE200_cf1sl3tj'},
1102
1102
  // Roller blinds:
1103
- {modelID: 'TS0601', manufacturerName: '_TZE200_sbordckq'},
1104
1103
  {modelID: 'TS0601', manufacturerName: '_TZE200_fctwhugx'},
1105
1104
  {modelID: 'TS0601', manufacturerName: '_TZE200_zah67ekd'},
1106
1105
  {modelID: 'TS0601', manufacturerName: '_TZE200_hsgrhjpf'},
package/devices/xiaomi.js CHANGED
@@ -79,7 +79,7 @@ module.exports = [
79
79
  endpoint: (device) => {
80
80
  return {l1: 1, l2: 2};
81
81
  },
82
- exposes: [e.power(), e.energy(), e.voltage(), e.temperature(), e.power_outage_memory(),
82
+ exposes: [e.power(), e.energy(), e.voltage(), e.device_temperature(), e.power_outage_memory(),
83
83
  // When in rgbw mode, only one of color and colortemp will be valid, and l2 will be invalid
84
84
  // Do not control l2 in rgbw mode
85
85
  e.light_brightness_colortemp_colorxy([153, 370]).removeFeature('color_temp_startup').withEndpoint('l1'),
@@ -178,7 +178,7 @@ module.exports = [
178
178
  description: 'Aqara wireless switch',
179
179
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
180
180
  exposes: [e.battery(), e.battery_voltage(), e.action(['single', 'double', 'triple', 'quadruple', 'hold', 'release']),
181
- e.temperature(), e.power_outage_count()],
181
+ e.device_temperature(), e.power_outage_count()],
182
182
  fromZigbee: [fz.xiaomi_multistate_action, fz.xiaomi_WXKG11LM_action, fz.xiaomi_basic,
183
183
  fz.legacy.WXKG11LM_click, fz.legacy.xiaomi_action_click_multistate],
184
184
  toZigbee: [],
@@ -337,8 +337,8 @@ module.exports = [
337
337
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.aqara_opple, fz.xiaomi_multistate_action],
338
338
  toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
339
339
  tz.xiaomi_led_disabled_night, tz.xiaomi_flip_indicator_light],
340
- exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('right'),
341
- e.power(), e.energy(), e.voltage(), e.temperature(), e.power_outage_memory(), e.led_disabled_night(), e.flip_indicator_light(),
340
+ exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('right'), e.power(), e.energy(), e.voltage(),
341
+ e.device_temperature(), e.power_outage_memory(), e.led_disabled_night(), e.flip_indicator_light(),
342
342
  e.action([
343
343
  'single_left', 'single_right', 'single_both',
344
344
  'double_left', 'double_right', 'double_both']),
@@ -398,7 +398,7 @@ module.exports = [
398
398
  toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
399
399
  tz.xiaomi_flip_indicator_light],
400
400
  exposes: [e.switch(), e.action(['single', 'double']), e.power().withAccess(ea.STATE_GET), e.energy(), e.flip_indicator_light(),
401
- e.power_outage_memory(), e.temperature().withAccess(ea.STATE),
401
+ e.power_outage_memory(), e.device_temperature().withAccess(ea.STATE),
402
402
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode')],
403
403
  onEvent: preventReset,
404
404
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -425,7 +425,7 @@ module.exports = [
425
425
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode for right button')
426
426
  .withEndpoint('right'),
427
427
  e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
428
- e.temperature().withAccess(ea.STATE), e.power_outage_memory(), e.flip_indicator_light()],
428
+ e.device_temperature().withAccess(ea.STATE), e.power_outage_memory(), e.flip_indicator_light()],
429
429
  onEvent: preventReset,
430
430
  configure: async (device, coordinatorEndpoint, logger) => {
431
431
  const endpoint1 = device.getEndpoint(1);
@@ -466,7 +466,7 @@ module.exports = [
466
466
  fz.legacy.QBKG04LM_QBKG11LM_click, fz.xiaomi_basic, fz.xiaomi_operation_mode_basic,
467
467
  fz.legacy.QBKG11LM_click, fz.ignore_multistate_report, fz.xiaomi_power],
468
468
  exposes: [
469
- e.switch(), e.power().withAccess(ea.STATE_GET), e.temperature(),
469
+ e.switch(), e.power().withAccess(ea.STATE_GET), e.device_temperature(),
470
470
  e.action(['single', 'double', 'release', 'hold']),
471
471
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
472
472
  .withDescription('Decoupled mode'),
@@ -488,7 +488,7 @@ module.exports = [
488
488
  exposes: [
489
489
  e.switch().withEndpoint('left'),
490
490
  e.switch().withEndpoint('right'),
491
- e.temperature(),
491
+ e.device_temperature(),
492
492
  e.action(['release_left', 'release_right', 'release_both', 'double_left', 'double_right',
493
493
  'single_left', 'single_right', 'hold_release_left', 'hold_release_left']),
494
494
  exposes.enum('operation_mode', ea.STATE_SET, ['control_left_relay', 'control_right_relay', 'decoupled'])
@@ -522,7 +522,7 @@ module.exports = [
522
522
  exposes: [
523
523
  e.switch().withEndpoint('left'),
524
524
  e.switch().withEndpoint('right'),
525
- e.temperature(),
525
+ e.device_temperature(),
526
526
  e.power().withAccess(ea.STATE_GET),
527
527
  e.action(['single_left', 'single_right', 'single_both', 'double_left', 'double_right', 'double_both',
528
528
  'hold_left', 'hold_right', 'hold_both', 'release_left', 'release_right', 'release_both']),
@@ -638,7 +638,7 @@ module.exports = [
638
638
  exposes.enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
639
639
  .withDescription('Anti flicker mode can be used to solve blinking issues of some lights.' +
640
640
  'Quick mode makes the device respond faster.'),
641
- e.power_outage_memory(), e.led_disabled_night(), e.temperature().withAccess(ea.STATE), e.flip_indicator_light(),
641
+ e.power_outage_memory(), e.led_disabled_night(), e.device_temperature().withAccess(ea.STATE), e.flip_indicator_light(),
642
642
  e.action([
643
643
  'left_single', 'left_double', 'center_single', 'center_double', 'right_single', 'right_double',
644
644
  'single_left_center', 'double_left_center', 'single_left_right', 'double_left_right',
@@ -668,7 +668,7 @@ module.exports = [
668
668
  .withDescription('Decoupled mode for right button')
669
669
  .withEndpoint('right'),
670
670
  e.power().withAccess(ea.STATE), e.power_outage_memory(), e.led_disabled_night(),
671
- e.temperature().withAccess(ea.STATE), e.flip_indicator_light(),
671
+ e.device_temperature().withAccess(ea.STATE), e.flip_indicator_light(),
672
672
  e.action([
673
673
  'single_left', 'double_left', 'single_center', 'double_center', 'single_right', 'double_right',
674
674
  'single_left_center', 'double_left_center', 'single_left_right', 'double_left_right',
@@ -699,7 +699,7 @@ module.exports = [
699
699
  onEvent: preventReset,
700
700
  exposes: [
701
701
  e.switch(), e.power().withAccess(ea.STATE_GET),
702
- e.energy(), e.temperature().withAccess(ea.STATE),
702
+ e.energy(), e.device_temperature().withAccess(ea.STATE),
703
703
  e.voltage().withAccess(ea.STATE), e.action(['single', 'release']),
704
704
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
705
705
  .withDescription('Decoupled mode'),
@@ -749,7 +749,7 @@ module.exports = [
749
749
  tz.xiaomi_led_disabled_night, tz.xiaomi_flip_indicator_light],
750
750
  exposes: [
751
751
  e.switch(), e.action(['single', 'double']), e.power().withAccess(ea.STATE), e.energy(),
752
- e.voltage().withAccess(ea.STATE), e.temperature().withAccess(ea.STATE),
752
+ e.voltage().withAccess(ea.STATE), e.device_temperature().withAccess(ea.STATE),
753
753
  e.power_outage_memory(), e.led_disabled_night(), e.flip_indicator_light(),
754
754
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
755
755
  .withDescription('Decoupled mode for left button'),
@@ -772,7 +772,7 @@ module.exports = [
772
772
  exposes: [
773
773
  e.switch().withEndpoint('left'), e.switch().withEndpoint('right'),
774
774
  e.power().withAccess(ea.STATE), e.energy(), e.voltage().withAccess(ea.STATE), e.flip_indicator_light(),
775
- e.power_outage_memory(), e.led_disabled_night(), e.temperature().withAccess(ea.STATE),
775
+ e.power_outage_memory(), e.led_disabled_night(), e.device_temperature().withAccess(ea.STATE),
776
776
  e.action([
777
777
  'single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
778
778
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
@@ -800,7 +800,7 @@ module.exports = [
800
800
  exposes: [
801
801
  e.switch().withEndpoint('left'), e.switch().withEndpoint('center'), e.switch().withEndpoint('right'),
802
802
  e.power().withAccess(ea.STATE), e.energy(), e.voltage().withAccess(ea.STATE), e.flip_indicator_light(),
803
- e.power_outage_memory(), e.led_disabled_night(), e.temperature().withAccess(ea.STATE),
803
+ e.power_outage_memory(), e.led_disabled_night(), e.device_temperature().withAccess(ea.STATE),
804
804
  e.action([
805
805
  'single_left', 'double_left', 'single_center', 'double_center',
806
806
  'single_right', 'double_right', 'single_left_center', 'double_left_center',
@@ -850,7 +850,7 @@ module.exports = [
850
850
  description: 'Aqara T1 temperature, humidity and pressure sensor',
851
851
  fromZigbee: [fz.aqara_opple, fz.temperature, fz.humidity, fz.pressure, fz.battery],
852
852
  toZigbee: [],
853
- exposes: [e.temperature(), e.humidity(), e.pressure(), e.battery(), e.battery_voltage()],
853
+ exposes: [e.temperature(), e.humidity(), e.pressure(), e.device_temperature(), e.battery(), e.battery_voltage()],
854
854
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
855
855
  configure: async (device, coordinatorEndpoint, logger) => {
856
856
  const endpoint = device.getEndpoint(1);
@@ -878,7 +878,7 @@ module.exports = [
878
878
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
879
879
  fromZigbee: [fz.xiaomi_basic, fz.occupancy_with_timeout, fz.RTCGQ11LM_illuminance],
880
880
  toZigbee: [],
881
- exposes: [e.battery(), e.occupancy(), e.temperature(), e.battery_voltage(), e.illuminance_lux().withProperty('illuminance'),
881
+ exposes: [e.battery(), e.occupancy(), e.device_temperature(), e.battery_voltage(), e.illuminance_lux().withProperty('illuminance'),
882
882
  e.illuminance().withUnit('lx').withDescription('Measured illuminance in lux')],
883
883
  },
884
884
  {
@@ -891,7 +891,7 @@ module.exports = [
891
891
  exposes: [e.occupancy(), e.illuminance_lux().withProperty('illuminance'),
892
892
  e.illuminance().withUnit('lx').withDescription('Measured illuminance in lux'),
893
893
  exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
894
- .withDescription('Time interval for detecting actions'), e.temperature(), e.battery(), e.battery_voltage()],
894
+ .withDescription('Time interval for detecting actions'), e.device_temperature(), e.battery(), e.battery_voltage()],
895
895
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
896
896
  configure: async (device, coordinatorEndpoint, logger) => {
897
897
  const endpoint = device.getEndpoint(1);
@@ -909,7 +909,7 @@ module.exports = [
909
909
  toZigbee: [tz.aqara_detection_interval, tz.aqara_motion_sensitivity],
910
910
  exposes: [e.occupancy(), exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']),
911
911
  exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
912
- .withDescription('Time interval for detecting actions'), e.temperature(), e.battery(), e.battery_voltage()],
912
+ .withDescription('Time interval for detecting actions'), e.device_temperature(), e.battery(), e.battery_voltage()],
913
913
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
914
914
  configure: async (device, coordinatorEndpoint, logger) => {
915
915
  const endpoint = device.getEndpoint(1);
@@ -933,7 +933,7 @@ module.exports = [
933
933
  exposes.numeric('detection_interval', ea.ALL).withValueMin(2).withValueMax(65535).withUnit('s')
934
934
  .withDescription('Time interval for detecting actions'),
935
935
  exposes.binary('trigger_indicator', ea.ALL, true, false).withDescription('When this option is enabled then ' +
936
- 'blue LED will blink once when motion is detected'), e.temperature(), e.battery(), e.battery_voltage()],
936
+ 'blue LED will blink once when motion is detected'), e.device_temperature(), e.battery(), e.battery_voltage()],
937
937
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
938
938
  configure: async (device, coordinatorEndpoint, logger) => {
939
939
  const endpoint = device.getEndpoint(1);
@@ -952,7 +952,7 @@ module.exports = [
952
952
  fromZigbee: [fz.aqara_opple],
953
953
  toZigbee: [tz.RTCZCGQ11LM_presence, tz.RTCZCGQ11LM_monitoring_mode, tz.RTCZCGQ11LM_approach_distance,
954
954
  tz.aqara_motion_sensitivity, tz.RTCZCGQ11LM_reset_nopresence_status],
955
- exposes: [e.presence().withAccess(ea.STATE_GET), e.power_outage_count(), e.temperature(),
955
+ exposes: [e.presence().withAccess(ea.STATE_GET),
956
956
  exposes.enum('presence_event', ea.STATE, ['enter', 'leave', 'left_enter', 'right_leave', 'right_enter', 'left_leave',
957
957
  'approach', 'away']).withDescription('Presence events: "enter", "leave", "left_enter", "right_leave", ' +
958
958
  '"right_enter", "left_leave", "approach", "away"'),
@@ -963,7 +963,7 @@ module.exports = [
963
963
  exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('Different sensitivities ' +
964
964
  'means different static human body recognition rate and response speed of occupied'),
965
965
  exposes.enum('reset_nopresence_status', ea.SET, ['Reset']).withDescription('Reset the status of no presence'),
966
- ],
966
+ e.device_temperature(), e.power_outage_count()],
967
967
  configure: async (device, coordinatorEndpoint, logger) => {
968
968
  const endpoint = device.getEndpoint(1);
969
969
  await endpoint.read('aqaraOpple', [0x010c], {manufacturerCode: 0x115f});
@@ -991,7 +991,7 @@ module.exports = [
991
991
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
992
992
  fromZigbee: [fz.xiaomi_basic, fz.xiaomi_contact],
993
993
  toZigbee: [],
994
- exposes: [e.battery(), e.contact(), e.temperature(), e.battery_voltage()],
994
+ exposes: [e.battery(), e.contact(), e.device_temperature(), e.battery_voltage()],
995
995
  configure: async (device) => {
996
996
  device.powerSource = 'Battery';
997
997
  device.save();
@@ -1005,7 +1005,7 @@ module.exports = [
1005
1005
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
1006
1006
  fromZigbee: [fz.xiaomi_basic, fz.ias_water_leak_alarm_1],
1007
1007
  toZigbee: [],
1008
- exposes: [e.battery(), e.water_leak(), e.battery_low(), e.battery_voltage(), e.temperature(), e.power_outage_count()],
1008
+ exposes: [e.battery(), e.water_leak(), e.battery_low(), e.battery_voltage(), e.device_temperature(), e.power_outage_count()],
1009
1009
  },
1010
1010
  {
1011
1011
  zigbeeModel: ['lumi.flood.agl02'],
@@ -1025,7 +1025,7 @@ module.exports = [
1025
1025
  description: 'Mi/Aqara smart home cube',
1026
1026
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
1027
1027
  fromZigbee: [fz.xiaomi_basic, fz.MFKZQ01LM_action_multistate, fz.MFKZQ01LM_action_analog],
1028
- exposes: [e.battery(), e.battery_voltage(), e.angle('action_angle'), e.temperature(), e.power_outage_count(),
1028
+ exposes: [e.battery(), e.battery_voltage(), e.angle('action_angle'), e.device_temperature(), e.power_outage_count(),
1029
1029
  e.cube_side('action_from_side'), e.cube_side('action_side'), e.cube_side('action_to_side'),
1030
1030
  e.action(['shake', 'wakeup', 'fall', 'tap', 'slide', 'flip180', 'flip90', 'rotate_left', 'rotate_right'])],
1031
1031
  toZigbee: [],
@@ -1037,7 +1037,7 @@ module.exports = [
1037
1037
  vendor: 'Xiaomi',
1038
1038
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic, fz.ignore_occupancy_report, fz.ignore_illuminance_report],
1039
1039
  toZigbee: [tz.on_off, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_power],
1040
- exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature(), e.power_outage_memory()],
1040
+ exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature(), e.power_outage_memory()],
1041
1041
  ota: ota.zigbeeOTA,
1042
1042
  },
1043
1043
  {
@@ -1047,7 +1047,7 @@ module.exports = [
1047
1047
  vendor: 'Xiaomi',
1048
1048
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic, fz.ignore_occupancy_report, fz.ignore_illuminance_report],
1049
1049
  toZigbee: [tz.on_off, tz.xiaomi_power],
1050
- exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature().withAccess(ea.STATE),
1050
+ exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
1051
1051
  e.voltage().withAccess(ea.STATE)],
1052
1052
  },
1053
1053
  {
@@ -1060,7 +1060,7 @@ module.exports = [
1060
1060
  toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_auto_off, tz.xiaomi_led_disabled_night,
1061
1061
  tz.xiaomi_overload_protection],
1062
1062
  exposes: [
1063
- e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature().withAccess(ea.STATE),
1063
+ e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
1064
1064
  e.voltage().withAccess(ea.STATE), e.current(), e.consumer_connected(), e.led_disabled_night(),
1065
1065
  e.power_outage_memory(), exposes.binary('auto_off', ea.STATE_SET, true, false)
1066
1066
  .withDescription('Turn the device automatically off when attached device consumes less than 2W for 20 minutes'),
@@ -1075,7 +1075,7 @@ module.exports = [
1075
1075
  vendor: 'Xiaomi',
1076
1076
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic, fz.ignore_occupancy_report, fz.ignore_illuminance_report],
1077
1077
  toZigbee: [tz.on_off, tz.xiaomi_power],
1078
- exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature().withAccess(ea.STATE),
1078
+ exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
1079
1079
  e.voltage().withAccess(ea.STATE)],
1080
1080
  },
1081
1081
  {
@@ -1147,7 +1147,7 @@ module.exports = [
1147
1147
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.ignore_occupancy_report, fz.xiaomi_basic],
1148
1148
  toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_led_disabled_night,
1149
1149
  tz.xiaomi_switch_power_outage_memory, tz.xiaomi_auto_off],
1150
- exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature(), e.voltage().withAccess(ea.STATE),
1150
+ exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature(), e.voltage().withAccess(ea.STATE),
1151
1151
  e.power_outage_memory(), e.led_disabled_night(),
1152
1152
  exposes.binary('auto_off', ea.STATE_SET, true, false)
1153
1153
  .withDescription('If the power is constantly lower than 2W within half an hour, ' +
@@ -1173,7 +1173,7 @@ module.exports = [
1173
1173
  vendor: 'Xiaomi',
1174
1174
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.xiaomi_basic],
1175
1175
  toZigbee: [tz.on_off, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_power],
1176
- exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature().withAccess(ea.STATE),
1176
+ exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
1177
1177
  e.voltage().withAccess(ea.STATE), e.power_outage_memory()],
1178
1178
  ota: ota.zigbeeOTA,
1179
1179
  },
@@ -1259,7 +1259,7 @@ module.exports = [
1259
1259
  'the normal monitoring state, the green indicator light flashes every 60 seconds'),
1260
1260
  exposes.binary('linkage_alarm', ea.ALL, true, false).withDescription('When this option is enabled and a smoke ' +
1261
1261
  'is detected, other detectors with this option enabled will also sound the alarm buzzer'),
1262
- e.temperature(), e.battery(), e.battery_voltage()],
1262
+ e.device_temperature(), e.battery(), e.battery_voltage()],
1263
1263
  meta: {battery: {voltageToPercentage: '3V_2850_3000_log'}},
1264
1264
  configure: async (device, coordinatorEndpoint, logger) => {
1265
1265
  const endpoint = device.getEndpoint(1);
@@ -1290,7 +1290,7 @@ module.exports = [
1290
1290
  fromZigbee: [fz.xiaomi_basic, fz.DJT11LM_vibration],
1291
1291
  toZigbee: [tz.DJT11LM_vibration_sensitivity],
1292
1292
  exposes: [
1293
- e.battery(), e.temperature(), e.vibration(), e.action(['vibration', 'tilt', 'drop']),
1293
+ e.battery(), e.device_temperature(), e.vibration(), e.action(['vibration', 'tilt', 'drop']),
1294
1294
  exposes.numeric('strength', ea.STATE), exposes.enum('sensitivity', ea.STATE_SET, ['low', 'medium', 'high']),
1295
1295
  e.angle_axis('angle_x'), e.angle_axis('angle_y'), e.angle_axis('angle_z'), e.battery_voltage(),
1296
1296
  ],
@@ -1366,7 +1366,7 @@ module.exports = [
1366
1366
  await device.getEndpoint(1).read('genAnalogOutput', ['presentValue']);
1367
1367
  }
1368
1368
  },
1369
- exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET), e.temperature(),
1369
+ exposes: [e.cover_position().setAccess('state', ea.ALL), e.battery().withAccess(ea.STATE_GET), e.device_temperature(),
1370
1370
  exposes.binary('charging_status', ea.STATE_GET, true, false)
1371
1371
  .withDescription('The current charging status.'),
1372
1372
  exposes.enum('motor_state', ea.STATE, ['declining', 'rising', 'pause', 'blocked'])
@@ -1392,7 +1392,7 @@ module.exports = [
1392
1392
  endpoint: (device) => {
1393
1393
  return {'l1': 1, 'l2': 2};
1394
1394
  },
1395
- exposes: [e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature(), e.voltage(), e.current(),
1395
+ exposes: [e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature(), e.voltage(), e.current(),
1396
1396
  e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'), e.power_outage_count(false),
1397
1397
  e.power_outage_memory(),
1398
1398
  exposes.binary('interlock', ea.STATE_SET, true, false)
@@ -1593,7 +1593,7 @@ module.exports = [
1593
1593
  description: 'Aqara single switch module T1 (with neutral)',
1594
1594
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.aqara_opple],
1595
1595
  toZigbee: [tz.on_off, tz.xiaomi_power, tz.xiaomi_switch_type, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_led_disabled_night],
1596
- exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.temperature().withAccess(ea.STATE),
1596
+ exposes: [e.switch(), e.power().withAccess(ea.STATE_GET), e.energy(), e.device_temperature().withAccess(ea.STATE),
1597
1597
  e.voltage().withAccess(ea.STATE), e.power_outage_memory(), e.led_disabled_night(), e.switch_type()],
1598
1598
  configure: async (device, coordinatorEndpoint, logger) => {
1599
1599
  await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
@@ -1731,7 +1731,7 @@ module.exports = [
1731
1731
  toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
1732
1732
  tz.aqara_switch_mode_switch, tz.xiaomi_flip_indicator_light],
1733
1733
  exposes: [e.switch(), e.power_outage_memory(), e.action(['single', 'double']),
1734
- e.temperature(), e.flip_indicator_light(),
1734
+ e.device_temperature(), e.flip_indicator_light(),
1735
1735
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
1736
1736
  .withDescription('Decoupled mode for button'),
1737
1737
  exposes.enum('mode_switch', ea.ALL, ['anti_flicker_mode', 'quick_mode'])
@@ -1755,7 +1755,7 @@ module.exports = [
1755
1755
  return {'left': 1, 'right': 2};
1756
1756
  },
1757
1757
  exposes: [
1758
- e.switch().withEndpoint('left'), e.switch().withEndpoint('right'), e.temperature(),
1758
+ e.switch().withEndpoint('left'), e.switch().withEndpoint('right'), e.device_temperature(),
1759
1759
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled'])
1760
1760
  .withDescription('Decoupled mode for left button')
1761
1761
  .withEndpoint('left'),
@@ -1816,7 +1816,7 @@ module.exports = [
1816
1816
  .withDescription('Decoupled mode for right button')
1817
1817
  .withEndpoint('right'),
1818
1818
  e.action(['single_left', 'double_left', 'single_right', 'double_right', 'single_both', 'double_both']),
1819
- e.power_outage_memory(), e.temperature(), e.flip_indicator_light(),
1819
+ e.power_outage_memory(), e.device_temperature(), e.flip_indicator_light(),
1820
1820
  ],
1821
1821
  onEvent: preventReset,
1822
1822
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -1832,7 +1832,7 @@ module.exports = [
1832
1832
  fromZigbee: [fz.on_off, fz.xiaomi_power, fz.aqara_opple],
1833
1833
  toZigbee: [tz.on_off, tz.xiaomi_switch_power_outage_memory, tz.xiaomi_led_disabled_night,
1834
1834
  tz.xiaomi_overload_protection, tz.xiaomi_socket_button_lock],
1835
- exposes: [e.switch(), e.power().withAccess(ea.STATE), e.energy(), e.temperature().withAccess(ea.STATE),
1835
+ exposes: [e.switch(), e.power().withAccess(ea.STATE), e.energy(), e.device_temperature().withAccess(ea.STATE),
1836
1836
  e.voltage().withAccess(ea.STATE), e.current(), e.consumer_connected().withAccess(ea.STATE),
1837
1837
  e.power_outage_memory(), e.led_disabled_night(), e.button_lock(),
1838
1838
  exposes.numeric('overload_protection', exposes.access.ALL).withValueMin(100).withValueMax(2500).withUnit('W')
@@ -1847,7 +1847,7 @@ module.exports = [
1847
1847
  fromZigbee: [fz.on_off, fz.xiaomi_multistate_action, fz.aqara_opple],
1848
1848
  toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode_opple, tz.xiaomi_switch_power_outage_memory,
1849
1849
  tz.xiaomi_flip_indicator_light],
1850
- exposes: [e.switch(), e.action(['single', 'double']), e.power_outage_memory(), e.temperature(), e.flip_indicator_light(),
1850
+ exposes: [e.switch(), e.action(['single', 'double']), e.power_outage_memory(), e.device_temperature(), e.flip_indicator_light(),
1851
1851
  exposes.enum('operation_mode', ea.ALL, ['control_relay', 'decoupled']).withDescription('Decoupled mode')],
1852
1852
  onEvent: preventReset,
1853
1853
  configure: async (device, coordinatorEndpoint, logger) => {
@@ -1900,7 +1900,7 @@ module.exports = [
1900
1900
  },
1901
1901
  exposes: [
1902
1902
  e.switch().withEndpoint('relay'), e.switch().withEndpoint('usb'),
1903
- e.power().withAccess(ea.STATE), e.energy(), e.temperature().withAccess(ea.STATE), e.voltage().withAccess(ea.STATE),
1903
+ e.power().withAccess(ea.STATE), e.energy(), e.device_temperature().withAccess(ea.STATE), e.voltage().withAccess(ea.STATE),
1904
1904
  e.current(), e.power_outage_memory(), e.led_disabled_night(), e.button_lock(),
1905
1905
  exposes.enum('button_switch_mode', exposes.access.ALL, ['relay', 'relay_and_usb'])
1906
1906
  .withDescription('Control both relay and usb or only the relay with the physical switch button'),
@@ -1928,7 +1928,7 @@ module.exports = [
1928
1928
  tz.xiaomi_overload_protection, tz.xiaomi_socket_button_lock],
1929
1929
  exposes: [
1930
1930
  e.switch(), e.power().withAccess(ea.STATE), e.energy(),
1931
- e.temperature().withAccess(ea.STATE), e.voltage().withAccess(ea.STATE),
1931
+ e.device_temperature().withAccess(ea.STATE), e.voltage().withAccess(ea.STATE),
1932
1932
  e.current(), e.power_outage_memory(), e.led_disabled_night(), e.button_lock(),
1933
1933
  exposes.numeric('overload_protection', exposes.access.ALL).withValueMin(100).withValueMax(2500).withUnit('W')
1934
1934
  .withDescription('Maximum allowed load, turns off if exceeded')],
@@ -70,6 +70,8 @@ module.exports = [
70
70
  whiteLabel: [{vendor: 'BSEED', model: 'TS0003', description: 'Zigbee switch'}],
71
71
  meta: {multiEndpoint: true, disableDefaultResponse: true},
72
72
  configure: async (device, coordinatorEndpoint, logger) => {
73
+ await device.getEndpoint(1).read('genBasic',
74
+ ['manufacturerName', 'zclVersion', 'appVersion', 'modelId', 'powerSource', 0xfffe]);
73
75
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
74
76
  await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
75
77
  await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']);
package/lib/xiaomi.js CHANGED
@@ -158,12 +158,11 @@ const numericAttributes2Payload = (msg, meta, model, options, dataObject) => {
158
158
  }
159
159
  break;
160
160
  case '3':
161
- if (['WSDCGQ12LM'].includes(model.model)) {
162
- // This temperature value is ignored because with greater accuracy it is reported in key №100
163
- } else if (['SSM-U01'].includes(model.model)) {
164
- payload.device_temperature = value;
165
- } else if (!['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM'].includes(model.model)) {
166
- payload.temperature = calibrateAndPrecisionRoundOptions(value, options, 'temperature'); // 0x03
161
+ if (['WXCJKG11LM', 'WXCJKG12LM', 'WXCJKG13LM'].includes(model.model)) {
162
+ // The temperature value is constant 25 °C and does not change, so we ignore it
163
+ // https://github.com/Koenkk/zigbee2mqtt/issues/11126
164
+ } else {
165
+ payload.device_temperature = calibrateAndPrecisionRoundOptions(value, options, 'device_temperature'); // 0x03
167
166
  }
168
167
  break;
169
168
  case '4':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.522",
3
+ "version": "14.0.523",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [