@smarterhomeapp/homebridge-vantage 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +129 -0
- package/config.schema.json +84 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/platform.d.ts +19 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +269 -0
- package/dist/platform.js.map +1 -0
- package/dist/platformAccessory.d.ts +12 -0
- package/dist/platformAccessory.d.ts.map +1 -0
- package/dist/platformAccessory.js +203 -0
- package/dist/platformAccessory.js.map +1 -0
- package/dist/settings.d.ts +2 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +5 -0
- package/dist/settings.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/vantageInfusion.d.ts +49 -0
- package/dist/vantageInfusion.d.ts.map +1 -0
- package/dist/vantageInfusion.js +679 -0
- package/dist/vantageInfusion.js.map +1 -0
- package/package.json +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Homebridge Vantage Controls
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Homebridge Vantage Controls
|
|
2
|
+
|
|
3
|
+
A [Homebridge](https://homebridge.io/) plugin for Vantage Controls InFusion system.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Lighting Control**: Supports dimmers, RGB lights, and relays
|
|
8
|
+
- **Thermostat Control**: Full HVAC control with heating/cooling modes
|
|
9
|
+
- **Blind Control**: Window covering automation
|
|
10
|
+
- **Real-time Updates**: Live status updates from your InFusion controller
|
|
11
|
+
- **SSL Support**: Secure connections to your controller
|
|
12
|
+
- **Device Filtering**: Include/exclude specific devices by VID range
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
1. Install Homebridge:
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g homebridge
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
2. Install this plugin:
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g homebridge-vantage
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
3. Add the platform to your `config.json`:
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"platforms": [
|
|
30
|
+
{
|
|
31
|
+
"platform": "VantageControls",
|
|
32
|
+
"name": "Vantage Controls",
|
|
33
|
+
"ipaddress": "192.168.1.100",
|
|
34
|
+
"username": "your_username",
|
|
35
|
+
"password": "your_password",
|
|
36
|
+
"usecache": true,
|
|
37
|
+
"omit": "1234,5678",
|
|
38
|
+
"range": "1000,2000"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Configuration
|
|
45
|
+
|
|
46
|
+
| Parameter | Type | Required | Description |
|
|
47
|
+
|-----------|------|----------|-------------|
|
|
48
|
+
| `platform` | string | Yes | Must be "VantageControls" |
|
|
49
|
+
| `name` | string | Yes | Display name for the platform |
|
|
50
|
+
| `ipaddress` | string | Yes | IP address of your InFusion controller |
|
|
51
|
+
| `username` | string | No | Username for authentication |
|
|
52
|
+
| `password` | string | No | Password for authentication |
|
|
53
|
+
| `usecache` | boolean | No | Use cached configuration (default: true) |
|
|
54
|
+
| `omit` | string | No | Comma-separated list of VIDs to exclude |
|
|
55
|
+
| `range` | string | No | Comma-separated VID range (min,max) |
|
|
56
|
+
|
|
57
|
+
## Supported Devices
|
|
58
|
+
|
|
59
|
+
### Lighting
|
|
60
|
+
- **Dimmers**: Variable brightness control
|
|
61
|
+
- **RGB Lights**: Full color control with HSL values
|
|
62
|
+
- **Relays**: On/off switches for non-dimmable loads
|
|
63
|
+
|
|
64
|
+
### HVAC
|
|
65
|
+
- **Thermostats**: Temperature control with heating/cooling modes
|
|
66
|
+
- **Auto Mode**: Automatic temperature regulation
|
|
67
|
+
- **Temperature Units**: Celsius/Fahrenheit support
|
|
68
|
+
|
|
69
|
+
### Window Coverings
|
|
70
|
+
- **Blinds**: Position control (0-100%)
|
|
71
|
+
- **Shades**: Motorized window coverings
|
|
72
|
+
|
|
73
|
+
## Development
|
|
74
|
+
|
|
75
|
+
1. Clone the repository:
|
|
76
|
+
```bash
|
|
77
|
+
git clone https://github.com/yourusername/homebridge-vantage.git
|
|
78
|
+
cd homebridge-vantage
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
2. Install dependencies:
|
|
82
|
+
```bash
|
|
83
|
+
npm install
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
3. Build the project:
|
|
87
|
+
```bash
|
|
88
|
+
npm run build
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
4. Link for development:
|
|
92
|
+
```bash
|
|
93
|
+
npm run dev
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Troubleshooting
|
|
97
|
+
|
|
98
|
+
### Connection Issues
|
|
99
|
+
- Verify the IP address is correct
|
|
100
|
+
- Check if SSL is required (ports 3010/2010 vs 3001/2001)
|
|
101
|
+
- Ensure username/password are correct if authentication is enabled
|
|
102
|
+
|
|
103
|
+
### Device Not Appearing
|
|
104
|
+
- Check the `omit` and `range` parameters
|
|
105
|
+
- Verify the device VID is within the specified range
|
|
106
|
+
- Check Homebridge logs for discovery errors
|
|
107
|
+
|
|
108
|
+
### Performance Issues
|
|
109
|
+
- Reduce the number of devices by using the `omit` parameter
|
|
110
|
+
- Disable cache if configuration changes frequently
|
|
111
|
+
- Consider using device ranges to limit discovery
|
|
112
|
+
|
|
113
|
+
## License
|
|
114
|
+
|
|
115
|
+
MIT License - see LICENSE file for details.
|
|
116
|
+
|
|
117
|
+
## Contributing
|
|
118
|
+
|
|
119
|
+
1. Fork the repository
|
|
120
|
+
2. Create a feature branch
|
|
121
|
+
3. Make your changes
|
|
122
|
+
4. Add tests if applicable
|
|
123
|
+
5. Submit a pull request
|
|
124
|
+
|
|
125
|
+
## Support
|
|
126
|
+
|
|
127
|
+
For issues and questions:
|
|
128
|
+
- [GitHub Issues](https://github.com/yourusername/homebridge-vantage/issues)
|
|
129
|
+
- [Homebridge Community](https://github.com/homebridge/homebridge)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"pluginAlias": "VantageControls",
|
|
3
|
+
"pluginType": "platform",
|
|
4
|
+
|
|
5
|
+
"headerDisplay": "## Vantage Controls\nConfigure your Vantage InFusion controller.",
|
|
6
|
+
|
|
7
|
+
"schema": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"name": {
|
|
11
|
+
"title": "Name",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"default": "VantageControls",
|
|
14
|
+
"description": "A label for this platform entry."
|
|
15
|
+
},
|
|
16
|
+
"ipaddress": {
|
|
17
|
+
"title": "Controller IP",
|
|
18
|
+
"type": "string",
|
|
19
|
+
"format": "ipv4",
|
|
20
|
+
"placeholder": "192.168.1.50",
|
|
21
|
+
"description": "IP address of your Vantage InFusion controller."
|
|
22
|
+
},
|
|
23
|
+
"username": {
|
|
24
|
+
"title": "Username",
|
|
25
|
+
"type": "string",
|
|
26
|
+
"placeholder": "optional",
|
|
27
|
+
"description": "Only needed if your controller requires login."
|
|
28
|
+
},
|
|
29
|
+
"password": {
|
|
30
|
+
"title": "Password",
|
|
31
|
+
"type": "string",
|
|
32
|
+
"format": "password",
|
|
33
|
+
"placeholder": "optional",
|
|
34
|
+
"description": "Only needed if your controller requires login."
|
|
35
|
+
},
|
|
36
|
+
"forceSSL": {
|
|
37
|
+
"title": "Force SSL",
|
|
38
|
+
"type": "boolean",
|
|
39
|
+
"default": false,
|
|
40
|
+
"description": "Skip insecure ports and use 3010/2010 directly."
|
|
41
|
+
},
|
|
42
|
+
"usecache": {
|
|
43
|
+
"title": "Use Local Cache",
|
|
44
|
+
"type": "boolean",
|
|
45
|
+
"default": true,
|
|
46
|
+
"description": "Use previously downloaded configuration (if present) to speed up startup."
|
|
47
|
+
},
|
|
48
|
+
"omit": {
|
|
49
|
+
"title": "Omit VIDs",
|
|
50
|
+
"type": "string",
|
|
51
|
+
"placeholder": "123,456,789",
|
|
52
|
+
"description": "Comma-separated list of Vantage object VIDs to skip."
|
|
53
|
+
},
|
|
54
|
+
"range": {
|
|
55
|
+
"title": "VID Range",
|
|
56
|
+
"type": "string",
|
|
57
|
+
"default": "0,999999999",
|
|
58
|
+
"placeholder": "0,999999999",
|
|
59
|
+
"description": "Include only VIDs within this inclusive range, e.g. 0,5000. If you have more than 140 loads, add 2 instances of the vantage platform with different ranges."
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"required": ["name", "ipaddress"],
|
|
63
|
+
"additionalProperties": false
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
"layout": [
|
|
67
|
+
"name",
|
|
68
|
+
"ipaddress",
|
|
69
|
+
{
|
|
70
|
+
"type": "flex",
|
|
71
|
+
"flex-flow": "row wrap",
|
|
72
|
+
"items": ["username", "password"]
|
|
73
|
+
},
|
|
74
|
+
"forceSSL",
|
|
75
|
+
"usecache",
|
|
76
|
+
{
|
|
77
|
+
"type": "fieldset",
|
|
78
|
+
"title": "Advanced",
|
|
79
|
+
"expandable": true,
|
|
80
|
+
"expanded": false,
|
|
81
|
+
"items": ["omit", "range"]
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAW5H,qBAAa,yBAA0B,YAAW,qBAAqB;aAQnD,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IAT1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IAGpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;gBAGpC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAmB1B,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAY/C,eAAe;CAwDhB;yBAGe,KAAK,GAAG;AAAxB,wBAEE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAwD;AACxD,yCAA6C;AAC7C,2DAAuD;AAOvD,MAAa,yBAAyB;IAOpC,YACkB,GAAW,EACX,MAAsB,EACtB,GAAQ;QAFR,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAgB;QACtB,QAAG,GAAH,GAAG,CAAK;QATV,YAAO,GAAmB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/C,mBAAc,GAA0B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;QAGpE,gBAAW,GAAwB,EAAE,CAAC;QAOpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAMpE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YACrC,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAElD,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAMD,kBAAkB,CAAC,SAA4B;QAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;QAGtE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAOD,eAAe;QAEb,MAAM,QAAQ,GAAG,IAAI,0BAAe,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAGtE,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAI7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAIxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBAEtF,IAAI,iBAAiB,EAAE,CAAC;oBAEtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0CAA0C,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;oBAQzF,IAAI,oCAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBAMxD,CAAC;qBAAM,CAAC;oBAEN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAGpD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAIpE,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;oBAIlC,IAAI,oCAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAG9C,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,sBAAW,EAAE,wBAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAjGD,8DAiGC;AAGD,kBAAe,CAAC,GAAQ,EAAE,EAAE;IAC1B,GAAG,CAAC,gBAAgB,CAAC,sBAAW,EAAE,wBAAa,EAAE,yBAAyB,CAAC,CAAC;AAC9E,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig } from 'homebridge';
|
|
2
|
+
import { VantageInfusion } from './vantageInfusion';
|
|
3
|
+
export declare class VantagePlatform implements DynamicPlatformPlugin {
|
|
4
|
+
readonly log: Logger;
|
|
5
|
+
readonly config: PlatformConfig;
|
|
6
|
+
readonly api: API;
|
|
7
|
+
readonly accessories: PlatformAccessory[];
|
|
8
|
+
private infusion;
|
|
9
|
+
private syncedOnce;
|
|
10
|
+
private accessoriesByVid;
|
|
11
|
+
private realtimeWired;
|
|
12
|
+
constructor(log: Logger, config: PlatformConfig, api: API);
|
|
13
|
+
configureAccessory(accessory: PlatformAccessory): void;
|
|
14
|
+
private syncAccessories;
|
|
15
|
+
private wireRealtimeListeners;
|
|
16
|
+
private finalizeLogs;
|
|
17
|
+
getInfusion(): VantageInfusion;
|
|
18
|
+
getApi(): API;
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAiB,MAAM,SAAS,CAAC;AAEvD,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,2BAA2B,CAAmD;IACtF,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,SAAS,CAAY;gBAEjB,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG;IA6DzD,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,UAAU;IAyWlB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,6BAA6B;IAS9B,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAWtC,WAAW,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,IAAI,GAAG,IAAI;IAO/D,WAAW,IAAI,eAAe;CAGtC"}
|
package/dist/platform.js
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VantagePlatform = void 0;
|
|
4
|
+
const settings_1 = require("./settings");
|
|
5
|
+
const vantageInfusion_1 = require("./vantageInfusion");
|
|
6
|
+
const platformAccessory_1 = require("./platformAccessory");
|
|
7
|
+
class VantagePlatform {
|
|
8
|
+
constructor(log, config, api) {
|
|
9
|
+
this.log = log;
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.api = api;
|
|
12
|
+
this.accessories = [];
|
|
13
|
+
this.syncedOnce = false; // prevent double-sync when both event + promise fire
|
|
14
|
+
this.accessoriesByVid = new Map();
|
|
15
|
+
this.realtimeWired = false;
|
|
16
|
+
if (!config || !config.ipaddress) {
|
|
17
|
+
this.log.error(`[${settings_1.PLATFORM_NAME}] Missing required config "ipaddress" — plugin will not start.`);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// Construct infusion
|
|
21
|
+
this.infusion = new vantageInfusion_1.VantageInfusion({
|
|
22
|
+
ipaddress: String(config.ipaddress),
|
|
23
|
+
username: config.username ?? '',
|
|
24
|
+
password: config.password ?? '',
|
|
25
|
+
usecache: config.usecache ?? true,
|
|
26
|
+
omit: config.omit ?? '',
|
|
27
|
+
range: config.range ?? '0,999999999',
|
|
28
|
+
forceSSL: config.forceSSL ?? false,
|
|
29
|
+
log: this.log,
|
|
30
|
+
});
|
|
31
|
+
// ----- Standard HB boot path -----
|
|
32
|
+
this.api.on("didFinishLaunching" /* APIEvent.DID_FINISH_LAUNCHING */, async () => {
|
|
33
|
+
try {
|
|
34
|
+
await this.infusion.start();
|
|
35
|
+
if (!this.syncedOnce) {
|
|
36
|
+
const devices = await this.infusion.discoverDevices();
|
|
37
|
+
await this.syncAccessories(devices);
|
|
38
|
+
this.finalizeLogs();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
this.log.error(`Startup failed: ${e?.message ?? String(e)}`);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// Cache any restored accessories
|
|
47
|
+
configureAccessory(accessory) {
|
|
48
|
+
this.accessories.push(accessory);
|
|
49
|
+
}
|
|
50
|
+
// Reconcile cached accessories with current device list
|
|
51
|
+
async syncAccessories(devices) {
|
|
52
|
+
const uuidFor = (d) => this.api.hap.uuid.generate(String(d.vid));
|
|
53
|
+
// Map current devices
|
|
54
|
+
const wanted = new Map();
|
|
55
|
+
for (const d of devices)
|
|
56
|
+
wanted.set(uuidFor(d), d);
|
|
57
|
+
// Update existing / mark seen
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
const toUpdate = [];
|
|
60
|
+
for (const acc of this.accessories) {
|
|
61
|
+
const d = wanted.get(acc.UUID);
|
|
62
|
+
if (d) {
|
|
63
|
+
// Update name/context and re-bind
|
|
64
|
+
acc.displayName = d.name;
|
|
65
|
+
acc.context.device = d;
|
|
66
|
+
new platformAccessory_1.VantagePlatformAccessory(this, acc);
|
|
67
|
+
seen.add(acc.UUID);
|
|
68
|
+
toUpdate.push(acc);
|
|
69
|
+
if (d.vid)
|
|
70
|
+
this.accessoriesByVid.set(String(d.vid), acc);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (toUpdate.length) {
|
|
74
|
+
this.api.updatePlatformAccessories(toUpdate);
|
|
75
|
+
this.log.info(`Updated ${toUpdate.length} existing accessories`);
|
|
76
|
+
}
|
|
77
|
+
// Register new
|
|
78
|
+
const toRegister = [];
|
|
79
|
+
for (const d of devices) {
|
|
80
|
+
const uuid = uuidFor(d);
|
|
81
|
+
if (seen.has(uuid))
|
|
82
|
+
continue;
|
|
83
|
+
const acc = new this.api.platformAccessory(d.name, uuid);
|
|
84
|
+
acc.context.device = d;
|
|
85
|
+
new platformAccessory_1.VantagePlatformAccessory(this, acc);
|
|
86
|
+
toRegister.push(acc);
|
|
87
|
+
this.accessories.push(acc);
|
|
88
|
+
if (d.vid)
|
|
89
|
+
this.accessoriesByVid.set(String(d.vid), acc);
|
|
90
|
+
}
|
|
91
|
+
if (toRegister.length) {
|
|
92
|
+
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, toRegister);
|
|
93
|
+
this.log.info(`Registered ${toRegister.length} new accessories`);
|
|
94
|
+
}
|
|
95
|
+
// Unregister stale
|
|
96
|
+
const toUnregister = this.accessories.filter((acc) => !wanted.has(acc.UUID));
|
|
97
|
+
if (toUnregister.length) {
|
|
98
|
+
this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, toUnregister);
|
|
99
|
+
this.log.info(`Unregistered ${toUnregister.length} stale accessories`);
|
|
100
|
+
// Remove from local cache & VID map
|
|
101
|
+
for (const acc of toUnregister) {
|
|
102
|
+
const vid = acc?.context?.device?.vid;
|
|
103
|
+
if (vid)
|
|
104
|
+
this.accessoriesByVid.delete(String(vid));
|
|
105
|
+
const idx = this.accessories.findIndex((a) => a.UUID === acc.UUID);
|
|
106
|
+
if (idx >= 0)
|
|
107
|
+
this.accessories.splice(idx, 1);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Arm realtime listeners once we know the VID→accessory map
|
|
111
|
+
this.wireRealtimeListeners();
|
|
112
|
+
this.syncedOnce = true;
|
|
113
|
+
}
|
|
114
|
+
wireRealtimeListeners() {
|
|
115
|
+
if (this.realtimeWired)
|
|
116
|
+
return;
|
|
117
|
+
this.realtimeWired = true;
|
|
118
|
+
const S = this.api.hap.Service;
|
|
119
|
+
const C = this.api.hap.Characteristic;
|
|
120
|
+
// LIGHTS (relay / dimmer / rgb)
|
|
121
|
+
this.infusion.on('loadStatusChange', (vid, value, command) => {
|
|
122
|
+
const acc = this.accessoriesByVid.get(String(vid));
|
|
123
|
+
if (!acc)
|
|
124
|
+
return;
|
|
125
|
+
const dev = acc.context.device;
|
|
126
|
+
if (!dev)
|
|
127
|
+
return;
|
|
128
|
+
this.log.info("loadStatusChange (VID=%s, Name=%s, Bri:%d)", vid, dev.name, value);
|
|
129
|
+
if (dev.type === 'relay' || dev.type === 'dimmer' || dev.type === 'rgb') {
|
|
130
|
+
dev.bri = Number(value);
|
|
131
|
+
dev.power = dev.bri > 0;
|
|
132
|
+
}
|
|
133
|
+
if (dev.type === 'relay') {
|
|
134
|
+
acc.getService(S.Switch)?.updateCharacteristic(C.On, dev.power);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (dev.type === 'dimmer' || dev.type === 'rgb') {
|
|
138
|
+
const lb = acc.getService(S.Lightbulb);
|
|
139
|
+
lb?.updateCharacteristic(C.On, dev.power);
|
|
140
|
+
lb?.updateCharacteristic(C.Brightness, dev.bri);
|
|
141
|
+
// RGB incremental HSL feedback
|
|
142
|
+
if (dev.type === 'rgb' && typeof command === 'number') {
|
|
143
|
+
if (command === 0)
|
|
144
|
+
dev.hue = Number(value);
|
|
145
|
+
if (command === 1)
|
|
146
|
+
dev.sat = Number(value);
|
|
147
|
+
if (command === 2)
|
|
148
|
+
dev.bri = Number(value);
|
|
149
|
+
lb?.updateCharacteristic(C.Hue, dev.hue ?? 0);
|
|
150
|
+
lb?.updateCharacteristic(C.Saturation, dev.sat ?? 0);
|
|
151
|
+
lb?.updateCharacteristic(C.Brightness, dev.bri ?? 0);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
// BLINDS
|
|
156
|
+
this.infusion.on('blindStatusChange', (vid, value) => {
|
|
157
|
+
const acc = this.accessoriesByVid.get(String(vid));
|
|
158
|
+
if (!acc)
|
|
159
|
+
return;
|
|
160
|
+
const dev = acc.context.device;
|
|
161
|
+
if (!dev)
|
|
162
|
+
return;
|
|
163
|
+
this.log.info("blindStatusChange (VID=%s, Name=%s, Pos:%d)", vid, dev.name, value);
|
|
164
|
+
dev.pos = Number(value);
|
|
165
|
+
const wc = acc.getService(S.WindowCovering);
|
|
166
|
+
wc?.updateCharacteristic(C.CurrentPosition, dev.pos);
|
|
167
|
+
wc?.updateCharacteristic(C.PositionState, 2); // Stopped
|
|
168
|
+
});
|
|
169
|
+
// THERMOSTATS — temp (legacy event) - loops through ALL thermostats like original
|
|
170
|
+
this.infusion.on('thermostatDidChange', (value) => {
|
|
171
|
+
// Loop through all thermostat accessories and refresh their state
|
|
172
|
+
for (const [vid, acc] of this.accessoriesByVid) {
|
|
173
|
+
const dev = acc.context.device;
|
|
174
|
+
if (dev && dev.type === 'thermostat') {
|
|
175
|
+
const svc = acc.getService(S.Thermostat);
|
|
176
|
+
if (svc) {
|
|
177
|
+
// Refresh thermostat state (from original code)
|
|
178
|
+
this.infusion.Thermostat_GetIndoorTemperature(vid);
|
|
179
|
+
this.infusion.Thermostat_GetState(vid);
|
|
180
|
+
this.infusion.Thermostat_GetHeating(vid);
|
|
181
|
+
this.infusion.Thermostat_GetCooling(vid);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// THERMOSTATS — temp
|
|
187
|
+
this.infusion.on('thermostatIndoorTemperatureChange', (vid, temp) => {
|
|
188
|
+
const acc = this.accessoriesByVid.get(String(vid));
|
|
189
|
+
if (!acc)
|
|
190
|
+
return;
|
|
191
|
+
const dev = acc.context.device;
|
|
192
|
+
let temperature = Number(temp);
|
|
193
|
+
// Validate temperature range (from original code)
|
|
194
|
+
if (temperature > 100) {
|
|
195
|
+
temperature = 100;
|
|
196
|
+
this.log.warn(`Thermostat ${vid} reported invalid temperature ${temp}°C, capping at 100°C`);
|
|
197
|
+
}
|
|
198
|
+
dev.temperature = temperature;
|
|
199
|
+
this.log.info(`thermostatIndoorTemperatureChange (VID=${vid}, Name=${dev.name}, Temp=${temperature})`);
|
|
200
|
+
acc.getService(S.Thermostat)
|
|
201
|
+
?.updateCharacteristic(C.CurrentTemperature, temperature);
|
|
202
|
+
});
|
|
203
|
+
// THERMOSTATS — mode/targets
|
|
204
|
+
this.infusion.on('thermostatIndoorModeChange', (vid, mode, targetTemp) => {
|
|
205
|
+
const acc = this.accessoriesByVid.get(String(vid));
|
|
206
|
+
if (!acc)
|
|
207
|
+
return;
|
|
208
|
+
const dev = acc.context.device;
|
|
209
|
+
const svc = acc.getService(S.Thermostat);
|
|
210
|
+
if (!svc || !dev)
|
|
211
|
+
return;
|
|
212
|
+
this.log.info(`thermostatIndoorModeChange (VID=${vid}, Name=${dev.name}, Mode=${mode}, TargetTemp=${targetTemp})`);
|
|
213
|
+
// this.log.info(`Before update - dev.mode=${dev.mode}, dev.targetTemp=${dev.targetTemp}, dev.heating=${dev.heating}, dev.cooling=${dev.cooling}`);
|
|
214
|
+
if (targetTemp === -1) {
|
|
215
|
+
// Only update mode when targetTemp is -1 (mode change without temperature)
|
|
216
|
+
dev.mode = mode;
|
|
217
|
+
// compute current state from thresholds + mode
|
|
218
|
+
let current = 0;
|
|
219
|
+
if (dev.temperature <= dev.heating && mode === 1)
|
|
220
|
+
current = 1;
|
|
221
|
+
else if (dev.temperature >= dev.cooling && mode === 2)
|
|
222
|
+
current = 2;
|
|
223
|
+
else if (mode === 3) {
|
|
224
|
+
if (dev.temperature <= dev.heating)
|
|
225
|
+
current = 1;
|
|
226
|
+
else if (dev.temperature >= dev.cooling)
|
|
227
|
+
current = 2;
|
|
228
|
+
}
|
|
229
|
+
dev.current = current; // Store the calculated current state
|
|
230
|
+
svc.updateCharacteristic(C.CurrentHeatingCoolingState, current);
|
|
231
|
+
svc.updateCharacteristic(C.TargetHeatingCoolingState, mode);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
dev.targetTemp = Math.min(38, targetTemp);
|
|
235
|
+
if (mode === 1) {
|
|
236
|
+
dev.heating = Math.min(25, targetTemp); // HomeKit max is 25°C
|
|
237
|
+
svc.updateCharacteristic(C.HeatingThresholdTemperature, dev.heating);
|
|
238
|
+
}
|
|
239
|
+
else if (mode === 2) {
|
|
240
|
+
dev.cooling = Math.min(35, targetTemp);
|
|
241
|
+
svc.updateCharacteristic(C.CoolingThresholdTemperature, dev.cooling);
|
|
242
|
+
}
|
|
243
|
+
// Update target temperature based on mode (from original logic)
|
|
244
|
+
if (dev.mode === 1)
|
|
245
|
+
dev.targetTemp = dev.heating;
|
|
246
|
+
else if (dev.mode === 2)
|
|
247
|
+
dev.targetTemp = dev.cooling;
|
|
248
|
+
else if (dev.mode === 3)
|
|
249
|
+
dev.targetTemp = (dev.temperature <= dev.heating) ? dev.heating : dev.cooling;
|
|
250
|
+
svc.updateCharacteristic(C.TargetTemperature, dev.targetTemp);
|
|
251
|
+
svc.updateCharacteristic(C.TargetHeatingCoolingState, dev.mode);
|
|
252
|
+
// this.log.info(`After update - dev.mode=${dev.mode}, dev.targetTemp=${dev.targetTemp}, dev.heating=${dev.heating}, dev.cooling=${dev.cooling}`);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
finalizeLogs() {
|
|
257
|
+
// Legacy “store/open for business” logs
|
|
258
|
+
this.log.warn('VantagePlatform for InFusion Controller (end configuration store)');
|
|
259
|
+
this.log.warn('VantagePlatform for InFusion Controller (is open for business)');
|
|
260
|
+
}
|
|
261
|
+
// Exposed for accessory class
|
|
262
|
+
getInfusion() {
|
|
263
|
+
return this.infusion;
|
|
264
|
+
}
|
|
265
|
+
getApi() {
|
|
266
|
+
return this.api;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
exports.VantagePlatform = VantagePlatform;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PlatformAccessory } from 'homebridge';
|
|
2
|
+
import { VantagePlatform } from './platform';
|
|
3
|
+
export declare class VantagePlatformAccessory {
|
|
4
|
+
private readonly platform;
|
|
5
|
+
private readonly accessory;
|
|
6
|
+
private Service;
|
|
7
|
+
private Characteristic;
|
|
8
|
+
constructor(platform: VantagePlatform, accessory: PlatformAccessory);
|
|
9
|
+
/** Call this both on create and on restore */
|
|
10
|
+
registerServices(): void;
|
|
11
|
+
private safeRemoveCharacteristic;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platformAccessory.d.ts","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,iBAAiB,EAA2B,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAGpB,QAAQ,EAAE,yBAAyB,EACnC,SAAS,EAAE,iBAAiB,EAC7C,MAAM,EAAE,aAAa;IA+BvB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,uBAAuB;IA6C/B,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,2BAA2B;IAyBnC,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,6BAA6B;IAIrC,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,8BAA8B;IAItC,OAAO,CAAC,8BAA8B;IAItC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,gBAAgB;CAGzB"}
|