homebridge-easy-mqtt 1.4.0-beta.12 → 1.4.0-beta.14

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 (50) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/README.md +24 -0
  3. package/config.schema.json +271 -10
  4. package/dist/accessory/abstract/base.js +1 -1
  5. package/dist/accessory/abstract/base.js.map +1 -1
  6. package/dist/accessory/abstract/common.d.ts +13 -9
  7. package/dist/accessory/abstract/common.js +13 -14
  8. package/dist/accessory/abstract/common.js.map +1 -1
  9. package/dist/accessory/abstract/helper.d.ts +1 -0
  10. package/dist/accessory/abstract/helper.js +7 -0
  11. package/dist/accessory/abstract/helper.js.map +1 -1
  12. package/dist/accessory/abstract/mqtt.d.ts +11 -4
  13. package/dist/accessory/abstract/mqtt.js +25 -9
  14. package/dist/accessory/abstract/mqtt.js.map +1 -1
  15. package/dist/accessory/addons/addon.d.ts +19 -7
  16. package/dist/accessory/addons/addon.js +39 -12
  17. package/dist/accessory/addons/addon.js.map +1 -1
  18. package/dist/accessory/addons/filter.d.ts +6 -6
  19. package/dist/accessory/addons/filter.js +6 -5
  20. package/dist/accessory/addons/filter.js.map +1 -1
  21. package/dist/accessory/climate/fan.d.ts +20 -0
  22. package/dist/accessory/climate/fan.js +122 -0
  23. package/dist/accessory/climate/fan.js.map +1 -0
  24. package/dist/accessory/climate/heaterCooler.js +1 -1
  25. package/dist/accessory/climate/heaterCooler.js.map +1 -1
  26. package/dist/accessory/climate/purifier.js +1 -1
  27. package/dist/accessory/climate/purifier.js.map +1 -1
  28. package/dist/accessory/climate/thermostat.js +0 -2
  29. package/dist/accessory/climate/thermostat.js.map +1 -1
  30. package/dist/homebridge/platform.js +4 -2
  31. package/dist/homebridge/platform.js.map +1 -1
  32. package/dist/homebridge-ui/public/index.html +1 -1
  33. package/dist/homebridge-ui/public/ui.js +1 -1
  34. package/dist/i18n/en.d.ts +28 -0
  35. package/dist/i18n/en.js +28 -0
  36. package/dist/i18n/en.js.map +1 -1
  37. package/dist/i18n/fr.d.ts +28 -0
  38. package/dist/i18n/i18n.d.ts +28 -0
  39. package/dist/i18n/ro.d.ts +28 -0
  40. package/dist/i18n/template.d.ts +28 -0
  41. package/dist/model/enums.d.ts +4 -0
  42. package/dist/model/enums.js +4 -0
  43. package/dist/model/enums.js.map +1 -1
  44. package/dist/model/mqtt.js +21 -21
  45. package/dist/model/mqtt.js.map +1 -1
  46. package/dist/model/types.d.ts +17 -2
  47. package/dist/tools/properties.d.ts +11 -0
  48. package/dist/tools/properties.js +73 -0
  49. package/dist/tools/properties.js.map +1 -0
  50. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,16 +2,17 @@
2
2
 
3
3
  All notable changes to homebridge-dummy will be documented in this file.
4
4
 
5
- ## 1.4.0-beta.12 (2025-09-24)
5
+ ## 1.4.0-beta.14 (2025-09-25)
6
6
 
7
7
  ### Added
8
- - Support for Air Purifier, GarageDoorOpener, HeaterCooler, LightSensor, and Valve
9
- - FilterMaintenance to climate control accessories
8
+ - Support for Air Purifier, Fan (v2) GarageDoorOpener, HeaterCooler, LightSensor, and Valve
10
9
  - Broker, username, and password can be set via environment variables ([documentation](https://github.com/mpatfield/homebridge-easy-mqtt#environment-variables))
11
10
  - Publish arbitrary MQTT messages on connect ([documentation] (https://github.com/mpatfield/homebridge-easy-mqtt#mqtt-onconnect))
12
11
  - Traduceri în limba română. Mulțumesc, [@rursache](https://github.com/sponsors/rursache)!
13
12
 
14
13
  ### Changed
14
+ - ⚠️ All accessory states are now saved across plugin/Homebridge restarts
15
+ - If you want to keep the old behavior, select the `Reset on Restart` option for each accessory you want to reset
15
16
  - Optimized MQTT connections by sharing across multiple accessories when possible
16
17
  - Previously, every accessory had its own connection
17
18
  - Better field validation in config UI (Thank you, [@justjam2013](https://github.com/sponsors/justjam2013) for teaching me this!)
package/README.md CHANGED
@@ -29,6 +29,7 @@ This plugin is designed to be a simple replacement for the fantastic [homebridge
29
29
  - `CarbonDioxideSensor`
30
30
  - `CarbonMonoxideSensor`
31
31
  - `ContactSensor`
32
+ - `Fanv2`
32
33
  - `GarageDoorOpener`
33
34
  - `HeaterCooler`
34
35
  - `HumiditySensor`
@@ -87,6 +88,7 @@ Using the Homebridge Config UI is the easiest way to set up this plugin. However
87
88
  }
88
89
 
89
90
  ],
91
+ "resetOnRestart": false,
90
92
  "disableLogging": false,
91
93
  … // See Topics & Values below for additional attributes for each accessory type
92
94
  ],
@@ -310,6 +312,22 @@ These values are used for both determining current state and, where appropriate,
310
312
  - `valueSwingDisabled` - Accessory is not oscillating
311
313
  - `valueFilterChange` - Indicates that the filter needs to be changed. *Required if `topicGetFilterChangeIndication` is defined.
312
314
 
315
+ #### Fanv2
316
+ TODO
317
+ topicGetCurrentFanState?: string,
318
+ topicGetRotationDirection?: string,
319
+ topicGetTargetFanState?: string,
320
+ topicSetRotationDirection?: string,
321
+ topicSetTargetFanState?: string,
322
+ valueDirectionClockwise?: string,
323
+ valueDirectionCounterClockwise?: string,
324
+ valueModeAuto?: string,
325
+ valueModeBlowing?: string,
326
+ valueModeIdle?: string,
327
+ valueModeInactive?: string,
328
+ valueModeManual?: string,
329
+
330
+
313
331
  #### HeaterCooler
314
332
  - `temperatureUnits` - The temperature units of the incoming value supplied by the thermostat, `C` for Celsius (default) `F` for Fahrenheit
315
333
  - `topicGetActive*` - Get whether or not the accessory is currently active
@@ -539,6 +557,12 @@ Due to the complexity, this was intentionally left out of the plugin config UI,
539
557
 
540
558
  Since `customCharacteristics` is an array, you may define as many custom characteristics as you wish.
541
559
 
560
+ ## Persistance
561
+
562
+ By default, all accessory values are saved and reloaded when the plugin restarts. However, you may override this behavior by selecting `Reset on Restart` option and accessories will be reset to defaults whenever the plugin or Homebridge restarts.
563
+
564
+ - `"resetOnRestart": true`
565
+
542
566
  ## Credits
543
567
 
544
568
  [@arachnetech](https://github.com/arachnetech) for the fantastic [homebridge-mqttthing](https://github.com/arachnetech/homebridge-mqttthing) plugin which serves as the main inspiration for this project
@@ -21,8 +21,8 @@
21
21
  "type": {
22
22
  "type": "string",
23
23
  "title": "${config.title.type}",
24
- "enum": [ "AirPurifier", "CarbonMonoxideSensor", "CarbonDioxideSensor", "ContactSensor", "GarageDoorOpener", "HeaterCooler", "HumiditySensor", "LeakSensor", "Lightbulb", "LightSensor", "LockMechanism", "MotionSensor", "OccupancySensor", "Outlet", "SecuritySystem", "SmokeSensor", "Switch", "TemperatureSensor", "Thermostat", "Valve"],
25
- "enumNames": ["${config.enumNames.airPurifier}", "${config.enumNames.carbonMonoxideSensor}", "${config.enumNames.carbonDioxideSensor}", "${config.enumNames.contactSensor}", "${config.enumNames.garageDoorOpener}", "${config.enumNames.heaterCooler}", "${config.enumNames.humiditySensor}", "${config.enumNames.leakSensor}", "${config.enumNames.lightbulb}", "${config.enumNames.lightSensor}", "${config.enumNames.lockMechanism}", "${config.enumNames.motionSensor}", "${config.enumNames.occupancySensor}", "${config.enumNames.outlet}", "${config.enumNames.securitySystem}", "${config.enumNames.smokeSensor}", "${config.enumNames.switch}", "${config.enumNames.temperatureSensor}", "${config.enumNames.thermostat}", "${config.enumNames.valve}"],
24
+ "enum": [ "AirPurifier", "CarbonMonoxideSensor", "CarbonDioxideSensor", "ContactSensor", "Fanv2", "GarageDoorOpener", "HeaterCooler", "HumiditySensor", "LeakSensor", "Lightbulb", "LightSensor", "LockMechanism", "MotionSensor", "OccupancySensor", "Outlet", "SecuritySystem", "SmokeSensor", "Switch", "TemperatureSensor", "Thermostat", "Valve"],
25
+ "enumNames": ["${config.enumNames.airPurifier}", "${config.enumNames.carbonMonoxideSensor}", "${config.enumNames.carbonDioxideSensor}", "${config.enumNames.contactSensor}", "${config.enumNames.fan}", "${config.enumNames.garageDoorOpener}", "${config.enumNames.heaterCooler}", "${config.enumNames.humiditySensor}", "${config.enumNames.leakSensor}", "${config.enumNames.lightbulb}", "${config.enumNames.lightSensor}", "${config.enumNames.lockMechanism}", "${config.enumNames.motionSensor}", "${config.enumNames.occupancySensor}", "${config.enumNames.outlet}", "${config.enumNames.securitySystem}", "${config.enumNames.smokeSensor}", "${config.enumNames.switch}", "${config.enumNames.temperatureSensor}", "${config.enumNames.thermostat}", "${config.enumNames.valve}"],
26
26
  "required": true
27
27
  },
28
28
  "group": {
@@ -438,6 +438,26 @@
438
438
  "type": "string",
439
439
  "title": "${config.title.topicSetTargetDoorState}"
440
440
  },
441
+ "topicGetCurrentFanState": {
442
+ "type": "string",
443
+ "title": "${config.title.topicGetCurrentFanState}"
444
+ },
445
+ "topicGetRotationDirection": {
446
+ "type": "string",
447
+ "title": "${config.title.topicGetRotationDirection}"
448
+ },
449
+ "topicGetTargetFanState": {
450
+ "type": "string",
451
+ "title": "${config.title.topicGetTargetFanState}"
452
+ },
453
+ "topicSetRotationDirection": {
454
+ "type": "string",
455
+ "title": "${config.title.topicSetRotationDirection}"
456
+ },
457
+ "topicSetTargetFanState": {
458
+ "type": "string",
459
+ "title": "${config.title.topicSetTargetFanState}"
460
+ },
441
461
  "valueBatteryLow": {
442
462
  "type": "string",
443
463
  "title": "${config.title.valueBatteryLow}"
@@ -634,6 +654,22 @@
634
654
  "type": "string",
635
655
  "title": "${config.title.valueDoorStateStopped}"
636
656
  },
657
+ "valueDirectionClockwise": {
658
+ "type": "string",
659
+ "title": "${config.title.valueDirectionClockwise}"
660
+ },
661
+ "valueDirectionCounterClockwise": {
662
+ "type": "string",
663
+ "title": "${config.title.valueDirectionCounterClockwise}"
664
+ },
665
+ "valueModeBlowing": {
666
+ "type": "string",
667
+ "title": "${config.title.valueModeBlowing}"
668
+ },
669
+ "resetOnRestart": {
670
+ "type": "boolean",
671
+ "title": "${config.title.resetOnRestart}"
672
+ },
637
673
  "disableLogging": {
638
674
  "type": "boolean",
639
675
  "title": "${config.title.disableLogging}"
@@ -856,6 +892,22 @@
856
892
  ]
857
893
  }
858
894
  },
895
+ {
896
+ "if": {
897
+ "properties": {
898
+ "info": {
899
+ "properties": {
900
+ "type" : {
901
+ "const": "Fanv2"
902
+ }
903
+ }
904
+ }
905
+ }
906
+ },
907
+ "then": {
908
+ "required": ["topicGetActive", "topicSetActive", "valueStateActive", "valueStateInactive"]
909
+ }
910
+ },
859
911
  {
860
912
  "if": {
861
913
  "properties": {
@@ -1213,6 +1265,79 @@
1213
1265
  "then": {
1214
1266
  "required": ["topicGetTargetLockState"]
1215
1267
  }
1268
+ },
1269
+ {
1270
+ "if": {
1271
+ "properties": {
1272
+ "topicGetCurrentFanState": {
1273
+ "minLength": 1
1274
+ }
1275
+ },
1276
+ "required": ["topicGetCurrentFanState"]
1277
+ },
1278
+ "then": {
1279
+ "anyOf": [
1280
+ { "required": ["valueModeInactive"] },
1281
+ { "required": ["valueModeIdle"] },
1282
+ { "required": ["valueModeBlowing"] }
1283
+ ]
1284
+ }
1285
+ },
1286
+ {
1287
+ "if": {
1288
+ "properties": {
1289
+ "topicGetTargetFanState": {
1290
+ "minLength": 1
1291
+ }
1292
+ },
1293
+ "required": ["topicGetTargetFanState"]
1294
+ },
1295
+ "then": {
1296
+ "required": ["topicSetTargetFanState"],
1297
+ "anyOf": [
1298
+ { "required": ["valueModeAuto"] },
1299
+ { "required": ["valueModeManual"] }
1300
+ ]
1301
+ }
1302
+ },
1303
+ {
1304
+ "if": {
1305
+ "properties": {
1306
+ "topicSetTargetFanState": {
1307
+ "minLength": 1
1308
+ }
1309
+ },
1310
+ "required": ["topicSetTargetFanState"]
1311
+ },
1312
+ "then": {
1313
+ "required": ["topicGetTargetFanState"]
1314
+ }
1315
+ },
1316
+ {
1317
+ "if": {
1318
+ "properties": {
1319
+ "topicGetRotationDirection": {
1320
+ "minLength": 1
1321
+ }
1322
+ },
1323
+ "required": ["topicGetRotationDirection"]
1324
+ },
1325
+ "then": {
1326
+ "required": ["topicSetRotationDirection", "valueDirectionClockwise", "valueDirectionCounterClockwise"]
1327
+ }
1328
+ },
1329
+ {
1330
+ "if": {
1331
+ "properties": {
1332
+ "topicSetRotationDirection": {
1333
+ "minLength": 1
1334
+ }
1335
+ },
1336
+ "required": ["topicSetRotationDirection"]
1337
+ },
1338
+ "then": {
1339
+ "required": ["topicGetRotationDirection"]
1340
+ }
1216
1341
  }
1217
1342
  ]
1218
1343
  },
@@ -1291,7 +1416,21 @@
1291
1416
  ]
1292
1417
  },
1293
1418
  "accessories[].mqtt.options",
1294
- "accessories[].disableLogging",
1419
+ {
1420
+ "type": "div",
1421
+ "displayFlex": true,
1422
+ "flex-direction": "row",
1423
+ "items": [
1424
+ {
1425
+ "key": "accessories[].resetOnRestart",
1426
+ "flex": "0 0 25%"
1427
+ },
1428
+ {
1429
+ "key": "accessories[].disableLogging",
1430
+ "flex": "0 0 25%"
1431
+ }
1432
+ ]
1433
+ },
1295
1434
  {
1296
1435
  "type": "fieldset",
1297
1436
  "title": "${config.title.topics}",
@@ -1826,7 +1965,7 @@
1826
1965
  "type": "fieldset",
1827
1966
  "notitle": true,
1828
1967
  "condition": {
1829
- "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1968
+ "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1830
1969
  },
1831
1970
  "items": [
1832
1971
  {
@@ -1850,7 +1989,57 @@
1850
1989
  "type": "fieldset",
1851
1990
  "notitle": true,
1852
1991
  "condition": {
1853
- "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1992
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Fanv2';"
1993
+ },
1994
+ "items": [
1995
+ {
1996
+ "type": "div",
1997
+ "displayFlex": true,
1998
+ "flex-direction": "row",
1999
+ "items": [
2000
+ {
2001
+ "key": "accessories[].topicGetCurrentFanState",
2002
+ "flex": "0 0 50%"
2003
+ }
2004
+ ]
2005
+ },
2006
+ {
2007
+ "type": "div",
2008
+ "displayFlex": true,
2009
+ "flex-direction": "row",
2010
+ "items": [
2011
+ {
2012
+ "key": "accessories[].topicGetTargetFanState",
2013
+ "flex": "0 0 50%"
2014
+ },
2015
+ {
2016
+ "key": "accessories[].topicSetTargetFanState",
2017
+ "flex": "0 0 50%"
2018
+ }
2019
+ ]
2020
+ },
2021
+ {
2022
+ "type": "div",
2023
+ "displayFlex": true,
2024
+ "flex-direction": "row",
2025
+ "items": [
2026
+ {
2027
+ "key": "accessories[].topicGetRotationDirection",
2028
+ "flex": "0 0 50%"
2029
+ },
2030
+ {
2031
+ "key": "accessories[].topicSetRotationDirection",
2032
+ "flex": "0 0 50%"
2033
+ }
2034
+ ]
2035
+ }
2036
+ ]
2037
+ },
2038
+ {
2039
+ "type": "fieldset",
2040
+ "notitle": true,
2041
+ "condition": {
2042
+ "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1854
2043
  },
1855
2044
  "items": [
1856
2045
  {
@@ -2137,7 +2326,7 @@
2137
2326
  "type": "fieldset",
2138
2327
  "notitle": true,
2139
2328
  "condition": {
2140
- "functionBody": "return ['AirPurifier', 'HeaterCooler', 'Thermostat'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2329
+ "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2141
2330
  },
2142
2331
  "items": [
2143
2332
  {
@@ -2226,7 +2415,7 @@
2226
2415
  "type": "fieldset",
2227
2416
  "notitle": true,
2228
2417
  "condition": {
2229
- "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2418
+ "functionBody": "return ['AirPurifier', 'Fanv2, 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2230
2419
  },
2231
2420
  "items": [
2232
2421
  {
@@ -2246,6 +2435,57 @@
2246
2435
  }
2247
2436
  ]
2248
2437
  },
2438
+ {
2439
+ "type": "fieldset",
2440
+ "notitle": true,
2441
+ "condition": {
2442
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Fanv2';"
2443
+ },
2444
+ "items": [
2445
+ {
2446
+ "type": "div",
2447
+ "displayFlex": true,
2448
+ "flex-direction": "row",
2449
+ "items": [
2450
+ {
2451
+ "key": "accessories[].valueModeAuto",
2452
+ "flex": "0 0 20%"
2453
+ },
2454
+ {
2455
+ "key": "accessories[].valueModeManual",
2456
+ "flex": "0 0 20%"
2457
+ },
2458
+ {
2459
+ "key": "accessories[].valueModeBlowing",
2460
+ "flex": "0 0 20%"
2461
+ },
2462
+ {
2463
+ "key": "accessories[].valueModeIdle",
2464
+ "flex": "0 0 20%"
2465
+ },
2466
+ {
2467
+ "key": "accessories[].valueModeInactive",
2468
+ "flex": "0 0 20%"
2469
+ }
2470
+ ]
2471
+ },
2472
+ {
2473
+ "type": "div",
2474
+ "displayFlex": true,
2475
+ "flex-direction": "row",
2476
+ "items": [
2477
+ {
2478
+ "key": "accessories[].valueDirectionClockwise",
2479
+ "flex": "0 0 20%"
2480
+ },
2481
+ {
2482
+ "key": "accessories[].valueDirectionCounterClockwise",
2483
+ "flex": "0 0 20%"
2484
+ }
2485
+ ]
2486
+ }
2487
+ ]
2488
+ },
2249
2489
  {
2250
2490
  "type": "fieldset",
2251
2491
  "notitle": true,
@@ -2322,7 +2562,7 @@
2322
2562
  "type": "fieldset",
2323
2563
  "notitle": true,
2324
2564
  "condition": {
2325
- "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2565
+ "functionBody": "return ['AirPurifier', 'Fanv2, 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2326
2566
  },
2327
2567
  "items": [
2328
2568
  {
@@ -2354,7 +2594,7 @@
2354
2594
  "type": "fieldset",
2355
2595
  "notitle": true,
2356
2596
  "condition": {
2357
- "functionBody": "return ['AirPurifier', 'HeaterCooler', 'Thermostat'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2597
+ "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2358
2598
  },
2359
2599
  "items": [
2360
2600
  {
@@ -2418,6 +2658,27 @@
2418
2658
  "flex": "0 0 25%"
2419
2659
  }
2420
2660
  ]
2661
+ },
2662
+ {
2663
+ "type": "div",
2664
+ "displayFlex": true,
2665
+ "flex-direction": "row",
2666
+ "items": [
2667
+ {
2668
+ "key": "accessories[].valueLockStateSecured",
2669
+ "title": "${config.title.valueLockStateSecuredOptional}",
2670
+ "flex": "0 0 25%"
2671
+ },
2672
+ {
2673
+ "key": "accessories[].valueLockStateUnsecured",
2674
+ "title": "${config.title.valueLockStateUnsecuredOptional}",
2675
+ "flex": "0 0 25%"
2676
+ },
2677
+ {
2678
+ "key": "accessories[].valueLockStateJammed",
2679
+ "flex": "0 0 25%"
2680
+ }
2681
+ ]
2421
2682
  }
2422
2683
  ]
2423
2684
  },
@@ -2426,7 +2687,7 @@
2426
2687
  "displayFlex": true,
2427
2688
  "flex-direction": "row",
2428
2689
  "condition": {
2429
- "functionBody": "return ['GarageDoorOpener', 'LockMechanism'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2690
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LockMechanism';"
2430
2691
  },
2431
2692
  "items": [
2432
2693
  {
@@ -13,7 +13,7 @@ export class BaseAccessory extends MQTTAccessory {
13
13
  .setCharacteristic(Characteristic.ConfiguredName, config.info.name)
14
14
  .setCharacteristic(Characteristic.Manufacturer, config.info.manufacturer ?? PLATFORM_NAME)
15
15
  .setCharacteristic(Characteristic.Model, config.info.model ?? config.info.type)
16
- .setCharacteristic(Characteristic.SerialNumber, config.info.serialNumber ?? config.info.id)
16
+ .setCharacteristic(Characteristic.SerialNumber, config.info.serialNumber ?? this.identifier)
17
17
  .setCharacteristic(Characteristic.FirmwareRevision, config.info.version ?? getVersion());
18
18
  }
19
19
  this.setupCharacteristic(CharacteristicKey.BatteryLevel, 100, 'topicGetBatteryLevel', this.bindOnUpdateNumeric(CharacteristicKey.BatteryLevel, strings.accessory.batteryLevel), false);
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/accessory/abstract/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/accessory/abstract/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAO,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAEhD,MAAM,OAAgB,aAAmE,SAAQ,aAAgB;IAE/G,YAAY,OAAoB,EAAE,cAAkC,EAAE,SAA4B,EAAE,MAAS,EAAE,GAAQ,EAAE,SAAkB;QACzI,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAElE,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAE;iBAChD,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;iBACxD,iBAAiB,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;iBAClE,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,aAAa,CAAC;iBACzF,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;iBAC9E,iBAAiB,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC;iBAC3F,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,YAAY,EAAE,GAAG,EAC1D,sBAAsB,EAAE,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;QAE3H,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC,gBAAgB,CAAC,oBAAoB,EAC/G,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnE,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAC3D,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,KAAqB;QAEnE,MAAM,UAAU,GAAG,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC;YACnE,OAAO;QACT,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAa,EAAE,KAAqB;QAErE,MAAM,YAAY,GAAG,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YACjE,OAAO;QACT,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF"}
@@ -3,6 +3,7 @@ import { CharacteristicKey } from '../../model/enums.js';
3
3
  import { CharacteristicType, TemperatureConfig } from '../../model/types.js';
4
4
  import { Log, LogType } from '../../tools/log.js';
5
5
  import { Assertable } from '../../tools/validation.js';
6
+ import { Properties } from '../../tools/properties.js';
6
7
  type OnUpdateHandler = (topic: string, value: PrimitiveTypes) => (Promise<void>);
7
8
  export type TopicHandler = {
8
9
  topic: string;
@@ -10,22 +11,25 @@ export type TopicHandler = {
10
11
  };
11
12
  export type PublishHandler = (topic: string, value: PrimitiveTypes) => void;
12
13
  export declare abstract class Common<C extends Assertable> {
13
- protected readonly Characteristic: CharacteristicType;
14
- protected readonly log: Log;
15
- private readonly disableLogging;
16
- protected readonly config: C;
17
- protected readonly name: string;
18
- private readonly publishHandler;
19
- protected readonly properties: Map<string, CharacteristicValue>;
14
+ readonly name: string;
15
+ private _properties;
20
16
  readonly topicHandlers: TopicHandler[];
21
- constructor(Characteristic: CharacteristicType, log: Log, disableLogging: boolean, config: C, name: string, publishHandler: PublishHandler);
17
+ constructor(name: string);
22
18
  protected abstract get service(): Service;
19
+ protected abstract get Characteristic(): CharacteristicType;
20
+ protected abstract get log(): Log;
21
+ protected abstract get disableLogging(): boolean;
22
+ protected abstract get config(): C;
23
+ protected abstract get identifier(): string;
24
+ protected abstract get useStoredProperties(): boolean;
25
+ protected abstract publish(rawTopic: string, value: PrimitiveTypes): void;
26
+ protected get properties(): Properties;
23
27
  protected assert(...keys: (keyof C)[]): boolean;
24
28
  protected getRawValue(property: keyof C, assert?: boolean): string | undefined;
25
29
  protected getPrimitiveValue(property: keyof C, assert?: boolean): PrimitiveTypes | undefined;
26
30
  protected addTopicHandlers(topicHandlers: TopicHandler[]): void;
27
31
  protected setupCharacteristic(characteristicKey: CharacteristicKey, defaultValue: CharacteristicValue, getTopicKey: keyof C, onUpdateHandler: OnUpdateHandler, assertGetTopic?: boolean, setTopicKey?: keyof C | undefined, onSetHandler?: CharacteristicSetHandler | undefined): Characteristic | undefined;
28
- protected setupCharacteristicOnGet(characteristicKey: CharacteristicKey, defaultValue: CharacteristicValue, getTopicKey: keyof C, onUpdateHandler: OnUpdateHandler, assertGetTopic?: boolean): Characteristic | undefined;
32
+ private setupCharacteristicOnGet;
29
33
  protected setupCharacteristicOnSet(characteristicKey: CharacteristicKey, setTopicKey?: keyof C | undefined, onSetHandler?: CharacteristicSetHandler | undefined): void;
30
34
  protected bindOnUpdateNumeric(charKey: CharacteristicKey, logTemplate: string): OnUpdateHandler;
31
35
  protected bindOnUpdateNumericBoolean(charKey: CharacteristicKey, valueKey: keyof C, logTrue: string, logFalse: string): OnUpdateHandler;
@@ -4,22 +4,19 @@ import { LogType } from '../../tools/log.js';
4
4
  import { toNumber, toPrimitive } from '../../tools/primitive.js';
5
5
  import { assert } from '../../tools/validation.js';
6
6
  import { toCelsius } from '../../tools/temperature.js';
7
+ import { Properties } from '../../tools/properties.js';
7
8
  export class Common {
8
- Characteristic;
9
- log;
10
- disableLogging;
11
- config;
12
9
  name;
13
- publishHandler;
14
- properties = new Map();
10
+ _properties = undefined;
15
11
  topicHandlers = [];
16
- constructor(Characteristic, log, disableLogging, config, name, publishHandler) {
17
- this.Characteristic = Characteristic;
18
- this.log = log;
19
- this.disableLogging = disableLogging;
20
- this.config = config;
12
+ constructor(name) {
21
13
  this.name = name;
22
- this.publishHandler = publishHandler;
14
+ }
15
+ get properties() {
16
+ if (this._properties === undefined) {
17
+ this._properties = new Properties(this.identifier, this.useStoredProperties);
18
+ }
19
+ return this._properties;
23
20
  }
24
21
  assert(...keys) {
25
22
  return assert(this.log, this.name, this.config, ...keys);
@@ -63,8 +60,10 @@ export class Common {
63
60
  }
64
61
  return;
65
62
  }
63
+ const startingValue = (this.useStoredProperties && this.properties.get(characteristicKey)) ?? defaultValue;
66
64
  const characteristic = this.service.getCharacteristic(this.Characteristic[characteristicKey]);
67
- this.properties.set(characteristicKey, defaultValue);
65
+ characteristic.setValue(startingValue);
66
+ this.properties.set(characteristicKey, startingValue);
68
67
  characteristic.onGet(async () => {
69
68
  return this.properties.get(characteristicKey) ?? null;
70
69
  });
@@ -132,7 +131,7 @@ export class Common {
132
131
  }
133
132
  this.properties.set(key, value);
134
133
  this.service.updateCharacteristic(this.Characteristic[key], value);
135
- this.publishHandler(this.config[topic], publish);
134
+ this.publish(this.config[topic], publish);
136
135
  }
137
136
  logIfDesired(levelOrMessage, ...rest) {
138
137
  if (this.disableLogging) {
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/accessory/abstract/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/accessory/abstract/common.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ import { PlatformAccessory } from 'homebridge';
2
2
  import { BaseAccessory } from './base.js';
3
3
  import * as Configs from '../../model/types.js';
4
4
  import { Log } from '../../tools/log.js';
5
+ export declare function createIdentifier(info: Configs.InfoConfig): string;
5
6
  export declare function createAccessory(Service: Configs.ServiceType, Characteristic: Configs.CharacteristicType, platformAccessory: PlatformAccessory, accessoryConfig: Configs.BaseAccessoryConfig, log: Log, isGrouped?: boolean): BaseAccessory | undefined;
@@ -20,6 +20,11 @@ import { OccupancySensorAccessory } from '../sensor/occupancy.js';
20
20
  import { SmokeSensorAccessory } from '../sensor/smoke.js';
21
21
  import { TemperatureSensorAccessory } from '../sensor/temperature.js';
22
22
  import { ValveAccessory } from '../valve.js';
23
+ import { PLUGIN_NAME } from '../../homebridge/settings.js';
24
+ import { FanAccessory } from '../climate/fan.js';
25
+ export function createIdentifier(info) {
26
+ return info.id ?? `${PLUGIN_NAME}:${info.type}:${info.name}`;
27
+ }
23
28
  export function createAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped = false) {
24
29
  switch (accessoryConfig.info.type) {
25
30
  case AccessoryType.AirPurifier:
@@ -30,6 +35,8 @@ export function createAccessory(Service, Characteristic, platformAccessory, acce
30
35
  return new COSensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
31
36
  case AccessoryType.ContactSensor:
32
37
  return new ContactSensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
38
+ case AccessoryType.Fanv2:
39
+ return new FanAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
33
40
  case AccessoryType.GarageDoorOpener:
34
41
  return new GarageDoorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
35
42
  case AccessoryType.HeaterCooler: