@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.
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VantagePlatformAccessory = void 0;
4
+ class VantagePlatformAccessory {
5
+ constructor(platform, accessory) {
6
+ this.platform = platform;
7
+ this.accessory = accessory;
8
+ this.Service = this.platform.api.hap.Service;
9
+ this.Characteristic = this.platform.api.hap.Characteristic;
10
+ this.registerServices();
11
+ }
12
+ /** Call this both on create and on restore */
13
+ registerServices() {
14
+ const device = this.accessory.context.device;
15
+ if (!device) {
16
+ this.platform.log.warn(`No device context on ${this.accessory.displayName}; leaving as-is`);
17
+ return;
18
+ }
19
+ // Accessory Info (always)
20
+ const info = this.accessory.getService(this.Service.AccessoryInformation) ??
21
+ this.accessory.addService(this.Service.AccessoryInformation);
22
+ info.setCharacteristic(this.Characteristic.Manufacturer, 'Vantage Controls');
23
+ info.setCharacteristic(this.Characteristic.Model, device.objectType ?? device.type);
24
+ info.setCharacteristic(this.Characteristic.SerialNumber, `VID ${device.vid}`);
25
+ // Build the correct primary service for the type
26
+ let primary;
27
+ if (device.type === 'relay') {
28
+ primary =
29
+ this.accessory.getService(this.Service.Switch) ??
30
+ this.accessory.addService(this.Service.Switch, this.accessory.displayName);
31
+ // REQUIRED characteristic
32
+ const on = primary.getCharacteristic(this.Characteristic.On);
33
+ on.removeAllListeners('set'); // avoid duplicate handlers on restore
34
+ on.onSet(async (value) => this.platform.getInfusion().setRelay(device.address, !!value));
35
+ // Category helps iOS
36
+ this.accessory.category = 8 /* this.platform.api.hap.Categories.SWITCH */;
37
+ }
38
+ if (device.type === 'dimmer' || device.type === 'rgb') {
39
+ primary =
40
+ this.accessory.getService(this.Service.Lightbulb) ??
41
+ this.accessory.addService(this.Service.Lightbulb, this.accessory.displayName);
42
+ // On
43
+ const on = primary.getCharacteristic(this.Characteristic.On);
44
+ on.removeAllListeners('set');
45
+ on.onSet(async (value) => this.platform.getInfusion().setRelayOrDim(device.address, !!value, device.bri ?? 100, device.type));
46
+ // Brightness (required for dimmer)
47
+ const bri = primary.getCharacteristic(this.Characteristic.Brightness);
48
+ bri.removeAllListeners('set');
49
+ bri.onSet(async (value) => this.platform.getInfusion().setBrightness(device.address, Number(value)));
50
+ // RGB extras
51
+ if (device.type === 'rgb') {
52
+ const hue = primary.getCharacteristic(this.Characteristic.Hue);
53
+ hue.removeAllListeners('set');
54
+ hue.onSet((v) => this.platform.getInfusion().setHue(device.address, Number(v)));
55
+ const sat = primary.getCharacteristic(this.Characteristic.Saturation);
56
+ sat.removeAllListeners('set');
57
+ sat.onSet((v) => this.platform.getInfusion().setSaturation(device.address, Number(v)));
58
+ }
59
+ else {
60
+ // Ensure RGB chars aren’t lingering from a previous cache
61
+ this.safeRemoveCharacteristic(primary, this.Characteristic.Hue);
62
+ this.safeRemoveCharacteristic(primary, this.Characteristic.Saturation);
63
+ }
64
+ this.accessory.category = 5 /* this.platform.api.hap.Categories.LIGHTBULB */;
65
+ }
66
+ if (device.type === 'blind') {
67
+ primary =
68
+ this.accessory.getService(this.Service.WindowCovering) ??
69
+ this.accessory.addService(this.Service.WindowCovering, this.accessory.displayName);
70
+ const tgt = primary.getCharacteristic(this.Characteristic.TargetPosition);
71
+ tgt.removeAllListeners('set');
72
+ tgt.onSet((value) => this.platform.getInfusion().setBlindPosition(device.address, Number(value)));
73
+ // Make sure required reads exist (they can be updated via events)
74
+ primary.getCharacteristic(this.Characteristic.CurrentPosition);
75
+ primary.getCharacteristic(this.Characteristic.PositionState);
76
+ this.accessory.category = 14 /* this.platform.api.hap.Categories.WINDOW_COVERING */;
77
+ }
78
+ if (device.type === 'thermostat') {
79
+ primary =
80
+ this.accessory.getService(this.Service.Thermostat) ??
81
+ this.accessory.addService(this.Service.Thermostat, this.accessory.displayName);
82
+ // Target Temperature
83
+ const tgt = primary.getCharacteristic(this.Characteristic.TargetTemperature);
84
+ tgt.removeAllListeners('set');
85
+ tgt.removeAllListeners('get');
86
+ tgt.onSet((value) => {
87
+ const dev = this.accessory.context.device;
88
+ dev.targetTemp = Number(value);
89
+ // Logic from original: determine mode based on temperature comparison
90
+ if (dev.mode === 0) {
91
+ if (dev.targetTemp > dev.temperature) {
92
+ dev.mode = 1; // heat
93
+ }
94
+ else if (dev.targetTemp < dev.temperature) {
95
+ dev.mode = 2; // cool
96
+ }
97
+ dev.current = dev.mode;
98
+ }
99
+ // Update heating/cooling thresholds based on mode
100
+ if (dev.mode === 1) {
101
+ dev.heating = Number(value);
102
+ }
103
+ else if (dev.mode === 2) {
104
+ dev.cooling = Number(value);
105
+ }
106
+ this.platform.getInfusion().setThermostatTarget(device.address, Number(value), dev.mode, dev.heating, dev.cooling);
107
+ });
108
+ tgt.onGet(() => {
109
+ const dev = this.accessory.context.device;
110
+ return dev?.targetTemp ?? 20;
111
+ });
112
+ // Target Heating/Cooling State
113
+ const mode = primary.getCharacteristic(this.Characteristic.TargetHeatingCoolingState);
114
+ mode.removeAllListeners('set');
115
+ mode.removeAllListeners('get');
116
+ mode.onSet((value) => {
117
+ const dev = this.accessory.context.device;
118
+ dev.mode = Number(value);
119
+ // Logic from original: update target temperature based on mode
120
+ if (dev.mode === 1) {
121
+ dev.targetTemp = dev.heating;
122
+ }
123
+ else if (dev.mode === 2) {
124
+ dev.targetTemp = dev.cooling;
125
+ }
126
+ else if (dev.mode === 3) {
127
+ dev.targetTemp = (dev.temperature <= dev.heating) ? dev.heating : dev.cooling;
128
+ }
129
+ this.platform.getInfusion().setThermostatMode(device.address, Number(value));
130
+ });
131
+ mode.onGet(() => {
132
+ const dev = this.accessory.context.device;
133
+ return dev?.mode ?? 0;
134
+ });
135
+ // Current Temperature
136
+ const currentTemp = primary.getCharacteristic(this.Characteristic.CurrentTemperature);
137
+ currentTemp.removeAllListeners('get');
138
+ currentTemp.onGet(() => {
139
+ const dev = this.accessory.context.device;
140
+ const temp = dev?.temperature ?? 20;
141
+ return Math.min(100, Math.max(-50, temp)); // Clamp to valid range
142
+ });
143
+ // Current Heating/Cooling State
144
+ const currentState = primary.getCharacteristic(this.Characteristic.CurrentHeatingCoolingState);
145
+ currentState.removeAllListeners('get');
146
+ currentState.onGet(() => {
147
+ const dev = this.accessory.context.device;
148
+ return dev?.current ?? 0;
149
+ });
150
+ // Heating Threshold Temperature
151
+ const heatingThreshold = primary.getCharacteristic(this.Characteristic.HeatingThresholdTemperature);
152
+ heatingThreshold.removeAllListeners('get');
153
+ heatingThreshold.onGet(() => {
154
+ const dev = this.accessory.context.device;
155
+ const heating = dev?.heating ?? 20;
156
+ return Math.min(25, Math.max(10, heating)); // Clamp to valid range (10-25°C)
157
+ });
158
+ // Cooling Threshold Temperature
159
+ const coolingThreshold = primary.getCharacteristic(this.Characteristic.CoolingThresholdTemperature);
160
+ coolingThreshold.removeAllListeners('get');
161
+ coolingThreshold.onGet(() => {
162
+ const dev = this.accessory.context.device;
163
+ return dev?.cooling ?? 25;
164
+ });
165
+ // Initialize thermostat state (from original code)
166
+ this.platform.getInfusion().Thermostat_GetIndoorTemperature(device.address);
167
+ this.platform.getInfusion().Thermostat_GetState(device.address);
168
+ this.platform.getInfusion().Thermostat_GetHeating(device.address);
169
+ this.platform.getInfusion().Thermostat_GetCooling(device.address);
170
+ this.accessory.category = 9 /* this.platform.api.hap.Categories.THERMOSTAT */;
171
+ }
172
+ if (!primary) {
173
+ this.platform.log.warn(`Unsupported device type ${device.type} for ${this.accessory.displayName}`);
174
+ return;
175
+ }
176
+ // Mark primary (helps Home app pick the right tile)
177
+ try {
178
+ primary.setPrimaryService?.(true);
179
+ }
180
+ catch { }
181
+ // PRUNE stale/incorrect services (keep AccessoryInformation + current primary)
182
+ for (const s of [...this.accessory.services]) {
183
+ if (s === primary)
184
+ continue;
185
+ if (s === info)
186
+ continue;
187
+ // Remove anything else (e.g., an old Switch lingering on a dimmer)
188
+ this.accessory.removeService(s);
189
+ }
190
+ }
191
+ safeRemoveCharacteristic(svc, C) {
192
+ const c = svc.getCharacteristic(C);
193
+ if (c) {
194
+ try {
195
+ svc.removeCharacteristic(c);
196
+ }
197
+ catch {
198
+ // ignore if Homebridge version doesn’t support removal
199
+ }
200
+ }
201
+ }
202
+ }
203
+ exports.VantagePlatformAccessory = VantagePlatformAccessory;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformAccessory.js","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const PLUGIN_NAME = "homebridge-vantage";
2
+ export declare const PLATFORM_NAME = "VantageControls";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,WAAW,uBAAuB,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PLATFORM_NAME = exports.PLUGIN_NAME = void 0;
4
+ exports.PLUGIN_NAME = 'homebridge-vantage';
5
+ exports.PLATFORM_NAME = 'VantageControls';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,iBAAiB,CAAC;AAClC,QAAA,WAAW,GAAG,oBAAoB,CAAC"}
@@ -0,0 +1,54 @@
1
+ export type VantageType = 'relay' | 'dimmer' | 'rgb' | 'blind' | 'thermostat';
2
+ export interface VantageDeviceBase {
3
+ name: string;
4
+ address: string;
5
+ vid: string;
6
+ objectType: string;
7
+ type: VantageType;
8
+ }
9
+ export interface VantageRelay extends VantageDeviceBase {
10
+ type: 'relay';
11
+ bri: number;
12
+ power: boolean;
13
+ loadType?: string;
14
+ }
15
+ export interface VantageDimmer extends VantageDeviceBase {
16
+ type: 'dimmer';
17
+ bri: number;
18
+ power: boolean;
19
+ loadType?: string;
20
+ }
21
+ export interface VantageRGB extends VantageDeviceBase {
22
+ type: 'rgb';
23
+ bri: number;
24
+ power: boolean;
25
+ hue: number;
26
+ sat: number;
27
+ loadType?: string;
28
+ }
29
+ export interface VantageBlind extends VantageDeviceBase {
30
+ type: 'blind';
31
+ pos: number;
32
+ posState: number;
33
+ }
34
+ export interface VantageThermostat extends VantageDeviceBase {
35
+ type: 'thermostat';
36
+ temperature: number;
37
+ targetTemp: number;
38
+ heating: number;
39
+ cooling: number;
40
+ mode: number;
41
+ current: number;
42
+ units: 0 | 1;
43
+ }
44
+ export type VantageDevice = VantageRelay | VantageDimmer | VantageRGB | VantageBlind | VantageThermostat;
45
+ export interface VantageConfig {
46
+ platform: 'VantageControls';
47
+ ipaddress: string;
48
+ username?: string;
49
+ password?: string;
50
+ usecache?: boolean;
51
+ omit?: string;
52
+ range?: string;
53
+ forceSSL?: boolean;
54
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { Logger } from 'homebridge';
3
+ import type { VantageDevice } from './types';
4
+ interface Options {
5
+ ipaddress: string;
6
+ username: string;
7
+ password: string;
8
+ usecache: boolean;
9
+ omit: string;
10
+ range: string;
11
+ log: Logger;
12
+ forceSSL?: boolean;
13
+ }
14
+ export declare class VantageInfusion extends EventEmitter {
15
+ private readonly opts;
16
+ private readonly xml;
17
+ private command;
18
+ private isInsecureCmd;
19
+ private isInsecureCfg;
20
+ private getCacheFilePath;
21
+ constructor(opts: Options);
22
+ /** Probe ports and open command session */
23
+ start(): Promise<void>;
24
+ private portUsable;
25
+ private startCommand;
26
+ private wireCommandSocket;
27
+ private parseRealtime;
28
+ private sanitizeXml;
29
+ /** XML/config discovery; returns devices (replaces old Discover/DiscoverSSL) */
30
+ discoverDevices(): Promise<VantageDevice[]>;
31
+ private processConfigurationXml;
32
+ private pullConfigurationXml;
33
+ setRelayOrDim(vid: string, on: boolean, bri: number, type: VantageDevice['type']): Promise<void>;
34
+ setBrightness(vid: string, level: number): Promise<void>;
35
+ setHue(vid: string, hue: number): Promise<void>;
36
+ setSaturation(vid: string, sat: number): Promise<void>;
37
+ setRelay(vid: string, on: boolean): Promise<void>;
38
+ setBlindPosition(vid: string, pos: number): Promise<void>;
39
+ refreshThermostat(vid: string): void;
40
+ setThermostatMode(vid: string, mode: number): Promise<void>;
41
+ setThermostatTarget(vid: string, value: number, mode?: number, heating?: number, cooling?: number): Promise<void>;
42
+ Thermostat_GetIndoorTemperature(vid: string): void;
43
+ Thermostat_GetState(vid: string): void;
44
+ Thermostat_GetHeating(vid: string): void;
45
+ Thermostat_GetCooling(vid: string): void;
46
+ Discover(): Promise<VantageDevice[]>;
47
+ DiscoverSSL(): Promise<VantageDevice[]>;
48
+ }
49
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vantageInfusion.d.ts","sourceRoot":"","sources":["../src/vantageInfusion.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAuCxE,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,UAAU,CAAa;gBAEnB,MAAM,EAAE,qBAAqB;IA4BzC,OAAO,CAAC,YAAY;IAmEpB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IA2EhB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI1C,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgBvF,QAAQ,IAAI,IAAI;IAkKhB,WAAW,IAAI,IAAI;IAuKnB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAIvE,gCAAgC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAInD,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIlD,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAY1D,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAItC,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxC,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxC,+BAA+B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAcjH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI3C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAGlD"}