zigbee-herdsman-converters 25.45.0 → 25.47.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 (69) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/devices/bosch.d.ts.map +1 -1
  3. package/dist/devices/bosch.js +82 -563
  4. package/dist/devices/bosch.js.map +1 -1
  5. package/dist/devices/box.d.ts.map +1 -1
  6. package/dist/devices/box.js +5 -4
  7. package/dist/devices/box.js.map +1 -1
  8. package/dist/devices/develco.js +2 -2
  9. package/dist/devices/develco.js.map +1 -1
  10. package/dist/devices/elko.js +4 -4
  11. package/dist/devices/elko.js.map +1 -1
  12. package/dist/devices/evn.d.ts.map +1 -1
  13. package/dist/devices/evn.js +7 -0
  14. package/dist/devices/evn.js.map +1 -1
  15. package/dist/devices/gewiss.js +4 -4
  16. package/dist/devices/gewiss.js.map +1 -1
  17. package/dist/devices/ikea.d.ts.map +1 -1
  18. package/dist/devices/ikea.js +14 -0
  19. package/dist/devices/ikea.js.map +1 -1
  20. package/dist/devices/innr.d.ts.map +1 -1
  21. package/dist/devices/innr.js +15 -1
  22. package/dist/devices/innr.js.map +1 -1
  23. package/dist/devices/lumi.d.ts.map +1 -1
  24. package/dist/devices/lumi.js +11 -6
  25. package/dist/devices/lumi.js.map +1 -1
  26. package/dist/devices/moes.js +4 -4
  27. package/dist/devices/moes.js.map +1 -1
  28. package/dist/devices/nordtronic.d.ts.map +1 -1
  29. package/dist/devices/nordtronic.js +7 -1
  30. package/dist/devices/nordtronic.js.map +1 -1
  31. package/dist/devices/paulmann.d.ts.map +1 -1
  32. package/dist/devices/paulmann.js +10 -3
  33. package/dist/devices/paulmann.js.map +1 -1
  34. package/dist/devices/philips.d.ts.map +1 -1
  35. package/dist/devices/philips.js +6 -9
  36. package/dist/devices/philips.js.map +1 -1
  37. package/dist/devices/schneider_electric.js +1 -1
  38. package/dist/devices/schneider_electric.js.map +1 -1
  39. package/dist/devices/sengled.js +1 -1
  40. package/dist/devices/sengled.js.map +1 -1
  41. package/dist/devices/sonoff.d.ts.map +1 -1
  42. package/dist/devices/sonoff.js +9 -0
  43. package/dist/devices/sonoff.js.map +1 -1
  44. package/dist/devices/third_reality.d.ts.map +1 -1
  45. package/dist/devices/third_reality.js +22 -0
  46. package/dist/devices/third_reality.js.map +1 -1
  47. package/dist/devices/tuya.d.ts.map +1 -1
  48. package/dist/devices/tuya.js +82 -18
  49. package/dist/devices/tuya.js.map +1 -1
  50. package/dist/devices/wirenboard.js +1 -1
  51. package/dist/devices/wirenboard.js.map +1 -1
  52. package/dist/lib/bosch.d.ts +134 -12
  53. package/dist/lib/bosch.d.ts.map +1 -1
  54. package/dist/lib/bosch.js +983 -69
  55. package/dist/lib/bosch.js.map +1 -1
  56. package/dist/lib/exposes.d.ts +0 -1
  57. package/dist/lib/exposes.d.ts.map +1 -1
  58. package/dist/lib/exposes.js +4 -8
  59. package/dist/lib/exposes.js.map +1 -1
  60. package/dist/lib/generateDefinition.js +2 -2
  61. package/dist/lib/generateDefinition.js.map +1 -1
  62. package/dist/lib/modernExtend.d.ts +28 -10
  63. package/dist/lib/modernExtend.d.ts.map +1 -1
  64. package/dist/lib/modernExtend.js +71 -24
  65. package/dist/lib/modernExtend.js.map +1 -1
  66. package/dist/lib/utils.js +3 -3
  67. package/dist/lib/utils.js.map +1 -1
  68. package/dist/models-index.json +1 -1
  69. package/package.json +1 -1
@@ -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,56 +601,28 @@ 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
  },
862
610
  {
863
611
  zigbeeModel: ["RBSH-WS-ZB-EU"],
864
- model: "BWA-1",
612
+ model: "BSEN-W",
865
613
  vendor: "Bosch",
866
- description: "Smart water alarm",
614
+ description: "Water alarm (formerly known as BWA-1)",
867
615
  extend: [
868
- m.deviceAddCustomCluster("boschSpecific", {
869
- ID: 0xfcac,
870
- manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.ROBERT_BOSCH_GMBH,
871
- attributes: {
872
- alarmOnMotion: {
873
- ID: 0x0003,
874
- type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN,
875
- },
876
- },
877
- commands: {},
878
- commandsResponse: {},
879
- }),
880
- m.iasZoneAlarm({
881
- zoneType: "water_leak",
882
- zoneAttributes: ["alarm_1", "tamper"],
883
- }),
884
- m.battery({
885
- percentage: true,
886
- lowStatus: true,
887
- }),
888
- m.binary({
889
- name: "alarm_on_motion",
890
- cluster: "boschSpecific",
891
- attribute: "alarmOnMotion",
892
- description: "Toggle audible alarm on motion",
893
- valueOn: ["ON", 0x01],
894
- valueOff: ["OFF", 0x00],
895
- zigbeeCommandOptions: bosch_1.manufacturerOptions,
896
- entityCategory: "config",
897
- }),
898
- m.bindCluster({
899
- cluster: "genPollCtrl",
900
- clusterType: "input",
901
- }),
616
+ bosch_1.boschGeneralSensorDeviceExtend.customIasZoneCluster(),
617
+ bosch_1.boschWaterAlarmExtend.changedSensitivityLevel(),
618
+ bosch_1.boschWaterAlarmExtend.waterAlarmCluster(),
619
+ bosch_1.boschGeneralExtend.handleRenamedCustomCluster("boschSpecific", "boschWaterAlarm"),
620
+ bosch_1.boschWaterAlarmExtend.waterAndTamperAlarm(),
621
+ bosch_1.boschWaterAlarmExtend.muteAlarmControl(),
622
+ bosch_1.boschWaterAlarmExtend.alarmOnMotion(),
623
+ bosch_1.boschWaterAlarmExtend.testMode(),
624
+ bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
902
625
  ],
903
- configure: async (device, coordinatorEndpoint) => {
904
- const endpoint = device.getEndpoint(1);
905
- await endpoint.read("genPowerCfg", ["batteryPercentageRemaining"]);
906
- await endpoint.read("ssIasZone", ["zoneStatus"]);
907
- await endpoint.read("boschSpecific", ["alarmOnMotion"], bosch_1.manufacturerOptions);
908
- },
909
626
  ota: true,
910
627
  },
911
628
  {
@@ -1006,279 +723,81 @@ exports.definitions = [
1006
723
  model: "BTH-RA",
1007
724
  vendor: "Bosch",
1008
725
  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
726
  extend: [
1047
- boschExtend.hvacThermostatCluster(),
1048
- boschExtend.hvacUserInterfaceCfgCluster(),
1049
- m.battery({
1050
- percentage: true,
1051
- lowStatus: false,
1052
- }),
1053
- boschExtend.operatingMode(),
1054
- boschExtend.windowDetection(),
1055
- boschExtend.boostHeating(),
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",
1118
- }),
727
+ bosch_1.boschThermostatExtend.customThermostatCluster(),
728
+ bosch_1.boschThermostatExtend.customUserInterfaceCfgCluster(),
729
+ bosch_1.boschThermostatExtend.raThermostat(),
730
+ bosch_1.boschThermostatExtend.setpointChangeSource({ enableReporting: true }),
731
+ bosch_1.boschThermostatExtend.operatingMode({ enableReporting: true }),
732
+ bosch_1.boschThermostatExtend.windowOpenMode({ enableReporting: true }),
733
+ bosch_1.boschThermostatExtend.boostHeating({ enableReporting: true }),
734
+ bosch_1.boschThermostatExtend.remoteTemperature(),
735
+ bosch_1.boschThermostatExtend.childLock(),
736
+ bosch_1.boschThermostatExtend.displayBrightness(),
737
+ bosch_1.boschThermostatExtend.displaySwitchOnDuration(),
738
+ bosch_1.boschThermostatExtend.displayOrientation(),
739
+ bosch_1.boschThermostatExtend.displayedTemperature(),
740
+ bosch_1.boschThermostatExtend.valveAdaptation(),
741
+ bosch_1.boschThermostatExtend.errorState({ enableReporting: true }),
742
+ bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
1119
743
  ],
1120
744
  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
745
  },
1146
746
  {
1147
747
  zigbeeModel: ["RBSH-RTH0-BAT-ZB-EU"],
1148
748
  model: "BTH-RM",
1149
749
  vendor: "Bosch",
1150
- description: "Room thermostat II (Battery model)",
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
- ],
750
+ description: "Room thermostat II",
1173
751
  extend: [
1174
- boschExtend.hvacThermostatCluster(),
1175
- boschExtend.hvacUserInterfaceCfgCluster(),
1176
- m.battery({
1177
- voltageToPercentage: { min: 4400, max: 6400 },
1178
- percentage: true,
1179
- voltage: true,
1180
- lowStatus: false,
1181
- voltageReporting: true,
1182
- percentageReporting: false,
1183
- }),
1184
- m.humidity(),
1185
- boschExtend.operatingMode(),
1186
- boschExtend.windowDetection(),
1187
- boschExtend.boostHeating(),
1188
- boschExtend.childLock(),
1189
- boschExtend.displayOntime(),
1190
- boschExtend.displayBrightness(),
1191
- m.bindCluster({
1192
- cluster: "genPollCtrl",
1193
- clusterType: "input",
1194
- }),
752
+ bosch_1.boschGeneralExtend.handleZclVersionReadRequest(),
753
+ bosch_1.boschThermostatExtend.customThermostatCluster(),
754
+ bosch_1.boschThermostatExtend.customUserInterfaceCfgCluster(),
755
+ bosch_1.boschThermostatExtend.customSystemMode(),
756
+ bosch_1.boschThermostatExtend.operatingMode(),
757
+ bosch_1.boschThermostatExtend.rmThermostat(),
758
+ bosch_1.boschThermostatExtend.setpointChangeSource(),
759
+ bosch_1.boschThermostatExtend.humidity(),
760
+ bosch_1.boschThermostatExtend.cableSensorMode(),
761
+ bosch_1.boschThermostatExtend.cableSensorTemperature(),
762
+ bosch_1.boschThermostatExtend.windowOpenMode(),
763
+ bosch_1.boschThermostatExtend.boostHeating(),
764
+ bosch_1.boschThermostatExtend.childLock(),
765
+ bosch_1.boschThermostatExtend.displayBrightness(),
766
+ bosch_1.boschThermostatExtend.displaySwitchOnDuration(),
767
+ bosch_1.boschThermostatExtend.activityLedState(),
768
+ bosch_1.boschThermostatExtend.errorState(),
769
+ bosch_1.boschThermostatExtend.rmBattery(),
1195
770
  ],
1196
771
  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
772
  },
1221
773
  {
1222
774
  zigbeeModel: ["RBSH-RTH0-ZB-EU"],
1223
775
  model: "BTH-RM230Z",
1224
776
  vendor: "Bosch",
1225
777
  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
778
  extend: [
1249
- boschExtend.hvacThermostatCluster(),
1250
- boschExtend.hvacUserInterfaceCfgCluster(),
1251
- m.humidity(),
1252
- boschExtend.operatingMode(),
1253
- boschExtend.windowDetection(),
1254
- boschExtend.boostHeating(),
1255
- boschExtend.childLock(),
1256
- boschExtend.displayOntime(),
1257
- boschExtend.displayBrightness(),
779
+ bosch_1.boschGeneralExtend.handleZclVersionReadRequest(),
780
+ bosch_1.boschThermostatExtend.customThermostatCluster(),
781
+ bosch_1.boschThermostatExtend.customUserInterfaceCfgCluster(),
782
+ bosch_1.boschThermostatExtend.relayState(),
783
+ bosch_1.boschThermostatExtend.customSystemMode(),
784
+ bosch_1.boschThermostatExtend.operatingMode(),
785
+ bosch_1.boschThermostatExtend.rmThermostat(),
786
+ bosch_1.boschThermostatExtend.setpointChangeSource(),
787
+ bosch_1.boschThermostatExtend.humidity(),
788
+ bosch_1.boschThermostatExtend.heaterType(),
789
+ bosch_1.boschThermostatExtend.valveType(),
790
+ bosch_1.boschThermostatExtend.cableSensorMode(),
791
+ bosch_1.boschThermostatExtend.cableSensorTemperature(),
792
+ bosch_1.boschThermostatExtend.windowOpenMode(),
793
+ bosch_1.boschThermostatExtend.boostHeating(),
794
+ bosch_1.boschThermostatExtend.childLock(),
795
+ bosch_1.boschThermostatExtend.displayBrightness(),
796
+ bosch_1.boschThermostatExtend.displaySwitchOnDuration(),
797
+ bosch_1.boschThermostatExtend.activityLedState(),
798
+ bosch_1.boschThermostatExtend.errorState(),
1258
799
  ],
1259
800
  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
801
  },
1283
802
  {
1284
803
  zigbeeModel: ["Champion"],
@@ -1392,7 +911,7 @@ exports.definitions = [
1392
911
  vendor: "Bosch",
1393
912
  description: "Motion detector",
1394
913
  extend: [
1395
- bosch_1.boschBsenExtend.customIasZoneCluster(),
914
+ bosch_1.boschGeneralSensorDeviceExtend.customIasZoneCluster(),
1396
915
  bosch_1.boschBsenExtend.changedCheckinInterval(),
1397
916
  bosch_1.boschBsenExtend.tamperAndOccupancyAlarm(),
1398
917
  bosch_1.boschBsenExtend.battery(),
@@ -1408,13 +927,13 @@ exports.definitions = [
1408
927
  vendor: "Bosch",
1409
928
  description: "Smart plug compact (type F plug)",
1410
929
  extend: [
1411
- bosch_1.boschGeneralExtend.customSeMeteringCluster(),
930
+ bosch_1.boschGeneralEnergyDeviceExtend.customMeteringCluster(),
1412
931
  bosch_1.boschSmartPlugExtend.smartPlugCluster(),
1413
932
  bosch_1.boschGeneralExtend.handleRenamedCustomCluster("boschSpecific", "boschEnergyDevice"),
1414
933
  bosch_1.boschSmartPlugExtend.onOff(),
1415
- bosch_1.boschGeneralExtend.autoOff(),
934
+ bosch_1.boschGeneralEnergyDeviceExtend.autoOff(),
1416
935
  bosch_1.boschSmartPlugExtend.electricityMeter(),
1417
- bosch_1.boschGeneralExtend.resetEnergyMeters(),
936
+ bosch_1.boschGeneralEnergyDeviceExtend.resetEnergyMeters(),
1418
937
  ],
1419
938
  ota: true,
1420
939
  whiteLabel: [
@@ -1429,14 +948,14 @@ exports.definitions = [
1429
948
  description: "Smart plug compact [+M]",
1430
949
  extend: [
1431
950
  bosch_1.boschGeneralExtend.handleZclVersionReadRequest(),
1432
- bosch_1.boschGeneralExtend.customSeMeteringCluster(),
951
+ bosch_1.boschGeneralEnergyDeviceExtend.customMeteringCluster(),
1433
952
  bosch_1.boschSmartPlugExtend.smartPlugCluster(),
1434
953
  bosch_1.boschSmartPlugExtend.onOff(),
1435
- bosch_1.boschGeneralExtend.autoOff(),
954
+ bosch_1.boschGeneralEnergyDeviceExtend.autoOff(),
1436
955
  bosch_1.boschSmartPlugExtend.ledBrightness(),
1437
956
  bosch_1.boschSmartPlugExtend.energySavingMode(),
1438
957
  bosch_1.boschSmartPlugExtend.electricityMeter({ producedEnergy: true }),
1439
- bosch_1.boschGeneralExtend.resetEnergyMeters(),
958
+ bosch_1.boschGeneralEnergyDeviceExtend.resetEnergyMeters(),
1440
959
  ],
1441
960
  },
1442
961
  {
@@ -1450,7 +969,7 @@ exports.definitions = [
1450
969
  bosch_1.boschDoorWindowContactExtend.reportContactState(),
1451
970
  bosch_1.boschDoorWindowContactExtend.reportButtonActions(),
1452
971
  bosch_1.boschDoorWindowContactExtend.breakFunctionality(),
1453
- bosch_1.boschDoorWindowContactExtend.battery(),
972
+ bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
1454
973
  ],
1455
974
  ota: true,
1456
975
  },
@@ -1466,7 +985,7 @@ exports.definitions = [
1466
985
  bosch_1.boschDoorWindowContactExtend.reportButtonActions(),
1467
986
  bosch_1.boschDoorWindowContactExtend.vibrationDetection(),
1468
987
  bosch_1.boschDoorWindowContactExtend.breakFunctionality(),
1469
- bosch_1.boschDoorWindowContactExtend.battery(),
988
+ bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
1470
989
  ],
1471
990
  },
1472
991
  {
@@ -1480,7 +999,7 @@ exports.definitions = [
1480
999
  bosch_1.boschDoorWindowContactExtend.reportContactState(),
1481
1000
  bosch_1.boschDoorWindowContactExtend.reportButtonActions({ doublePressSupported: true }),
1482
1001
  bosch_1.boschDoorWindowContactExtend.breakFunctionality(),
1483
- bosch_1.boschDoorWindowContactExtend.battery(),
1002
+ bosch_1.boschGeneralExtend.batteryWithPercentageAndLowStatus(),
1484
1003
  ],
1485
1004
  },
1486
1005
  {
@@ -1565,7 +1084,7 @@ exports.definitions = [
1565
1084
  switchTypeLookup: boschBmctRzSettings.switchTypes,
1566
1085
  }),
1567
1086
  bosch_1.boschBmctExtend.childLock(),
1568
- bosch_1.boschGeneralExtend.autoOff(),
1087
+ bosch_1.boschGeneralEnergyDeviceExtend.autoOff(),
1569
1088
  bosch_1.boschBmctExtend.pulseLength({
1570
1089
  updateDeviceMode: true,
1571
1090
  deviceModesLookup: boschBmctRzSettings.deviceModes,
@@ -1655,8 +1174,8 @@ exports.definitions = [
1655
1174
  bosch_1.boschGeneralExtend.handleRenamedCustomCluster("boschSpecific", "boschEnergyDevice"),
1656
1175
  bosch_1.boschGeneralExtend.handleZclVersionReadRequest(),
1657
1176
  bosch_1.boschBmctExtend.slzExtends(),
1658
- bosch_1.boschGeneralExtend.customSeMeteringCluster(),
1659
- bosch_1.boschGeneralExtend.resetEnergyMeters(),
1177
+ bosch_1.boschGeneralEnergyDeviceExtend.customMeteringCluster(),
1178
+ bosch_1.boschGeneralEnergyDeviceExtend.resetEnergyMeters(),
1660
1179
  ],
1661
1180
  ota: true,
1662
1181
  configure: async (device, coordinatorEndpoint) => {