homebridge-easy-mqtt 1.4.0-beta.13 → 1.4.0-beta.15
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 +3 -3
- package/README.md +31 -2
- package/config.schema.json +230 -8
- package/dist/accessory/abstract/helper.js +3 -0
- package/dist/accessory/abstract/helper.js.map +1 -1
- package/dist/accessory/climate/fan.d.ts +20 -0
- package/dist/accessory/climate/fan.js +122 -0
- package/dist/accessory/climate/fan.js.map +1 -0
- package/dist/accessory/climate/thermostat.js +0 -2
- package/dist/accessory/climate/thermostat.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 +25 -0
- package/dist/i18n/en.js +26 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/fr.d.ts +25 -0
- package/dist/i18n/i18n.d.ts +25 -0
- package/dist/i18n/ro.d.ts +25 -0
- package/dist/i18n/template.d.ts +25 -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 +1 -1
- package/dist/model/mqtt.js.map +1 -1
- package/dist/model/types.d.ts +15 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
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.15 (2025-09-25)
|
|
6
6
|
|
|
7
7
|
### Added
|
|
8
|
-
- Support for Air Purifier, GarageDoorOpener, HeaterCooler, LightSensor, and Valve
|
|
9
|
-
-
|
|
8
|
+
- Support for Air Purifier, Fan (v2) GarageDoorOpener, HeaterCooler, LightSensor, and Valve
|
|
9
|
+
- MQTT options JSON can now also include publish options, such as `retain`
|
|
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)!
|
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`
|
|
@@ -311,6 +312,34 @@ These values are used for both determining current state and, where appropriate,
|
|
|
311
312
|
- `valueSwingDisabled` - Accessory is not oscillating
|
|
312
313
|
- `valueFilterChange` - Indicates that the filter needs to be changed. *Required if `topicGetFilterChangeIndication` is defined.
|
|
313
314
|
|
|
315
|
+
#### Fanv2
|
|
316
|
+
- `topicGetActive*` - Get whether or not the accessory is currently active
|
|
317
|
+
- `topicSetActive*` - Set whether or not the accessory is currently active
|
|
318
|
+
- `topicGetCurrentFanState` - Get current fan mode (blowing, idle, inactive)
|
|
319
|
+
- `topicGetTargetFanState` - Get target fan mode (auto, manual)
|
|
320
|
+
- `topicSetTargetFanState` - Set target fan mode (auto, manual)
|
|
321
|
+
- `topicGetLockPhysicalControls` - Get whether or not the physical controls are locked
|
|
322
|
+
- `topicSetLockPhysicalControls` - Set whether or not the physical controls are locked
|
|
323
|
+
- `topicGetRotationDirection` - Get the fan rotation direction (clockwise, counter clockwise)
|
|
324
|
+
- `topicSetRotationDirection` - Set the fan rotation direction (clockwise, counter clockwise)
|
|
325
|
+
- `topicGetRotationSpeed` - Get the rotation speed as a percentage
|
|
326
|
+
- `topicSetRotationSpeed` - Set the rotation speed as a percentage
|
|
327
|
+
- `topicGetSwingMode` - Get whether or not accessory is oscillating
|
|
328
|
+
- `topicSetSwingMode` - Set whether or not accessory is oscillating
|
|
329
|
+
- `valueStateActive*` - Accessory is currently active
|
|
330
|
+
- `valueStateInactive*` - Accessory is currently inactive
|
|
331
|
+
- `valueModeBlowing` - Air blowing mode
|
|
332
|
+
- `valueModeIdle` - Idle mode
|
|
333
|
+
- `valueModeInactive` - Inactive mode
|
|
334
|
+
- `valueModeAuto` - Auto target mode
|
|
335
|
+
- `valueModeManual` - Manual target mode
|
|
336
|
+
- `valueDirectionClockwise` - Rotating clockwise
|
|
337
|
+
- `valueDirectionCounterClockwise` - Rotating counter clockwise
|
|
338
|
+
- `valueControlLock` - Physical controls are locked
|
|
339
|
+
- `valueControlUnlock` - Physical controls are unlocked
|
|
340
|
+
- `valueSwingEnabled` - Accessory is oscillating
|
|
341
|
+
- `valueSwingDisabled` - Accessory is not oscillating
|
|
342
|
+
|
|
314
343
|
#### HeaterCooler
|
|
315
344
|
- `temperatureUnits` - The temperature units of the incoming value supplied by the thermostat, `C` for Celsius (default) `F` for Fahrenheit
|
|
316
345
|
- `topicGetActive*` - Get whether or not the accessory is currently active
|
|
@@ -419,10 +448,10 @@ You may also turn on additional logging if you'd like to see the MQTT messages p
|
|
|
419
448
|
|
|
420
449
|
## MQTT Options
|
|
421
450
|
|
|
422
|
-
You are able to pass in any arbitrary MQTT options via `mqtt.options` in the config. This can
|
|
451
|
+
You are able to pass in any arbitrary MQTT options via `mqtt.options` in the config. This can be a combination of [client options](https://github.com/mqttjs/MQTT.js?tab=readme-ov-file#mqttclientstreambuilder-options) and [publish options](https://github.com/mqttjs/MQTT.js?tab=readme-ov-file#mqttclientpublishtopic-message-options-callback). Just make sure the value provided is valid JSON. For example:
|
|
423
452
|
|
|
424
453
|
```
|
|
425
|
-
"options": "{ \"protocolVersion\": \"4\", \"clientId\": \"my-client-id\", \"
|
|
454
|
+
"options": "{ \"protocolVersion\": \"4\", \"clientId\": \"my-client-id\", \"retain\": true }"
|
|
426
455
|
```
|
|
427
456
|
|
|
428
457
|
## MQTT OnConnect
|
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", "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,18 @@
|
|
|
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
|
+
},
|
|
637
669
|
"resetOnRestart": {
|
|
638
670
|
"type": "boolean",
|
|
639
671
|
"title": "${config.title.resetOnRestart}"
|
|
@@ -860,6 +892,22 @@
|
|
|
860
892
|
]
|
|
861
893
|
}
|
|
862
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
|
+
},
|
|
863
911
|
{
|
|
864
912
|
"if": {
|
|
865
913
|
"properties": {
|
|
@@ -1217,6 +1265,79 @@
|
|
|
1217
1265
|
"then": {
|
|
1218
1266
|
"required": ["topicGetTargetLockState"]
|
|
1219
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
|
+
}
|
|
1220
1341
|
}
|
|
1221
1342
|
]
|
|
1222
1343
|
},
|
|
@@ -1844,7 +1965,7 @@
|
|
|
1844
1965
|
"type": "fieldset",
|
|
1845
1966
|
"notitle": true,
|
|
1846
1967
|
"condition": {
|
|
1847
|
-
"functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
|
|
1968
|
+
"functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
|
|
1848
1969
|
},
|
|
1849
1970
|
"items": [
|
|
1850
1971
|
{
|
|
@@ -1868,7 +1989,57 @@
|
|
|
1868
1989
|
"type": "fieldset",
|
|
1869
1990
|
"notitle": true,
|
|
1870
1991
|
"condition": {
|
|
1871
|
-
"functionBody": "return
|
|
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);"
|
|
1872
2043
|
},
|
|
1873
2044
|
"items": [
|
|
1874
2045
|
{
|
|
@@ -2155,7 +2326,7 @@
|
|
|
2155
2326
|
"type": "fieldset",
|
|
2156
2327
|
"notitle": true,
|
|
2157
2328
|
"condition": {
|
|
2158
|
-
"functionBody": "return ['AirPurifier', 'HeaterCooler'
|
|
2329
|
+
"functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
|
|
2159
2330
|
},
|
|
2160
2331
|
"items": [
|
|
2161
2332
|
{
|
|
@@ -2244,7 +2415,7 @@
|
|
|
2244
2415
|
"type": "fieldset",
|
|
2245
2416
|
"notitle": true,
|
|
2246
2417
|
"condition": {
|
|
2247
|
-
"functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
|
|
2418
|
+
"functionBody": "return ['AirPurifier', 'Fanv2, 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
|
|
2248
2419
|
},
|
|
2249
2420
|
"items": [
|
|
2250
2421
|
{
|
|
@@ -2264,6 +2435,57 @@
|
|
|
2264
2435
|
}
|
|
2265
2436
|
]
|
|
2266
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
|
+
},
|
|
2267
2489
|
{
|
|
2268
2490
|
"type": "fieldset",
|
|
2269
2491
|
"notitle": true,
|
|
@@ -2340,7 +2562,7 @@
|
|
|
2340
2562
|
"type": "fieldset",
|
|
2341
2563
|
"notitle": true,
|
|
2342
2564
|
"condition": {
|
|
2343
|
-
"functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
|
|
2565
|
+
"functionBody": "return ['AirPurifier', 'Fanv2, 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
|
|
2344
2566
|
},
|
|
2345
2567
|
"items": [
|
|
2346
2568
|
{
|
|
@@ -2372,7 +2594,7 @@
|
|
|
2372
2594
|
"type": "fieldset",
|
|
2373
2595
|
"notitle": true,
|
|
2374
2596
|
"condition": {
|
|
2375
|
-
"functionBody": "return ['AirPurifier', 'HeaterCooler'
|
|
2597
|
+
"functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
|
|
2376
2598
|
},
|
|
2377
2599
|
"items": [
|
|
2378
2600
|
{
|
|
@@ -21,6 +21,7 @@ import { SmokeSensorAccessory } from '../sensor/smoke.js';
|
|
|
21
21
|
import { TemperatureSensorAccessory } from '../sensor/temperature.js';
|
|
22
22
|
import { ValveAccessory } from '../valve.js';
|
|
23
23
|
import { PLUGIN_NAME } from '../../homebridge/settings.js';
|
|
24
|
+
import { FanAccessory } from '../climate/fan.js';
|
|
24
25
|
export function createIdentifier(info) {
|
|
25
26
|
return info.id ?? `${PLUGIN_NAME}:${info.type}:${info.name}`;
|
|
26
27
|
}
|
|
@@ -34,6 +35,8 @@ export function createAccessory(Service, Characteristic, platformAccessory, acce
|
|
|
34
35
|
return new COSensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
35
36
|
case AccessoryType.ContactSensor:
|
|
36
37
|
return new ContactSensorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
38
|
+
case AccessoryType.Fanv2:
|
|
39
|
+
return new FanAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
37
40
|
case AccessoryType.GarageDoorOpener:
|
|
38
41
|
return new GarageDoorAccessory(Service, Characteristic, platformAccessory, accessoryConfig, log, isGrouped);
|
|
39
42
|
case AccessoryType.HeaterCooler:
|
|
@@ -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,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,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;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/accessory/abstract/helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PlatformAccessory } from 'homebridge';
|
|
2
|
+
import { ActiveClimateAccessory } from './active.js';
|
|
3
|
+
import { AccessoryType } from '../../model/enums.js';
|
|
4
|
+
import { CharacteristicType, ServiceType, FanConfig } from '../../model/types.js';
|
|
5
|
+
import { Log } from '../../tools/log.js';
|
|
6
|
+
export declare class FanAccessory extends ActiveClimateAccessory<FanConfig> {
|
|
7
|
+
private readonly CURRENT_STATE_MAP;
|
|
8
|
+
private readonly TARGET_STATE_MAP;
|
|
9
|
+
constructor(Service: ServiceType, Characteristic: CharacteristicType, accessory: PlatformAccessory, config: FanConfig, log: Log, isGrouped: boolean);
|
|
10
|
+
protected getAccessoryType(): AccessoryType;
|
|
11
|
+
private onCurrentStateUpdate;
|
|
12
|
+
private onTargetStateUpdate;
|
|
13
|
+
private onSetTargetState;
|
|
14
|
+
private onSetDirection;
|
|
15
|
+
private fromCVState;
|
|
16
|
+
private toCurrentCVState;
|
|
17
|
+
private toTargetCVState;
|
|
18
|
+
private stateStringForCurrentCV;
|
|
19
|
+
private stateStringForTargetCV;
|
|
20
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { ActiveClimateAccessory } from './active.js';
|
|
2
|
+
import { strings } from '../../i18n/i18n.js';
|
|
3
|
+
import { AccessoryType, CharacteristicKey } from '../../model/enums.js';
|
|
4
|
+
export class FanAccessory extends ActiveClimateAccessory {
|
|
5
|
+
CURRENT_STATE_MAP;
|
|
6
|
+
TARGET_STATE_MAP;
|
|
7
|
+
constructor(Service, Characteristic, accessory, config, log, isGrouped) {
|
|
8
|
+
super(Service, Characteristic, accessory, config, log, isGrouped);
|
|
9
|
+
this.CURRENT_STATE_MAP = new Map([
|
|
10
|
+
['valueModeInactive', Characteristic.CurrentFanState.INACTIVE],
|
|
11
|
+
['valueModeIdle', Characteristic.CurrentFanState.IDLE],
|
|
12
|
+
['valueModeBlowing', Characteristic.CurrentFanState.BLOWING_AIR],
|
|
13
|
+
]);
|
|
14
|
+
this.TARGET_STATE_MAP = new Map([
|
|
15
|
+
['valueModeAuto', Characteristic.TargetFanState.AUTO],
|
|
16
|
+
['valueModeManual', Characteristic.TargetFanState.MANUAL],
|
|
17
|
+
]);
|
|
18
|
+
const validCurrentStates = Array.from(this.CURRENT_STATE_MAP.keys()).filter((key) => this.getRawValue(key, false) !== undefined);
|
|
19
|
+
if (validCurrentStates.length === 0) {
|
|
20
|
+
this.log.error(strings.fan.noCurrentStateValues, this.name);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.setupCharacteristic(CharacteristicKey.CurrentFanState, this.CURRENT_STATE_MAP.get(validCurrentStates[0]), 'topicGetCurrentFanState', this.onCurrentStateUpdate.bind(this), false)
|
|
24
|
+
?.setProps({ validValues: validCurrentStates.map((key) => this.CURRENT_STATE_MAP.get(key)) });
|
|
25
|
+
const validTargetStates = Array.from(this.TARGET_STATE_MAP.keys()).filter((key) => this.getRawValue(key, false) !== undefined);
|
|
26
|
+
if (validTargetStates.length === 0) {
|
|
27
|
+
this.log.error(strings.fan.noTargetStateValues, this.name);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.setupCharacteristic(CharacteristicKey.TargetFanState, this.TARGET_STATE_MAP.get(validTargetStates[0]), 'topicGetTargetFanState', this.onTargetStateUpdate.bind(this), false, 'topicSetTargetFanState', this.onSetTargetState.bind(this))
|
|
31
|
+
?.setProps({ validValues: validTargetStates.map((key) => this.TARGET_STATE_MAP.get(key)) });
|
|
32
|
+
this.setupCharacteristic(CharacteristicKey.RotationDirection, Characteristic.RotationDirection.CLOCKWISE, 'topicGetRotationDirection', this.bindOnUpdateNumericBoolean(CharacteristicKey.RotationDirection, 'valueDirectionCounterClockwise', strings.fan.clockwise, strings.fan.counterClockwise), false, 'topicSetRotationDirection', this.onSetDirection.bind(this));
|
|
33
|
+
}
|
|
34
|
+
getAccessoryType() {
|
|
35
|
+
return AccessoryType.Fanv2;
|
|
36
|
+
}
|
|
37
|
+
async onCurrentStateUpdate(_topic, value) {
|
|
38
|
+
const state = this.toCurrentCVState(value);
|
|
39
|
+
if (state === undefined) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.onUpdate(CharacteristicKey.CurrentFanState, state, this.stateStringForCurrentCV(state));
|
|
43
|
+
}
|
|
44
|
+
async onTargetStateUpdate(_topic, value) {
|
|
45
|
+
const state = this.toTargetCVState(value);
|
|
46
|
+
if (state === undefined) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
this.onUpdate(CharacteristicKey.TargetFanState, state, this.stateStringForTargetCV(state));
|
|
50
|
+
}
|
|
51
|
+
async onSetTargetState(value) {
|
|
52
|
+
const target = this.fromCVState(value);
|
|
53
|
+
if (target === undefined) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.onSet(CharacteristicKey.TargetFanState, value, target, 'topicSetTargetFanState', this.stateStringForTargetCV(value));
|
|
57
|
+
}
|
|
58
|
+
async onSetDirection(value) {
|
|
59
|
+
if (!this.assert('valueDirectionClockwise', 'valueDirectionCounterClockwise')) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const clockwise = value === this.Characteristic.RotationDirection.CLOCKWISE;
|
|
63
|
+
const logString = clockwise ? strings.fan.setDirectionClockwise : strings.fan.setDirectionCounterClockwise;
|
|
64
|
+
const publish = clockwise ? this.config.valueDirectionClockwise : this.config.valueDirectionCounterClockwise;
|
|
65
|
+
this.onSet(CharacteristicKey.RotationDirection, value, publish, 'topicSetRotationDirection', logString);
|
|
66
|
+
}
|
|
67
|
+
fromCVState(value) {
|
|
68
|
+
let primative = undefined;
|
|
69
|
+
this.TARGET_STATE_MAP.forEach((test, key) => {
|
|
70
|
+
if (value === test) {
|
|
71
|
+
primative = this.getPrimitiveValue(key);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
if (primative === undefined) {
|
|
75
|
+
this.log.error(strings.fan.badValue, this.name, `'${value}'`);
|
|
76
|
+
}
|
|
77
|
+
return primative;
|
|
78
|
+
}
|
|
79
|
+
toCurrentCVState(value) {
|
|
80
|
+
switch (value) {
|
|
81
|
+
case this.getPrimitiveValue('valueModeInactive', false):
|
|
82
|
+
return this.CURRENT_STATE_MAP.get('valueModeInactive');
|
|
83
|
+
case this.getPrimitiveValue('valueModeIdle', false):
|
|
84
|
+
return this.CURRENT_STATE_MAP.get('valueModeIdle');
|
|
85
|
+
case this.getPrimitiveValue('valueModeBlowing', false):
|
|
86
|
+
return this.CURRENT_STATE_MAP.get('valueModeBlowing');
|
|
87
|
+
}
|
|
88
|
+
this.logIfDesired(strings.fan.unknownValue, `'${value}'`);
|
|
89
|
+
}
|
|
90
|
+
toTargetCVState(value) {
|
|
91
|
+
switch (value) {
|
|
92
|
+
case this.getPrimitiveValue('valueModeAuto', false):
|
|
93
|
+
return this.TARGET_STATE_MAP.get('valueModeAuto');
|
|
94
|
+
case this.getPrimitiveValue('valueModeManual', false):
|
|
95
|
+
return this.TARGET_STATE_MAP.get('valueModeManual');
|
|
96
|
+
}
|
|
97
|
+
this.logIfDesired(strings.fan.unknownValue, `'${value}'`);
|
|
98
|
+
}
|
|
99
|
+
stateStringForCurrentCV(state) {
|
|
100
|
+
switch (state) {
|
|
101
|
+
case this.Characteristic.CurrentFanState.INACTIVE:
|
|
102
|
+
return strings.fan.stateInactive;
|
|
103
|
+
case this.Characteristic.CurrentFanState.IDLE:
|
|
104
|
+
return strings.fan.stateIdle;
|
|
105
|
+
case this.Characteristic.CurrentFanState.BLOWING_AIR:
|
|
106
|
+
return strings.fan.stateBlowing;
|
|
107
|
+
default:
|
|
108
|
+
return strings.fan.stateUnknown;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
stateStringForTargetCV(state) {
|
|
112
|
+
switch (state) {
|
|
113
|
+
case this.Characteristic.TargetFanState.AUTO:
|
|
114
|
+
return strings.fan.stateAuto;
|
|
115
|
+
case this.Characteristic.TargetFanState.MANUAL:
|
|
116
|
+
return strings.fan.stateManual;
|
|
117
|
+
default:
|
|
118
|
+
return strings.fan.stateUnknown;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=fan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fan.js","sourceRoot":"","sources":["../../../src/accessory/climate/fan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { TemperatureControlAccessory, DEFAULT_TEMPERATURE } from './temperatureControl.js';
|
|
2
|
-
import { FilterMaintenance } from '../addons/filter.js';
|
|
3
2
|
import { strings } from '../../i18n/i18n.js';
|
|
4
3
|
import { AccessoryType, CharacteristicKey } from '../../model/enums.js';
|
|
5
4
|
export class ThermostatAccessory extends TemperatureControlAccessory {
|
|
@@ -26,7 +25,6 @@ export class ThermostatAccessory extends TemperatureControlAccessory {
|
|
|
26
25
|
this.setupCharacteristic(CharacteristicKey.TargetTemperature, DEFAULT_TEMPERATURE, 'topicGetTargetTemperature', this.bindTemperatureUpdate(config, CharacteristicKey.TargetTemperature, strings.thermostat.temperatureTarget), true, 'topicSetTargetTemperature', this.onSetTemperature.bind(this));
|
|
27
26
|
this.setupCharacteristic(CharacteristicKey.CurrentRelativeHumidity, 0, 'topicGetCurrentRelativeHumidity', this.bindOnUpdateNumeric(CharacteristicKey.CurrentRelativeHumidity, strings.climate.humidityUpdate), false);
|
|
28
27
|
this.setupCharacteristic(CharacteristicKey.TargetRelativeHumidity, 0, 'topicGetTargetRelativeHumidity', this.bindOnUpdateNumeric(CharacteristicKey.TargetRelativeHumidity, strings.thermostat.humidityFuture), false, 'topicSetTargetRelativeHumidity', this.onSetHumidity.bind(this));
|
|
29
|
-
this.addTopicHandlers(FilterMaintenance.topicHandlers(Service, this, config));
|
|
30
28
|
}
|
|
31
29
|
getAccessoryType() {
|
|
32
30
|
return AccessoryType.Thermostat;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../../src/accessory/climate/thermostat.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../../src/accessory/climate/thermostat.ts"],"names":[],"mappings":"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"}
|