zigbee-herdsman-converters 14.0.593 → 14.0.596

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.
package/devices/climax.js CHANGED
@@ -91,7 +91,7 @@ module.exports = [
91
91
  },
92
92
  exposes: [e.battery_low(), e.tamper(), e.warning(),
93
93
  exposes.numeric('max_duration', ea.ALL).withUnit('s').withValueMin(0).withValueMax(600).withDescription('Duration of Siren'),
94
- exposes.binary('alarm', ea.SET, 'ON', 'OFF').withDescription('Manual start of siren')],
94
+ exposes.binary('alarm', ea.SET, 'START', 'OFF').withDescription('Manual start of siren')],
95
95
  },
96
96
  {
97
97
  zigbeeModel: ['WS15_00.00.00.14TC'],
@@ -8,6 +8,35 @@ const ota = require('../lib/ota');
8
8
  const e = exposes.presets;
9
9
  const ea = exposes.access;
10
10
 
11
+ const fzLocal = {
12
+ // SPLZB-134 reports strange values sometimes
13
+ // https://github.com/Koenkk/zigbee2mqtt/issues/13329
14
+ SPLZB134_electrical_measurement: {
15
+ ...fz.electrical_measurement,
16
+ convert: (model, msg, publish, options, meta) => {
17
+ if (msg.data.rmsVoltage !== 0xFFFF && msg.data.rmsCurrent !== 0xFFFF && msg.data.activePower !== -0x8000) {
18
+ return fz.electrical_measurement.convert(model, msg, publish, options, meta);
19
+ }
20
+ },
21
+ },
22
+ SPLZB134_device_temperature: {
23
+ ...fz.device_temperature,
24
+ convert: (model, msg, publish, options, meta) => {
25
+ if (msg.data.currentTemperature !== -0x8000) {
26
+ return fz.device_temperature.convert(model, msg, publish, options, meta);
27
+ }
28
+ },
29
+ },
30
+ SPLZB134_metering: {
31
+ ...fz.metering,
32
+ convert: (model, msg, publish, options, meta) => {
33
+ if (msg.data.instantaneousDemand !== -0x800000) {
34
+ return fz.metering.convert(model, msg, publish, options, meta);
35
+ }
36
+ },
37
+ },
38
+ };
39
+
11
40
  module.exports = [
12
41
  {
13
42
  zigbeeModel: ['SPLZB-131'],
@@ -65,7 +94,7 @@ module.exports = [
65
94
  model: 'SPLZB-134',
66
95
  vendor: 'Develco',
67
96
  description: 'Power plug (type G)',
68
- fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.device_temperature],
97
+ fromZigbee: [fz.on_off, fzLocal.SPLZB134_electrical_measurement, fzLocal.SPLZB134_metering, fzLocal.SPLZB134_device_temperature],
69
98
  toZigbee: [tz.on_off],
70
99
  exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy(), e.device_temperature()],
71
100
  configure: async (device, coordinatorEndpoint, logger) => {
package/devices/ecodim.js CHANGED
@@ -8,9 +8,9 @@ module.exports = [
8
8
  {
9
9
  fingerprint: [
10
10
  {type: 'Router', manufacturerName: 'EcoDim BV', modelID: 'EcoDim-Zigbee 3.0', endpoints: [
11
- {ID: 1, profileID: 260, deviceID: 257, inputClusters: [0, 3, 4, 5, 6, 8, 2821, 4096], outputClusters: [25]},
12
- {ID: 2, profileID: 260, deviceID: 257, inputClusters: [0, 3, 4, 5, 6, 8], outputClusters: []},
13
- {ID: 242, profileID: 41440, deviceID: 97, inputClusters: [], outputClusters: [33]},
11
+ {ID: 1, profileID: 260, inputClusters: [0, 3, 4, 5, 6, 8, 2821, 4096], outputClusters: [25]},
12
+ {ID: 2, profileID: 260, inputClusters: [0, 3, 4, 5, 6, 8], outputClusters: []},
13
+ {ID: 242, profileID: 41440, inputClusters: [], outputClusters: [33]},
14
14
  ]},
15
15
  ],
16
16
  model: 'Eco-Dim.05',
package/devices/giex.js CHANGED
@@ -118,8 +118,8 @@ module.exports = [
118
118
  e.battery(),
119
119
  exposes.binary('state', ea.STATE_SET, 'ON', 'OFF').withDescription('State'),
120
120
  exposes.enum('mode', ea.STATE_SET, ['duration', 'capacity']).withDescription('Irrigation mode'),
121
- exposes.numeric('irrigation_target', exposes.access.STATE_SET).withValueMin(0).withValueMax(1440).withUnit('mintues or Litres')
122
- .withDescription('Irrigation Target, duration in minutes or capacity in Liters (depending on mode)'),
121
+ exposes.numeric('irrigation_target', exposes.access.STATE_SET).withValueMin(0).withValueMax(1440).withUnit('minutes or Litres')
122
+ .withDescription('Irrigation Target, duration in minutes or capacity in Litres (depending on mode)'),
123
123
  exposes.numeric('cycle_irrigation_num_times', exposes.access.STATE_SET).withValueMin(0).withValueMax(100).withUnit('#')
124
124
  .withDescription('Number of cycle irrigation times, set to 0 for single cycle'),
125
125
  exposes.numeric('cycle_irrigation_interval', exposes.access.STATE_SET).withValueMin(0).withValueMax(1440).withUnit('min')
@@ -5,6 +5,7 @@ const extend = require('../lib/extend');
5
5
  const tz = require('../converters/toZigbee');
6
6
  const ota = require('../lib/ota');
7
7
  const e = exposes.presets;
8
+ const ea = exposes.access;
8
9
 
9
10
  module.exports = [
10
11
  {
@@ -160,7 +161,14 @@ module.exports = [
160
161
  fz.command_step, fz.command_recall, fz.command_on, fz.command_off],
161
162
  exposes: [e.battery(), e.action([
162
163
  'color_move', 'color_temperature_move', 'hue_move', 'hue_stop', 'brightness_step_up', 'brightness_step_down',
163
- 'recall_*', 'on', 'off'])],
164
+ 'recall_*', 'on', 'off']),
165
+ // exposes.composite('action_color', 'action_color') * At the moment not shown in Frontend correctly
166
+ // .withFeature(exposes.numeric('x', ea.STATE)) see: https://github.com/nurikk/zigbee2mqtt-frontend/issues/1535
167
+ // .withFeature(exposes.numeric('y', ea.STATE)),
168
+ exposes.numeric('action_color_temperature', ea.STATE).withUnit('mired'),
169
+ exposes.numeric('action_group', ea.STATE),
170
+ exposes.numeric('action_transition_time', ea.STATE),
171
+ exposes.text('action_color', ea.STATE)],
164
172
  toZigbee: [],
165
173
  meta: {multiEndpoint: true},
166
174
  endpoint: (device) => {
package/devices/istar.js CHANGED
@@ -9,4 +9,12 @@ module.exports = [
9
9
  extend: extend.light_onoff_brightness(),
10
10
  meta: {turnsOffAtBrightness1: true},
11
11
  },
12
+ {
13
+ zigbeeModel: ['iStar CCT Light'],
14
+ model: 'SCCV2403-2',
15
+ vendor: 'iStar',
16
+ description: 'Zigbee 3.0 LED controller, dimmable white spectrum',
17
+ extend: extend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}),
18
+ meta: {turnsOffAtBrightness1: true},
19
+ },
12
20
  ];
@@ -110,6 +110,7 @@ module.exports = [
110
110
  configure: async (device, coordinatorEndpoint, logger) => {
111
111
  const endpoint = device.getEndpoint(1);
112
112
  await reporting.bind(endpoint, coordinatorEndpoint, ['genBinaryInput', 'closuresWindowCovering', 'genIdentify']);
113
+ await reporting.currentPositionLiftPercentage(endpoint);
113
114
  },
114
115
  exposes: [e.cover_position()],
115
116
  },
@@ -84,6 +84,96 @@ const fzLocal = {
84
84
  },
85
85
  };
86
86
 
87
+ const gradientScenes = {
88
+ 'blossom': '50010400135000000039d553d2955ba5287a9f697e25fb802800',
89
+ 'crocus': '50010400135000000050389322f97f2b597343764cc664282800',
90
+ 'precious': '5001040013500000007fa8838bb9789a786d7577499a773f2800',
91
+ 'narcissa': '500104001350000000b0498a5c0a888fea89eb0b7ee15c742800',
92
+ 'beginnings': '500104001350000000b3474def153e2ad42e98232c7483292800',
93
+ 'first_light': '500104001350000000b28b7900e959d3f648a614389723362800',
94
+ 'horizon': '500104001350000000488b7d6cbb750c6642f1133cc4033c2800',
95
+ 'valley_dawn': '500104001350000000c1aa7de03a7a8ce861c7c4410d94412800',
96
+ 'sunflare': '500104001350000000d0aa7d787a7daf197590154d6c14472800',
97
+ 'emerald_flutter': '5001040013500000006a933977e34bb0d35e916468f246792800',
98
+ 'memento': '500104001350000000f87318a3e31962331ec3532cceea892800',
99
+ 'resplendent': '500104001350000000278b6d257a58efe84204273a35f5252800',
100
+ 'scarlet_dream': '500104001350000000b02c654e4c5b45ab51fb0950d6c84d2800',
101
+ 'lovebirds': '50010400135000000053ab84ea1a7e35fb7c098c73994c772800',
102
+ 'smitten': '500104001350000000fe7b70a74b6aa42b65811b60550a592800',
103
+ 'glitz_and_glam': '500104001350000000cc193cb9b845bad9521d1c77bf6c712800',
104
+ 'promise': '500104001350000000258b606eca6b28d6382db445df26812800',
105
+ 'ruby_romance': '5001040013500000000edb63cbcb6bac0c670b2d58204e572800',
106
+ 'city_of_love': '50010400135000000055830e5cf31b6aa339d2ec70908b802800',
107
+ 'honolulu': '500104001350000000dbfd59866c6378ec6c45cc765c0a822800',
108
+ 'savanna_sunset': '50010400135000000005ae65c38c6c6b4b7573ca820fc9832800',
109
+ 'golden_pond': '5001040013500000007e4a88cc4a8605db8728ec7b666c792800',
110
+ 'runy_glow': '50010400135000000095bb53ac2a56eb99591e095c54985e2800',
111
+ 'tropical_twilight': '500104001350000000408523a0b636e777524c0a71a76c6e2800',
112
+ 'miami': '50010400135000000022ec61e6d94902d83766c3305a43182800',
113
+ 'cancun': '500104001350000000a7eb54673d55944e6265fd6e26bb842800',
114
+ 'rio': '500104001350000000a26526088c51a74b58ea6b7137ba892800',
115
+ 'chinatown': '500104001350000000b33e5b408e59d90d5b4c6c6360ac792800',
116
+ 'ibiza': '500104001350000000014d6d708c73827b7b6c7a8887f98a2800',
117
+ 'osaka': '500104001350000000d649510b5c4deb7c5d8b6d6d2b9b802800',
118
+ 'tokyo': '500104001350000000d1c311665331d3451fd59c4e394c7b2800',
119
+ 'motown': '50010400135000000055730e5db3156623306c533d7a235c2800',
120
+ 'fairfax': '50010400135000000072d34a3664477d7a61581d5fc08e5b2800',
121
+ 'galaxy': '500104001350000000a6cb638b2a4f8cfa549bb9549ff73a2800',
122
+ 'starlight': '5001040013500000008d897134a9653ec854d2963ed1d4282800',
123
+ 'blood moon': '500104001350000000202a6987c8599ee647ec632779c3142800',
124
+ 'artic_aurora': '50010400135000000082548922057511046571c32d5b93192800',
125
+ 'moonlight': '50010400135000000055730e5e9320c1832e96243ebec7652800',
126
+ 'nebula': '50010400135000000026c852e106460d653ee745342964142800',
127
+ 'sundown': '500104001350000000f37c68157c6d8efa755ac5512e24332800',
128
+ 'blue_lagoon': '50010400135000000088c3623975699ea672a0c8831ada6d2800',
129
+ 'palm_beach': '5001040013500000005ec4679ba56077f85a80ea64639c6a2800',
130
+ 'lake_placid': '5001040013500000002eab69239a692d996552c54c39743a2800',
131
+ 'mountain_breeze': '500104001350000000df843d2355419195465a98674ca97b2800',
132
+ 'lake_mist': '500104001350000000e3286f39b96859f86266e54ded943f2800',
133
+ 'ocean_dawn': '5001040013500000005cf9779da97105b96b07485e32564a2800',
134
+ 'frosty_dawn': '5001040013500000006d6883bca87e3029758ec9722d6a722800',
135
+ 'sunday_morning': '5001040013500000002c586dc6f87345997c63f983f777892800',
136
+ 'emerald_isle': '500104001350000000e535628dc57ed2667d8b687d1e2a812800',
137
+ 'spring_blossom': '500104001350000000a8b75fd0c75826b851a7094d305b652800',
138
+ 'midsummer_sun': '500104001350000000002984799984dd29848eba836c0b7f2800',
139
+ 'autumn_gold': '500104001350000000435a7817aa7ba3f979a8a981f3c9852800',
140
+ 'spring_lake': '5001040013500000004a976d3347736e677561b77a4b07812800',
141
+ 'winter_mountain': '5001040013500000002c555c68c55d7c555ef165606136622800',
142
+ 'midwinter': '500104001350000000bda5532c554dbd254cd5a4428d94392800',
143
+ 'amber_bloom': '500104001350000000739d67f2bc7372ec78a0ab78be8a6f2800',
144
+ 'lily': '5001040013500000009cfc76c5ab793d4a6a1a9b586b9c522800',
145
+ 'painted_sky': '500104001350000000d1c424c3d63783384c3f7a6a83bd6d2800',
146
+ 'winter_beauty': '500104001350000000e2335ea7b4942467952db986a7ab7b2800',
147
+ 'orange_fields': '500104001350000000409c69694c79eafa88498a8fb867aa2800',
148
+ 'forest_adventure': '50010400135000000023999bbd76b363d4b674d3415fb3222800',
149
+ 'blue_planet': '50010400135000000037a7a3a403b489737b2b746e6873362800',
150
+ 'soho': '500104001350000000c52c4e220b6eed8a53d404192b04782800',
151
+ 'vapor_wave': '500104001350000000e1c32401251acb183ac31b8051ea842800',
152
+ 'magneto': '50010400135000000077b3286d9340b9e3662d99943c9b852800',
153
+ 'tyrell': '500104001350000000ef4419a898370ea84698353574434e2800',
154
+ 'disturbia': '50010400135000000084f371a4845e6998388c3b4f57ce582800',
155
+ 'hal': '50010400135000000075f351a6244cf6dc5d480c658cda862800',
156
+ 'golden_star': '5001040013500000007a4a8702eb8372ac7892cd61d51e5c2800',
157
+ 'under_the_tree': '5001040013500000001de498b9a3cc0c9b8563bb6cc1ae5d2800',
158
+ 'silent_night': '5001040013500000009e296a245a6f660a75086b70953b6e2800',
159
+ 'rosy_sparkle': '500104001350000000810967c63a6cb2aa5ea7094eddd73c2800',
160
+ 'festive_fun': '5001040013500000005a9318de53123e9414fdcc67839d612800',
161
+ 'colour_burst': '500104001350000000f2731ff0c6266a6c64246e57d4f98f2800',
162
+ 'crystalline': '5001040013500000006ea96a92a85e58074e18543d9cf3332800',
163
+ };
164
+
165
+ const tzLocal = {
166
+ gradient_scene: {
167
+ key: ['gradient_scene'],
168
+ convertSet: async (entity, key, value, meta) => {
169
+ const scene = gradientScenes[value];
170
+ if (!scene) throw new Error(`Gradient scene '${value}' is unknown`);
171
+ const payload = {data: Buffer.from(scene, 'hex')};
172
+ await entity.command('manuSpecificPhilips2', 'multiColor', payload);
173
+ },
174
+ },
175
+ };
176
+
87
177
  module.exports = [
88
178
  {
89
179
  zigbeeModel: ['929003055801'],
@@ -134,6 +224,13 @@ module.exports = [
134
224
  description: 'Hue gradient lightstrip',
135
225
  extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
136
226
  },
227
+ {
228
+ zigbeeModel: ['929003045401'],
229
+ model: '929003045401',
230
+ vendor: 'Philips',
231
+ description: 'Hue Centura recessed spotlight white and color ambiance GU10 (black)',
232
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
233
+ },
137
234
  {
138
235
  zigbeeModel: ['929003045501_01', '929003045501_02', '929003045501_03'],
139
236
  model: '929003045501',
@@ -968,7 +1065,7 @@ module.exports = [
968
1065
  extend: hueExtend.light_onoff_brightness_colortemp(),
969
1066
  },
970
1067
  {
971
- zigbeeModel: ['3417831P6'],
1068
+ zigbeeModel: ['3417831P6', '929003056101'],
972
1069
  model: '3417831P6',
973
1070
  vendor: 'Philips',
974
1071
  description: 'Hue white ambiance Adore spotlight with Bluetooth (1 spot)',
@@ -1483,6 +1580,9 @@ module.exports = [
1483
1580
  model: '4080248U9',
1484
1581
  vendor: 'Philips',
1485
1582
  description: 'Hue White and color ambiance Signe floor light',
1583
+ toZigbee: [tzLocal.gradient_scene, ...hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}).toZigbee],
1584
+ exposes: [exposes.enum('gradient_scene', ea.SET, Object.keys(gradientScenes)),
1585
+ ...hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}).exposes],
1486
1586
  extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
1487
1587
  },
1488
1588
  {
@@ -2071,7 +2171,7 @@ module.exports = [
2071
2171
  extend: hueExtend.light_onoff_brightness_colortemp_color(),
2072
2172
  },
2073
2173
  {
2074
- zigbeeModel: ['LCS001'],
2174
+ zigbeeModel: ['LCS001', '1741830P7'],
2075
2175
  model: '1741830P7',
2076
2176
  vendor: 'Philips',
2077
2177
  description: 'Hue Lily outdoor spot light',
package/devices/robb.js CHANGED
@@ -274,4 +274,24 @@ module.exports = [
274
274
  await reporting.currentSummDelivered(endpoint1, {min: 60, change: 1});
275
275
  },
276
276
  },
277
+ {
278
+ zigbeeModel: ['ROB_200-035-0'],
279
+ model: 'ROB_200-035-0',
280
+ vendor: 'ROBB',
281
+ description: '1 channel switch with power monitoring',
282
+ fromZigbee: [fz.electrical_measurement, fz.on_off, fz.ignore_genLevelCtrl_report, fz.metering],
283
+ toZigbee: [tz.on_off],
284
+ exposes: [e.switch(), e.power(), e.current(), e.voltage(), e.energy()],
285
+ configure: async (device, coordinatorEndpoint, logger) => {
286
+ const endpoint = device.getEndpoint(1);
287
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
288
+ await reporting.onOff(endpoint);
289
+ await reporting.readEletricalMeasurementMultiplierDivisors(endpoint);
290
+ await reporting.readMeteringMultiplierDivisor(endpoint);
291
+ await reporting.rmsCurrent(endpoint);
292
+ await reporting.activePower(endpoint);
293
+ await reporting.rmsVoltage(endpoint);
294
+ await reporting.currentSummDelivered(endpoint);
295
+ },
296
+ },
277
297
  ];
@@ -3,6 +3,7 @@ const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/lega
3
3
  const tz = require('../converters/toZigbee');
4
4
  const reporting = require('../lib/reporting');
5
5
  const extend = require('../lib/extend');
6
+ const ota = require('../lib/ota');
6
7
  const e = exposes.presets;
7
8
  const ea = exposes.access;
8
9
 
@@ -23,6 +24,7 @@ module.exports = [
23
24
  const payload = reporting.payload('presentValue', 1, 600, 0);
24
25
  await endpoint.configureReporting('genAnalogInput', payload);
25
26
  },
27
+ ota: ota.zigbeeOTA,
26
28
  exposes: [e.battery(), e.battery_voltage(),
27
29
  exposes.enum('status', ea.STATE, ['idle', 'in', 'out']).withDescription('Currently status'),
28
30
  exposes.numeric('people', ea.ALL).withValueMin(0).withValueMax(50).withDescription('People count')],
@@ -2,6 +2,7 @@ const exposes = require('../lib/exposes');
2
2
  const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
3
3
  const tz = require('../converters/toZigbee');
4
4
  const extend = require('../lib/extend');
5
+ const reporting = require('../lib/reporting');
5
6
  const ea = exposes.access;
6
7
 
7
8
  module.exports = [
@@ -95,4 +96,18 @@ module.exports = [
95
96
  ],
96
97
  meta: {separateWhite: true},
97
98
  },
99
+ {
100
+ fingerprint: [{modelID: 'TS0501B', manufacturerName: '_TZB210_rkgngb5o'}],
101
+ model: 'WZ1',
102
+ vendor: 'Skydance',
103
+ description: 'Zigbee & RF 2 channel LED controller',
104
+ extend: extend.light_onoff_brightness({noConfigure: true, disableEffect: true}),
105
+ configure: async (device, coordinatorEndpoint, logger) => {
106
+ await extend.light_onoff_brightness().configure(device, coordinatorEndpoint, logger);
107
+ const endpoint = device.getEndpoint(1);
108
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genLevelCtrl']);
109
+ await reporting.onOff(endpoint);
110
+ await reporting.brightness(endpoint);
111
+ },
112
+ },
98
113
  ];
@@ -116,8 +116,10 @@ module.exports = [
116
116
  configure: async (device, coordinatorEndpoint, logger) => {
117
117
  const endpoint = device.getEndpoint(1);
118
118
  await reporting.bind(endpoint, coordinatorEndpoint, ['genPowerCfg', 'closuresWindowCovering']);
119
- await reporting.batteryPercentageRemaining(endpoint);
120
119
  await reporting.currentPositionLiftPercentage(endpoint);
120
+ try {
121
+ await reporting.batteryPercentageRemaining(endpoint);
122
+ } catch (error) {/* Fails for some*/}
121
123
  },
122
124
  exposes: [e.cover_position(), e.battery()],
123
125
  },
package/devices/tuya.js CHANGED
@@ -744,6 +744,7 @@ module.exports = [
744
744
  fingerprint: [{modelID: 'TS0505B', manufacturerName: '_TZ3000_qqjaziws'},
745
745
  {modelID: 'TS0505B', manufacturerName: '_TZ3000_jtmhndw2'},
746
746
  {modelID: 'TS0505B', manufacturerName: '_TZ3000_ezlg0pht'},
747
+ {modelID: 'TS0505B', manufacturerName: '_TZ3210_3lbtuxgp'},
747
748
  {modelID: 'TS0505B', manufacturerName: '_TZ3210_5snkkrxw'},
748
749
  {modelID: 'TS0505B', manufacturerName: '_TZ3000_12sxjap4'},
749
750
  {modelID: 'TS0505B', manufacturerName: '_TZ3000_x2fqbdun'},
@@ -842,14 +843,15 @@ module.exports = [
842
843
  extend: extend.light_onoff_brightness(),
843
844
  },
844
845
  {
845
- fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_jytabjkb'}],
846
+ fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_jytabjkb'},
847
+ {modelID: 'TS0202', manufacturerName: '_TZ3000_lltemgsf'}],
846
848
  model: 'TS0202_1',
847
849
  vendor: 'TuYa',
848
850
  description: 'Motion sensor',
849
851
  // Requires alarm_1_with_timeout https://github.com/Koenkk/zigbee2mqtt/issues/2818#issuecomment-776119586
850
852
  fromZigbee: [fz.ias_occupancy_alarm_1_with_timeout, fz.battery, fz.ignore_basic_report],
851
853
  toZigbee: [],
852
- exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery()],
854
+ exposes: [e.occupancy(), e.battery_low(), e.linkquality()],
853
855
  },
854
856
  {
855
857
  fingerprint: [{modelID: 'TS0202', manufacturerName: '_TYZB01_dr6sduka'},
@@ -2479,7 +2481,12 @@ module.exports = [
2479
2481
  .withLocalTemperature(ea.STATE).withLocalTemperatureCalibration(-9.9, 9.9, 0.1, ea.STATE_SET)
2480
2482
  .withSystemMode(['off', 'heat'], ea.STATE_SET).withRunningState(['idle', 'heat'], ea.STATE)
2481
2483
  .withPreset(['manual', 'program']).withSensor(['internal', 'external', 'both'], ea.STATE_SET),
2482
- exposes.text('schedule', ea.STATE_SET), e.child_lock(), e.week(),
2484
+ exposes.text('schedule', ea.STATE_SET).withDescription('There are 8 periods in the schedule in total. ' +
2485
+ '6 for workdays and 2 for holidays. It should be set in the following format for each of the periods: ' +
2486
+ '`hours:minutes/temperature`. All periods should be set at once and delimited by the space symbol. ' +
2487
+ 'For example: `06:00/20.5 08:00/15 11:30/15 13:30/15 17:00/22 22:00/15 06:00/20 22:00/15`. ' +
2488
+ 'The thermostat doesn\'t report the schedule by itself even if you change it manually from device'),
2489
+ e.child_lock(), e.week(),
2483
2490
  exposes.enum('brightness_state', ea.STATE_SET, ['off', 'low', 'medium', 'high'])
2484
2491
  .withDescription('Screen brightness'),
2485
2492
  exposes.binary('sound', ea.STATE_SET, 'ON', 'OFF')
@@ -2516,7 +2523,8 @@ module.exports = [
2516
2523
  {
2517
2524
  fingerprint: [{modelID: 'TS0210', manufacturerName: '_TYZB01_3zv6oleo'},
2518
2525
  {modelID: 'TS0210', manufacturerName: '_TYZB01_j9xxahcl'},
2519
- {modelID: 'TS0210', manufacturerName: '_TYZB01_kulduhbj'}],
2526
+ {modelID: 'TS0210', manufacturerName: '_TYZB01_kulduhbj'},
2527
+ {modelID: 'TS0210', manufacturerName: '_TZ3000_bmfw9ykl'}],
2520
2528
  model: 'TS0210',
2521
2529
  vendor: 'TuYa',
2522
2530
  description: 'Vibration sensor',
@@ -2804,7 +2812,7 @@ module.exports = [
2804
2812
  .withFeature(exposes.binary('over_leakage_current_trip', ea.STATE_SET, 'ON', 'OFF'))
2805
2813
  .withFeature(exposes.binary('over_leakage_current_alarm', ea.STATE_SET, 'ON', 'OFF'))
2806
2814
  .withFeature(exposes.binary('self_test', ea.STATE_SET, 'test', 'clear')),*/
2807
- exposes.enum('clear_device_data', ea.SET, ['clear']),
2815
+ exposes.enum('clear_device_data', ea.SET, ['']),
2808
2816
  ],
2809
2817
  },
2810
2818
  {
@@ -3021,7 +3029,7 @@ module.exports = [
3021
3029
  .withDescription('Favorite position of this cover'),
3022
3030
  exposes.binary(`reverse_direction`, ea.STATE_SET, true, false).withDescription(`Inverts the cover direction`),
3023
3031
  exposes.text('motor_type', ea.STATE),
3024
- exposes.enum('report', ea.SET, ['REPORT']),
3032
+ exposes.enum('report', ea.SET, ['']),
3025
3033
  ],
3026
3034
  },
3027
3035
  {
@@ -0,0 +1,17 @@
1
+ const extend = require('../lib/extend');
2
+ const reporting = require('../lib/reporting');
3
+
4
+ module.exports = [
5
+ {
6
+ zigbeeModel: ['Z111PL0H-1JX'],
7
+ model: 'SA-029',
8
+ vendor: 'Woolley',
9
+ description: 'Smart Plug',
10
+ extend: extend.switch(),
11
+ configure: async (device, coordinatorEndpoint, logger) => {
12
+ const endpoint = device.getEndpoint(1);
13
+ await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
14
+ await reporting.onOff(endpoint);
15
+ },
16
+ },
17
+ ];
package/devices/xiaomi.js CHANGED
@@ -312,6 +312,7 @@ module.exports = [
312
312
  // set "event" mode
313
313
  await endpoint1.write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
314
314
  },
315
+ ota: ota.zigbeeOTA,
315
316
  },
316
317
  {
317
318
  zigbeeModel: ['lumi.switch.b2laus01'],
@@ -332,6 +333,7 @@ module.exports = [
332
333
  await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
333
334
  await reporting.onOff(endpoint2);
334
335
  },
336
+ ota: ota.zigbeeOTA,
335
337
  },
336
338
  {
337
339
  zigbeeModel: ['lumi.switch.b1naus01'],
@@ -344,6 +346,7 @@ module.exports = [
344
346
  await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
345
347
  await reporting.onOff(endpoint);
346
348
  },
349
+ ota: ota.zigbeeOTA,
347
350
  },
348
351
  {
349
352
  zigbeeModel: ['lumi.switch.b2naus01'],
@@ -364,6 +367,7 @@ module.exports = [
364
367
  await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']);
365
368
  await reporting.onOff(endpoint2);
366
369
  },
370
+ ota: ota.zigbeeOTA,
367
371
  },
368
372
  {
369
373
  zigbeeModel: ['lumi.switch.n2acn1'],
@@ -737,6 +741,7 @@ module.exports = [
737
741
  await device.getEndpoint(1).write('aqaraOpple', {'mode': 1}, {manufacturerCode: 0x115f, disableResponse: true});
738
742
  },
739
743
  onEvent: preventReset,
744
+ ota: ota.zigbeeOTA,
740
745
  },
741
746
  {
742
747
  zigbeeModel: ['lumi.switch.b1nacn02'],
@@ -761,6 +766,7 @@ module.exports = [
761
766
  device.powerSource = 'Mains (single phase)';
762
767
  device.save();
763
768
  },
769
+ ota: ota.zigbeeOTA,
764
770
  },
765
771
  {
766
772
  zigbeeModel: ['lumi.switch.b2nacn02'],
@@ -1045,7 +1051,7 @@ module.exports = [
1045
1051
  'sensor detects approaching'),
1046
1052
  exposes.enum('motion_sensitivity', ea.ALL, ['low', 'medium', 'high']).withDescription('Different sensitivities ' +
1047
1053
  'means different static human body recognition rate and response speed of occupied'),
1048
- exposes.enum('reset_nopresence_status', ea.SET, ['Reset']).withDescription('Reset the status of no presence'),
1054
+ exposes.enum('reset_nopresence_status', ea.SET, ['']).withDescription('Reset the status of no presence'),
1049
1055
  e.device_temperature(), e.power_outage_count()],
1050
1056
  configure: async (device, coordinatorEndpoint, logger) => {
1051
1057
  const endpoint = device.getEndpoint(1);
@@ -1304,10 +1310,10 @@ module.exports = [
1304
1310
  exposes.numeric('gas_density', ea.STATE_GET).withUnit('%LEL').withDescription('Value of gas concentration'),
1305
1311
  exposes.enum('gas_sensitivity', ea.ALL, ['10%LEL', '15%LEL']).withDescription('Gas concentration value at which ' +
1306
1312
  'an alarm is triggered ("10%LEL" is more sensitive than "15%LEL")'),
1307
- exposes.enum('selftest', ea.SET, ['Test']).withDescription('Starts the self-test process (checking the indicator ' +
1313
+ exposes.enum('selftest', ea.SET, ['']).withDescription('Starts the self-test process (checking the indicator ' +
1308
1314
  'light and buzzer work properly)'),
1309
1315
  exposes.binary('test', ea.STATE, true, false).withDescription('Self-test in progress'),
1310
- exposes.enum('mute_buzzer', ea.SET, ['Mute']).withDescription('Mute the buzzer for 10 minutes (buzzer cannot be ' +
1316
+ exposes.enum('mute_buzzer', ea.SET, ['']).withDescription('Mute the buzzer for 10 minutes (buzzer cannot be ' +
1311
1317
  'pre-muted, because this function only works when the alarm is triggered)'),
1312
1318
  exposes.binary('mute', ea.STATE_GET, true, false).withDescription('Buzzer muted'),
1313
1319
  exposes.binary('linkage_alarm', ea.ALL, true, false).withDescription('When this option is enabled and a gas leak ' +
@@ -1338,10 +1344,10 @@ module.exports = [
1338
1344
  exposes: [e.smoke().withAccess(ea.STATE_GET),
1339
1345
  exposes.numeric('smoke_density', ea.STATE_GET).withDescription('Value of smoke concentration'),
1340
1346
  exposes.numeric('smoke_density_dbm', ea.STATE).withUnit('dB/m').withDescription('Value of smoke concentration in dB/m'),
1341
- exposes.enum('selftest', ea.SET, ['Test']).withDescription('Starts the self-test process (checking the indicator ' +
1347
+ exposes.enum('selftest', ea.SET, ['']).withDescription('Starts the self-test process (checking the indicator ' +
1342
1348
  'light and buzzer work properly)'),
1343
1349
  exposes.binary('test', ea.STATE, true, false).withDescription('Self-test in progress'),
1344
- exposes.enum('mute_buzzer', ea.SET, ['Mute']).withDescription('Mute the buzzer for 80 seconds (buzzer cannot be ' +
1350
+ exposes.enum('mute_buzzer', ea.SET, ['']).withDescription('Mute the buzzer for 80 seconds (buzzer cannot be ' +
1345
1351
  'pre-muted, because this function only works when the alarm is triggered)'),
1346
1352
  exposes.binary('mute', ea.STATE_GET, true, false).withDescription('Buzzer muted'),
1347
1353
  exposes.binary('heartbeat_indicator', ea.ALL, true, false).withDescription('When this option is enabled then in ' +
@@ -1392,6 +1398,7 @@ module.exports = [
1392
1398
  fromZigbee: [fz.DJT12LM_vibration],
1393
1399
  exposes: [e.action(['vibration'])],
1394
1400
  toZigbee: [],
1401
+ ota: ota.zigbeeOTA,
1395
1402
  },
1396
1403
  {
1397
1404
  zigbeeModel: ['lumi.curtain'],
@@ -1681,6 +1688,7 @@ module.exports = [
1681
1688
  vendor: 'Xiaomi',
1682
1689
  description: 'Aqara smart RGBW light controller',
1683
1690
  extend: extend.light_onoff_brightness_colortemp_color({supportsHS: true}),
1691
+ ota: ota.zigbeeOTA,
1684
1692
  },
1685
1693
  {
1686
1694
  zigbeeModel: ['lumi.light.cbacn1'],
@@ -1688,6 +1696,7 @@ module.exports = [
1688
1696
  vendor: 'Xiaomi',
1689
1697
  description: 'Aqara zigbee LED-controller ',
1690
1698
  extend: extend.light_onoff_brightness(),
1699
+ ota: ota.zigbeeOTA,
1691
1700
  },
1692
1701
  {
1693
1702
  zigbeeModel: ['lumi.switch.n0agl1'],
@@ -1771,37 +1780,37 @@ module.exports = [
1771
1780
  },
1772
1781
  exposes: [e.switch().withEndpoint('left'), e.switch().withEndpoint('center'),
1773
1782
  e.switch().withEndpoint('right'),
1774
- exposes.binary('standby_enabled', ea.SET, true, false).withDescription('Enable standby'),
1775
- exposes.enum('theme', ea.SET, ['classic', 'concise']).withDescription('Display theme'),
1776
- exposes.enum('beep_volume', ea.SET, ['mute', 'low', 'medium', 'high']).withDescription('Beep volume'),
1777
- exposes.numeric('lcd_brightness', ea.SET).withValueMin(1).withValueMax(100).withUnit('%')
1783
+ exposes.binary('standby_enabled', ea.STATE_SET, true, false).withDescription('Enable standby'),
1784
+ exposes.enum('theme', ea.STATE_SET, ['classic', 'concise']).withDescription('Display theme'),
1785
+ exposes.enum('beep_volume', ea.STATE_SET, ['mute', 'low', 'medium', 'high']).withDescription('Beep volume'),
1786
+ exposes.numeric('lcd_brightness', ea.STATE_SET).withValueMin(1).withValueMax(100).withUnit('%')
1778
1787
  .withDescription('LCD brightness (will not persist if auto-brightness is enabled)'),
1779
- exposes.enum('language', ea.SET, ['chinese', 'english']).withDescription('Interface language'),
1780
- exposes.enum('screen_saver_style', ea.SET, ['classic', 'analog clock']).withDescription('Screen saver style'),
1781
- exposes.numeric('standby_time', ea.SET).withValueMin(0).withValueMax(65534).withUnit('s')
1788
+ exposes.enum('language', ea.STATE_SET, ['chinese', 'english']).withDescription('Interface language'),
1789
+ exposes.enum('screen_saver_style', ea.STATE_SET, ['classic', 'analog clock']).withDescription('Screen saver style'),
1790
+ exposes.numeric('standby_time', ea.STATE_SET).withValueMin(0).withValueMax(65534).withUnit('s')
1782
1791
  .withDescription('Display standby time'),
1783
- exposes.enum('font_size', ea.SET, ['small', 'medium', 'large']).withDescription('Display font size'),
1784
- exposes.binary('lcd_auto_brightness_enabled', ea.SET, true, false).withDescription('Enable LCD auto brightness'),
1785
- exposes.enum('homepage', ea.SET, ['scene', 'feel', 'thermostat', 'switch']).withDescription('Default display homepage'),
1786
- exposes.binary('screen_saver_enabled', ea.SET, true, false).withDescription('Enable screen saver'),
1787
- exposes.numeric('standby_lcd_brightness', ea.SET).withValueMin(1).withValueMax(100).withUnit('%')
1792
+ exposes.enum('font_size', ea.STATE_SET, ['small', 'medium', 'large']).withDescription('Display font size'),
1793
+ exposes.binary('lcd_auto_brightness_enabled', ea.STATE_SET, true, false).withDescription('Enable LCD auto brightness'),
1794
+ exposes.enum('homepage', ea.STATE_SET, ['scene', 'feel', 'thermostat', 'switch']).withDescription('Default display homepage'),
1795
+ exposes.binary('screen_saver_enabled', ea.STATE_SET, true, false).withDescription('Enable screen saver'),
1796
+ exposes.numeric('standby_lcd_brightness', ea.STATE_SET).withValueMin(1).withValueMax(100).withUnit('%')
1788
1797
  .withDescription('Standby LCD brightness'),
1789
- exposes.enum('available_switches', ea.SET, ['none', '1', '2', '3', '1 and 2', '1 and 3', '2 and 3', 'all'])
1798
+ exposes.enum('available_switches', ea.STATE_SET, ['none', '1', '2', '3', '1 and 2', '1 and 3', '2 and 3', 'all'])
1790
1799
  .withDescription('Control which switches are available in the switches screen (none disables switches screen)'),
1791
1800
  exposes.composite('switch_1_text_icon', 'switch_1_text_icon').withDescription('Switch 1 text and icon')
1792
- .withFeature(exposes.enum('switch_1_icon', ea.SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
1801
+ .withFeature(exposes.enum('switch_1_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
1793
1802
  .withDescription('Icon'))
1794
- .withFeature(exposes.text('switch_1_text', ea.SET)
1803
+ .withFeature(exposes.text('switch_1_text', ea.STATE_SET)
1795
1804
  .withDescription('Text')),
1796
1805
  exposes.composite('switch_2_text_icon', 'switch_2_text_icon').withDescription('Switch 2 text and icon')
1797
- .withFeature(exposes.enum('switch_2_icon', ea.SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
1806
+ .withFeature(exposes.enum('switch_2_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
1798
1807
  .withDescription('Icon'))
1799
- .withFeature(exposes.text('switch_2_text', ea.SET)
1808
+ .withFeature(exposes.text('switch_2_text', ea.STATE_SET)
1800
1809
  .withDescription('Text')),
1801
1810
  exposes.composite('switch_3_text_icon', 'switch_3_text_icon').withDescription('Switch 3 text and icon')
1802
- .withFeature(exposes.enum('switch_3_icon', ea.SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
1811
+ .withFeature(exposes.enum('switch_3_icon', ea.STATE_SET, ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
1803
1812
  .withDescription('Icon'))
1804
- .withFeature(exposes.text('switch_3_text', ea.SET)
1813
+ .withFeature(exposes.text('switch_3_text', ea.STATE_SET)
1805
1814
  .withDescription('Text'))],
1806
1815
  configure: async (device, coordinatorEndpoint, logger) => {
1807
1816
  await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
@@ -1811,6 +1820,7 @@ module.exports = [
1811
1820
  // await reporting.onOff(device.getEndpoint(2)); ToDo: Currently fails
1812
1821
  // await reporting.onOff(device.getEndpoint(3)); ToDo: Currently fails
1813
1822
  },
1823
+ ota: ota.zigbeeOTA,
1814
1824
  },
1815
1825
  {
1816
1826
  zigbeeModel: ['lumi.remote.b28ac1'],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.593",
3
+ "version": "14.0.596",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [