homebridge-plugin-klares4 1.1.1-beta.5 → 1.1.1-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -6
- package/README.md +34 -34
- package/dist/accessories/cover-accessory.d.ts +8 -4
- package/dist/accessories/cover-accessory.d.ts.map +1 -1
- package/dist/accessories/cover-accessory.js +36 -37
- package/dist/accessories/cover-accessory.js.map +1 -1
- package/dist/accessories/light-accessory.d.ts +7 -3
- package/dist/accessories/light-accessory.d.ts.map +1 -1
- package/dist/accessories/light-accessory.js +27 -24
- package/dist/accessories/light-accessory.js.map +1 -1
- package/dist/accessories/scenario-accessory.d.ts +8 -4
- package/dist/accessories/scenario-accessory.d.ts.map +1 -1
- package/dist/accessories/scenario-accessory.js +23 -19
- package/dist/accessories/scenario-accessory.js.map +1 -1
- package/dist/accessories/sensor-accessory.d.ts +5 -1
- package/dist/accessories/sensor-accessory.d.ts.map +1 -1
- package/dist/accessories/sensor-accessory.js +49 -36
- package/dist/accessories/sensor-accessory.js.map +1 -1
- package/dist/accessories/thermostat-accessory.d.ts +5 -1
- package/dist/accessories/thermostat-accessory.d.ts.map +1 -1
- package/dist/accessories/thermostat-accessory.js +68 -55
- package/dist/accessories/thermostat-accessory.js.map +1 -1
- package/dist/accessories/zone-accessory.d.ts +5 -1
- package/dist/accessories/zone-accessory.d.ts.map +1 -1
- package/dist/accessories/zone-accessory.js +32 -32
- package/dist/accessories/zone-accessory.js.map +1 -1
- package/dist/mqtt-bridge.d.ts +6 -12
- package/dist/mqtt-bridge.d.ts.map +1 -1
- package/dist/mqtt-bridge.js +148 -104
- package/dist/mqtt-bridge.js.map +1 -1
- package/dist/platform.d.ts +26 -37
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +177 -132
- package/dist/platform.js.map +1 -1
- package/dist/types.d.ts +203 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +78 -0
- package/dist/types.js.map +1 -1
- package/dist/websocket-client.d.ts +6 -5
- package/dist/websocket-client.d.ts.map +1 -1
- package/dist/websocket-client.js +257 -313
- package/dist/websocket-client.js.map +1 -1
- package/package.json +4 -4
package/dist/types.d.ts
CHANGED
|
@@ -1,53 +1,99 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
status?: any;
|
|
7
|
-
}
|
|
8
|
-
export interface KseniaLight extends KseniaDevice {
|
|
9
|
-
type: 'light';
|
|
10
|
-
brightness?: number;
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for homebridge-plugin-klares4
|
|
3
|
+
* Strict TypeScript compliant - no 'any' types
|
|
4
|
+
*/
|
|
5
|
+
export interface LightStatus {
|
|
11
6
|
on: boolean;
|
|
7
|
+
brightness?: number;
|
|
12
8
|
dimmable: boolean;
|
|
13
9
|
}
|
|
14
|
-
export interface
|
|
15
|
-
type: 'cover';
|
|
10
|
+
export interface CoverStatus {
|
|
16
11
|
position: number;
|
|
17
12
|
targetPosition?: number;
|
|
18
13
|
state: 'stopped' | 'opening' | 'closing';
|
|
19
14
|
}
|
|
20
|
-
export interface
|
|
21
|
-
type: 'thermostat';
|
|
15
|
+
export interface ThermostatStatus {
|
|
22
16
|
currentTemperature: number;
|
|
23
17
|
targetTemperature: number;
|
|
24
18
|
mode: 'off' | 'heat' | 'cool' | 'auto';
|
|
25
19
|
humidity?: number;
|
|
26
20
|
}
|
|
27
|
-
export interface
|
|
28
|
-
type: 'sensor';
|
|
21
|
+
export interface SensorStatus {
|
|
29
22
|
sensorType: 'temperature' | 'humidity' | 'light' | 'motion' | 'contact';
|
|
30
23
|
value: number;
|
|
31
24
|
unit?: string;
|
|
32
25
|
}
|
|
33
|
-
export interface
|
|
34
|
-
type: 'zone';
|
|
26
|
+
export interface ZoneStatus {
|
|
35
27
|
armed: boolean;
|
|
36
28
|
bypassed: boolean;
|
|
37
29
|
fault: boolean;
|
|
38
30
|
open: boolean;
|
|
39
31
|
}
|
|
40
|
-
export interface
|
|
41
|
-
type: 'scenario';
|
|
32
|
+
export interface ScenarioStatus {
|
|
42
33
|
active: boolean;
|
|
43
34
|
}
|
|
35
|
+
interface KseniaDeviceBase {
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
}
|
|
40
|
+
export interface KseniaLight extends KseniaDeviceBase {
|
|
41
|
+
type: 'light';
|
|
42
|
+
status: LightStatus;
|
|
43
|
+
}
|
|
44
|
+
export interface KseniaCover extends KseniaDeviceBase {
|
|
45
|
+
type: 'cover';
|
|
46
|
+
status: CoverStatus;
|
|
47
|
+
}
|
|
48
|
+
export interface KseniaThermostat extends KseniaDeviceBase {
|
|
49
|
+
type: 'thermostat';
|
|
50
|
+
status: ThermostatStatus;
|
|
51
|
+
currentTemperature: number;
|
|
52
|
+
targetTemperature: number;
|
|
53
|
+
mode: 'off' | 'heat' | 'cool' | 'auto';
|
|
54
|
+
humidity?: number;
|
|
55
|
+
}
|
|
56
|
+
export interface KseniaSensor extends KseniaDeviceBase {
|
|
57
|
+
type: 'sensor';
|
|
58
|
+
status: SensorStatus;
|
|
59
|
+
}
|
|
60
|
+
export interface KseniaZone extends KseniaDeviceBase {
|
|
61
|
+
type: 'zone';
|
|
62
|
+
status: ZoneStatus;
|
|
63
|
+
}
|
|
64
|
+
export interface KseniaScenario extends KseniaDeviceBase {
|
|
65
|
+
type: 'scenario';
|
|
66
|
+
status: ScenarioStatus;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Discriminated union of all device types
|
|
70
|
+
*/
|
|
71
|
+
export type KseniaDevice = KseniaLight | KseniaCover | KseniaThermostat | KseniaSensor | KseniaZone | KseniaScenario;
|
|
72
|
+
export interface KseniaMessagePayload {
|
|
73
|
+
PIN?: string;
|
|
74
|
+
ID_LOGIN?: string;
|
|
75
|
+
RESULT?: string;
|
|
76
|
+
RESULT_DETAIL?: string;
|
|
77
|
+
ZONES?: KseniaZoneData[];
|
|
78
|
+
OUTPUTS?: KseniaOutputData[];
|
|
79
|
+
SCENARIOS?: KseniaScenarioData[];
|
|
80
|
+
BUS_HAS?: KseniaBusHaData[];
|
|
81
|
+
STATUS_OUTPUTS?: KseniaOutputStatusRaw[];
|
|
82
|
+
STATUS_BUS_HA_SENSORS?: KseniaSensorStatusRaw[];
|
|
83
|
+
STATUS_ZONES?: KseniaZoneStatusRaw[];
|
|
84
|
+
STATUS_SYSTEM?: KseniaSystemStatus;
|
|
85
|
+
ID_ITEMS_RANGE?: string[];
|
|
86
|
+
TYPES?: string[];
|
|
87
|
+
OUTPUT?: KseniaOutputCommand;
|
|
88
|
+
[key: string]: unknown;
|
|
89
|
+
}
|
|
44
90
|
export interface KseniaMessage {
|
|
45
91
|
SENDER: string;
|
|
46
92
|
RECEIVER: string;
|
|
47
93
|
CMD: string;
|
|
48
94
|
ID: string;
|
|
49
95
|
PAYLOAD_TYPE: string;
|
|
50
|
-
PAYLOAD:
|
|
96
|
+
PAYLOAD: KseniaMessagePayload;
|
|
51
97
|
TIMESTAMP: string;
|
|
52
98
|
CRC_16: string;
|
|
53
99
|
}
|
|
@@ -63,6 +109,7 @@ export interface KseniaOutputData {
|
|
|
63
109
|
STATUS: string;
|
|
64
110
|
POS?: string;
|
|
65
111
|
ENABLED: string;
|
|
112
|
+
CAT?: string;
|
|
66
113
|
}
|
|
67
114
|
export interface KseniaZoneData {
|
|
68
115
|
ID: string;
|
|
@@ -79,6 +126,55 @@ export interface KseniaSensorData {
|
|
|
79
126
|
UNIT?: string;
|
|
80
127
|
ENABLED: string;
|
|
81
128
|
}
|
|
129
|
+
export interface KseniaScenarioData {
|
|
130
|
+
ID: string;
|
|
131
|
+
DES: string;
|
|
132
|
+
CAT?: string;
|
|
133
|
+
ENABLED?: string;
|
|
134
|
+
}
|
|
135
|
+
export interface KseniaBusHaData {
|
|
136
|
+
ID: string;
|
|
137
|
+
DES: string;
|
|
138
|
+
TYPE?: string;
|
|
139
|
+
ENABLED?: string;
|
|
140
|
+
}
|
|
141
|
+
export interface KseniaOutputStatusRaw {
|
|
142
|
+
ID: string;
|
|
143
|
+
STA: string;
|
|
144
|
+
POS?: string;
|
|
145
|
+
TPOS?: string;
|
|
146
|
+
TEMP_CURRENT?: string;
|
|
147
|
+
TEMP_TARGET?: string;
|
|
148
|
+
MODE?: string;
|
|
149
|
+
}
|
|
150
|
+
export interface KseniaSensorStatusRaw {
|
|
151
|
+
ID: string;
|
|
152
|
+
DOMUS?: {
|
|
153
|
+
TEM?: string;
|
|
154
|
+
HUM?: string;
|
|
155
|
+
LHT?: string;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
export interface KseniaZoneStatusRaw {
|
|
159
|
+
ID: string;
|
|
160
|
+
STA: string;
|
|
161
|
+
BYP?: string;
|
|
162
|
+
A?: string;
|
|
163
|
+
FM?: string;
|
|
164
|
+
}
|
|
165
|
+
export interface KseniaSystemStatus {
|
|
166
|
+
TEMPS?: KseniaSystemTemperature[];
|
|
167
|
+
[key: string]: unknown;
|
|
168
|
+
}
|
|
169
|
+
export interface KseniaSystemTemperature {
|
|
170
|
+
ID: string;
|
|
171
|
+
VALUE: string;
|
|
172
|
+
UNIT?: string;
|
|
173
|
+
}
|
|
174
|
+
export interface KseniaOutputCommand {
|
|
175
|
+
ID: string;
|
|
176
|
+
STA: string;
|
|
177
|
+
}
|
|
82
178
|
export interface MqttConfig {
|
|
83
179
|
enabled: boolean;
|
|
84
180
|
broker: string;
|
|
@@ -90,4 +186,90 @@ export interface MqttConfig {
|
|
|
90
186
|
qos?: 0 | 1 | 2;
|
|
91
187
|
retain?: boolean;
|
|
92
188
|
}
|
|
189
|
+
export interface MqttLightCommand {
|
|
190
|
+
on?: boolean;
|
|
191
|
+
brightness?: number;
|
|
192
|
+
}
|
|
193
|
+
export interface MqttCoverCommand {
|
|
194
|
+
position?: number;
|
|
195
|
+
}
|
|
196
|
+
export interface MqttThermostatCommand {
|
|
197
|
+
targetTemperature?: number;
|
|
198
|
+
mode?: 'off' | 'heat' | 'cool' | 'auto';
|
|
199
|
+
}
|
|
200
|
+
export interface MqttScenarioCommand {
|
|
201
|
+
active?: boolean;
|
|
202
|
+
}
|
|
203
|
+
export type MqttDeviceCommand = MqttLightCommand | MqttCoverCommand | MqttThermostatCommand | MqttScenarioCommand;
|
|
204
|
+
interface DeviceStatePayloadBase {
|
|
205
|
+
id: string;
|
|
206
|
+
name: string;
|
|
207
|
+
type: string;
|
|
208
|
+
timestamp: string;
|
|
209
|
+
}
|
|
210
|
+
export interface LightStatePayload extends DeviceStatePayloadBase {
|
|
211
|
+
on: boolean;
|
|
212
|
+
brightness: number;
|
|
213
|
+
dimmable: boolean;
|
|
214
|
+
}
|
|
215
|
+
export interface CoverStatePayload extends DeviceStatePayloadBase {
|
|
216
|
+
position: number;
|
|
217
|
+
state: string;
|
|
218
|
+
}
|
|
219
|
+
export interface ThermostatStatePayload extends DeviceStatePayloadBase {
|
|
220
|
+
currentTemperature: number;
|
|
221
|
+
targetTemperature: number;
|
|
222
|
+
mode: string;
|
|
223
|
+
humidity?: number;
|
|
224
|
+
}
|
|
225
|
+
export interface SensorStatePayload extends DeviceStatePayloadBase {
|
|
226
|
+
sensorType: string;
|
|
227
|
+
value: number;
|
|
228
|
+
unit: string;
|
|
229
|
+
}
|
|
230
|
+
export interface ZoneStatePayload extends DeviceStatePayloadBase {
|
|
231
|
+
open: boolean;
|
|
232
|
+
armed: boolean;
|
|
233
|
+
fault: boolean;
|
|
234
|
+
bypassed: boolean;
|
|
235
|
+
}
|
|
236
|
+
export interface ScenarioStatePayload extends DeviceStatePayloadBase {
|
|
237
|
+
active: boolean;
|
|
238
|
+
}
|
|
239
|
+
export type DeviceStatePayload = LightStatePayload | CoverStatePayload | ThermostatStatePayload | SensorStatePayload | ZoneStatePayload | ScenarioStatePayload;
|
|
240
|
+
export interface RoomDevice {
|
|
241
|
+
deviceId: string;
|
|
242
|
+
deviceName?: string;
|
|
243
|
+
}
|
|
244
|
+
export interface RoomConfig {
|
|
245
|
+
roomName: string;
|
|
246
|
+
devices?: RoomDevice[];
|
|
247
|
+
}
|
|
248
|
+
export interface RoomMappingConfig {
|
|
249
|
+
enabled: boolean;
|
|
250
|
+
rooms?: RoomConfig[];
|
|
251
|
+
}
|
|
252
|
+
export declare function isKseniaLight(device: KseniaDevice): device is KseniaLight;
|
|
253
|
+
export declare function isKseniaCover(device: KseniaDevice): device is KseniaCover;
|
|
254
|
+
export declare function isKseniaThermostat(device: KseniaDevice): device is KseniaThermostat;
|
|
255
|
+
export declare function isKseniaSensor(device: KseniaDevice): device is KseniaSensor;
|
|
256
|
+
export declare function isKseniaZone(device: KseniaDevice): device is KseniaZone;
|
|
257
|
+
export declare function isKseniaScenario(device: KseniaDevice): device is KseniaScenario;
|
|
258
|
+
/**
|
|
259
|
+
* Type guard for checking if an unknown value is a valid MQTT light command
|
|
260
|
+
*/
|
|
261
|
+
export declare function isMqttLightCommand(cmd: unknown): cmd is MqttLightCommand;
|
|
262
|
+
/**
|
|
263
|
+
* Type guard for checking if an unknown value is a valid MQTT cover command
|
|
264
|
+
*/
|
|
265
|
+
export declare function isMqttCoverCommand(cmd: unknown): cmd is MqttCoverCommand;
|
|
266
|
+
/**
|
|
267
|
+
* Type guard for checking if an unknown value is a valid MQTT thermostat command
|
|
268
|
+
*/
|
|
269
|
+
export declare function isMqttThermostatCommand(cmd: unknown): cmd is MqttThermostatCommand;
|
|
270
|
+
/**
|
|
271
|
+
* Type guard for checking if an unknown value is a valid MQTT scenario command
|
|
272
|
+
*/
|
|
273
|
+
export declare function isMqttScenarioCommand(cmd: unknown): cmd is MqttScenarioCommand;
|
|
274
|
+
export {};
|
|
93
275
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,81 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Type definitions for homebridge-plugin-klares4
|
|
4
|
+
* Strict TypeScript compliant - no 'any' types
|
|
5
|
+
*/
|
|
2
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.isKseniaLight = isKseniaLight;
|
|
8
|
+
exports.isKseniaCover = isKseniaCover;
|
|
9
|
+
exports.isKseniaThermostat = isKseniaThermostat;
|
|
10
|
+
exports.isKseniaSensor = isKseniaSensor;
|
|
11
|
+
exports.isKseniaZone = isKseniaZone;
|
|
12
|
+
exports.isKseniaScenario = isKseniaScenario;
|
|
13
|
+
exports.isMqttLightCommand = isMqttLightCommand;
|
|
14
|
+
exports.isMqttCoverCommand = isMqttCoverCommand;
|
|
15
|
+
exports.isMqttThermostatCommand = isMqttThermostatCommand;
|
|
16
|
+
exports.isMqttScenarioCommand = isMqttScenarioCommand;
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Type Guards
|
|
19
|
+
// ============================================================================
|
|
20
|
+
function isKseniaLight(device) {
|
|
21
|
+
return device.type === 'light';
|
|
22
|
+
}
|
|
23
|
+
function isKseniaCover(device) {
|
|
24
|
+
return device.type === 'cover';
|
|
25
|
+
}
|
|
26
|
+
function isKseniaThermostat(device) {
|
|
27
|
+
return device.type === 'thermostat';
|
|
28
|
+
}
|
|
29
|
+
function isKseniaSensor(device) {
|
|
30
|
+
return device.type === 'sensor';
|
|
31
|
+
}
|
|
32
|
+
function isKseniaZone(device) {
|
|
33
|
+
return device.type === 'zone';
|
|
34
|
+
}
|
|
35
|
+
function isKseniaScenario(device) {
|
|
36
|
+
return device.type === 'scenario';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Type guard for checking if an unknown value is a valid MQTT light command
|
|
40
|
+
*/
|
|
41
|
+
function isMqttLightCommand(cmd) {
|
|
42
|
+
if (typeof cmd !== 'object' || cmd === null) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const obj = cmd;
|
|
46
|
+
return ((obj.on === undefined || typeof obj.on === 'boolean') &&
|
|
47
|
+
(obj.brightness === undefined || typeof obj.brightness === 'number'));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Type guard for checking if an unknown value is a valid MQTT cover command
|
|
51
|
+
*/
|
|
52
|
+
function isMqttCoverCommand(cmd) {
|
|
53
|
+
if (typeof cmd !== 'object' || cmd === null) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const obj = cmd;
|
|
57
|
+
return obj.position === undefined || typeof obj.position === 'number';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Type guard for checking if an unknown value is a valid MQTT thermostat command
|
|
61
|
+
*/
|
|
62
|
+
function isMqttThermostatCommand(cmd) {
|
|
63
|
+
if (typeof cmd !== 'object' || cmd === null) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
const obj = cmd;
|
|
67
|
+
const validModes = ['off', 'heat', 'cool', 'auto'];
|
|
68
|
+
return ((obj.targetTemperature === undefined || typeof obj.targetTemperature === 'number') &&
|
|
69
|
+
(obj.mode === undefined || (typeof obj.mode === 'string' && validModes.includes(obj.mode))));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Type guard for checking if an unknown value is a valid MQTT scenario command
|
|
73
|
+
*/
|
|
74
|
+
function isMqttScenarioCommand(cmd) {
|
|
75
|
+
if (typeof cmd !== 'object' || cmd === null) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
const obj = cmd;
|
|
79
|
+
return obj.active === undefined || typeof obj.active === 'boolean';
|
|
80
|
+
}
|
|
3
81
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA0VH,sCAEC;AAED,sCAEC;AAED,gDAEC;AAED,wCAEC;AAED,oCAEC;AAED,4CAEC;AAKD,gDASC;AAKD,gDAMC;AAKD,0DAUC;AAKD,sDAMC;AA7ED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,SAAgB,aAAa,CAAC,MAAoB;IAC9C,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACnC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAoB;IAC9C,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACnC,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAoB;IACnD,OAAO,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;AACxC,CAAC;AAED,SAAgB,cAAc,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AACpC,CAAC;AAED,SAAgB,YAAY,CAAC,MAAoB;IAC7C,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;AAClC,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,OAAO,CACH,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC;QACrD,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CACvE,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,GAAY;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,CACH,CAAC,GAAG,CAAC,iBAAiB,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,CAAC;QAClF,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9F,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,GAAY;IAC9C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,OAAO,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;AACvE,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { Logger } from 'homebridge';
|
|
2
|
-
import { KseniaWebSocketOptions, KseniaDevice } from './types';
|
|
1
|
+
import type { Logger } from 'homebridge';
|
|
2
|
+
import type { KseniaWebSocketOptions, KseniaDevice } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* WebSocket client for Ksenia Lares4 communication
|
|
5
|
+
*/
|
|
3
6
|
export declare class KseniaWebSocketClient {
|
|
4
7
|
private readonly ip;
|
|
5
8
|
private readonly port;
|
|
@@ -17,7 +20,7 @@ export declare class KseniaWebSocketClient {
|
|
|
17
20
|
onDeviceStatusUpdate?: (device: KseniaDevice) => void;
|
|
18
21
|
onConnected?: () => void;
|
|
19
22
|
onDisconnected?: () => void;
|
|
20
|
-
private devices;
|
|
23
|
+
private readonly devices;
|
|
21
24
|
constructor(ip: string, port: number, useHttps: boolean, sender: string, pin: string, log: Logger, options?: KseniaWebSocketOptions);
|
|
22
25
|
connect(): Promise<void>;
|
|
23
26
|
private login;
|
|
@@ -29,10 +32,8 @@ export declare class KseniaWebSocketClient {
|
|
|
29
32
|
private handleStatusUpdate;
|
|
30
33
|
private parseZoneData;
|
|
31
34
|
private parseOutputData;
|
|
32
|
-
private parseSensorData;
|
|
33
35
|
private parseScenarioData;
|
|
34
36
|
private determineOutputType;
|
|
35
|
-
private determineSensorType;
|
|
36
37
|
private updateOutputStatuses;
|
|
37
38
|
private updateSensorStatuses;
|
|
38
39
|
private updateZoneStatuses;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../src/websocket-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../src/websocket-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAGR,sBAAsB,EACtB,YAAY,EAoBf,MAAM,SAAS,CAAC;AAmDjB;;GAEG;AACH,qBAAa,qBAAqB;IAe1B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IApB5B,OAAO,CAAC,EAAE,CAAC,CAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,cAAc,CAAC,CAAiC;IACxD,OAAO,CAAC,cAAc,CAAC,CAAgC;IAEhD,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;gBAG3C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,sBAA2B;IAU5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAuDvB,KAAK;IAoBnB,OAAO,CAAC,aAAa;IAkDrB,OAAO,CAAC,mBAAmB;YAgBb,iBAAiB;IA0C/B,OAAO,CAAC,kBAAkB;IA6H1B,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,eAAe;IA6CvB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;IAqC3B,OAAO,CAAC,oBAAoB;IAoF5B,OAAO,CAAC,oBAAoB;IA8C5B,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,aAAa;IA+BR,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B3D,iBAAiB,CAC1B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GACvC,OAAO,CAAC,IAAI,CAAC;IA0BH,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlF,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAcjD,iBAAiB;IA4C/B,OAAO,CAAC,YAAY;YAQN,WAAW;IAWzB,OAAO,CAAC,cAAc;IAoDtB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,iBAAiB;IAiBlB,UAAU,IAAI,IAAI;IAazB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,wBAAwB;CAsEnC"}
|