@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
|
@@ -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":";;;AAIA,MAAa,gBAAgB;IAI3B,YACmB,QAAmC,EACnC,SAA4B,EAC7C,MAAqB;QAFJ,aAAQ,GAAR,QAAQ,CAA2B;QACnC,cAAS,GAAT,SAAS,CAAmB;QAG7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAGrB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAE;aACnE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,kBAAkB,CAAC;aAChF,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;aAC1E,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAG9F,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,YAAY;gBACf,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK;gBACR,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACnC,MAAM;YACR;gBACE,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,MAAM;QACV,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,YAAY;gBACf,OAAO,YAAY,CAAC;YACtB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB,KAAK,KAAK;gBACR,OAAO,WAAW,CAAC;YACrB,KAAK,OAAO;gBACV,OAAO,QAAQ,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC;YACjB;gBACE,OAAO,OAAO,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;YACxE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAG9F,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aAC5E,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGhD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;aAC3E,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3C,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAG/C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;aACpF,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGxD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC;aACnF,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACnD,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGvD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC;aACrF,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGzD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC;aACrF,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGzD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;aACjF,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACjD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9D,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClD,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACpD,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;YACvE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAG5F,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGhC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;iBACpE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACpC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC;iBAC7D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;iBACpE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACpC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC/B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAChD,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBACvD,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;YACpE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAGtF,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAGhC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEO,2BAA2B;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;YAC5E,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAGtG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;aACzE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAG7C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;aACxE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACxC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAG5C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC;aACvE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAG3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAGO,qBAAqB;QAC3B,OAAQ,IAAI,CAAC,MAAc,CAAC,WAAW,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEO,oBAAoB;QAC1B,OAAQ,IAAI,CAAC,MAAc,CAAC,UAAU,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEO,oBAAoB,CAAC,KAAa;QACvC,IAAI,CAAC,MAAc,CAAC,UAAU,GAAG,KAAK,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,IAAI,CAAC,MAAc,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAI,IAAI,CAAC,MAAc,CAAC,OAAO,IAAI,CAAC,CAAC;YAClD,MAAM,OAAO,GAAI,IAAI,CAAC,MAAc,CAAC,OAAO,IAAI,CAAC,CAAC;YAClD,QAAQ,CAAC,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAEO,6BAA6B;QACnC,OAAQ,IAAI,CAAC,MAAc,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEO,4BAA4B;QAClC,OAAQ,IAAI,CAAC,MAAc,CAAC,IAAI,IAAI,CAAC,CAAC;IACxC,CAAC;IAEO,4BAA4B,CAAC,KAAa;QAC/C,IAAI,CAAC,MAAc,CAAC,IAAI,GAAG,KAAK,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEO,8BAA8B;QACpC,OAAQ,IAAI,CAAC,MAAc,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEO,8BAA8B;QACpC,OAAQ,IAAI,CAAC,MAAc,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEO,0BAA0B;QAChC,OAAQ,IAAI,CAAC,MAAc,CAAC,KAAK,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,0BAA0B,CAAC,KAAa;QAC7C,IAAI,CAAC,MAAc,CAAC,KAAK,GAAG,KAAK,CAAC;IACrC,CAAC;IAGO,KAAK;QACX,OAAQ,IAAI,CAAC,MAAc,CAAC,KAAK,IAAI,KAAK,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,KAAc;QACzB,IAAI,CAAC,MAAc,CAAC,KAAK,GAAG,KAAK,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,GAAG,CAAC;YAC5C,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,OAAQ,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,GAAG,CAAC;IACzC,CAAC;IAEO,aAAa,CAAC,KAAa;QAChC,IAAI,CAAC,MAAc,CAAC,GAAG,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,MAAc,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC1C,MAAM,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC1C,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACrE,CAAC;YACD,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAEO,MAAM;QACZ,OAAQ,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAEO,MAAM,CAAC,KAAa;QACzB,IAAI,CAAC,MAAc,CAAC,GAAG,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,MAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,GAAG,CAAC;YAC5C,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,OAAQ,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAEO,aAAa,CAAC,KAAa;QAChC,IAAI,CAAC,MAAc,CAAC,GAAG,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,MAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,GAAG,CAAC;YAC5C,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAMO,kBAAkB;QACxB,OAAQ,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,GAAG,CAAC;IACzC,CAAC;IAEO,iBAAiB;QACvB,OAAQ,IAAI,CAAC,MAAc,CAAC,GAAG,IAAI,GAAG,CAAC;IACzC,CAAC;IAEO,iBAAiB,CAAC,KAAa;QACpC,IAAI,CAAC,MAAc,CAAC,GAAG,GAAG,KAAK,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,OAAQ,IAAI,CAAC,MAAc,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AA5TD,4CA4TC"}
|
|
@@ -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"}
|
package/dist/settings.js
ADDED
|
@@ -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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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"}
|