homebridge-easy-mqtt 1.4.0-beta.11 → 1.4.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -2
- package/README.md +32 -2
- package/config.schema.json +256 -3
- package/dist/accessory/abstract/base.js +1 -1
- package/dist/accessory/abstract/base.js.map +1 -1
- package/dist/accessory/abstract/common.d.ts +13 -9
- package/dist/accessory/abstract/common.js +13 -14
- package/dist/accessory/abstract/common.js.map +1 -1
- package/dist/accessory/abstract/helper.d.ts +1 -0
- package/dist/accessory/abstract/helper.js +9 -2
- package/dist/accessory/abstract/helper.js.map +1 -1
- package/dist/accessory/abstract/mqtt.d.ts +11 -4
- package/dist/accessory/abstract/mqtt.js +25 -9
- package/dist/accessory/abstract/mqtt.js.map +1 -1
- package/dist/accessory/addons/addon.d.ts +19 -7
- package/dist/accessory/addons/addon.js +39 -12
- package/dist/accessory/addons/addon.js.map +1 -1
- package/dist/accessory/addons/filter.d.ts +6 -6
- package/dist/accessory/addons/filter.js +6 -5
- package/dist/accessory/addons/filter.js.map +1 -1
- package/dist/accessory/climate/heaterCooler.js +1 -1
- package/dist/accessory/climate/heaterCooler.js.map +1 -1
- package/dist/accessory/climate/purifier.js +1 -1
- package/dist/accessory/climate/purifier.js.map +1 -1
- package/dist/accessory/climate/thermostat.js +1 -1
- package/dist/accessory/climate/thermostat.js.map +1 -1
- package/dist/accessory/garage.d.ts +17 -0
- package/dist/accessory/garage.js +110 -0
- package/dist/accessory/garage.js.map +1 -0
- package/dist/accessory/lock.d.ts +2 -2
- package/dist/accessory/lock.js +3 -3
- package/dist/accessory/lock.js.map +1 -1
- package/dist/homebridge/platform.js +4 -2
- package/dist/homebridge/platform.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +1 -1
- package/dist/homebridge-ui/public/ui.js +1 -1
- package/dist/i18n/en.d.ts +33 -0
- package/dist/i18n/en.js +33 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/fr.d.ts +33 -0
- package/dist/i18n/i18n.d.ts +33 -0
- package/dist/i18n/ro.d.ts +33 -0
- package/dist/i18n/template.d.ts +33 -0
- package/dist/model/enums.d.ts +4 -0
- package/dist/model/enums.js +4 -0
- package/dist/model/enums.js.map +1 -1
- package/dist/model/mqtt.js +21 -21
- package/dist/model/mqtt.js.map +1 -1
- package/dist/model/types.d.ts +20 -1
- package/dist/tools/properties.d.ts +11 -0
- package/dist/tools/properties.js +73 -0
- package/dist/tools/properties.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to homebridge-dummy will be documented in this file.
|
|
4
4
|
|
|
5
|
-
## 1.4.0-beta.
|
|
5
|
+
## 1.4.0-beta.13 (2025-09-24)
|
|
6
6
|
|
|
7
7
|
### Added
|
|
8
|
-
- Support for Air Purifier, HeaterCooler, LightSensor, and Valve
|
|
8
|
+
- Support for Air Purifier, GarageDoorOpener, HeaterCooler, LightSensor, and Valve
|
|
9
9
|
- FilterMaintenance to climate control accessories
|
|
10
10
|
- Broker, username, and password can be set via environment variables ([documentation](https://github.com/mpatfield/homebridge-easy-mqtt#environment-variables))
|
|
11
11
|
- Publish arbitrary MQTT messages on connect ([documentation] (https://github.com/mpatfield/homebridge-easy-mqtt#mqtt-onconnect))
|
|
12
12
|
- Traduceri în limba română. Mulțumesc, [@rursache](https://github.com/sponsors/rursache)!
|
|
13
13
|
|
|
14
14
|
### Changed
|
|
15
|
+
- ⚠️ All accessory states are now saved across plugin/Homebridge restarts
|
|
16
|
+
- If you want to keep the old behavior, select the `Reset on Restart` option for each accessory you want to reset
|
|
15
17
|
- Optimized MQTT connections by sharing across multiple accessories when possible
|
|
16
18
|
- Previously, every accessory had its own connection
|
|
17
19
|
- Better field validation in config UI (Thank you, [@justjam2013](https://github.com/sponsors/justjam2013) for teaching me this!)
|
package/README.md
CHANGED
|
@@ -25,12 +25,16 @@ This plugin is designed to be a simple replacement for the fantastic [homebridge
|
|
|
25
25
|
|
|
26
26
|
**HomebridgeEasyMQTT** currently supports the following accessory types but will be expanded over time as more use cases are requested. If there is an accessory type you'd like to see supported, please [create an issue in GitHub](https://github.com/mpatfield/homebridge-easy-mqtt/issues/new/choose).
|
|
27
27
|
|
|
28
|
+
- `AirPurifier`
|
|
28
29
|
- `CarbonDioxideSensor`
|
|
29
30
|
- `CarbonMonoxideSensor`
|
|
30
31
|
- `ContactSensor`
|
|
32
|
+
- `GarageDoorOpener`
|
|
33
|
+
- `HeaterCooler`
|
|
31
34
|
- `HumiditySensor`
|
|
32
35
|
- `LeakSensor`
|
|
33
36
|
- `Lightbulb`
|
|
37
|
+
- `LightSensor`
|
|
34
38
|
- `LockMechanism`
|
|
35
39
|
- `MotionSensor`
|
|
36
40
|
- `OccupancySensor`
|
|
@@ -40,6 +44,7 @@ This plugin is designed to be a simple replacement for the fantastic [homebridge
|
|
|
40
44
|
- `Switch`
|
|
41
45
|
- `TemperatureSensor`
|
|
42
46
|
- `Thermostat`
|
|
47
|
+
- `Valve`
|
|
43
48
|
|
|
44
49
|
## Configuration
|
|
45
50
|
|
|
@@ -82,6 +87,7 @@ Using the Homebridge Config UI is the easiest way to set up this plugin. However
|
|
|
82
87
|
}
|
|
83
88
|
…
|
|
84
89
|
],
|
|
90
|
+
"resetOnRestart": false,
|
|
85
91
|
"disableLogging": false,
|
|
86
92
|
… // See Topics & Values below for additional attributes for each accessory type
|
|
87
93
|
],
|
|
@@ -95,7 +101,7 @@ Required fields are marked with an asterisk (*)
|
|
|
95
101
|
### Info
|
|
96
102
|
- `id*` - A unique ID to identify this accessory. Changing this value will result in a new accessory.
|
|
97
103
|
- `name*` - The display name for the accessory in HomeKit
|
|
98
|
-
- `type*` - The type of accessory
|
|
104
|
+
- `type*` - The type of accessory. See list of currently supported types above.
|
|
99
105
|
- `group` - Items sharing the same group name will be grouped together in the Home app UI
|
|
100
106
|
- ⚠️ Changing the group name will require you to reconfigure any HomeKit scenes/automations for those accessories
|
|
101
107
|
- `manufacturer` - The accessory manufacturer which will display in HomeKit device details
|
|
@@ -277,7 +283,7 @@ These values are used for both determining current state and, where appropriate,
|
|
|
277
283
|
- `valueModeOff` - Thermostat off
|
|
278
284
|
- `valueFilterChange` - Indicates that the filter needs to be changed. *Required if `topicGetFilterChangeIndication` is defined.
|
|
279
285
|
|
|
280
|
-
####
|
|
286
|
+
#### AirPurifier
|
|
281
287
|
- `topicGetActive*` - Get whether or not the accessory is currently active
|
|
282
288
|
- `topicSetActive*` - Set whether or not the accessory is currently active
|
|
283
289
|
- `topicGetCurrentPurifierState*` - Get the current mode (i.e. inactive, idle, purifying)
|
|
@@ -341,6 +347,24 @@ These values are used for both determining current state and, where appropriate,
|
|
|
341
347
|
|
|
342
348
|
### Others
|
|
343
349
|
|
|
350
|
+
#### GarageDoorOpener
|
|
351
|
+
- `topicGetCurrentDoorState*` - Current state of the garage door, i.e. open/opening/closed/closing/stopped
|
|
352
|
+
- `topicGetTargetDoorState*` - Target state of the garage door, i.e. open/closed
|
|
353
|
+
- `topicSetTargetDoorState*` - Set the target door state, i.e. open/closed
|
|
354
|
+
- `topicGetObstructionDetected*` - Whether or not the garage door is obstructed
|
|
355
|
+
- `topicGetCurrentLockState` - The current state of the garage lock, i.e. locked/unlocked
|
|
356
|
+
- `topicGetTargetLockState` - The target (i.e. desired) state of the garage lock
|
|
357
|
+
- `topicSetTargetLockState` - For setting the target (i.e. desired) state of the garage lock
|
|
358
|
+
- `valueDoorObstructed*` - Door is obstructed
|
|
359
|
+
- `valueDoorStateClosed` - Door is closed
|
|
360
|
+
- `valueDoorStateClosing` - Door is closing
|
|
361
|
+
- `valueDoorStateOpen` - Door is open
|
|
362
|
+
- `valueDoorStateOpening` - Door is opening
|
|
363
|
+
- `valueDoorStateStopped` - Door is stopped
|
|
364
|
+
- `valueLockStateJammed` - Door lock is jammed
|
|
365
|
+
- `valueLockStateSecured` - Door is locked
|
|
366
|
+
- `valueLockStateUnsecured` - Door is unlocked
|
|
367
|
+
|
|
344
368
|
#### LockMechanism
|
|
345
369
|
- `topicGetCurrentLockState*` - The current state of the lock, i.e. locked/unlocked
|
|
346
370
|
- `topicGetTargetLockState*` - The target (i.e. desired) state of the lock
|
|
@@ -516,6 +540,12 @@ Due to the complexity, this was intentionally left out of the plugin config UI,
|
|
|
516
540
|
|
|
517
541
|
Since `customCharacteristics` is an array, you may define as many custom characteristics as you wish.
|
|
518
542
|
|
|
543
|
+
## Persistance
|
|
544
|
+
|
|
545
|
+
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.
|
|
546
|
+
|
|
547
|
+
- `"resetOnRestart": true`
|
|
548
|
+
|
|
519
549
|
## Credits
|
|
520
550
|
|
|
521
551
|
[@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
|
package/config.schema.json
CHANGED
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"type": {
|
|
22
22
|
"type": "string",
|
|
23
23
|
"title": "${config.title.type}",
|
|
24
|
-
"enum": [ "AirPurifier", "CarbonMonoxideSensor", "CarbonDioxideSensor", "ContactSensor", "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.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", "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}"],
|
|
26
26
|
"required": true
|
|
27
27
|
},
|
|
28
28
|
"group": {
|
|
@@ -422,6 +422,22 @@
|
|
|
422
422
|
"type": "string",
|
|
423
423
|
"title": "${config.title.topicResetFilterIndication}"
|
|
424
424
|
},
|
|
425
|
+
"topicGetCurrentDoorState": {
|
|
426
|
+
"type": "string",
|
|
427
|
+
"title": "${config.title.topicGetCurrentDoorState}"
|
|
428
|
+
},
|
|
429
|
+
"topicGetObstructionDetected": {
|
|
430
|
+
"type": "string",
|
|
431
|
+
"title": "${config.title.topicGetObstructionDetected}"
|
|
432
|
+
},
|
|
433
|
+
"topicGetTargetDoorState": {
|
|
434
|
+
"type": "string",
|
|
435
|
+
"title": "${config.title.topicGetTargetDoorState}"
|
|
436
|
+
},
|
|
437
|
+
"topicSetTargetDoorState": {
|
|
438
|
+
"type": "string",
|
|
439
|
+
"title": "${config.title.topicSetTargetDoorState}"
|
|
440
|
+
},
|
|
425
441
|
"valueBatteryLow": {
|
|
426
442
|
"type": "string",
|
|
427
443
|
"title": "${config.title.valueBatteryLow}"
|
|
@@ -594,6 +610,34 @@
|
|
|
594
610
|
"type": "string",
|
|
595
611
|
"title": "${config.title.valueFilterReset}"
|
|
596
612
|
},
|
|
613
|
+
"valueDoorObstructed": {
|
|
614
|
+
"type": "string",
|
|
615
|
+
"title": "${config.title.valueDoorObstructed}"
|
|
616
|
+
},
|
|
617
|
+
"valueDoorStateClosed": {
|
|
618
|
+
"type": "string",
|
|
619
|
+
"title": "${config.title.valueDoorStateClosed}"
|
|
620
|
+
},
|
|
621
|
+
"valueDoorStateClosing": {
|
|
622
|
+
"type": "string",
|
|
623
|
+
"title": "${config.title.valueDoorStateClosing}"
|
|
624
|
+
},
|
|
625
|
+
"valueDoorStateOpen": {
|
|
626
|
+
"type": "string",
|
|
627
|
+
"title": "${config.title.valueDoorStateOpen}"
|
|
628
|
+
},
|
|
629
|
+
"valueDoorStateOpening": {
|
|
630
|
+
"type": "string",
|
|
631
|
+
"title": "${config.title.valueDoorStateOpening}"
|
|
632
|
+
},
|
|
633
|
+
"valueDoorStateStopped": {
|
|
634
|
+
"type": "string",
|
|
635
|
+
"title": "${config.title.valueDoorStateStopped}"
|
|
636
|
+
},
|
|
637
|
+
"resetOnRestart": {
|
|
638
|
+
"type": "boolean",
|
|
639
|
+
"title": "${config.title.resetOnRestart}"
|
|
640
|
+
},
|
|
597
641
|
"disableLogging": {
|
|
598
642
|
"type": "boolean",
|
|
599
643
|
"title": "${config.title.disableLogging}"
|
|
@@ -879,6 +923,26 @@
|
|
|
879
923
|
]
|
|
880
924
|
}
|
|
881
925
|
},
|
|
926
|
+
{
|
|
927
|
+
"if": {
|
|
928
|
+
"properties": {
|
|
929
|
+
"info": {
|
|
930
|
+
"properties": {
|
|
931
|
+
"type" : {
|
|
932
|
+
"const": "GarageDoorOpener"
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
},
|
|
938
|
+
"then": {
|
|
939
|
+
"required": ["topicGetCurrentDoorState", "topicGetTargetDoorState", "topicSetTargetDoorState", "topicGetObstructionDetected", "valueDoorObstructed"],
|
|
940
|
+
"anyOf": [
|
|
941
|
+
{ "required": ["valueDoorStateOpen"] },
|
|
942
|
+
{ "required": ["valueDoorStateClosed"] }
|
|
943
|
+
]
|
|
944
|
+
}
|
|
945
|
+
},
|
|
882
946
|
{
|
|
883
947
|
"if": {
|
|
884
948
|
"properties": {
|
|
@@ -1114,6 +1178,45 @@
|
|
|
1114
1178
|
"then": {
|
|
1115
1179
|
"required": ["topicGetFilterChangeIndication", "valueFilterReset"]
|
|
1116
1180
|
}
|
|
1181
|
+
},
|
|
1182
|
+
{
|
|
1183
|
+
"if": {
|
|
1184
|
+
"properties": {
|
|
1185
|
+
"topicGetCurrentLockState": {
|
|
1186
|
+
"minLength": 1
|
|
1187
|
+
}
|
|
1188
|
+
},
|
|
1189
|
+
"required": ["topicGetCurrentLockState"]
|
|
1190
|
+
},
|
|
1191
|
+
"then": {
|
|
1192
|
+
"required": ["valueLockStateSecured", "valueLockStateUnsecured"]
|
|
1193
|
+
}
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
"if": {
|
|
1197
|
+
"properties": {
|
|
1198
|
+
"topicGetTargetLockState": {
|
|
1199
|
+
"minLength": 1
|
|
1200
|
+
}
|
|
1201
|
+
},
|
|
1202
|
+
"required": ["topicGetTargetLockState"]
|
|
1203
|
+
},
|
|
1204
|
+
"then": {
|
|
1205
|
+
"required": ["topicGetCurrentLockState", "topicSetTargetLockState"]
|
|
1206
|
+
}
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
"if": {
|
|
1210
|
+
"properties": {
|
|
1211
|
+
"topicSetTargetLockState": {
|
|
1212
|
+
"minLength": 1
|
|
1213
|
+
}
|
|
1214
|
+
},
|
|
1215
|
+
"required": ["topicSetTargetLockState"]
|
|
1216
|
+
},
|
|
1217
|
+
"then": {
|
|
1218
|
+
"required": ["topicGetTargetLockState"]
|
|
1219
|
+
}
|
|
1117
1220
|
}
|
|
1118
1221
|
]
|
|
1119
1222
|
},
|
|
@@ -1192,7 +1295,21 @@
|
|
|
1192
1295
|
]
|
|
1193
1296
|
},
|
|
1194
1297
|
"accessories[].mqtt.options",
|
|
1195
|
-
|
|
1298
|
+
{
|
|
1299
|
+
"type": "div",
|
|
1300
|
+
"displayFlex": true,
|
|
1301
|
+
"flex-direction": "row",
|
|
1302
|
+
"items": [
|
|
1303
|
+
{
|
|
1304
|
+
"key": "accessories[].resetOnRestart",
|
|
1305
|
+
"flex": "0 0 25%"
|
|
1306
|
+
},
|
|
1307
|
+
{
|
|
1308
|
+
"key": "accessories[].disableLogging",
|
|
1309
|
+
"flex": "0 0 25%"
|
|
1310
|
+
}
|
|
1311
|
+
]
|
|
1312
|
+
},
|
|
1196
1313
|
{
|
|
1197
1314
|
"type": "fieldset",
|
|
1198
1315
|
"title": "${config.title.topics}",
|
|
@@ -1201,6 +1318,74 @@
|
|
|
1201
1318
|
"functionBody": "return model.accessories?.[arguments[1]]?.info?.type !== undefined;"
|
|
1202
1319
|
},
|
|
1203
1320
|
"items": [
|
|
1321
|
+
{
|
|
1322
|
+
"type": "fieldset",
|
|
1323
|
+
"notitle": true,
|
|
1324
|
+
"condition": {
|
|
1325
|
+
"functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'GarageDoorOpener';"
|
|
1326
|
+
},
|
|
1327
|
+
"items": [
|
|
1328
|
+
{
|
|
1329
|
+
"type": "div",
|
|
1330
|
+
"displayFlex": true,
|
|
1331
|
+
"flex-direction": "row",
|
|
1332
|
+
"items": [
|
|
1333
|
+
{
|
|
1334
|
+
"key": "accessories[].topicGetCurrentDoorState",
|
|
1335
|
+
"flex": "0 0 50%"
|
|
1336
|
+
},
|
|
1337
|
+
{
|
|
1338
|
+
"key": "accessories[].topicGetObstructionDetected",
|
|
1339
|
+
"flex": "0 0 50%"
|
|
1340
|
+
}
|
|
1341
|
+
]
|
|
1342
|
+
},
|
|
1343
|
+
{
|
|
1344
|
+
"type": "div",
|
|
1345
|
+
"displayFlex": true,
|
|
1346
|
+
"flex-direction": "row",
|
|
1347
|
+
"items": [
|
|
1348
|
+
{
|
|
1349
|
+
"key": "accessories[].topicGetTargetDoorState",
|
|
1350
|
+
"flex": "0 0 50%"
|
|
1351
|
+
},
|
|
1352
|
+
{
|
|
1353
|
+
"key": "accessories[].topicSetTargetDoorState",
|
|
1354
|
+
"flex": "0 0 50%"
|
|
1355
|
+
}
|
|
1356
|
+
]
|
|
1357
|
+
},
|
|
1358
|
+
{
|
|
1359
|
+
"type": "div",
|
|
1360
|
+
"displayFlex": true,
|
|
1361
|
+
"flex-direction": "row",
|
|
1362
|
+
"items": [
|
|
1363
|
+
{
|
|
1364
|
+
"key": "accessories[].topicGetCurrentLockState",
|
|
1365
|
+
"title": "${config.title.topicGetCurrentLockStateOptional}",
|
|
1366
|
+
"flex": "0 0 50%"
|
|
1367
|
+
}
|
|
1368
|
+
]
|
|
1369
|
+
},
|
|
1370
|
+
{
|
|
1371
|
+
"type": "div",
|
|
1372
|
+
"displayFlex": true,
|
|
1373
|
+
"flex-direction": "row",
|
|
1374
|
+
"items": [
|
|
1375
|
+
{
|
|
1376
|
+
"key": "accessories[].topicGetTargetLockState",
|
|
1377
|
+
"title": "${config.title.topicGetTargetLockStateOptional}",
|
|
1378
|
+
"flex": "0 0 50%"
|
|
1379
|
+
},
|
|
1380
|
+
{
|
|
1381
|
+
"key": "accessories[].topicSetTargetLockState",
|
|
1382
|
+
"title": "${config.title.topicSetTargetLockStateOptional}",
|
|
1383
|
+
"flex": "0 0 50%"
|
|
1384
|
+
}
|
|
1385
|
+
]
|
|
1386
|
+
}
|
|
1387
|
+
]
|
|
1388
|
+
},
|
|
1204
1389
|
{
|
|
1205
1390
|
"type": "fieldset",
|
|
1206
1391
|
"notitle": true,
|
|
@@ -2207,6 +2392,74 @@
|
|
|
2207
2392
|
}
|
|
2208
2393
|
]
|
|
2209
2394
|
},
|
|
2395
|
+
{
|
|
2396
|
+
"type": "fieldset",
|
|
2397
|
+
"notitle": true,
|
|
2398
|
+
"condition": {
|
|
2399
|
+
"functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'GarageDoorOpener';"
|
|
2400
|
+
},
|
|
2401
|
+
"items": [
|
|
2402
|
+
{
|
|
2403
|
+
"type": "div",
|
|
2404
|
+
"displayFlex": true,
|
|
2405
|
+
"flex-direction": "row",
|
|
2406
|
+
"items": [
|
|
2407
|
+
{
|
|
2408
|
+
"key": "accessories[].valueDoorStateOpen",
|
|
2409
|
+
"flex": "0 0 25%"
|
|
2410
|
+
},
|
|
2411
|
+
{
|
|
2412
|
+
"key": "accessories[].valueDoorStateClosed",
|
|
2413
|
+
"flex": "0 0 25%"
|
|
2414
|
+
},
|
|
2415
|
+
{
|
|
2416
|
+
"key": "accessories[].valueDoorStateOpening",
|
|
2417
|
+
"flex": "0 0 25%"
|
|
2418
|
+
},
|
|
2419
|
+
{
|
|
2420
|
+
"key": "accessories[].valueDoorStateClosing",
|
|
2421
|
+
"flex": "0 0 25%"
|
|
2422
|
+
}
|
|
2423
|
+
]
|
|
2424
|
+
},
|
|
2425
|
+
{
|
|
2426
|
+
"type": "div",
|
|
2427
|
+
"displayFlex": true,
|
|
2428
|
+
"flex-direction": "row",
|
|
2429
|
+
"items": [
|
|
2430
|
+
{
|
|
2431
|
+
"key": "accessories[].valueDoorStateStopped",
|
|
2432
|
+
"flex": "0 0 25%"
|
|
2433
|
+
},
|
|
2434
|
+
{
|
|
2435
|
+
"key": "accessories[].valueDoorObstructed",
|
|
2436
|
+
"flex": "0 0 25%"
|
|
2437
|
+
}
|
|
2438
|
+
]
|
|
2439
|
+
},
|
|
2440
|
+
{
|
|
2441
|
+
"type": "div",
|
|
2442
|
+
"displayFlex": true,
|
|
2443
|
+
"flex-direction": "row",
|
|
2444
|
+
"items": [
|
|
2445
|
+
{
|
|
2446
|
+
"key": "accessories[].valueLockStateSecured",
|
|
2447
|
+
"title": "${config.title.valueLockStateSecuredOptional}",
|
|
2448
|
+
"flex": "0 0 25%"
|
|
2449
|
+
},
|
|
2450
|
+
{
|
|
2451
|
+
"key": "accessories[].valueLockStateUnsecured",
|
|
2452
|
+
"title": "${config.title.valueLockStateUnsecuredOptional}",
|
|
2453
|
+
"flex": "0 0 25%"
|
|
2454
|
+
},
|
|
2455
|
+
{
|
|
2456
|
+
"key": "accessories[].valueLockStateJammed",
|
|
2457
|
+
"flex": "0 0 25%"
|
|
2458
|
+
}
|
|
2459
|
+
]
|
|
2460
|
+
}
|
|
2461
|
+
]
|
|
2462
|
+
},
|
|
2210
2463
|
{
|
|
2211
2464
|
"type": "div",
|
|
2212
2465
|
"displayFlex": true,
|
|
@@ -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 ??
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/accessory/abstract/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
-
|
|
14
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
14
|
-
properties = new Map();
|
|
10
|
+
_properties = undefined;
|
|
15
11
|
topicHandlers = [];
|
|
16
|
-
constructor(
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAqB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG3E,OAAO,EAAO,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAc,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAOvD,MAAM,OAAgB,MAAM;
|
|
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;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { strings } from '../../i18n/i18n.js';
|
|
2
2
|
import { AccessoryType } from '../../model/enums.js';
|
|
3
|
+
import { GarageDoorAccessory } from '../garage.js';
|
|
3
4
|
import { LockMechanismAccessory } from '../lock.js';
|
|
4
5
|
import { SecuritySystemAccessory } from '../security.js';
|
|
5
6
|
import { HeaterCoolerAccessory } from '../climate/heaterCooler.js';
|
|
@@ -19,18 +20,24 @@ import { OccupancySensorAccessory } from '../sensor/occupancy.js';
|
|
|
19
20
|
import { SmokeSensorAccessory } from '../sensor/smoke.js';
|
|
20
21
|
import { TemperatureSensorAccessory } from '../sensor/temperature.js';
|
|
21
22
|
import { ValveAccessory } from '../valve.js';
|
|
23
|
+
import { PLUGIN_NAME } from '../../homebridge/settings.js';
|
|
24
|
+
export function createIdentifier(info) {
|
|
25
|
+
return info.id ?? `${PLUGIN_NAME}:${info.type}:${info.name}`;
|
|
26
|
+
}
|
|
22
27
|
export function createAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped = false) {
|
|
23
28
|
switch (accessoryConfig.info.type) {
|
|
29
|
+
case AccessoryType.AirPurifier:
|
|
30
|
+
return new PurifierAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
24
31
|
case AccessoryType.CarbonDioxideSensor:
|
|
25
32
|
return new CO2SensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
26
33
|
case AccessoryType.CarbonMonoxideSensor:
|
|
27
34
|
return new COSensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
28
35
|
case AccessoryType.ContactSensor:
|
|
29
36
|
return new ContactSensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
37
|
+
case AccessoryType.GarageDoorOpener:
|
|
38
|
+
return new GarageDoorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
30
39
|
case AccessoryType.HeaterCooler:
|
|
31
40
|
return new HeaterCoolerAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
32
|
-
case AccessoryType.AirPurifier:
|
|
33
|
-
return new PurifierAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
34
41
|
case AccessoryType.HumiditySensor:
|
|
35
42
|
return new HumiditySensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
36
43
|
case AccessoryType.LeakSensor:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/accessory/abstract/helper.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/accessory/abstract/helper.ts"],"names":[],"mappings":"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"}
|