zigbee-herdsman-converters 25.30.0 → 25.32.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 (36) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/converters/fromZigbee.d.ts.map +1 -1
  3. package/dist/converters/fromZigbee.js +4 -0
  4. package/dist/converters/fromZigbee.js.map +1 -1
  5. package/dist/converters/toZigbee.d.ts.map +1 -1
  6. package/dist/converters/toZigbee.js +5 -0
  7. package/dist/converters/toZigbee.js.map +1 -1
  8. package/dist/devices/inovelli.d.ts.map +1 -1
  9. package/dist/devices/inovelli.js +3 -2
  10. package/dist/devices/inovelli.js.map +1 -1
  11. package/dist/devices/philips.d.ts.map +1 -1
  12. package/dist/devices/philips.js +7 -0
  13. package/dist/devices/philips.js.map +1 -1
  14. package/dist/devices/schneider_electric.d.ts.map +1 -1
  15. package/dist/devices/schneider_electric.js +13 -0
  16. package/dist/devices/schneider_electric.js.map +1 -1
  17. package/dist/devices/shelly.d.ts.map +1 -1
  18. package/dist/devices/shelly.js +11 -0
  19. package/dist/devices/shelly.js.map +1 -1
  20. package/dist/devices/tuya.d.ts.map +1 -1
  21. package/dist/devices/tuya.js +5 -2
  22. package/dist/devices/tuya.js.map +1 -1
  23. package/dist/devices/ubisys.d.ts.map +1 -1
  24. package/dist/devices/ubisys.js +69 -80
  25. package/dist/devices/ubisys.js.map +1 -1
  26. package/dist/devices/yokis.d.ts.map +1 -1
  27. package/dist/devices/yokis.js +450 -49
  28. package/dist/devices/yokis.js.map +1 -1
  29. package/dist/devices/zemismart.d.ts.map +1 -1
  30. package/dist/devices/zemismart.js +24 -8
  31. package/dist/devices/zemismart.js.map +1 -1
  32. package/dist/devices/zigbeetlc.d.ts.map +1 -1
  33. package/dist/devices/zigbeetlc.js +10 -1
  34. package/dist/devices/zigbeetlc.js.map +1 -1
  35. package/dist/models-index.json +1 -1
  36. package/package.json +1 -1
@@ -36,6 +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 tz = __importStar(require("../converters/toZigbee"));
39
+ const constants_1 = require("../lib/constants");
39
40
  const exposes = __importStar(require("../lib/exposes"));
40
41
  const logger_1 = require("../lib/logger");
41
42
  const m = __importStar(require("../lib/modernExtend"));
@@ -66,6 +67,15 @@ const inputModeEnum = {
66
67
  relay: 0x03,
67
68
  fp_in: 0x04, // Fil pilote
68
69
  };
70
+ // pilotwireOrderEnun (manuSpecificYokisPilotWire)
71
+ const pilotwireOrderEnun = {
72
+ stop: 0x00,
73
+ frost_off: 0x01,
74
+ eco: 0x02,
75
+ confort_2: 0x03,
76
+ confort_1: 0x04,
77
+ confort: 0x05,
78
+ };
69
79
  const YokisClustersDefinition = {
70
80
  manuSpecificYokisDevice: {
71
81
  ID: 0xfc01,
@@ -472,7 +482,7 @@ const YokisClustersDefinition = {
472
482
  ID: 0x00,
473
483
  parameters: [
474
484
  // Order to be set: 0x00 -> Stop, 0x01 -> Frost-off, 0x02 -> Eco, 0x03 -> Confort-2, 0x04 -> Confort-1, 0x05 -> Confort
475
- { name: "uc_Order", type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
485
+ { name: "order", type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
476
486
  ],
477
487
  },
478
488
  // Toggle between order by respecting the scrolling order.
@@ -820,6 +830,19 @@ const yokisExtendChecks = {
820
830
  },
821
831
  };
822
832
  },
833
+ parsePilotwireOrder: (input) => {
834
+ if (!input) {
835
+ throw new Error("MISSING_INPUT");
836
+ }
837
+ if (!Object.keys(pilotwireOrderEnun).includes(input)) {
838
+ throw new Error("INVALID_ORDER_ACTION");
839
+ }
840
+ return {
841
+ payload: {
842
+ order: utils.getFromLookup(input, pilotwireOrderEnun),
843
+ },
844
+ };
845
+ },
823
846
  log: (key, value, payload) => {
824
847
  logger_1.logger.debug(`Invoked converter with key: '${key}'`, NS);
825
848
  logger_1.logger.debug(`Invoked converter with values:${JSON.stringify(value)}`, NS);
@@ -1293,6 +1316,50 @@ const yokisCommandsExtend = {
1293
1316
  isModernExtend: true,
1294
1317
  };
1295
1318
  },
1319
+ // biome-ignore lint/style/useNamingConvention: The current naming convention is currently matching the Yokis documentation
1320
+ pilotwire_setOrder: () => {
1321
+ const exposes = e
1322
+ .enum("pilotwire_set_order", ea.SET, Object.keys(pilotwireOrderEnun))
1323
+ .withDescription("Set the device in the specified order.")
1324
+ .withCategory("config");
1325
+ const toZigbee = [
1326
+ {
1327
+ key: ["pilotwire_set_order"],
1328
+ convertSet: async (entity, key, value, meta) => {
1329
+ utils.assertString(value);
1330
+ const commandWrapper = yokisExtendChecks.parsePilotwireOrder(value);
1331
+ yokisExtendChecks.log(key, value, commandWrapper.payload);
1332
+ await entity.command("manuSpecificYokisPilotWire", "setOrder", commandWrapper.payload);
1333
+ },
1334
+ },
1335
+ ];
1336
+ return {
1337
+ exposes: [exposes],
1338
+ toZigbee,
1339
+ isModernExtend: true,
1340
+ };
1341
+ },
1342
+ // biome-ignore lint/style/useNamingConvention: The current naming convention is currently matching the Yokis documentation
1343
+ pilotwire_toggleOrder: () => {
1344
+ const exposes = e
1345
+ .enum("pilotwire_toggle_order", ea.SET, ["pilotwire_toggle_order"])
1346
+ .withDescription("Toggle between order by respecting the scrolling order")
1347
+ .withCategory("config");
1348
+ const toZigbee = [
1349
+ {
1350
+ key: ["pilotwire_toggle_order"],
1351
+ convertSet: async (entity, key, value, meta) => {
1352
+ yokisExtendChecks.log(key, value);
1353
+ await entity.command("manuSpecificYokisPilotWire", "toggleOrder", {});
1354
+ },
1355
+ },
1356
+ ];
1357
+ return {
1358
+ exposes: [exposes],
1359
+ toZigbee,
1360
+ isModernExtend: true,
1361
+ };
1362
+ },
1296
1363
  };
1297
1364
  // Yokis specific definition
1298
1365
  // Yokis does not support the timer OnOff cluster. It uses a custom cluster instead.
@@ -1339,12 +1406,7 @@ const YokisInputExtend = [
1339
1406
  lookup: inputModeEnum,
1340
1407
  cluster: "manuSpecificYokisInput",
1341
1408
  attribute: "inputMode",
1342
- description: `Indicate how the input should be handle:
1343
- - 0 -> Unknown
1344
- - 1 -> Push button
1345
- - 2 -> Switch
1346
- - 3 -> Relay
1347
- - 4 -> FP_IN`,
1409
+ description: "Indicate how the input should be handled",
1348
1410
  entityCategory: "config",
1349
1411
  }),
1350
1412
  // InputMode
@@ -1353,9 +1415,7 @@ const YokisInputExtend = [
1353
1415
  lookup: { nc: 0x00, no: 0x01 },
1354
1416
  cluster: "manuSpecificYokisInput",
1355
1417
  attribute: "contactMode",
1356
- description: `Indicate the contact nature of the entry:
1357
- - 0 -> NC
1358
- - 1 -> NO`,
1418
+ description: "Indicate the contact nature of the entry",
1359
1419
  entityCategory: "config",
1360
1420
  }),
1361
1421
  // LastLocalCommandState
@@ -1610,10 +1670,7 @@ const yokisLightControlExtend = [
1610
1670
  lookup: { timer: 0x00, staircase: 0x01, pulse: 0x02 },
1611
1671
  cluster: "manuSpecificYokisLightControl",
1612
1672
  attribute: "operatingMode",
1613
- description: `Indicates the operating mode:
1614
- - 0x00 -> Timer
1615
- - 0x01 -> Staircase
1616
- - 0x02 -> Pulse`,
1673
+ description: "Indicates the operating mode",
1617
1674
  entityCategory: "config",
1618
1675
  }),
1619
1676
  // stopAnnounce
@@ -1713,11 +1770,7 @@ const yokisLightControlExtend = [
1713
1770
  lookup: stateAfterBlinkEnum,
1714
1771
  cluster: "manuSpecificYokisLightControl",
1715
1772
  attribute: "stateAfterBlink",
1716
- description: `Indicate which state must be apply after a blink sequence:
1717
- - 0x00 -> State before blinking
1718
- - 0x01 -> OFF
1719
- - 0x02 -> ON
1720
- - 0x03 -> Infinite blinking`,
1773
+ description: "Indicate which state must be apply after a blink sequence",
1721
1774
  entityCategory: "config",
1722
1775
  }),
1723
1776
  // eNcCommand
@@ -2113,14 +2166,261 @@ When a cluster is specified, the channel will only “control” the device bind
2113
2166
  }),
2114
2167
  ];
2115
2168
  */
2169
+ // biome-ignore lint/correctness/noUnusedVariables: Placeholder for potential futur implementation
2116
2170
  const YokisLoadManagerExtend = [
2117
- // TODO : Placeholder - pending documentation
2171
+ // Not implemented (probably never will)
2118
2172
  ];
2119
2173
  const YokisPilotWireExtend = [
2120
- // TODO : Placeholder - pending documentation
2174
+ // Actual Order
2175
+ m.enumLookup({
2176
+ name: "actual_order",
2177
+ lookup: {
2178
+ stop: 0x00,
2179
+ frost_off: 0x01,
2180
+ eco: 0x02,
2181
+ confort_2: 0x03,
2182
+ confort_1: 0x04,
2183
+ confort: 0x05,
2184
+ shortcut_error: 0x06,
2185
+ temperature_error: 0x07,
2186
+ },
2187
+ cluster: "manuSpecificYokisPilotWire",
2188
+ attribute: "actualOrder",
2189
+ description: "Represent the actual order used by the device",
2190
+ access: "STATE_GET",
2191
+ reporting: { min: constants_1.repInterval.MINUTE, max: constants_1.repInterval.HOUR, change: 1 },
2192
+ entityCategory: "diagnostic",
2193
+ }),
2194
+ // Order timer
2195
+ m.numeric({
2196
+ name: "order_timer",
2197
+ cluster: "manuSpecificYokisPilotWire",
2198
+ attribute: "orderTimer",
2199
+ description: "Define the “Order” embedded timer duration. This timer is set when the device changes its order (in second). After that duration, the device is set back to its fallback order.",
2200
+ valueMin: 0x00000000,
2201
+ valueMax: 0xffffffff,
2202
+ valueStep: 1,
2203
+ // reporting: {min: repInterval.SECONDS_5, max: repInterval.MINUTES_15, change: 1}, // we probably dont need to do a reporting for configuration attribute
2204
+ entityCategory: "config",
2205
+ }),
2206
+ // Pre-Order timer
2207
+ m.numeric({
2208
+ name: "pre_order_timer",
2209
+ cluster: "manuSpecificYokisPilotWire",
2210
+ attribute: "preOrderTimer",
2211
+ description: "Define the duration before an order is set. This timer is used when a new order is asked, it corresponds to the time before this order is applied. The duration is set in second.",
2212
+ valueMin: 0x00000000,
2213
+ valueMax: 0xffffffff,
2214
+ valueStep: 1,
2215
+ // reporting: {min: repInterval.SECONDS_5, max: repInterval.MINUTES_15, change: 1}, // we probably dont need to do a reporting for configuration attribute
2216
+ entityCategory: "config",
2217
+ }),
2218
+ // Timer unit
2219
+ m.enumLookup({
2220
+ name: "timer_unit",
2221
+ lookup: {
2222
+ second: 0x00,
2223
+ minutes: 0x01,
2224
+ },
2225
+ cluster: "manuSpecificYokisPilotWire",
2226
+ attribute: "timerUnit",
2227
+ description: "Represent the actual unit used for local command configuration",
2228
+ // reporting: {min: repInterval.MINUTE, max: repInterval.HOUR, change: 1}, // we probably dont need to do a reporting for configuration attribute
2229
+ entityCategory: "config",
2230
+ }),
2231
+ // Led mode
2232
+ m.enumLookup({
2233
+ name: "led_mode",
2234
+ lookup: {
2235
+ led_on: 0x00,
2236
+ led_off: 0x01,
2237
+ },
2238
+ cluster: "manuSpecificYokisPilotWire",
2239
+ attribute: "ledMode",
2240
+ description: `Define the product’s LED behavior:
2241
+ - 0x00 -> LED is always ON and blink during radio activity (default)
2242
+ - 0x01 -> LED is only OFF during few seconds after a mode transition`,
2243
+ // reporting: {min: repInterval.MINUTE, max: repInterval.HOUR, change: 1}, // we probably dont need to do a reporting for configuration attribute
2244
+ entityCategory: "config",
2245
+ }),
2246
+ // Pilot-wire relay mode
2247
+ m.enumLookup({
2248
+ name: "pilot_wire_relay_mode",
2249
+ lookup: {
2250
+ relay_on: 0x00,
2251
+ relay_off: 0x01,
2252
+ },
2253
+ cluster: "manuSpecificYokisPilotWire",
2254
+ attribute: "pilotWireRelayMode",
2255
+ description: `Define if the product must be set into pilot wire relay mode:
2256
+ - 0x00 -> Relay mode is deactivated (default)
2257
+ - 0x01 -> Relay mode is activated`,
2258
+ // reporting: {min: repInterval.MINUTE, max: repInterval.HOUR, change: 1}, // we probably dont need to do a reporting for configuration attribute
2259
+ entityCategory: "config",
2260
+ }),
2261
+ // Order scrolling mode
2262
+ m.enumLookup({
2263
+ name: "order_scrolling_mode",
2264
+ lookup: {
2265
+ forward: 0x00,
2266
+ backward: 0x01,
2267
+ },
2268
+ cluster: "manuSpecificYokisPilotWire",
2269
+ attribute: "orderScrollingMode",
2270
+ description: `Define the order scrolling sense:
2271
+ - 0x00 -> Forward : Confort -> Confort – 1 -> Confort – 2 -> Eco -> Hors-Gel -> Arrêt (default)
2272
+ - 0x01 -> Backward : Arrêt -> Hors-Gel -> Eco -> Confort – 2 -> Confort – 1 -> Confort`,
2273
+ // reporting: {min: repInterval.MINUTE, max: repInterval.HOUR, change: 1}, // we probably dont need to do a reporting for configuration attribute
2274
+ entityCategory: "config",
2275
+ }),
2276
+ // Order number supported
2277
+ m.enumLookup({
2278
+ name: "order_number_supported",
2279
+ lookup: {
2280
+ four_orders: 0x00,
2281
+ six_orders: 0x01,
2282
+ },
2283
+ cluster: "manuSpecificYokisPilotWire",
2284
+ attribute: "orderNumberSupported",
2285
+ description: `Define the number of orders supported by the device:
2286
+ - 0x00 -> 4 orders (Confort, Eco, Hors-Gel, Arrêt)
2287
+ - 0x01 -> 6 orders (Confort, Confort – 1, Confort – 2, Eco, Hors-Gel, Arrêt) - (default)`,
2288
+ // reporting: {min: repInterval.MINUTE, max: repInterval.HOUR, change: 1}, // we probably dont need to do a reporting for configuration attribute
2289
+ entityCategory: "config",
2290
+ }),
2291
+ // Fallback Order
2292
+ m.enumLookup({
2293
+ name: "fallback_order",
2294
+ lookup: pilotwireOrderEnun,
2295
+ cluster: "manuSpecificYokisPilotWire",
2296
+ attribute: "fallbackOrder",
2297
+ description: "Represent the fallback order used by the device after the end of an order timer is reached",
2298
+ // reporting: {min: repInterval.MINUTE, max: repInterval.HOUR, change: 1}, // we probably dont need to do a reporting for configuration attribute
2299
+ entityCategory: "config",
2300
+ }),
2301
+ yokisCommandsExtend.pilotwire_setOrder(),
2302
+ yokisCommandsExtend.pilotwire_toggleOrder(),
2121
2303
  ];
2304
+ // biome-ignore lint/correctness/noUnusedVariables: Placeholder for potential futur implementation
2122
2305
  const YokisStatsExtend = [
2123
- // TODO : Placeholder - pending documentation
2306
+ // Not implemented (probably never will)
2307
+ ];
2308
+ const YokisTemperatureMeasurementExtend = [
2309
+ // currentValue > this is probably redundant with msTemperatureMeasurement
2310
+ m.numeric({
2311
+ name: "current_value",
2312
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2313
+ attribute: "currentValue",
2314
+ description: "This attribute represents the last value measured.",
2315
+ access: "STATE_GET",
2316
+ entityCategory: "diagnostic",
2317
+ //endpointNames: ["9"],
2318
+ unit: "°C",
2319
+ valueMin: -50.0,
2320
+ valueMax: 120.0,
2321
+ valueStep: 0.01,
2322
+ scale: 100,
2323
+ // reporting: {min: "10_SECONDS", max: "1_HOUR", change: 100},
2324
+ }),
2325
+ m.numeric({
2326
+ name: "min_measured_value",
2327
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2328
+ attribute: "minMeasuredValue",
2329
+ description: "Represent the minimal value set since the last power-on/reset.",
2330
+ access: "STATE_GET",
2331
+ entityCategory: "diagnostic",
2332
+ //endpointNames: ["9"],
2333
+ unit: "°C",
2334
+ valueMin: -50.0,
2335
+ valueMax: 120.0,
2336
+ valueStep: 0.01,
2337
+ scale: 100,
2338
+ }),
2339
+ m.numeric({
2340
+ name: "max_measured_value",
2341
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2342
+ attribute: "maxMeasuredValue",
2343
+ description: "Represent the maximal value set since the last power-on/reset.",
2344
+ access: "STATE_GET",
2345
+ entityCategory: "diagnostic",
2346
+ //endpointNames: ["9"],
2347
+ unit: "°C",
2348
+ valueMin: -50.0,
2349
+ valueMax: 120.0,
2350
+ valueStep: 0.01,
2351
+ scale: 100,
2352
+ }),
2353
+ m.numeric({
2354
+ name: "offset",
2355
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2356
+ attribute: "offset",
2357
+ description: "Represent the offset applicated to the temperature measured.",
2358
+ entityCategory: "config",
2359
+ //endpointNames: ["9"],
2360
+ unit: "°C",
2361
+ valueMin: -50.0,
2362
+ valueMax: 50.0,
2363
+ valueStep: 0.1,
2364
+ scale: 10,
2365
+ }),
2366
+ m.numeric({
2367
+ name: "samplingPeriod",
2368
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2369
+ attribute: "samplingPeriod",
2370
+ description: "Represent the sampling period used to process the temperature measurement.",
2371
+ entityCategory: "config",
2372
+ //endpointNames: ["9"],
2373
+ unit: "s",
2374
+ valueMin: 1,
2375
+ valueMax: 120,
2376
+ valueStep: 1,
2377
+ }),
2378
+ m.numeric({
2379
+ name: "samplingNumber",
2380
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2381
+ attribute: "samplingNumber",
2382
+ description: "Represents the sampling number to sense per sampling period defined before.",
2383
+ entityCategory: "config",
2384
+ //endpointNames: ["9"],
2385
+ valueMin: 1,
2386
+ valueMax: 20,
2387
+ valueStep: 1,
2388
+ }),
2389
+ m.numeric({
2390
+ name: "deltaTemp",
2391
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2392
+ attribute: "deltaTemp",
2393
+ description: "Represents the temperature variation to request a new temperature sending through reports.",
2394
+ entityCategory: "config",
2395
+ //endpointNames: ["9"],
2396
+ unit: "°C",
2397
+ valueMin: 0,
2398
+ valueMax: 10,
2399
+ valueStep: 0.1,
2400
+ scale: 10,
2401
+ }),
2402
+ m.numeric({
2403
+ name: "minimalSendingPeriod",
2404
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2405
+ attribute: "minimalSendingPeriod",
2406
+ description: "Represents the minimal sending period that the device must respect before sending a new value through reporting.",
2407
+ entityCategory: "config",
2408
+ //endpointNames: ["9"],
2409
+ valueMin: 0,
2410
+ valueMax: 65535,
2411
+ valueStep: 1,
2412
+ }),
2413
+ m.numeric({
2414
+ name: "maximalSendingPeriod",
2415
+ cluster: "manuSpecificYokisTemperatureMeasurement",
2416
+ attribute: "maximalSendingPeriod",
2417
+ description: "Represents the maximal sending period. The device must send a new value through reporting before the end of this period.",
2418
+ entityCategory: "config",
2419
+ //endpointNames: ["9"],
2420
+ valueMin: 0,
2421
+ valueMax: 65535,
2422
+ valueStep: 1,
2423
+ }),
2124
2424
  ];
2125
2425
  // #endregion
2126
2426
  exports.definitions = [
@@ -2145,8 +2445,6 @@ exports.definitions = [
2145
2445
  ...YokisDeviceExtend,
2146
2446
  ...YokisInputExtend,
2147
2447
  ...YokisEntryExtend,
2148
- ...YokisLoadManagerExtend, // Pending implementation
2149
- ...YokisStatsExtend, // Pending implementation
2150
2448
  ],
2151
2449
  },
2152
2450
  {
@@ -2159,7 +2457,7 @@ exports.definitions = [
2159
2457
  {
2160
2458
  model: "MTR1300EB-UP",
2161
2459
  vendor: "YOKIS",
2162
- description: "Remote power switch with timer 1300W",
2460
+ description: "Remote power switch with timer 1300W with screw terminals",
2163
2461
  fingerprint: [{ modelID: "MTR1300EB-UP" }],
2164
2462
  },
2165
2463
  ],
@@ -2178,8 +2476,6 @@ exports.definitions = [
2178
2476
  ...YokisDeviceExtend,
2179
2477
  ...YokisInputExtend,
2180
2478
  ...YokisEntryExtend,
2181
- ...YokisLoadManagerExtend, // Pending implementation
2182
- ...YokisStatsExtend, // Pending implementation
2183
2479
  ],
2184
2480
  },
2185
2481
  {
@@ -2203,8 +2499,6 @@ exports.definitions = [
2203
2499
  ...YokisDeviceExtend,
2204
2500
  ...YokisInputExtend,
2205
2501
  ...YokisEntryExtend,
2206
- ...YokisLoadManagerExtend, // Pending implementation
2207
- ...YokisStatsExtend, // Pending implementation
2208
2502
  ],
2209
2503
  },
2210
2504
  {
@@ -2234,8 +2528,6 @@ exports.definitions = [
2234
2528
  ...YokisDeviceExtend,
2235
2529
  ...YokisInputExtend,
2236
2530
  ...YokisEntryExtend,
2237
- ...YokisLoadManagerExtend, // Pending implementation
2238
- ...YokisStatsExtend, // Pending implementation
2239
2531
  ],
2240
2532
  },
2241
2533
  {
@@ -2260,8 +2552,6 @@ exports.definitions = [
2260
2552
  ...YokisDeviceExtend,
2261
2553
  ...YokisInputExtend,
2262
2554
  ...YokisEntryExtend,
2263
- ...YokisLoadManagerExtend, // Pending implementation
2264
- ...YokisStatsExtend, // Pending implementation
2265
2555
  ],
2266
2556
  },
2267
2557
  {
@@ -2286,7 +2576,6 @@ exports.definitions = [
2286
2576
  // ...YokisDeviceExtend,
2287
2577
  // ...YokisInputExtend,
2288
2578
  // ...YokisChannelExtend,
2289
- ...YokisPilotWireExtend,
2290
2579
  ],
2291
2580
  },
2292
2581
  {
@@ -2311,7 +2600,6 @@ exports.definitions = [
2311
2600
  // ...YokisDeviceExtend,
2312
2601
  // ...YokisInputExtend,
2313
2602
  // ...YokisChannelExtend,
2314
- ...YokisPilotWireExtend,
2315
2603
  ],
2316
2604
  },
2317
2605
  {
@@ -2336,7 +2624,6 @@ exports.definitions = [
2336
2624
  // ...YokisDeviceExtend,
2337
2625
  // ...YokisInputExtend,
2338
2626
  // ...YokisChannelExtend,
2339
- ...YokisPilotWireExtend,
2340
2627
  ],
2341
2628
  },
2342
2629
  {
@@ -2361,7 +2648,6 @@ exports.definitions = [
2361
2648
  // ...YokisDeviceExtend,
2362
2649
  // ...YokisInputExtend,
2363
2650
  // ...YokisChannelExtend,
2364
- ...YokisPilotWireExtend,
2365
2651
  ],
2366
2652
  },
2367
2653
  {
@@ -2379,6 +2665,7 @@ exports.definitions = [
2379
2665
  m.deviceAddCustomCluster("manuSpecificYokisChannel", YokisClustersDefinition.manuSpecificYokisChannel),
2380
2666
  m.deviceAddCustomCluster("manuSpecificYokisPilotWire", YokisClustersDefinition.manuSpecificYokisPilotWire), // Pending implementation
2381
2667
  m.deviceAddCustomCluster("manuSpecificYokisTemperatureMeasurement", YokisClustersDefinition.manuSpecificYokisTemperatureMeasurement), // Pending implementation
2668
+ //m.deviceEndpoints({endpoints: {"1": 1, "9": 9}}),
2382
2669
  m.identify(),
2383
2670
  m.commandsOnOff(),
2384
2671
  m.commandsLevelCtrl(),
@@ -2386,7 +2673,15 @@ exports.definitions = [
2386
2673
  // ...YokisDeviceExtend,
2387
2674
  // ...YokisInputExtend,
2388
2675
  // ...YokisChannelExtend,
2389
- ...YokisPilotWireExtend,
2676
+ // ...YokisPilotWireExtend,
2677
+ m.temperature({ reporting: { min: "5_MINUTES", max: "1_HOUR", change: 10 } }), // Slow update to save some battery
2678
+ m.battery({
2679
+ percentage: false,
2680
+ lowStatus: true,
2681
+ percentageReporting: false,
2682
+ lowStatusReportingConfig: { min: "1_HOUR", max: "MAX", change: 10 },
2683
+ }), // Yokis only provides low level status
2684
+ ...YokisTemperatureMeasurementExtend,
2390
2685
  ],
2391
2686
  },
2392
2687
  {
@@ -2411,7 +2706,7 @@ exports.definitions = [
2411
2706
  // ...YokisDeviceExtend,
2412
2707
  // ...YokisInputExtend,
2413
2708
  // ...YokisChannelExtend,
2414
- ...YokisPilotWireExtend,
2709
+ // ...YokisPilotWireExtend,
2415
2710
  ],
2416
2711
  },
2417
2712
  {
@@ -2436,7 +2731,6 @@ exports.definitions = [
2436
2731
  // ...YokisDeviceExtend,
2437
2732
  // ...YokisInputExtend,
2438
2733
  // ...YokisChannelExtend,
2439
- ...YokisPilotWireExtend,
2440
2734
  ],
2441
2735
  },
2442
2736
  {
@@ -2461,15 +2755,34 @@ exports.definitions = [
2461
2755
  // ...YokisDeviceExtend,
2462
2756
  // ...YokisInputExtend,
2463
2757
  // ...YokisChannelExtend,
2464
- ...YokisPilotWireExtend,
2465
2758
  ],
2466
2759
  },
2467
2760
  {
2468
2761
  // TLM1-UP
2469
- zigbeeModel: ["TLM1-UP", "TLM503-UP"],
2762
+ zigbeeModel: ["TLM1-UP", "TLM1T503-UP", "TLM1TNO-UP", "TLM1TDK-UP"],
2470
2763
  model: "TLM1-UP",
2471
2764
  vendor: "YOKIS",
2472
2765
  description: "Wall-mounted 1-button transmitter",
2766
+ whiteLabel: [
2767
+ {
2768
+ model: "TLM1T503-UP",
2769
+ vendor: "YOKIS",
2770
+ description: "Wall-mounted 1-button transmitter (503 format)",
2771
+ fingerprint: [{ modelID: "TLM1T503-UP" }],
2772
+ },
2773
+ {
2774
+ model: "TLM1TNO-UP",
2775
+ vendor: "YOKIS",
2776
+ description: "Wall-mounted 1-button transmitter (NO format)",
2777
+ fingerprint: [{ modelID: "TLM1TNO-UP" }],
2778
+ },
2779
+ {
2780
+ model: "TLM1TDK-UP",
2781
+ vendor: "YOKIS",
2782
+ description: "Wall-mounted 1-button transmitter (DK format)",
2783
+ fingerprint: [{ modelID: "TLM1TDK-UP" }],
2784
+ },
2785
+ ],
2473
2786
  extend: [
2474
2787
  m.deviceAddCustomCluster("manuSpecificYokisDevice", YokisClustersDefinition.manuSpecificYokisDevice),
2475
2788
  m.deviceAddCustomCluster("manuSpecificYokisInput", YokisClustersDefinition.manuSpecificYokisInput),
@@ -2477,8 +2790,8 @@ exports.definitions = [
2477
2790
  m.deviceAddCustomCluster("manuSpecificYokisDimmer", YokisClustersDefinition.manuSpecificYokisDimmer),
2478
2791
  m.deviceAddCustomCluster("manuSpecificYokisWindowCovering", YokisClustersDefinition.manuSpecificYokisWindowCovering), // Pending implementation
2479
2792
  m.deviceAddCustomCluster("manuSpecificYokisChannel", YokisClustersDefinition.manuSpecificYokisChannel),
2480
- m.deviceAddCustomCluster("manuSpecificYokisPilotWire", YokisClustersDefinition.manuSpecificYokisPilotWire), // Pending implementation
2481
- m.deviceAddCustomCluster("manuSpecificYokisTemperatureMeasurement", YokisClustersDefinition.manuSpecificYokisTemperatureMeasurement), // Pending implementation
2793
+ m.deviceAddCustomCluster("manuSpecificYokisPilotWire", YokisClustersDefinition.manuSpecificYokisPilotWire),
2794
+ m.deviceAddCustomCluster("manuSpecificYokisTemperatureMeasurement", YokisClustersDefinition.manuSpecificYokisTemperatureMeasurement),
2482
2795
  m.identify(),
2483
2796
  m.commandsOnOff(),
2484
2797
  m.commandsLevelCtrl(),
@@ -2486,15 +2799,37 @@ exports.definitions = [
2486
2799
  // ...YokisDeviceExtend,
2487
2800
  // ...YokisInputExtend,
2488
2801
  // ...YokisChannelExtend,
2489
- ...YokisPilotWireExtend,
2802
+ // ...YokisPilotWireExtend,
2803
+ m.temperature({ reporting: { min: "5_MINUTES", max: "1_HOUR", change: 10 } }), // Slow update to save some battery
2804
+ m.battery({
2805
+ percentage: false,
2806
+ lowStatus: true,
2807
+ percentageReporting: false,
2808
+ lowStatusReportingConfig: { min: "1_HOUR", max: "MAX", change: 10 },
2809
+ }), // Yokis only provides low level status
2810
+ ...YokisTemperatureMeasurementExtend,
2490
2811
  ],
2491
2812
  },
2492
2813
  {
2493
2814
  // TLM2-UP
2494
- zigbeeModel: ["TLM2-UP", "TLM2_503-UP"],
2815
+ zigbeeModel: ["TLM2-UP", "TLM2T503-UP", "TLM2TNO-UP"],
2495
2816
  model: "TLM2-UP",
2496
2817
  vendor: "YOKIS",
2497
2818
  description: "Wall-mounted 2-button transmitter",
2819
+ whiteLabel: [
2820
+ {
2821
+ model: "TLM2T503-UP",
2822
+ vendor: "YOKIS",
2823
+ description: "Wall-mounted 2-button transmitter (503 format)",
2824
+ fingerprint: [{ modelID: "TLM2T503-UP" }],
2825
+ },
2826
+ {
2827
+ model: "TLM2TNO-UP",
2828
+ vendor: "YOKIS",
2829
+ description: "Wall-mounted 2-button transmitter (NO format)",
2830
+ fingerprint: [{ modelID: "TLM2TNO-UP" }],
2831
+ },
2832
+ ],
2498
2833
  extend: [
2499
2834
  m.deviceAddCustomCluster("manuSpecificYokisDevice", YokisClustersDefinition.manuSpecificYokisDevice),
2500
2835
  m.deviceAddCustomCluster("manuSpecificYokisInput", YokisClustersDefinition.manuSpecificYokisInput),
@@ -2512,15 +2847,43 @@ exports.definitions = [
2512
2847
  // ...YokisDeviceExtend,
2513
2848
  // ...YokisInputExtend,
2514
2849
  // ...YokisChannelExtend,
2515
- ...YokisPilotWireExtend,
2850
+ // ...YokisPilotWireExtend,
2851
+ m.temperature({ reporting: { min: "5_MINUTES", max: "1_HOUR", change: 10 } }), // Slow update to save some battery
2852
+ m.battery({
2853
+ percentage: false,
2854
+ lowStatus: true,
2855
+ percentageReporting: false,
2856
+ lowStatusReportingConfig: { min: "1_HOUR", max: "MAX", change: 10 },
2857
+ }), // Yokis only provides low level status
2858
+ ...YokisTemperatureMeasurementExtend,
2516
2859
  ],
2517
2860
  },
2518
2861
  {
2519
2862
  // TLM4-UP
2520
- zigbeeModel: ["TLM4-UP", "TLM4_503-UP"],
2863
+ zigbeeModel: ["TLM4-UP", "TLM4T503-UP", "TLM4TNO-UP", "TLM4TDK-UP"],
2521
2864
  model: "TLM4-UP",
2522
2865
  vendor: "YOKIS",
2523
2866
  description: "Wall-mounted 4-button transmitter",
2867
+ whiteLabel: [
2868
+ {
2869
+ model: "TLM4T503-UP",
2870
+ vendor: "YOKIS",
2871
+ description: "Wall-mounted 4-button transmitter (503 format)",
2872
+ fingerprint: [{ modelID: "TLM4T503-UP" }],
2873
+ },
2874
+ {
2875
+ model: "TLM4TNO-UP",
2876
+ vendor: "YOKIS",
2877
+ description: "Wall-mounted 4-button transmitter (NO format)",
2878
+ fingerprint: [{ modelID: "TLM4TNO-UP" }],
2879
+ },
2880
+ {
2881
+ model: "TLM4TDK-UP",
2882
+ vendor: "YOKIS",
2883
+ description: "Wall-mounted 4-button transmitter (DK format)",
2884
+ fingerprint: [{ modelID: "TLM4TDK-UP" }],
2885
+ },
2886
+ ],
2524
2887
  extend: [
2525
2888
  m.deviceAddCustomCluster("manuSpecificYokisDevice", YokisClustersDefinition.manuSpecificYokisDevice),
2526
2889
  m.deviceAddCustomCluster("manuSpecificYokisInput", YokisClustersDefinition.manuSpecificYokisInput),
@@ -2538,7 +2901,15 @@ exports.definitions = [
2538
2901
  // ...YokisDeviceExtend,
2539
2902
  // ...YokisInputExtend,
2540
2903
  // ...YokisChannelExtend,
2541
- ...YokisPilotWireExtend,
2904
+ // ...YokisPilotWireExtend,
2905
+ m.temperature({ reporting: { min: "5_MINUTES", max: "1_HOUR", change: 10 } }), // Slow update to save some battery
2906
+ m.battery({
2907
+ percentage: false,
2908
+ lowStatus: true,
2909
+ percentageReporting: false,
2910
+ lowStatusReportingConfig: { min: "1_HOUR", max: "MAX", change: 10 },
2911
+ }), // Yokis only provides low level status
2912
+ ...YokisTemperatureMeasurementExtend,
2542
2913
  ],
2543
2914
  },
2544
2915
  {
@@ -2564,7 +2935,37 @@ exports.definitions = [
2564
2935
  // ...YokisDeviceExtend,
2565
2936
  // ...YokisInputExtend,
2566
2937
  // ...YokisChannelExtend,
2938
+ // ...YokisPilotWireExtend,
2939
+ m.temperature({ reporting: { min: "5_MINUTES", max: "1_HOUR", change: 10 } }), // Slow update to save some battery
2940
+ m.battery({
2941
+ percentage: false,
2942
+ lowStatus: true,
2943
+ percentageReporting: false,
2944
+ lowStatusReportingConfig: { min: "1_HOUR", max: "MAX", change: 10 },
2945
+ }), // Yokis only provides low level status
2946
+ ...YokisTemperatureMeasurementExtend,
2947
+ ],
2948
+ },
2949
+ {
2950
+ // MFP-UP
2951
+ zigbeeModel: ["MFP-UP"],
2952
+ model: "MFP-UP",
2953
+ vendor: "YOKIS",
2954
+ description: "Remote module for pilot wire heating system",
2955
+ extend: [
2956
+ m.deviceAddCustomCluster("manuSpecificYokisDevice", YokisClustersDefinition.manuSpecificYokisDevice),
2957
+ m.deviceAddCustomCluster("manuSpecificYokisInput", YokisClustersDefinition.manuSpecificYokisInput),
2958
+ m.deviceAddCustomCluster("manuSpecificYokisEntryConfigurator", YokisClustersDefinition.manuSpecificYokisEntryConfigurator),
2959
+ m.deviceAddCustomCluster("manuSpecificYokisSubSystem", YokisClustersDefinition.manuSpecificYokisSubSystem),
2960
+ m.deviceAddCustomCluster("manuSpecificYokisPilotWire", YokisClustersDefinition.manuSpecificYokisPilotWire),
2961
+ m.deviceAddCustomCluster("manuSpecificYokisStats", YokisClustersDefinition.manuSpecificYokisStats), // Pending implementation
2962
+ m.identify(),
2963
+ m.electricityMeter({ voltage: false }),
2964
+ ...YokisSubSystemExtend,
2567
2965
  ...YokisPilotWireExtend,
2966
+ ...YokisDeviceExtend,
2967
+ // ...YokisInputExtend,
2968
+ // ...YokisEntryExtend,
2568
2969
  ],
2569
2970
  },
2570
2971
  ];