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.
- package/CHANGELOG.md +35 -0
- package/dist/devices/bosch.d.ts.map +1 -1
- package/dist/devices/bosch.js +21 -52
- package/dist/devices/bosch.js.map +1 -1
- package/dist/devices/busch_jaeger.js +1 -1
- package/dist/devices/custom_devices_diy.js +1 -1
- package/dist/devices/develco.js +2 -2
- package/dist/devices/develco.js.map +1 -1
- package/dist/devices/dresden_elektronik.js +2 -2
- package/dist/devices/elko.js +1 -1
- package/dist/devices/enocean.js +1 -1
- package/dist/devices/envilar.js +1 -1
- package/dist/devices/eurotronic.d.ts.map +1 -1
- package/dist/devices/eurotronic.js +1 -0
- package/dist/devices/eurotronic.js.map +1 -1
- package/dist/devices/evn.d.ts.map +1 -1
- package/dist/devices/evn.js +7 -0
- package/dist/devices/evn.js.map +1 -1
- package/dist/devices/ge.js +2 -2
- package/dist/devices/icasa.js +2 -2
- package/dist/devices/ikea.d.ts.map +1 -1
- package/dist/devices/ikea.js +14 -0
- package/dist/devices/ikea.js.map +1 -1
- package/dist/devices/iluminize.js +6 -6
- package/dist/devices/innr.d.ts.map +1 -1
- package/dist/devices/innr.js +8 -1
- package/dist/devices/innr.js.map +1 -1
- package/dist/devices/insta.js +1 -1
- package/dist/devices/jumitech.js +1 -1
- package/dist/devices/led_trading.js +1 -1
- package/dist/devices/livingwise.js +2 -2
- package/dist/devices/moes.js +4 -4
- package/dist/devices/moes.js.map +1 -1
- package/dist/devices/namron.js +3 -3
- package/dist/devices/nordtronic.d.ts.map +1 -1
- package/dist/devices/nordtronic.js +7 -1
- package/dist/devices/nordtronic.js.map +1 -1
- package/dist/devices/robb.js +6 -6
- package/dist/devices/schneider_electric.js +2 -2
- package/dist/devices/schneider_electric.js.map +1 -1
- package/dist/devices/shenzhen_homa.js +1 -1
- package/dist/devices/sinope.js +1 -1
- package/dist/devices/sinope.js.map +1 -1
- package/dist/devices/sunricher.js +5 -5
- package/dist/devices/third_reality.d.ts.map +1 -1
- package/dist/devices/third_reality.js +2 -0
- package/dist/devices/third_reality.js.map +1 -1
- package/dist/devices/tuya.js +23 -21
- package/dist/devices/tuya.js.map +1 -1
- package/dist/devices/ubisys.js +1 -1
- package/dist/devices/vbled.js +1 -1
- package/dist/devices/yokis.js +2 -2
- package/dist/lib/bosch.d.ts +30 -12
- package/dist/lib/bosch.d.ts.map +1 -1
- package/dist/lib/bosch.js +240 -54
- package/dist/lib/bosch.js.map +1 -1
- package/dist/models-index.json +1 -1
- package/package.json +1 -1
package/dist/devices/ubisys.js
CHANGED
|
@@ -378,7 +378,7 @@ const ubisys = {
|
|
|
378
378
|
}
|
|
379
379
|
if (value.input_action_templates != null) {
|
|
380
380
|
const templateTypes = {
|
|
381
|
-
// source: "
|
|
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]],
|
package/dist/devices/vbled.js
CHANGED
package/dist/devices/yokis.js
CHANGED
|
@@ -100,7 +100,7 @@ const YokisClustersDefinition = {
|
|
|
100
100
|
response: 0,
|
|
101
101
|
parameters: [],
|
|
102
102
|
},
|
|
103
|
-
// Open
|
|
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
|
|
900
|
+
.withDescription("Open Zigbee network")
|
|
901
901
|
.withFeature(e
|
|
902
902
|
.numeric("opening_time", ea.SET) //uc_OpeningTime
|
|
903
903
|
.withValueMin(0)
|
package/dist/lib/bosch.d.ts
CHANGED
|
@@ -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: {
|
package/dist/lib/bosch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bosch.d.ts","sourceRoot":"","sources":["../../src/lib/bosch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;
|
|
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 = {
|
|
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
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
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
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
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
|
|
1879
|
-
|
|
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("
|
|
1884
|
-
.
|
|
1885
|
-
.
|
|
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
|
|
1898
|
-
result.
|
|
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", {
|