zigbee-herdsman-converters 25.47.0 → 25.49.0

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.
Files changed (63) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/converters/toZigbee.d.ts.map +1 -1
  3. package/dist/converters/toZigbee.js +22 -8
  4. package/dist/converters/toZigbee.js.map +1 -1
  5. package/dist/devices/bosch.d.ts.map +1 -1
  6. package/dist/devices/bosch.js +6 -121
  7. package/dist/devices/bosch.js.map +1 -1
  8. package/dist/devices/busch_jaeger.js +1 -1
  9. package/dist/devices/custom_devices_diy.js +1 -1
  10. package/dist/devices/dresden_elektronik.js +2 -2
  11. package/dist/devices/elko.js +1 -1
  12. package/dist/devices/enocean.js +1 -1
  13. package/dist/devices/envilar.js +1 -1
  14. package/dist/devices/eurotronic.d.ts.map +1 -1
  15. package/dist/devices/eurotronic.js +1 -0
  16. package/dist/devices/eurotronic.js.map +1 -1
  17. package/dist/devices/evn.js +1 -1
  18. package/dist/devices/ge.js +2 -2
  19. package/dist/devices/heiman.d.ts.map +1 -1
  20. package/dist/devices/heiman.js +4 -0
  21. package/dist/devices/heiman.js.map +1 -1
  22. package/dist/devices/icasa.js +2 -2
  23. package/dist/devices/iluminize.js +6 -6
  24. package/dist/devices/innr.d.ts.map +1 -1
  25. package/dist/devices/innr.js +2 -1
  26. package/dist/devices/innr.js.map +1 -1
  27. package/dist/devices/insta.js +1 -1
  28. package/dist/devices/jumitech.js +1 -1
  29. package/dist/devices/led_trading.js +1 -1
  30. package/dist/devices/ledvance.d.ts.map +1 -1
  31. package/dist/devices/ledvance.js +7 -0
  32. package/dist/devices/ledvance.js.map +1 -1
  33. package/dist/devices/lincukoo.d.ts.map +1 -1
  34. package/dist/devices/lincukoo.js +7 -0
  35. package/dist/devices/lincukoo.js.map +1 -1
  36. package/dist/devices/livingwise.js +2 -2
  37. package/dist/devices/namron.js +3 -3
  38. package/dist/devices/nordtronic.js +1 -1
  39. package/dist/devices/robb.js +6 -6
  40. package/dist/devices/schneider_electric.js +1 -1
  41. package/dist/devices/shelly.d.ts.map +1 -1
  42. package/dist/devices/shelly.js +7 -0
  43. package/dist/devices/shelly.js.map +1 -1
  44. package/dist/devices/shenzhen_homa.js +1 -1
  45. package/dist/devices/sinope.js +1 -1
  46. package/dist/devices/sinope.js.map +1 -1
  47. package/dist/devices/sunricher.js +5 -5
  48. package/dist/devices/tuya.d.ts.map +1 -1
  49. package/dist/devices/tuya.js +67 -6
  50. package/dist/devices/tuya.js.map +1 -1
  51. package/dist/devices/ubisys.js +1 -1
  52. package/dist/devices/vbled.js +1 -1
  53. package/dist/devices/yokis.js +2 -2
  54. package/dist/lib/bosch.d.ts +20 -1
  55. package/dist/lib/bosch.d.ts.map +1 -1
  56. package/dist/lib/bosch.js +207 -27
  57. package/dist/lib/bosch.js.map +1 -1
  58. package/dist/lib/heiman.d.ts +9 -0
  59. package/dist/lib/heiman.d.ts.map +1 -0
  60. package/dist/lib/heiman.js +198 -0
  61. package/dist/lib/heiman.js.map +1 -0
  62. package/dist/models-index.json +1 -1
  63. package/package.json +1 -1
@@ -378,7 +378,7 @@ const ubisys = {
378
378
  }
379
379
  if (value.input_action_templates != null) {
380
380
  const templateTypes = {
381
- // source: "ZigBee Device Physical Input Configurations Integrator’s Guide"
381
+ // source: "Zigbee Device Physical Input Configurations Integrator’s Guide"
382
382
  // (can be obtained directly from ubisys upon request)
383
383
  toggle: {
384
384
  getInputActions: (input, endpoint) => [[input, 0x0d, endpoint, 0x06, 0x00, 0x02]],
@@ -40,7 +40,7 @@ exports.definitions = [
40
40
  zigbeeModel: ["43023"],
41
41
  model: "43023",
42
42
  vendor: "VBLED",
43
- description: "ZigBee AC phase-cut dimmer",
43
+ description: "Zigbee AC phase-cut dimmer",
44
44
  extend: [m.light({ configureReporting: true })],
45
45
  },
46
46
  ];
@@ -100,7 +100,7 @@ const YokisClustersDefinition = {
100
100
  response: 0,
101
101
  parameters: [],
102
102
  },
103
- // Open ZigBee network
103
+ // Open Zigbee network
104
104
  openNetwork: {
105
105
  ID: 0x12,
106
106
  response: 0,
@@ -897,7 +897,7 @@ const yokisCommandsExtend = {
897
897
  openNetwork: () => {
898
898
  const exposes = e
899
899
  .composite("open_network_command", "open_network_prop", ea.SET)
900
- .withDescription("Open ZigBee network")
900
+ .withDescription("Open Zigbee network")
901
901
  .withFeature(e
902
902
  .numeric("opening_time", ea.SET) //uc_OpeningTime
903
903
  .withValueMin(0)
@@ -48,7 +48,10 @@ export declare const boschGeneralSensorDeviceExtend: {
48
48
  customIasZoneCluster: () => ModernExtend;
49
49
  testMode: (args: {
50
50
  testModeDescription: string;
51
- supportTimeout?: boolean;
51
+ sensitivityLevelToUse: number;
52
+ variableTimeoutSupported?: boolean;
53
+ defaultTimeout?: number;
54
+ zoneStatusBit?: number;
52
55
  }) => ModernExtend;
53
56
  };
54
57
  export interface BoschBmctCluster extends BoschGeneralEnergyDeviceCluster {
@@ -230,6 +233,22 @@ export declare const boschWaterAlarmExtend: {
230
233
  alarmOnMotion: () => ModernExtend;
231
234
  testMode: () => ModernExtend;
232
235
  };
236
+ export declare const boschSmokeAlarmExtend: {
237
+ /** In previous implementations, the user was able to change the
238
+ * sensitivity level of the smoke detector. That is not supported
239
+ * when using the Bosch Smart Home Controller II. As the previous
240
+ * creator assumed that Bosch follows the ZCL specification for
241
+ * the sensitivity level (which isn't the case), this may result
242
+ * in an unintentionally lowered sensitivity level. Therefore,
243
+ * we set the manufacturer's default value here once to reverse
244
+ * any previous modifications for safety reasons, as we talk
245
+ * about a device that should save lives... */
246
+ enforceDefaultSensitivityLevel: () => ModernExtend;
247
+ smokeAlarmAndButtonPushes: () => ModernExtend;
248
+ alarmControl: () => ModernExtend;
249
+ testMode: () => ModernExtend;
250
+ battery: () => ModernExtend;
251
+ };
233
252
  export declare const boschSmartPlugExtend: {
234
253
  smartPlugCluster: () => ModernExtend;
235
254
  onOff: () => ModernExtend;
@@ -1 +1 @@
1
- {"version":3,"file":"bosch.d.ts","sourceRoot":"","sources":["../../src/lib/bosch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bosch.d.ts","sourceRoot":"","sources":["../../src/lib/bosch.ts"],"names":[],"mappings":"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"}
package/dist/lib/bosch.js CHANGED
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.boschThermostatExtend = exports.boschSmartPlugExtend = exports.boschWaterAlarmExtend = exports.boschBsenExtend = exports.boschDoorWindowContactExtend = exports.boschBsirExtend = exports.boschBmctExtend = exports.boschGeneralSensorDeviceExtend = exports.boschGeneralEnergyDeviceExtend = exports.boschGeneralExtend = exports.manufacturerOptions = void 0;
36
+ exports.boschThermostatExtend = exports.boschSmartPlugExtend = exports.boschSmokeAlarmExtend = exports.boschWaterAlarmExtend = exports.boschBsenExtend = exports.boschDoorWindowContactExtend = exports.boschBsirExtend = exports.boschBmctExtend = exports.boschGeneralSensorDeviceExtend = exports.boschGeneralEnergyDeviceExtend = exports.boschGeneralExtend = exports.manufacturerOptions = void 0;
37
37
  const zigbee_herdsman_1 = require("zigbee-herdsman");
38
38
  const fz = __importStar(require("../converters/fromZigbee"));
39
39
  const tz = __importStar(require("../converters/toZigbee"));
@@ -42,6 +42,7 @@ const m = __importStar(require("../lib/modernExtend"));
42
42
  const constants_1 = require("./constants");
43
43
  const logger_1 = require("./logger");
44
44
  const reporting_1 = require("./reporting");
45
+ const globalStore = __importStar(require("./store"));
45
46
  const utils = __importStar(require("./utils"));
46
47
  const utils_1 = require("./utils");
47
48
  const e = exposes.presets;
@@ -278,29 +279,38 @@ exports.boschGeneralEnergyDeviceExtend = {
278
279
  exports.boschGeneralSensorDeviceExtend = {
279
280
  customIasZoneCluster: () => m.deviceAddCustomCluster("ssIasZone", {
280
281
  ID: zigbee_herdsman_1.Zcl.Clusters.ssIasZone.ID,
281
- attributes: {},
282
+ attributes: {
283
+ unknownAttribute1: { ID: 0x8f01, type: zigbee_herdsman_1.Zcl.DataType.UINT8, manufacturerCode: exports.manufacturerOptions.manufacturerCode },
284
+ unknownAttribute2: { ID: 0x8f06, type: zigbee_herdsman_1.Zcl.DataType.UINT8, manufacturerCode: exports.manufacturerOptions.manufacturerCode },
285
+ },
282
286
  commands: {
283
- initCustomTestMode: {
287
+ initiateTestMode: {
284
288
  ID: 0x02,
285
289
  parameters: [
286
- { name: "timeoutInSeconds", type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
287
- { name: "reportTestInZoneStatus", type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
290
+ { name: "testModeDuration", type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
291
+ { name: "currentZoneSensitivityLevel", type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
292
+ ],
293
+ },
294
+ alarmControl: {
295
+ ID: 0x80,
296
+ parameters: [
297
+ { name: "alarmMode", type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
298
+ { name: "alarmTimeout", type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
288
299
  ],
289
300
  },
290
301
  },
291
302
  commandsResponse: {},
292
303
  }),
293
304
  testMode: (args) => {
294
- const { testModeDescription, supportTimeout = false } = args;
305
+ const { testModeDescription, sensitivityLevelToUse, variableTimeoutSupported = false, defaultTimeout = 0, zoneStatusBit = 8 } = args;
295
306
  const testModeLookup = {
296
307
  ON: true,
297
308
  OFF: false,
298
309
  };
299
- const defaultTimeout = 3;
300
- const enableTestMode = async (endpoint, timeout) => {
301
- await endpoint.command("ssIasZone", "initCustomTestMode", {
302
- timeoutInSeconds: timeout,
303
- reportTestInZoneStatus: 0x80,
310
+ const enableTestMode = async (endpoint, sensitivityLevelToUse, timeoutInSeconds) => {
311
+ await endpoint.command("ssIasZone", "initiateTestMode", {
312
+ testModeDuration: timeoutInSeconds,
313
+ currentZoneSensitivityLevel: sensitivityLevelToUse,
304
314
  });
305
315
  };
306
316
  const disableTestMode = async (endpoint) => {
@@ -312,7 +322,7 @@ exports.boschGeneralSensorDeviceExtend = {
312
322
  .withDescription(testModeDescription)
313
323
  .withCategory("config"),
314
324
  ];
315
- if (supportTimeout) {
325
+ if (variableTimeoutSupported) {
316
326
  exposes.push(e
317
327
  .numeric("test_mode_timeout", ea.ALL)
318
328
  .withDescription(`Determines how long the test mode should be activated. The default length is ${defaultTimeout} seconds.`)
@@ -331,7 +341,7 @@ exports.boschGeneralSensorDeviceExtend = {
331
341
  return;
332
342
  }
333
343
  const result = {};
334
- const testModeEnabled = (zoneStatus & (1 << 8)) > 0;
344
+ const testModeEnabled = (zoneStatus & (1 << zoneStatusBit)) > 0;
335
345
  result.test_mode = utils.getFromLookupByValue(testModeEnabled, testModeLookup);
336
346
  return result;
337
347
  },
@@ -343,21 +353,16 @@ exports.boschGeneralSensorDeviceExtend = {
343
353
  convertSet: async (entity, key, value, meta) => {
344
354
  if (key === "test_mode") {
345
355
  if (value === utils.getFromLookupByValue(true, testModeLookup)) {
346
- let timeout;
347
- if (supportTimeout) {
348
- const currentTimeout = meta.state.test_mode_timeout;
349
- if (currentTimeout == null) {
350
- timeout = defaultTimeout;
351
- meta.publish({ test_mode_timeout: timeout });
352
- }
353
- else {
354
- timeout = utils.toNumber(currentTimeout);
355
- }
356
+ let timeoutInSeconds;
357
+ const currentTimeout = meta.state.test_mode_timeout;
358
+ if (currentTimeout == null) {
359
+ timeoutInSeconds = defaultTimeout;
360
+ meta.publish({ test_mode_timeout: timeoutInSeconds });
356
361
  }
357
362
  else {
358
- timeout = 0;
363
+ timeoutInSeconds = utils.toNumber(currentTimeout);
359
364
  }
360
- await enableTestMode(entity, timeout);
365
+ await enableTestMode(entity, sensitivityLevelToUse, timeoutInSeconds);
361
366
  }
362
367
  else {
363
368
  await disableTestMode(entity);
@@ -372,7 +377,7 @@ exports.boschGeneralSensorDeviceExtend = {
372
377
  await entity.read("ssIasZone", ["zoneStatus"]);
373
378
  }
374
379
  if (key === "test_mode_timeout" && meta.state.test_mode_timeout == null) {
375
- meta.publish({ test_mode_timeout: supportTimeout ? defaultTimeout : 0 });
380
+ meta.publish({ test_mode_timeout: defaultTimeout });
376
381
  }
377
382
  },
378
383
  },
@@ -1825,6 +1830,7 @@ exports.boschBsenExtend = {
1825
1830
  testModeDescription: "Activates the test mode. In this mode, the device blinks on every detected motion " +
1826
1831
  "without any wait time in between to verify the installation. Please keep in mind " +
1827
1832
  "that it can take up to 45 seconds for the test mode to be activated.",
1833
+ sensitivityLevelToUse: 0x80,
1828
1834
  }),
1829
1835
  illuminance: () => m.illuminance({ reporting: { min: "1_SECOND", max: 600, change: 3522 } }),
1830
1836
  // The temperature sensor isn't used at all by Bosch on the BSEN-M.
@@ -2111,8 +2117,182 @@ exports.boschWaterAlarmExtend = {
2111
2117
  testModeDescription: "Activates the test mode. In this mode, the device acts like it would when " +
2112
2118
  "detecting any water to verify the installation. Please keep in mind " +
2113
2119
  "that it can take up to 10 seconds for the test mode to be activated.",
2114
- supportTimeout: true,
2120
+ sensitivityLevelToUse: 0x00,
2121
+ variableTimeoutSupported: true,
2122
+ defaultTimeout: 3,
2123
+ }),
2124
+ };
2125
+ //endregion
2126
+ //region Bosch BSD-2 (Smoke alarm II)
2127
+ exports.boschSmokeAlarmExtend = {
2128
+ /** In previous implementations, the user was able to change the
2129
+ * sensitivity level of the smoke detector. That is not supported
2130
+ * when using the Bosch Smart Home Controller II. As the previous
2131
+ * creator assumed that Bosch follows the ZCL specification for
2132
+ * the sensitivity level (which isn't the case), this may result
2133
+ * in an unintentionally lowered sensitivity level. Therefore,
2134
+ * we set the manufacturer's default value here once to reverse
2135
+ * any previous modifications for safety reasons, as we talk
2136
+ * about a device that should save lives... */
2137
+ enforceDefaultSensitivityLevel: () => {
2138
+ const onEvent = [
2139
+ async (event) => {
2140
+ if (event.type !== "start") {
2141
+ return;
2142
+ }
2143
+ const device = event.data.device;
2144
+ if (device.meta.enforceDefaultSensitivityLevelApplied !== true) {
2145
+ const endpoint = device.getEndpoint(1);
2146
+ await endpoint.write("ssIasZone", { currentZoneSensitivityLevel: 0x00 });
2147
+ device.meta.enforceDefaultSensitivityLevelApplied = true;
2148
+ }
2149
+ },
2150
+ ];
2151
+ return {
2152
+ onEvent,
2153
+ isModernExtend: true,
2154
+ };
2155
+ },
2156
+ smokeAlarmAndButtonPushes: () => m.iasZoneAlarm({
2157
+ zoneType: "smoke",
2158
+ zoneAttributes: ["alarm_1"],
2159
+ manufacturerZoneAttributes: [
2160
+ {
2161
+ bit: 11,
2162
+ name: "smoke_alarm_silenced",
2163
+ valueOn: true,
2164
+ valueOff: false,
2165
+ description: "Indicates whether an smoke alarm was silenced on the device itself for 10 minutes. " +
2166
+ "Please keep in mind that the smoke detection is being disabled during that " +
2167
+ "time period as well.",
2168
+ entityCategory: "diagnostic",
2169
+ },
2170
+ {
2171
+ bit: 8,
2172
+ name: "button_pushed",
2173
+ valueOn: true,
2174
+ valueOff: false,
2175
+ description: "Indicates whether the button on the device is being pushed for at least " +
2176
+ "3 seconds (e.g., to trigger a test alarm or silence a smoke alarm)",
2177
+ entityCategory: "diagnostic",
2178
+ },
2179
+ ],
2180
+ }),
2181
+ alarmControl: () => {
2182
+ const alarmModeLookup = {
2183
+ manual_smoke_alarm: 0x00,
2184
+ manual_burglar_alarm: 0x01,
2185
+ };
2186
+ const onOffLookup = {
2187
+ OFF: false,
2188
+ ON: true,
2189
+ };
2190
+ const defaultBroadcastAlarms = true;
2191
+ function setDefaultBroadcastAlarms(meta) {
2192
+ const newBroadcastStatus = utils.getFromLookupByValue(defaultBroadcastAlarms, onOffLookup);
2193
+ meta.publish({ broadcast_alarms: newBroadcastStatus });
2194
+ }
2195
+ async function sendAlarmControlMessage(endpoint, broadcastAlarm, alarmMode, timeoutInSeconds) {
2196
+ if (broadcastAlarm === true) {
2197
+ // Bosch sends broadcast messages two times with 4 seconds in between to
2198
+ // ensure all sleepy devices receive them. We mimic the same pattern here.
2199
+ for (let index = 0; index < 2; index++) {
2200
+ await endpoint.zclCommandBroadcast(255, zigbee_herdsman_1.ZSpec.BroadcastAddress.SLEEPY, "ssIasZone", "alarmControl", { alarmMode: alarmMode, alarmTimeout: timeoutInSeconds }, exports.manufacturerOptions);
2201
+ await (0, utils_1.sleep)(4000);
2202
+ }
2203
+ }
2204
+ else {
2205
+ await endpoint.command("ssIasZone", "alarmControl", { alarmMode: alarmMode, alarmTimeout: timeoutInSeconds }, exports.manufacturerOptions);
2206
+ }
2207
+ }
2208
+ const exposes = [
2209
+ e
2210
+ .binary("manual_smoke_alarm", ea.ALL, utils.getFromLookupByValue(true, onOffLookup), utils.getFromLookupByValue(false, onOffLookup))
2211
+ .withDescription("Indicates whether the smoke alarm siren is being manually activated on the device"),
2212
+ e
2213
+ .binary("manual_burglar_alarm", ea.ALL, utils.getFromLookupByValue(true, onOffLookup), utils.getFromLookupByValue(false, onOffLookup))
2214
+ .withDescription("Indicates whether the burglar alarm siren is being manually activated on the device"),
2215
+ e
2216
+ .binary("broadcast_alarms", ea.ALL, utils.getFromLookupByValue(true, onOffLookup), utils.getFromLookupByValue(false, onOffLookup))
2217
+ .withLabel("Broadcast alarms")
2218
+ .withDescription("Broadcast manual alarm state changes to all BSD-2 devices on the network. Please keep in mind " +
2219
+ "that a detected smoke alarm is not being transmitted automatically to other devices. " +
2220
+ "To achieve that, you must set up an automation, e.g., in Home Assistant.")
2221
+ .withCategory("config"),
2222
+ ];
2223
+ const fromZigbee = [
2224
+ {
2225
+ cluster: "ssIasZone",
2226
+ type: ["commandStatusChangeNotification", "attributeReport", "readResponse"],
2227
+ convert: (model, msg, publish, options, meta) => {
2228
+ const zoneStatus = "zonestatus" in msg.data ? msg.data.zonestatus : msg.data.zoneStatus;
2229
+ if (zoneStatus === undefined) {
2230
+ return;
2231
+ }
2232
+ const result = {};
2233
+ const smokeAlarmEnabled = (zoneStatus & (1 << 1)) > 0;
2234
+ result.manual_smoke_alarm = utils.getFromLookupByValue(smokeAlarmEnabled, onOffLookup);
2235
+ const burglarAlarmEnabled = (zoneStatus & (1 << 7)) > 0;
2236
+ result.manual_burglar_alarm = utils.getFromLookupByValue(burglarAlarmEnabled, onOffLookup);
2237
+ return result;
2238
+ },
2239
+ },
2240
+ ];
2241
+ const toZigbee = [
2242
+ {
2243
+ key: ["manual_smoke_alarm", "manual_burglar_alarm", "broadcast_alarms"],
2244
+ convertSet: async (entity, key, value, meta) => {
2245
+ if (key === "manual_smoke_alarm" || key === "manual_burglar_alarm") {
2246
+ let broadcastAlarm;
2247
+ try {
2248
+ broadcastAlarm = utils.getFromLookup(meta.state.broadcast_alarms, onOffLookup);
2249
+ }
2250
+ catch {
2251
+ setDefaultBroadcastAlarms(meta);
2252
+ broadcastAlarm = defaultBroadcastAlarms;
2253
+ }
2254
+ const alarmMode = utils.getFromLookup(key, alarmModeLookup);
2255
+ const enableAlarm = utils.getFromLookup(value, onOffLookup);
2256
+ const timeoutInSeconds = enableAlarm ? 0xf0 : 0;
2257
+ utils.assertEndpoint(entity);
2258
+ await sendAlarmControlMessage(entity, broadcastAlarm, alarmMode, timeoutInSeconds);
2259
+ clearTimeout(globalStore.getValue("boschSmokeAlarm", "alarmTimer"));
2260
+ if (enableAlarm) {
2261
+ const alarmTimer = setTimeout(async () => await sendAlarmControlMessage(entity, broadcastAlarm, alarmMode, timeoutInSeconds), (timeoutInSeconds - 60) * 1000);
2262
+ globalStore.putValue("boschSmokeAlarm", "alarmTimer", alarmTimer);
2263
+ }
2264
+ }
2265
+ if (key === "broadcast_alarms") {
2266
+ return { state: { broadcast_alarms: value } };
2267
+ }
2268
+ },
2269
+ convertGet: async (entity, key, meta) => {
2270
+ if (key === "manual_smoke_alarm" || key === "manual_burglar_alarm") {
2271
+ await entity.read("ssIasZone", ["zoneStatus"]);
2272
+ }
2273
+ if (key === "broadcast_alarms" && meta.state[key] === undefined) {
2274
+ setDefaultBroadcastAlarms(meta);
2275
+ }
2276
+ },
2277
+ },
2278
+ ];
2279
+ return {
2280
+ exposes,
2281
+ fromZigbee,
2282
+ toZigbee,
2283
+ isModernExtend: true,
2284
+ };
2285
+ },
2286
+ testMode: () => exports.boschGeneralSensorDeviceExtend.testMode({
2287
+ testModeDescription: "Check the function of the smoke alarm. Pay attention to the alarm sound " +
2288
+ "and the flashing of the alarm LED. Please keep in mind that it can take " +
2289
+ "up to 10 seconds for the test mode to be activated.",
2290
+ sensitivityLevelToUse: 0x00,
2291
+ variableTimeoutSupported: true,
2292
+ defaultTimeout: 5,
2293
+ zoneStatusBit: 10,
2115
2294
  }),
2295
+ battery: () => exports.boschGeneralExtend.batteryWithPercentageAndLowStatus({ percentageReportingConfig: { min: "MIN", max: "MAX", change: 1 } }),
2116
2296
  };
2117
2297
  exports.boschSmartPlugExtend = {
2118
2298
  smartPlugCluster: () => m.deviceAddCustomCluster("boschEnergyDevice", {