zigbee-herdsman-converters 25.46.0 → 25.48.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 (58) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/devices/bosch.d.ts.map +1 -1
  3. package/dist/devices/bosch.js +21 -52
  4. package/dist/devices/bosch.js.map +1 -1
  5. package/dist/devices/busch_jaeger.js +1 -1
  6. package/dist/devices/custom_devices_diy.js +1 -1
  7. package/dist/devices/develco.js +2 -2
  8. package/dist/devices/develco.js.map +1 -1
  9. package/dist/devices/dresden_elektronik.js +2 -2
  10. package/dist/devices/elko.js +1 -1
  11. package/dist/devices/enocean.js +1 -1
  12. package/dist/devices/envilar.js +1 -1
  13. package/dist/devices/eurotronic.d.ts.map +1 -1
  14. package/dist/devices/eurotronic.js +1 -0
  15. package/dist/devices/eurotronic.js.map +1 -1
  16. package/dist/devices/evn.d.ts.map +1 -1
  17. package/dist/devices/evn.js +7 -0
  18. package/dist/devices/evn.js.map +1 -1
  19. package/dist/devices/ge.js +2 -2
  20. package/dist/devices/icasa.js +2 -2
  21. package/dist/devices/ikea.d.ts.map +1 -1
  22. package/dist/devices/ikea.js +14 -0
  23. package/dist/devices/ikea.js.map +1 -1
  24. package/dist/devices/iluminize.js +6 -6
  25. package/dist/devices/innr.d.ts.map +1 -1
  26. package/dist/devices/innr.js +8 -1
  27. package/dist/devices/innr.js.map +1 -1
  28. package/dist/devices/insta.js +1 -1
  29. package/dist/devices/jumitech.js +1 -1
  30. package/dist/devices/led_trading.js +1 -1
  31. package/dist/devices/livingwise.js +2 -2
  32. package/dist/devices/moes.js +4 -4
  33. package/dist/devices/moes.js.map +1 -1
  34. package/dist/devices/namron.js +3 -3
  35. package/dist/devices/nordtronic.d.ts.map +1 -1
  36. package/dist/devices/nordtronic.js +7 -1
  37. package/dist/devices/nordtronic.js.map +1 -1
  38. package/dist/devices/robb.js +6 -6
  39. package/dist/devices/schneider_electric.js +2 -2
  40. package/dist/devices/schneider_electric.js.map +1 -1
  41. package/dist/devices/shenzhen_homa.js +1 -1
  42. package/dist/devices/sinope.js +1 -1
  43. package/dist/devices/sinope.js.map +1 -1
  44. package/dist/devices/sunricher.js +5 -5
  45. package/dist/devices/third_reality.d.ts.map +1 -1
  46. package/dist/devices/third_reality.js +2 -0
  47. package/dist/devices/third_reality.js.map +1 -1
  48. package/dist/devices/tuya.js +23 -21
  49. package/dist/devices/tuya.js.map +1 -1
  50. package/dist/devices/ubisys.js +1 -1
  51. package/dist/devices/vbled.js +1 -1
  52. package/dist/devices/yokis.js +2 -2
  53. package/dist/lib/bosch.d.ts +30 -12
  54. package/dist/lib/bosch.d.ts.map +1 -1
  55. package/dist/lib/bosch.js +240 -54
  56. package/dist/lib/bosch.js.map +1 -1
  57. package/dist/models-index.json +1 -1
  58. 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)
@@ -1,20 +1,12 @@
1
1
  import { Zcl } from "zigbee-herdsman";
2
+ import type { SendPolicy } from "zigbee-herdsman/dist/controller/tstype";
2
3
  import type { BatteryArgs } from "../lib/modernExtend";
3
4
  import type { ElectricityMeterArgs } from "./modernExtend";
4
5
  import type { KeyValue, ModernExtend } from "./types";
5
6
  export declare const manufacturerOptions: {
6
7
  manufacturerCode: Zcl.ManufacturerCode;
8
+ sendPolicy: SendPolicy;
7
9
  };
8
- interface BoschGeneralEnergyDeviceCluster {
9
- attributes: {
10
- /** ID: 6 | Type: BOOLEAN */
11
- autoOffEnabled: number;
12
- /** ID: 7 | Type: UINT16 */
13
- autoOffTime: number;
14
- };
15
- commands: never;
16
- commandResponses: never;
17
- }
18
10
  export declare const boschGeneralExtend: {
19
11
  /** Some devices now use a different name for some custom clusters than
20
12
  * originally used. This can lead to issues like those described in
@@ -33,13 +25,32 @@ export declare const boschGeneralExtend: {
33
25
  * and *not* during interview! To avoid code-duplication, we handle that
34
26
  * case here as well. */
35
27
  handleZclVersionReadRequest: () => ModernExtend;
28
+ batteryWithPercentageAndLowStatus: (args?: BatteryArgs) => ModernExtend;
29
+ };
30
+ interface BoschGeneralEnergyDeviceCluster {
31
+ attributes: {
32
+ /** ID: 6 | Type: BOOLEAN */
33
+ autoOffEnabled: number;
34
+ /** ID: 7 | Type: UINT16 */
35
+ autoOffTime: number;
36
+ };
37
+ commands: never;
38
+ commandResponses: never;
39
+ }
40
+ export declare const boschGeneralEnergyDeviceExtend: {
36
41
  customMeteringCluster: () => ModernExtend;
37
42
  resetEnergyMeters: () => ModernExtend;
38
- batteryWithPercentageAndLowStatus: (args?: BatteryArgs) => ModernExtend;
39
43
  autoOff: (args?: {
40
44
  endpoint: number;
41
45
  }) => ModernExtend;
42
46
  };
47
+ export declare const boschGeneralSensorDeviceExtend: {
48
+ customIasZoneCluster: () => ModernExtend;
49
+ testMode: (args: {
50
+ testModeDescription: string;
51
+ supportTimeout?: boolean;
52
+ }) => ModernExtend;
53
+ };
43
54
  export interface BoschBmctCluster extends BoschGeneralEnergyDeviceCluster {
44
55
  attributes: {
45
56
  /** ID: 0 | Type: ENUM8 | Only used by BMCT-SLZ */
@@ -203,13 +214,20 @@ export declare const boschDoorWindowContactExtend: {
203
214
  vibrationDetection: () => ModernExtend;
204
215
  };
205
216
  export declare const boschBsenExtend: {
206
- customIasZoneCluster: () => ModernExtend;
207
217
  battery: () => ModernExtend;
218
+ testMode: () => ModernExtend;
208
219
  illuminance: () => ModernExtend;
209
220
  temperature: () => ModernExtend;
210
221
  tamperAndOccupancyAlarm: () => ModernExtend;
211
222
  sensitivityLevel: () => ModernExtend;
212
223
  changedCheckinInterval: () => ModernExtend;
224
+ };
225
+ export declare const boschWaterAlarmExtend: {
226
+ waterAlarmCluster: () => ModernExtend;
227
+ changedSensitivityLevel: () => ModernExtend;
228
+ waterAndTamperAlarm: () => ModernExtend;
229
+ muteAlarmControl: () => ModernExtend;
230
+ alarmOnMotion: () => ModernExtend;
213
231
  testMode: () => ModernExtend;
214
232
  };
215
233
  export declare const boschSmartPlugExtend: {
@@ -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.boschBsenExtend = exports.boschDoorWindowContactExtend = exports.boschBsirExtend = exports.boschBmctExtend = exports.boschGeneralExtend = exports.manufacturerOptions = void 0;
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;
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"));
@@ -47,7 +47,11 @@ const utils_1 = require("./utils");
47
47
  const e = exposes.presets;
48
48
  const ea = exposes.access;
49
49
  const NS = "zhc:bosch";
50
- exports.manufacturerOptions = { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH };
50
+ exports.manufacturerOptions = {
51
+ manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
52
+ sendPolicy: "immediate",
53
+ };
54
+ //region Generally used Bosch functionality
51
55
  exports.boschGeneralExtend = {
52
56
  /** Some devices now use a different name for some custom clusters than
53
57
  * originally used. This can lead to issues like those described in
@@ -134,6 +138,15 @@ exports.boschGeneralExtend = {
134
138
  isModernExtend: true,
135
139
  };
136
140
  },
141
+ batteryWithPercentageAndLowStatus: (args) => m.battery({
142
+ percentage: true,
143
+ percentageReportingConfig: false,
144
+ lowStatus: true,
145
+ lowStatusReportingConfig: { min: "MIN", max: "MAX", change: null },
146
+ ...args,
147
+ }),
148
+ };
149
+ exports.boschGeneralEnergyDeviceExtend = {
137
150
  customMeteringCluster: () => m.deviceAddCustomCluster("seMetering", {
138
151
  ID: zigbee_herdsman_1.Zcl.Clusters.seMetering.ID,
139
152
  attributes: {},
@@ -166,13 +179,6 @@ exports.boschGeneralExtend = {
166
179
  isModernExtend: true,
167
180
  };
168
181
  },
169
- batteryWithPercentageAndLowStatus: (args) => m.battery({
170
- percentage: true,
171
- percentageReportingConfig: false,
172
- lowStatus: true,
173
- lowStatusReportingConfig: { min: "MIN", max: "MAX", change: null },
174
- ...args,
175
- }),
176
182
  autoOff: (args) => {
177
183
  const { endpoint } = args ?? {};
178
184
  const offOnLookup = {
@@ -269,6 +275,118 @@ exports.boschGeneralExtend = {
269
275
  };
270
276
  },
271
277
  };
278
+ exports.boschGeneralSensorDeviceExtend = {
279
+ customIasZoneCluster: () => m.deviceAddCustomCluster("ssIasZone", {
280
+ ID: zigbee_herdsman_1.Zcl.Clusters.ssIasZone.ID,
281
+ attributes: {},
282
+ commands: {
283
+ initCustomTestMode: {
284
+ ID: 0x02,
285
+ parameters: [
286
+ { name: "timeoutInSeconds", type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
287
+ { name: "reportTestInZoneStatus", type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
288
+ ],
289
+ },
290
+ },
291
+ commandsResponse: {},
292
+ }),
293
+ testMode: (args) => {
294
+ const { testModeDescription, supportTimeout = false } = args;
295
+ const testModeLookup = {
296
+ ON: true,
297
+ OFF: false,
298
+ };
299
+ const defaultTimeout = 3;
300
+ const enableTestMode = async (endpoint, timeout) => {
301
+ await endpoint.command("ssIasZone", "initCustomTestMode", {
302
+ timeoutInSeconds: timeout,
303
+ reportTestInZoneStatus: 0x80,
304
+ });
305
+ };
306
+ const disableTestMode = async (endpoint) => {
307
+ await endpoint.command("ssIasZone", "initNormalOpMode", {});
308
+ };
309
+ const exposes = [
310
+ e
311
+ .binary("test_mode", ea.ALL, utils.getFromLookupByValue(true, testModeLookup), utils.getFromLookupByValue(false, testModeLookup))
312
+ .withDescription(testModeDescription)
313
+ .withCategory("config"),
314
+ ];
315
+ if (supportTimeout) {
316
+ exposes.push(e
317
+ .numeric("test_mode_timeout", ea.ALL)
318
+ .withDescription(`Determines how long the test mode should be activated. The default length is ${defaultTimeout} seconds.`)
319
+ .withValueMin(1)
320
+ .withValueMax(255)
321
+ .withUnit("seconds")
322
+ .withCategory("config"));
323
+ }
324
+ const fromZigbee = [
325
+ {
326
+ cluster: "ssIasZone",
327
+ type: ["commandStatusChangeNotification", "attributeReport", "readResponse"],
328
+ convert: (model, msg, publish, options, meta) => {
329
+ const zoneStatus = "zonestatus" in msg.data ? msg.data.zonestatus : msg.data.zoneStatus;
330
+ if (zoneStatus === undefined) {
331
+ return;
332
+ }
333
+ const result = {};
334
+ const testModeEnabled = (zoneStatus & (1 << 8)) > 0;
335
+ result.test_mode = utils.getFromLookupByValue(testModeEnabled, testModeLookup);
336
+ return result;
337
+ },
338
+ },
339
+ ];
340
+ const toZigbee = [
341
+ {
342
+ key: ["test_mode", "test_mode_timeout"],
343
+ convertSet: async (entity, key, value, meta) => {
344
+ if (key === "test_mode") {
345
+ 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
+ }
357
+ else {
358
+ timeout = 0;
359
+ }
360
+ await enableTestMode(entity, timeout);
361
+ }
362
+ else {
363
+ await disableTestMode(entity);
364
+ }
365
+ }
366
+ if (key === "test_mode_timeout") {
367
+ return { state: { test_mode_timeout: value } };
368
+ }
369
+ },
370
+ convertGet: async (entity, key, meta) => {
371
+ if (key === "test_mode") {
372
+ await entity.read("ssIasZone", ["zoneStatus"]);
373
+ }
374
+ if (key === "test_mode_timeout" && meta.state.test_mode_timeout == null) {
375
+ meta.publish({ test_mode_timeout: supportTimeout ? defaultTimeout : 0 });
376
+ }
377
+ },
378
+ },
379
+ ];
380
+ const configure = [m.setupConfigureForBinding("ssIasZone", "input"), m.setupConfigureForReading("ssIasZone", ["zoneStatus"])];
381
+ return {
382
+ exposes,
383
+ fromZigbee,
384
+ toZigbee,
385
+ configure,
386
+ isModernExtend: true,
387
+ };
388
+ },
389
+ };
272
390
  exports.boschBmctExtend = {
273
391
  switchMode: (args) => {
274
392
  const { endpoint, deviceModeLookup, switchModeLookup, switchTypeLookup } = args;
@@ -1691,18 +1809,9 @@ exports.boschDoorWindowContactExtend = {
1691
1809
  };
1692
1810
  },
1693
1811
  };
1812
+ //endregion
1813
+ //region Bosch BSEN-M device (Motion detector)
1694
1814
  exports.boschBsenExtend = {
1695
- customIasZoneCluster: () => m.deviceAddCustomCluster("ssIasZone", {
1696
- ID: zigbee_herdsman_1.Zcl.Clusters.ssIasZone.ID,
1697
- attributes: {},
1698
- commands: {
1699
- initCustomTestMode: {
1700
- ID: 0x02,
1701
- parameters: [{ name: "data", type: zigbee_herdsman_1.Zcl.BuffaloZclDataType.LIST_UINT8 }],
1702
- },
1703
- },
1704
- commandsResponse: {},
1705
- }),
1706
1815
  battery: () => m.battery({
1707
1816
  percentage: false,
1708
1817
  percentageReporting: false,
@@ -1712,6 +1821,11 @@ exports.boschBsenExtend = {
1712
1821
  lowStatus: true,
1713
1822
  lowStatusReportingConfig: { min: "MIN", max: "MAX", change: null },
1714
1823
  }),
1824
+ testMode: () => exports.boschGeneralSensorDeviceExtend.testMode({
1825
+ testModeDescription: "Activates the test mode. In this mode, the device blinks on every detected motion " +
1826
+ "without any wait time in between to verify the installation. Please keep in mind " +
1827
+ "that it can take up to 45 seconds for the test mode to be activated.",
1828
+ }),
1715
1829
  illuminance: () => m.illuminance({ reporting: { min: "1_SECOND", max: 600, change: 3522 } }),
1716
1830
  // The temperature sensor isn't used at all by Bosch on the BSEN-M.
1717
1831
  // Therefore, I decided to be a bit conservative with the reporting
@@ -1865,26 +1979,101 @@ exports.boschBsenExtend = {
1865
1979
  isModernExtend: true,
1866
1980
  };
1867
1981
  },
1868
- testMode: () => {
1869
- const testModeLookup = {
1870
- ON: true,
1871
- OFF: false,
1982
+ };
1983
+ exports.boschWaterAlarmExtend = {
1984
+ waterAlarmCluster: () => m.deviceAddCustomCluster("boschWaterAlarm", {
1985
+ ID: 0xfcac,
1986
+ manufacturerCode: exports.manufacturerOptions.manufacturerCode,
1987
+ attributes: {
1988
+ alarmOnMotion: { ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN },
1989
+ },
1990
+ commands: {
1991
+ muteAlarmControl: { ID: 0x00, parameters: [{ name: "data", type: zigbee_herdsman_1.Zcl.DataType.UINT8 }] },
1992
+ muteAlarmControlResponse: { ID: 0x01, parameters: [{ name: "data", type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }] },
1993
+ },
1994
+ commandsResponse: {},
1995
+ }),
1996
+ changedSensitivityLevel: () => {
1997
+ const configure = [
1998
+ m.setupConfigureForBinding("ssIasZone", "input"),
1999
+ m.setupConfigureForReading("ssIasZone", ["numZoneSensitivityLevelsSupported", "currentZoneSensitivityLevel"]),
2000
+ async (device, coordinatorEndpoint, definition) => {
2001
+ const endpoint = device.getEndpoint(1);
2002
+ // The write request is made when using the proprietary
2003
+ // Bosch Smart Home Controller II as of 16-10-2025. Looks like
2004
+ // the default value was too high, and they didn't want to
2005
+ // push a firmware update. We mimic it here to avoid complaints.
2006
+ await endpoint.write("ssIasZone", { currentZoneSensitivityLevel: 5 });
2007
+ },
2008
+ ];
2009
+ return {
2010
+ configure,
2011
+ isModernExtend: true,
1872
2012
  };
1873
- const enableTestMode = async (endpoint) => {
1874
- await endpoint.command("ssIasZone", "initCustomTestMode", {
1875
- data: [0x00, 0x80],
1876
- });
2013
+ },
2014
+ waterAndTamperAlarm: () => m.iasZoneAlarm({
2015
+ zoneType: "water_leak",
2016
+ zoneAttributes: ["alarm_1", "tamper"],
2017
+ }),
2018
+ muteAlarmControl: () => {
2019
+ const muteAlarmControlLookup = {
2020
+ UNMUTED: false,
2021
+ MUTED: true,
1877
2022
  };
1878
- const disableTestMode = async (endpoint) => {
1879
- await endpoint.command("ssIasZone", "initNormalOpMode", {});
2023
+ const muteAlarmControlResponseLookup = {
2024
+ muted: 0x00,
2025
+ error: 0x01,
2026
+ no_change: 0x02,
2027
+ unmuted: 0x03,
1880
2028
  };
1881
2029
  const exposes = [
1882
2030
  e
1883
- .binary("test_mode", ea.ALL, utils.getFromLookupByValue(true, testModeLookup), utils.getFromLookupByValue(false, testModeLookup))
1884
- .withDescription("Activate the test mode. In this mode, the device blinks on every detected motion without any wait time in between to verify the installation. Please keep in mind that it can take up to 45 seconds for the test mode to be activated.")
1885
- .withCategory("config"),
2031
+ .binary("water_leak_alarm_control", ea.ALL, utils.getFromLookupByValue(true, muteAlarmControlLookup), utils.getFromLookupByValue(false, muteAlarmControlLookup))
2032
+ .withLabel("Mute water leak alarm")
2033
+ .withDescription("In case of an water leak, you can mute and unmute the audible alarm here"),
2034
+ ];
2035
+ const toZigbee = [
2036
+ {
2037
+ key: ["water_leak_alarm_control"],
2038
+ convertSet: async (entity, key, value, meta) => {
2039
+ if (value === utils.getFromLookupByValue(false, muteAlarmControlLookup)) {
2040
+ await entity.command("boschWaterAlarm", "muteAlarmControl", { data: 0x00 }, exports.manufacturerOptions);
2041
+ }
2042
+ else {
2043
+ await entity.command("boschWaterAlarm", "muteAlarmControl", { data: 0x01 }, exports.manufacturerOptions);
2044
+ }
2045
+ },
2046
+ convertGet: async (entity, key, meta) => {
2047
+ await entity.read("ssIasZone", ["zoneStatus"]);
2048
+ },
2049
+ },
1886
2050
  ];
1887
2051
  const fromZigbee = [
2052
+ {
2053
+ cluster: "boschWaterAlarm",
2054
+ type: ["raw"],
2055
+ convert: (model, msg, publish, options, meta) => {
2056
+ const command = msg.data[4];
2057
+ if (command !== 0x01) {
2058
+ return;
2059
+ }
2060
+ const muteAlarmControlResponse = msg.data[5];
2061
+ switch (muteAlarmControlResponse) {
2062
+ case muteAlarmControlResponseLookup.muted:
2063
+ logger_1.logger.debug(`Alarm on device '${meta.device.ieeeAddr}' was muted`, NS);
2064
+ break;
2065
+ case muteAlarmControlResponseLookup.error:
2066
+ logger_1.logger.error(`Alarm on device '${meta.device.ieeeAddr}' could not be muted right now (e.g., no active alarm)!`, NS);
2067
+ break;
2068
+ case muteAlarmControlResponseLookup.no_change:
2069
+ logger_1.logger.debug(`Alarm on device '${meta.device.ieeeAddr}' is already in requested state`, NS);
2070
+ break;
2071
+ case muteAlarmControlResponseLookup.unmuted:
2072
+ logger_1.logger.debug(`Alarm on device '${meta.device.ieeeAddr}' was unmuted`, NS);
2073
+ break;
2074
+ }
2075
+ },
2076
+ },
1888
2077
  {
1889
2078
  cluster: "ssIasZone",
1890
2079
  type: ["commandStatusChangeNotification", "attributeReport", "readResponse"],
@@ -1894,39 +2083,36 @@ exports.boschBsenExtend = {
1894
2083
  return;
1895
2084
  }
1896
2085
  const result = {};
1897
- const testModeEnabled = (zoneStatus & (1 << 8)) > 0;
1898
- result.test_mode = utils.getFromLookupByValue(testModeEnabled, testModeLookup);
2086
+ const alarmMuted = (zoneStatus & (1 << 1)) > 0;
2087
+ result.water_leak_alarm_control = utils.getFromLookupByValue(alarmMuted, muteAlarmControlLookup);
1899
2088
  return result;
1900
2089
  },
1901
2090
  },
1902
2091
  ];
1903
- const toZigbee = [
1904
- {
1905
- key: ["test_mode"],
1906
- convertSet: async (entity, key, value, meta) => {
1907
- if (key === "test_mode") {
1908
- if (value === utils.getFromLookupByValue(true, testModeLookup)) {
1909
- await enableTestMode(entity);
1910
- }
1911
- else {
1912
- await disableTestMode(entity);
1913
- }
1914
- }
1915
- },
1916
- convertGet: async (entity, key, meta) => {
1917
- await entity.read("ssIasZone", ["zoneStatus"]);
1918
- },
1919
- },
1920
- ];
1921
2092
  const configure = [m.setupConfigureForBinding("ssIasZone", "input"), m.setupConfigureForReading("ssIasZone", ["zoneStatus"])];
1922
2093
  return {
1923
2094
  exposes,
1924
- fromZigbee,
1925
2095
  toZigbee,
2096
+ fromZigbee,
1926
2097
  configure,
1927
2098
  isModernExtend: true,
1928
2099
  };
1929
2100
  },
2101
+ alarmOnMotion: () => m.binary({
2102
+ name: "alarm_on_motion",
2103
+ cluster: "boschWaterAlarm",
2104
+ attribute: "alarmOnMotion",
2105
+ description: "If your water alarm is moved, an acoustic signal sounds",
2106
+ valueOn: ["ON", 0x01],
2107
+ valueOff: ["OFF", 0x00],
2108
+ entityCategory: "config",
2109
+ }),
2110
+ testMode: () => exports.boschGeneralSensorDeviceExtend.testMode({
2111
+ testModeDescription: "Activates the test mode. In this mode, the device acts like it would when " +
2112
+ "detecting any water to verify the installation. Please keep in mind " +
2113
+ "that it can take up to 10 seconds for the test mode to be activated.",
2114
+ supportTimeout: true,
2115
+ }),
1930
2116
  };
1931
2117
  exports.boschSmartPlugExtend = {
1932
2118
  smartPlugCluster: () => m.deviceAddCustomCluster("boschEnergyDevice", {