zigbee-herdsman-converters 25.34.0 → 25.35.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 +14 -0
- package/dist/devices/awox.d.ts.map +1 -1
- package/dist/devices/awox.js +9 -0
- package/dist/devices/awox.js.map +1 -1
- package/dist/devices/bosch.d.ts.map +1 -1
- package/dist/devices/bosch.js +63 -513
- package/dist/devices/bosch.js.map +1 -1
- package/dist/devices/tuya.d.ts.map +1 -1
- package/dist/devices/tuya.js +2 -1
- package/dist/devices/tuya.js.map +1 -1
- package/dist/lib/bosch.d.ts +98 -3
- package/dist/lib/bosch.d.ts.map +1 -1
- package/dist/lib/bosch.js +543 -23
- package/dist/lib/bosch.js.map +1 -1
- package/dist/lib/exposes.d.ts +0 -1
- package/dist/lib/exposes.d.ts.map +1 -1
- package/dist/lib/exposes.js +0 -6
- package/dist/lib/exposes.js.map +1 -1
- package/dist/lib/modernExtend.d.ts +4 -0
- package/dist/lib/modernExtend.d.ts.map +1 -1
- package/dist/lib/modernExtend.js +5 -2
- package/dist/lib/modernExtend.js.map +1 -1
- package/dist/models-index.json +1 -1
- package/package.json +1 -1
package/dist/devices/bosch.js
CHANGED
|
@@ -36,9 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.definitions = void 0;
|
|
37
37
|
const zigbee_herdsman_1 = require("zigbee-herdsman");
|
|
38
38
|
const fz = __importStar(require("../converters/fromZigbee"));
|
|
39
|
-
const tz = __importStar(require("../converters/toZigbee"));
|
|
40
39
|
const bosch_1 = require("../lib/bosch");
|
|
41
|
-
const constants = __importStar(require("../lib/constants"));
|
|
42
40
|
const constants_1 = require("../lib/constants");
|
|
43
41
|
const exposes = __importStar(require("../lib/exposes"));
|
|
44
42
|
const logger_1 = require("../lib/logger");
|
|
@@ -110,258 +108,6 @@ const boschBmctDzSettings = {
|
|
|
110
108
|
hasDualSwitchInputs: false,
|
|
111
109
|
};
|
|
112
110
|
const boschExtend = {
|
|
113
|
-
hvacThermostatCluster: () => m.deviceAddCustomCluster("hvacThermostat", {
|
|
114
|
-
ID: zigbee_herdsman_1.Zcl.Clusters.hvacThermostat.ID,
|
|
115
|
-
attributes: {
|
|
116
|
-
operatingMode: {
|
|
117
|
-
ID: 0x4007,
|
|
118
|
-
type: zigbee_herdsman_1.Zcl.DataType.ENUM8,
|
|
119
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
120
|
-
},
|
|
121
|
-
heatingDemand: {
|
|
122
|
-
ID: 0x4020,
|
|
123
|
-
type: zigbee_herdsman_1.Zcl.DataType.ENUM8,
|
|
124
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
125
|
-
},
|
|
126
|
-
valveAdaptStatus: {
|
|
127
|
-
ID: 0x4022,
|
|
128
|
-
type: zigbee_herdsman_1.Zcl.DataType.ENUM8,
|
|
129
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
130
|
-
},
|
|
131
|
-
remoteTemperature: {
|
|
132
|
-
ID: 0x4040,
|
|
133
|
-
type: zigbee_herdsman_1.Zcl.DataType.INT16,
|
|
134
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
135
|
-
},
|
|
136
|
-
windowDetection: {
|
|
137
|
-
ID: 0x4042,
|
|
138
|
-
type: zigbee_herdsman_1.Zcl.DataType.ENUM8,
|
|
139
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
140
|
-
},
|
|
141
|
-
boostHeating: {
|
|
142
|
-
ID: 0x4043,
|
|
143
|
-
type: zigbee_herdsman_1.Zcl.DataType.ENUM8,
|
|
144
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
commands: {
|
|
148
|
-
calibrateValve: {
|
|
149
|
-
ID: 0x41,
|
|
150
|
-
parameters: [],
|
|
151
|
-
},
|
|
152
|
-
},
|
|
153
|
-
commandsResponse: {},
|
|
154
|
-
}),
|
|
155
|
-
hvacUserInterfaceCfgCluster: () => m.deviceAddCustomCluster("hvacUserInterfaceCfg", {
|
|
156
|
-
ID: zigbee_herdsman_1.Zcl.Clusters.hvacUserInterfaceCfg.ID,
|
|
157
|
-
attributes: {
|
|
158
|
-
displayOrientation: {
|
|
159
|
-
ID: 0x400b,
|
|
160
|
-
type: zigbee_herdsman_1.Zcl.DataType.UINT8,
|
|
161
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
162
|
-
},
|
|
163
|
-
displayedTemperature: {
|
|
164
|
-
ID: 0x4039,
|
|
165
|
-
type: zigbee_herdsman_1.Zcl.DataType.ENUM8,
|
|
166
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
167
|
-
},
|
|
168
|
-
displayOntime: {
|
|
169
|
-
ID: 0x403a,
|
|
170
|
-
type: zigbee_herdsman_1.Zcl.DataType.ENUM8,
|
|
171
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
172
|
-
},
|
|
173
|
-
displayBrightness: {
|
|
174
|
-
ID: 0x403b,
|
|
175
|
-
type: zigbee_herdsman_1.Zcl.DataType.ENUM8,
|
|
176
|
-
manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
commands: {},
|
|
180
|
-
commandsResponse: {},
|
|
181
|
-
}),
|
|
182
|
-
operatingMode: () => m.enumLookup({
|
|
183
|
-
name: "operating_mode",
|
|
184
|
-
cluster: "hvacThermostat",
|
|
185
|
-
attribute: "operatingMode",
|
|
186
|
-
reporting: { min: "10_SECONDS", max: "MAX", change: null },
|
|
187
|
-
description: "Bosch-specific operating mode (overrides system mode)",
|
|
188
|
-
lookup: { schedule: 0x00, manual: 0x01, pause: 0x05 },
|
|
189
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
190
|
-
}),
|
|
191
|
-
windowDetection: () => m.binary({
|
|
192
|
-
name: "window_detection",
|
|
193
|
-
cluster: "hvacThermostat",
|
|
194
|
-
attribute: "windowDetection",
|
|
195
|
-
description: "Enable/disable window open (Lo.) mode",
|
|
196
|
-
valueOn: ["ON", 0x01],
|
|
197
|
-
valueOff: ["OFF", 0x00],
|
|
198
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
199
|
-
}),
|
|
200
|
-
boostHeating: () => m.binary({
|
|
201
|
-
name: "boost_heating",
|
|
202
|
-
cluster: "hvacThermostat",
|
|
203
|
-
attribute: "boostHeating",
|
|
204
|
-
reporting: { min: "10_SECONDS", max: "MAX", change: null, attribute: "boostHeating" },
|
|
205
|
-
description: "Activate boost heating (5 min. on TRV)",
|
|
206
|
-
valueOn: ["ON", 0x01],
|
|
207
|
-
valueOff: ["OFF", 0x00],
|
|
208
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
209
|
-
}),
|
|
210
|
-
childLock: () => m.binary({
|
|
211
|
-
name: "child_lock",
|
|
212
|
-
cluster: "hvacUserInterfaceCfg",
|
|
213
|
-
attribute: "keypadLockout",
|
|
214
|
-
description: "Enables/disables physical input on the device",
|
|
215
|
-
valueOn: ["LOCK", 0x01],
|
|
216
|
-
valueOff: ["UNLOCK", 0x00],
|
|
217
|
-
}),
|
|
218
|
-
displayOntime: () => m.numeric({
|
|
219
|
-
name: "display_ontime",
|
|
220
|
-
cluster: "hvacUserInterfaceCfg",
|
|
221
|
-
attribute: "displayOntime",
|
|
222
|
-
description: "Sets the display on-time",
|
|
223
|
-
valueMin: 5,
|
|
224
|
-
valueMax: 30,
|
|
225
|
-
unit: "s",
|
|
226
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
227
|
-
}),
|
|
228
|
-
displayBrightness: () => m.numeric({
|
|
229
|
-
name: "display_brightness",
|
|
230
|
-
cluster: "hvacUserInterfaceCfg",
|
|
231
|
-
attribute: "displayBrightness",
|
|
232
|
-
description: "Sets brightness of the display",
|
|
233
|
-
valueMin: 0,
|
|
234
|
-
valueMax: 10,
|
|
235
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
236
|
-
}),
|
|
237
|
-
valveAdaptProcess: () => {
|
|
238
|
-
const adaptationStatus = {
|
|
239
|
-
none: 0x00,
|
|
240
|
-
ready_to_calibrate: 0x01,
|
|
241
|
-
calibration_in_progress: 0x02,
|
|
242
|
-
error: 0x03,
|
|
243
|
-
success: 0x04,
|
|
244
|
-
};
|
|
245
|
-
const exposes = [
|
|
246
|
-
e
|
|
247
|
-
.binary("valve_adapt_process", ea.ALL, true, false)
|
|
248
|
-
.withLabel("Trigger adaptation process")
|
|
249
|
-
.withDescription('Trigger the valve adaptation process. Only possible when adaptation status is "ready_to_calibrate" or "error".')
|
|
250
|
-
.withCategory("config"),
|
|
251
|
-
];
|
|
252
|
-
const fromZigbee = [
|
|
253
|
-
{
|
|
254
|
-
cluster: "hvacThermostat",
|
|
255
|
-
type: ["attributeReport", "readResponse"],
|
|
256
|
-
convert: (model, msg, publish, options, meta) => {
|
|
257
|
-
const result = {};
|
|
258
|
-
if (msg.data.valveAdaptStatus !== undefined) {
|
|
259
|
-
if (msg.data.valveAdaptStatus === adaptationStatus.calibration_in_progress) {
|
|
260
|
-
result.valve_adapt_process = true;
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
result.valve_adapt_process = false;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
return result;
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
|
-
];
|
|
270
|
-
const toZigbee = [
|
|
271
|
-
{
|
|
272
|
-
key: ["valve_adapt_process"],
|
|
273
|
-
convertSet: async (entity, key, value, meta) => {
|
|
274
|
-
if (value === true) {
|
|
275
|
-
const adaptStatus = utils.getFromLookup(meta.state.valve_adapt_status, adaptationStatus);
|
|
276
|
-
switch (adaptStatus) {
|
|
277
|
-
case adaptationStatus.ready_to_calibrate:
|
|
278
|
-
case adaptationStatus.error:
|
|
279
|
-
await entity.command("hvacThermostat", "calibrateValve", {}, bosch_1.manufacturerOptions);
|
|
280
|
-
break;
|
|
281
|
-
default:
|
|
282
|
-
throw new Error("Valve adaptation process not possible right now.");
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
return { state: { valve_adapt_process: value } };
|
|
286
|
-
},
|
|
287
|
-
convertGet: async (entity, key, meta) => {
|
|
288
|
-
await entity.read("hvacThermostat", ["valveAdaptStatus"], bosch_1.manufacturerOptions);
|
|
289
|
-
},
|
|
290
|
-
},
|
|
291
|
-
];
|
|
292
|
-
return {
|
|
293
|
-
exposes,
|
|
294
|
-
fromZigbee,
|
|
295
|
-
toZigbee,
|
|
296
|
-
isModernExtend: true,
|
|
297
|
-
};
|
|
298
|
-
},
|
|
299
|
-
heatingDemand: () => {
|
|
300
|
-
const fromZigbee = [
|
|
301
|
-
{
|
|
302
|
-
cluster: "hvacThermostat",
|
|
303
|
-
type: ["attributeReport", "readResponse"],
|
|
304
|
-
convert: (model, msg, publish, options, meta) => {
|
|
305
|
-
const result = {};
|
|
306
|
-
if (msg.data.heatingDemand !== undefined) {
|
|
307
|
-
const demand = msg.data.heatingDemand;
|
|
308
|
-
result.pi_heating_demand = demand;
|
|
309
|
-
result.running_state = demand > 0 ? "heat" : "idle";
|
|
310
|
-
}
|
|
311
|
-
return result;
|
|
312
|
-
},
|
|
313
|
-
},
|
|
314
|
-
];
|
|
315
|
-
const toZigbee = [
|
|
316
|
-
{
|
|
317
|
-
key: ["pi_heating_demand"],
|
|
318
|
-
convertSet: async (entity, key, value, meta) => {
|
|
319
|
-
if (key === "pi_heating_demand") {
|
|
320
|
-
let demand = utils.toNumber(value, key);
|
|
321
|
-
demand = utils.numberWithinRange(demand, 0, 100);
|
|
322
|
-
await entity.write("hvacThermostat", { heatingDemand: demand }, bosch_1.manufacturerOptions);
|
|
323
|
-
return { state: { pi_heating_demand: demand } };
|
|
324
|
-
}
|
|
325
|
-
},
|
|
326
|
-
convertGet: async (entity, key, meta) => {
|
|
327
|
-
await entity.read("hvacThermostat", ["heatingDemand"], bosch_1.manufacturerOptions);
|
|
328
|
-
},
|
|
329
|
-
},
|
|
330
|
-
{
|
|
331
|
-
key: ["running_state"],
|
|
332
|
-
convertGet: async (entity, key, meta) => {
|
|
333
|
-
await entity.read("hvacThermostat", ["heatingDemand"], bosch_1.manufacturerOptions);
|
|
334
|
-
},
|
|
335
|
-
},
|
|
336
|
-
];
|
|
337
|
-
return {
|
|
338
|
-
fromZigbee,
|
|
339
|
-
toZigbee,
|
|
340
|
-
isModernExtend: true,
|
|
341
|
-
};
|
|
342
|
-
},
|
|
343
|
-
ignoreDst: () => {
|
|
344
|
-
const fromZigbee = [
|
|
345
|
-
{
|
|
346
|
-
cluster: "genTime",
|
|
347
|
-
type: "read",
|
|
348
|
-
convert: async (model, msg, publish, options, meta) => {
|
|
349
|
-
if ("dstStart" in msg.data && "dstEnd" in msg.data && "dstShift" in msg.data) {
|
|
350
|
-
const response = {
|
|
351
|
-
dstStart: { attribute: 0x0003, status: zigbee_herdsman_1.Zcl.Status.SUCCESS, value: 0x00 },
|
|
352
|
-
dstEnd: { attribute: 0x0004, status: zigbee_herdsman_1.Zcl.Status.SUCCESS, value: 0x00 },
|
|
353
|
-
dstShift: { attribute: 0x0005, status: zigbee_herdsman_1.Zcl.Status.SUCCESS, value: 0x00 },
|
|
354
|
-
};
|
|
355
|
-
await msg.endpoint.readResponse(msg.cluster, msg.meta.zclTransactionSequenceNumber, response);
|
|
356
|
-
}
|
|
357
|
-
},
|
|
358
|
-
},
|
|
359
|
-
];
|
|
360
|
-
return {
|
|
361
|
-
fromZigbee,
|
|
362
|
-
isModernExtend: true,
|
|
363
|
-
};
|
|
364
|
-
},
|
|
365
111
|
smokeAlarm: () => {
|
|
366
112
|
const smokeAlarm = {
|
|
367
113
|
OFF: 0x0000,
|
|
@@ -846,7 +592,6 @@ exports.definitions = [
|
|
|
846
592
|
bosch_1.boschBsirExtend.deviceState(),
|
|
847
593
|
bosch_1.boschBsirExtend.alarmControl(),
|
|
848
594
|
bosch_1.boschBsirExtend.iasZoneStatus(),
|
|
849
|
-
bosch_1.boschBsirExtend.battery(),
|
|
850
595
|
bosch_1.boschBsirExtend.alarmMode(),
|
|
851
596
|
bosch_1.boschBsirExtend.sirenVolume(),
|
|
852
597
|
bosch_1.boschBsirExtend.sirenDuration(),
|
|
@@ -856,6 +601,9 @@ exports.definitions = [
|
|
|
856
601
|
bosch_1.boschBsirExtend.primaryPowerSource(),
|
|
857
602
|
bosch_1.boschBsirExtend.currentPowerSource(),
|
|
858
603
|
bosch_1.boschBsirExtend.solarPanelVoltage(),
|
|
604
|
+
bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus({
|
|
605
|
+
percentageReportingConfig: { min: "MIN", max: "MAX", change: 1 },
|
|
606
|
+
}),
|
|
859
607
|
],
|
|
860
608
|
ota: true,
|
|
861
609
|
},
|
|
@@ -1006,279 +754,81 @@ exports.definitions = [
|
|
|
1006
754
|
model: "BTH-RA",
|
|
1007
755
|
vendor: "Bosch",
|
|
1008
756
|
description: "Radiator thermostat II",
|
|
1009
|
-
meta: {
|
|
1010
|
-
overrideHaDiscoveryPayload: (payload) => {
|
|
1011
|
-
// Override climate discovery
|
|
1012
|
-
// https://github.com/Koenkk/zigbee2mqtt/pull/23075#issue-2355829475
|
|
1013
|
-
if (payload.mode_command_topic?.endsWith("/system_mode")) {
|
|
1014
|
-
payload.mode_command_topic = payload.mode_command_topic.substring(0, payload.mode_command_topic.lastIndexOf("/system_mode"));
|
|
1015
|
-
payload.mode_command_template =
|
|
1016
|
-
"{% set values = " +
|
|
1017
|
-
`{ 'auto':'schedule','heat':'manual','off':'pause'} %}` +
|
|
1018
|
-
`{"operating_mode": "{{ values[value] if value in values.keys() else 'pause' }}"}`;
|
|
1019
|
-
payload.mode_state_template =
|
|
1020
|
-
"{% set values = " +
|
|
1021
|
-
`{'schedule':'auto','manual':'heat','pause':'off'} %}` +
|
|
1022
|
-
`{% set value = value_json.operating_mode %}{{ values[value] if value in values.keys() else 'off' }}`;
|
|
1023
|
-
payload.modes = ["off", "heat", "auto"];
|
|
1024
|
-
}
|
|
1025
|
-
},
|
|
1026
|
-
},
|
|
1027
|
-
exposes: [
|
|
1028
|
-
e
|
|
1029
|
-
.climate()
|
|
1030
|
-
.withLocalTemperature(ea.STATE_GET, "Temperature used by the heating algorithm. " +
|
|
1031
|
-
"This is the temperature measured on the device (by default) or the remote temperature (if set within the last 30 min).")
|
|
1032
|
-
.withLocalTemperatureCalibration(-5, 5, 0.1)
|
|
1033
|
-
.withSetpoint("occupied_heating_setpoint", 5, 30, 0.5)
|
|
1034
|
-
.withSystemMode(["heat"])
|
|
1035
|
-
.withRunningState(["idle", "heat"], ea.STATE_GET),
|
|
1036
|
-
e.pi_heating_demand().withAccess(ea.ALL),
|
|
1037
|
-
],
|
|
1038
|
-
fromZigbee: [fz.thermostat],
|
|
1039
|
-
toZigbee: [
|
|
1040
|
-
tz.thermostat_system_mode,
|
|
1041
|
-
tz.thermostat_occupied_heating_setpoint,
|
|
1042
|
-
tz.thermostat_local_temperature_calibration,
|
|
1043
|
-
tz.thermostat_local_temperature,
|
|
1044
|
-
tz.thermostat_keypad_lockout,
|
|
1045
|
-
],
|
|
1046
757
|
extend: [
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
m.numeric({
|
|
1057
|
-
name: "remote_temperature",
|
|
1058
|
-
cluster: "hvacThermostat",
|
|
1059
|
-
attribute: "remoteTemperature",
|
|
1060
|
-
description: "Input for remote temperature sensor. Required at least every 30 min. to prevent fallback to internal sensor!",
|
|
1061
|
-
valueMin: 0.0,
|
|
1062
|
-
valueMax: 35.0,
|
|
1063
|
-
valueStep: 0.01,
|
|
1064
|
-
unit: "°C",
|
|
1065
|
-
scale: 100,
|
|
1066
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
1067
|
-
}),
|
|
1068
|
-
m.enumLookup({
|
|
1069
|
-
name: "setpoint_change_source",
|
|
1070
|
-
cluster: "hvacThermostat",
|
|
1071
|
-
attribute: "setpointChangeSource",
|
|
1072
|
-
reporting: { min: "10_SECONDS", max: "MAX", change: null },
|
|
1073
|
-
description: "Source of the current setpoint temperature",
|
|
1074
|
-
lookup: { manual: 0x00, schedule: 0x01, externally: 0x02 },
|
|
1075
|
-
access: "STATE_GET",
|
|
1076
|
-
}),
|
|
1077
|
-
boschExtend.childLock(),
|
|
1078
|
-
boschExtend.displayOntime(),
|
|
1079
|
-
boschExtend.displayBrightness(),
|
|
1080
|
-
m.enumLookup({
|
|
1081
|
-
name: "display_orientation",
|
|
1082
|
-
cluster: "hvacUserInterfaceCfg",
|
|
1083
|
-
attribute: "displayOrientation",
|
|
1084
|
-
description: "Sets orientation of the display",
|
|
1085
|
-
lookup: { normal: 0x00, flipped: 0x01 },
|
|
1086
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
1087
|
-
}),
|
|
1088
|
-
m.enumLookup({
|
|
1089
|
-
name: "displayed_temperature",
|
|
1090
|
-
cluster: "hvacUserInterfaceCfg",
|
|
1091
|
-
attribute: "displayedTemperature",
|
|
1092
|
-
description: "Temperature displayed on the TRV",
|
|
1093
|
-
lookup: { target: 0x00, measured: 0x01 },
|
|
1094
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
1095
|
-
}),
|
|
1096
|
-
m.enumLookup({
|
|
1097
|
-
name: "valve_adapt_status",
|
|
1098
|
-
cluster: "hvacThermostat",
|
|
1099
|
-
attribute: "valveAdaptStatus",
|
|
1100
|
-
reporting: { min: "10_SECONDS", max: "MAX", change: null },
|
|
1101
|
-
description: "Specifies the current status of the valve adaptation",
|
|
1102
|
-
lookup: {
|
|
1103
|
-
none: 0x00,
|
|
1104
|
-
ready_to_calibrate: 0x01,
|
|
1105
|
-
calibration_in_progress: 0x02,
|
|
1106
|
-
error: 0x03,
|
|
1107
|
-
success: 0x04,
|
|
1108
|
-
},
|
|
1109
|
-
zigbeeCommandOptions: bosch_1.manufacturerOptions,
|
|
1110
|
-
access: "STATE_GET",
|
|
1111
|
-
}),
|
|
1112
|
-
boschExtend.valveAdaptProcess(),
|
|
1113
|
-
boschExtend.heatingDemand(),
|
|
1114
|
-
boschExtend.ignoreDst(),
|
|
1115
|
-
m.bindCluster({
|
|
1116
|
-
cluster: "genPollCtrl",
|
|
1117
|
-
clusterType: "input",
|
|
758
|
+
bosch_1.boschThermostatExtend.handleDaylightSavingTimeReadRequest(),
|
|
759
|
+
bosch_1.boschThermostatExtend.customThermostatCluster(),
|
|
760
|
+
bosch_1.boschThermostatExtend.customUserInterfaceCfgCluster(),
|
|
761
|
+
bosch_1.boschThermostatExtend.raThermostat(),
|
|
762
|
+
bosch_1.boschThermostatExtend.setpointChangeSource(),
|
|
763
|
+
bosch_1.boschThermostatExtend.customHeatingDemand(),
|
|
764
|
+
bosch_1.boschThermostatExtend.customRunningState(),
|
|
765
|
+
bosch_1.boschThermostatExtend.operatingMode({
|
|
766
|
+
description: "Bosch-specific operating mode (overrides system mode)",
|
|
1118
767
|
}),
|
|
768
|
+
bosch_1.boschThermostatExtend.windowOpenMode(),
|
|
769
|
+
bosch_1.boschThermostatExtend.boostHeating(),
|
|
770
|
+
bosch_1.boschThermostatExtend.remoteTemperature(),
|
|
771
|
+
bosch_1.boschThermostatExtend.childLock(),
|
|
772
|
+
bosch_1.boschThermostatExtend.displayBrightness(),
|
|
773
|
+
bosch_1.boschThermostatExtend.displaySwitchOnDuration(),
|
|
774
|
+
bosch_1.boschThermostatExtend.displayOrientation(),
|
|
775
|
+
bosch_1.boschThermostatExtend.displayedTemperature(),
|
|
776
|
+
bosch_1.boschThermostatExtend.valveAdaptation(),
|
|
777
|
+
bosch_1.boschThermostatExtend.errorState(),
|
|
778
|
+
bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
|
|
1119
779
|
],
|
|
1120
780
|
ota: true,
|
|
1121
|
-
configure: async (device, coordinatorEndpoint) => {
|
|
1122
|
-
const endpoint = device.getEndpoint(1);
|
|
1123
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ["hvacThermostat", "hvacUserInterfaceCfg"]);
|
|
1124
|
-
await reporting.thermostatTemperature(endpoint);
|
|
1125
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint, {
|
|
1126
|
-
min: constants.repInterval.SECONDS_10,
|
|
1127
|
-
max: constants.repInterval.HOUR,
|
|
1128
|
-
change: 50,
|
|
1129
|
-
});
|
|
1130
|
-
await reporting.thermostatKeypadLockMode(endpoint);
|
|
1131
|
-
await endpoint.configureReporting("hvacThermostat", [
|
|
1132
|
-
{
|
|
1133
|
-
attribute: "heatingDemand",
|
|
1134
|
-
minimumReportInterval: constants.repInterval.SECONDS_10,
|
|
1135
|
-
maximumReportInterval: constants.repInterval.MAX,
|
|
1136
|
-
reportableChange: null,
|
|
1137
|
-
},
|
|
1138
|
-
], bosch_1.manufacturerOptions);
|
|
1139
|
-
await endpoint.read("genPowerCfg", ["batteryPercentageRemaining"]);
|
|
1140
|
-
await endpoint.read("hvacThermostat", ["localTemperatureCalibration", "setpointChangeSource"]);
|
|
1141
|
-
await endpoint.read("hvacThermostat", ["operatingMode", "heatingDemand", "valveAdaptStatus", "remoteTemperature", "windowDetection", "boostHeating"], bosch_1.manufacturerOptions);
|
|
1142
|
-
await endpoint.read("hvacUserInterfaceCfg", ["keypadLockout"]);
|
|
1143
|
-
await endpoint.read("hvacUserInterfaceCfg", ["displayOrientation", "displayedTemperature", "displayOntime", "displayBrightness"], bosch_1.manufacturerOptions);
|
|
1144
|
-
},
|
|
1145
781
|
},
|
|
1146
782
|
{
|
|
1147
783
|
zigbeeModel: ["RBSH-RTH0-BAT-ZB-EU"],
|
|
1148
784
|
model: "BTH-RM",
|
|
1149
785
|
vendor: "Bosch",
|
|
1150
|
-
description: "Room thermostat II
|
|
1151
|
-
exposes: [
|
|
1152
|
-
e
|
|
1153
|
-
.climate()
|
|
1154
|
-
.withLocalTemperature()
|
|
1155
|
-
.withSetpoint("occupied_heating_setpoint", 4.5, 30, 0.5)
|
|
1156
|
-
.withSetpoint("occupied_cooling_setpoint", 4.5, 30, 0.5)
|
|
1157
|
-
.withLocalTemperatureCalibration(-5, 5, 0.1)
|
|
1158
|
-
.withSystemMode(["off", "heat", "cool"])
|
|
1159
|
-
.withRunningState(["idle", "heat", "cool"]),
|
|
1160
|
-
],
|
|
1161
|
-
fromZigbee: [fz.thermostat, fz.hvac_user_interface],
|
|
1162
|
-
toZigbee: [
|
|
1163
|
-
tz.thermostat_system_mode,
|
|
1164
|
-
tz.thermostat_running_state,
|
|
1165
|
-
tz.thermostat_occupied_heating_setpoint,
|
|
1166
|
-
tz.thermostat_occupied_cooling_setpoint,
|
|
1167
|
-
tz.thermostat_programming_operation_mode, // NOTE: Only 0x0 & 0x1 supported
|
|
1168
|
-
tz.thermostat_local_temperature_calibration,
|
|
1169
|
-
tz.thermostat_local_temperature,
|
|
1170
|
-
tz.thermostat_temperature_setpoint_hold,
|
|
1171
|
-
tz.thermostat_temperature_display_mode,
|
|
1172
|
-
],
|
|
786
|
+
description: "Room thermostat II",
|
|
1173
787
|
extend: [
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
boschExtend.displayBrightness(),
|
|
1191
|
-
m.bindCluster({
|
|
1192
|
-
cluster: "genPollCtrl",
|
|
1193
|
-
clusterType: "input",
|
|
1194
|
-
}),
|
|
788
|
+
bosch_1.boschGeneralExtend.handleZclVersionReadRequest(),
|
|
789
|
+
bosch_1.boschThermostatExtend.handleDaylightSavingTimeReadRequest(),
|
|
790
|
+
bosch_1.boschThermostatExtend.customThermostatCluster(),
|
|
791
|
+
bosch_1.boschThermostatExtend.customUserInterfaceCfgCluster(),
|
|
792
|
+
bosch_1.boschThermostatExtend.rmThermostat(),
|
|
793
|
+
bosch_1.boschThermostatExtend.humidity(),
|
|
794
|
+
bosch_1.boschThermostatExtend.cableSensorMode(),
|
|
795
|
+
bosch_1.boschThermostatExtend.cableSensorTemperature(),
|
|
796
|
+
bosch_1.boschThermostatExtend.operatingMode(),
|
|
797
|
+
bosch_1.boschThermostatExtend.windowOpenMode(),
|
|
798
|
+
bosch_1.boschThermostatExtend.boostHeating(),
|
|
799
|
+
bosch_1.boschThermostatExtend.childLock(),
|
|
800
|
+
bosch_1.boschThermostatExtend.displayBrightness(),
|
|
801
|
+
bosch_1.boschThermostatExtend.displaySwitchOnDuration(),
|
|
802
|
+
bosch_1.boschThermostatExtend.errorState(),
|
|
803
|
+
bosch_1.boschThermostatExtend.rmBattery(),
|
|
1195
804
|
],
|
|
1196
805
|
ota: true,
|
|
1197
|
-
configure: async (device, coordinatorEndpoint) => {
|
|
1198
|
-
const endpoint = device.getEndpoint(1);
|
|
1199
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ["hvacThermostat", "hvacUserInterfaceCfg"]);
|
|
1200
|
-
await reporting.thermostatSystemMode(endpoint);
|
|
1201
|
-
await reporting.thermostatRunningState(endpoint);
|
|
1202
|
-
await reporting.thermostatTemperature(endpoint);
|
|
1203
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint, {
|
|
1204
|
-
min: constants.repInterval.SECONDS_10,
|
|
1205
|
-
max: constants.repInterval.HOUR,
|
|
1206
|
-
change: 50,
|
|
1207
|
-
});
|
|
1208
|
-
await reporting.thermostatOccupiedCoolingSetpoint(endpoint, {
|
|
1209
|
-
min: constants.repInterval.SECONDS_10,
|
|
1210
|
-
max: constants.repInterval.HOUR,
|
|
1211
|
-
change: 50,
|
|
1212
|
-
});
|
|
1213
|
-
await reporting.thermostatKeypadLockMode(endpoint);
|
|
1214
|
-
await endpoint.read("genPowerCfg", ["batteryVoltage"]);
|
|
1215
|
-
await endpoint.read("hvacThermostat", ["localTemperatureCalibration"]);
|
|
1216
|
-
await endpoint.read("hvacThermostat", ["operatingMode", "windowDetection", "boostHeating"], bosch_1.manufacturerOptions);
|
|
1217
|
-
await endpoint.read("hvacUserInterfaceCfg", ["keypadLockout"]);
|
|
1218
|
-
await endpoint.read("hvacUserInterfaceCfg", ["displayOntime", "displayBrightness"], bosch_1.manufacturerOptions);
|
|
1219
|
-
},
|
|
1220
806
|
},
|
|
1221
807
|
{
|
|
1222
808
|
zigbeeModel: ["RBSH-RTH0-ZB-EU"],
|
|
1223
809
|
model: "BTH-RM230Z",
|
|
1224
810
|
vendor: "Bosch",
|
|
1225
811
|
description: "Room thermostat II 230V",
|
|
1226
|
-
exposes: [
|
|
1227
|
-
e
|
|
1228
|
-
.climate()
|
|
1229
|
-
.withLocalTemperature()
|
|
1230
|
-
.withSetpoint("occupied_heating_setpoint", 4.5, 30, 0.5)
|
|
1231
|
-
.withSetpoint("occupied_cooling_setpoint", 4.5, 30, 0.5)
|
|
1232
|
-
.withLocalTemperatureCalibration(-5, 5, 0.1)
|
|
1233
|
-
.withSystemMode(["off", "heat", "cool"])
|
|
1234
|
-
.withRunningState(["idle", "heat", "cool"]),
|
|
1235
|
-
],
|
|
1236
|
-
fromZigbee: [fz.thermostat, fz.hvac_user_interface],
|
|
1237
|
-
toZigbee: [
|
|
1238
|
-
tz.thermostat_system_mode,
|
|
1239
|
-
tz.thermostat_running_state,
|
|
1240
|
-
tz.thermostat_occupied_heating_setpoint,
|
|
1241
|
-
tz.thermostat_occupied_cooling_setpoint,
|
|
1242
|
-
tz.thermostat_programming_operation_mode, // NOTE: Only 0x0 & 0x1 supported
|
|
1243
|
-
tz.thermostat_local_temperature_calibration,
|
|
1244
|
-
tz.thermostat_local_temperature,
|
|
1245
|
-
tz.thermostat_temperature_setpoint_hold,
|
|
1246
|
-
tz.thermostat_temperature_display_mode,
|
|
1247
|
-
],
|
|
1248
812
|
extend: [
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
813
|
+
bosch_1.boschGeneralExtend.handleZclVersionReadRequest(),
|
|
814
|
+
bosch_1.boschThermostatExtend.handleDaylightSavingTimeReadRequest(),
|
|
815
|
+
bosch_1.boschThermostatExtend.customThermostatCluster(),
|
|
816
|
+
bosch_1.boschThermostatExtend.customUserInterfaceCfgCluster(),
|
|
817
|
+
bosch_1.boschThermostatExtend.rmThermostat(),
|
|
818
|
+
bosch_1.boschThermostatExtend.humidity(),
|
|
819
|
+
bosch_1.boschThermostatExtend.cableSensorMode(),
|
|
820
|
+
bosch_1.boschThermostatExtend.cableSensorTemperature(),
|
|
821
|
+
bosch_1.boschThermostatExtend.heaterType(),
|
|
822
|
+
bosch_1.boschThermostatExtend.valveType(),
|
|
823
|
+
bosch_1.boschThermostatExtend.operatingMode(),
|
|
824
|
+
bosch_1.boschThermostatExtend.windowOpenMode(),
|
|
825
|
+
bosch_1.boschThermostatExtend.boostHeating(),
|
|
826
|
+
bosch_1.boschThermostatExtend.childLock(),
|
|
827
|
+
bosch_1.boschThermostatExtend.displayBrightness(),
|
|
828
|
+
bosch_1.boschThermostatExtend.displaySwitchOnDuration(),
|
|
829
|
+
bosch_1.boschThermostatExtend.errorState(),
|
|
1258
830
|
],
|
|
1259
831
|
ota: true,
|
|
1260
|
-
configure: async (device, coordinatorEndpoint) => {
|
|
1261
|
-
const endpoint = device.getEndpoint(1);
|
|
1262
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ["hvacThermostat", "hvacUserInterfaceCfg"]);
|
|
1263
|
-
await reporting.thermostatSystemMode(endpoint);
|
|
1264
|
-
await reporting.thermostatRunningState(endpoint);
|
|
1265
|
-
await reporting.thermostatTemperature(endpoint);
|
|
1266
|
-
await reporting.thermostatOccupiedHeatingSetpoint(endpoint, {
|
|
1267
|
-
min: constants.repInterval.SECONDS_10,
|
|
1268
|
-
max: constants.repInterval.HOUR,
|
|
1269
|
-
change: 50,
|
|
1270
|
-
});
|
|
1271
|
-
await reporting.thermostatOccupiedCoolingSetpoint(endpoint, {
|
|
1272
|
-
min: constants.repInterval.SECONDS_10,
|
|
1273
|
-
max: constants.repInterval.HOUR,
|
|
1274
|
-
change: 50,
|
|
1275
|
-
});
|
|
1276
|
-
await reporting.thermostatKeypadLockMode(endpoint);
|
|
1277
|
-
await endpoint.read("hvacThermostat", ["localTemperatureCalibration"]);
|
|
1278
|
-
await endpoint.read("hvacThermostat", ["operatingMode", "windowDetection", "boostHeating"], bosch_1.manufacturerOptions);
|
|
1279
|
-
await endpoint.read("hvacUserInterfaceCfg", ["keypadLockout"]);
|
|
1280
|
-
await endpoint.read("hvacUserInterfaceCfg", ["displayOntime", "displayBrightness"], bosch_1.manufacturerOptions);
|
|
1281
|
-
},
|
|
1282
832
|
},
|
|
1283
833
|
{
|
|
1284
834
|
zigbeeModel: ["Champion"],
|
|
@@ -1408,7 +958,7 @@ exports.definitions = [
|
|
|
1408
958
|
vendor: "Bosch",
|
|
1409
959
|
description: "Smart plug compact (type F plug)",
|
|
1410
960
|
extend: [
|
|
1411
|
-
bosch_1.boschGeneralExtend.
|
|
961
|
+
bosch_1.boschGeneralExtend.customMeteringCluster(),
|
|
1412
962
|
bosch_1.boschSmartPlugExtend.smartPlugCluster(),
|
|
1413
963
|
bosch_1.boschSmartPlugExtend.onOff(),
|
|
1414
964
|
bosch_1.boschGeneralExtend.autoOff(),
|
|
@@ -1428,7 +978,7 @@ exports.definitions = [
|
|
|
1428
978
|
description: "Smart plug compact [+M]",
|
|
1429
979
|
extend: [
|
|
1430
980
|
bosch_1.boschGeneralExtend.handleZclVersionReadRequest(),
|
|
1431
|
-
bosch_1.boschGeneralExtend.
|
|
981
|
+
bosch_1.boschGeneralExtend.customMeteringCluster(),
|
|
1432
982
|
bosch_1.boschSmartPlugExtend.smartPlugCluster(),
|
|
1433
983
|
bosch_1.boschSmartPlugExtend.onOff(),
|
|
1434
984
|
bosch_1.boschGeneralExtend.autoOff(),
|
|
@@ -1448,7 +998,7 @@ exports.definitions = [
|
|
|
1448
998
|
bosch_1.boschDoorWindowContactExtend.reportContactState(),
|
|
1449
999
|
bosch_1.boschDoorWindowContactExtend.reportButtonActions(),
|
|
1450
1000
|
bosch_1.boschDoorWindowContactExtend.breakFunctionality(),
|
|
1451
|
-
bosch_1.
|
|
1001
|
+
bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
|
|
1452
1002
|
],
|
|
1453
1003
|
ota: true,
|
|
1454
1004
|
},
|
|
@@ -1463,7 +1013,7 @@ exports.definitions = [
|
|
|
1463
1013
|
bosch_1.boschDoorWindowContactExtend.reportButtonActions(),
|
|
1464
1014
|
bosch_1.boschDoorWindowContactExtend.vibrationDetection(),
|
|
1465
1015
|
bosch_1.boschDoorWindowContactExtend.breakFunctionality(),
|
|
1466
|
-
bosch_1.
|
|
1016
|
+
bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
|
|
1467
1017
|
],
|
|
1468
1018
|
},
|
|
1469
1019
|
{
|
|
@@ -1476,7 +1026,7 @@ exports.definitions = [
|
|
|
1476
1026
|
bosch_1.boschDoorWindowContactExtend.reportContactState(),
|
|
1477
1027
|
bosch_1.boschDoorWindowContactExtend.reportButtonActions({ doublePressSupported: true }),
|
|
1478
1028
|
bosch_1.boschDoorWindowContactExtend.breakFunctionality(),
|
|
1479
|
-
bosch_1.
|
|
1029
|
+
bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
|
|
1480
1030
|
],
|
|
1481
1031
|
},
|
|
1482
1032
|
{
|
|
@@ -1648,7 +1198,7 @@ exports.definitions = [
|
|
|
1648
1198
|
}),
|
|
1649
1199
|
bosch_1.boschGeneralExtend.handleZclVersionReadRequest(),
|
|
1650
1200
|
bosch_1.boschBmctExtend.slzExtends(),
|
|
1651
|
-
bosch_1.boschGeneralExtend.
|
|
1201
|
+
bosch_1.boschGeneralExtend.customMeteringCluster(),
|
|
1652
1202
|
bosch_1.boschGeneralExtend.resetEnergyMeters(),
|
|
1653
1203
|
],
|
|
1654
1204
|
ota: true,
|