@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 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
+ }
@@ -0,0 +1,3 @@
1
+ import type { API } from 'homebridge';
2
+ declare const _default: (api: API) => void;
3
+ export = _default;
@@ -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,6 @@
1
+ "use strict";
2
+ const settings_1 = require("./settings");
3
+ const platform_1 = require("./platform");
4
+ module.exports = (api) => {
5
+ api.registerPlatform(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, platform_1.VantagePlatform);
6
+ };
@@ -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"}
@@ -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"}