@mp-consulting/homebridge-lg-thinq 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/.claude/settings.local.json +15 -0
- package/CHANGELOG.md +98 -0
- package/LICENSE +176 -0
- package/README.md +114 -0
- package/config.schema.json +399 -0
- package/dist/__tests__/baseDevice.spec.d.ts +1 -0
- package/dist/__tests__/baseDevice.spec.js +96 -0
- package/dist/__tests__/baseDevice.spec.js.map +1 -0
- package/dist/__tests__/deviceControl.coercion.spec.d.ts +1 -0
- package/dist/__tests__/deviceControl.coercion.spec.js +53 -0
- package/dist/__tests__/deviceControl.coercion.spec.js.map +1 -0
- package/dist/__tests__/helper.spec.d.ts +1 -0
- package/dist/__tests__/helper.spec.js +74 -0
- package/dist/__tests__/helper.spec.js.map +1 -0
- package/dist/baseDevice.d.ts +40 -0
- package/dist/baseDevice.js +85 -0
- package/dist/baseDevice.js.map +1 -0
- package/dist/baseDevice.spec.d.ts +1 -0
- package/dist/baseDevice.spec.js +107 -0
- package/dist/baseDevice.spec.js.map +1 -0
- package/dist/characteristics/TotalConsumption.d.ts +2 -0
- package/dist/characteristics/TotalConsumption.js +17 -0
- package/dist/characteristics/TotalConsumption.js.map +1 -0
- package/dist/characteristics/index.d.ts +2 -0
- package/dist/characteristics/index.js +7 -0
- package/dist/characteristics/index.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +89 -0
- package/dist/cli.js.map +1 -0
- package/dist/devices/AeroTower.d.ts +24 -0
- package/dist/devices/AeroTower.js +113 -0
- package/dist/devices/AeroTower.js.map +1 -0
- package/dist/devices/AirConditioner.d.ts +425 -0
- package/dist/devices/AirConditioner.js +1253 -0
- package/dist/devices/AirConditioner.js.map +1 -0
- package/dist/devices/AirPurifier.d.ts +50 -0
- package/dist/devices/AirPurifier.js +281 -0
- package/dist/devices/AirPurifier.js.map +1 -0
- package/dist/devices/Dehumidifier.d.ts +28 -0
- package/dist/devices/Dehumidifier.js +175 -0
- package/dist/devices/Dehumidifier.js.map +1 -0
- package/dist/devices/Dishwasher.d.ts +64 -0
- package/dist/devices/Dishwasher.js +740 -0
- package/dist/devices/Dishwasher.js.map +1 -0
- package/dist/devices/Microwave.d.ts +128 -0
- package/dist/devices/Microwave.js +1939 -0
- package/dist/devices/Microwave.js.map +1 -0
- package/dist/devices/Oven.d.ts +148 -0
- package/dist/devices/Oven.js +1850 -0
- package/dist/devices/Oven.js.map +1 -0
- package/dist/devices/RangeHood.d.ts +16 -0
- package/dist/devices/RangeHood.js +99 -0
- package/dist/devices/RangeHood.js.map +1 -0
- package/dist/devices/Refrigerator.d.ts +50 -0
- package/dist/devices/Refrigerator.js +325 -0
- package/dist/devices/Refrigerator.js.map +1 -0
- package/dist/devices/Styler.d.ts +27 -0
- package/dist/devices/Styler.js +76 -0
- package/dist/devices/Styler.js.map +1 -0
- package/dist/devices/WasherDryer.d.ts +39 -0
- package/dist/devices/WasherDryer.js +170 -0
- package/dist/devices/WasherDryer.js.map +1 -0
- package/dist/devices/WasherDryer2.d.ts +9 -0
- package/dist/devices/WasherDryer2.js +16 -0
- package/dist/devices/WasherDryer2.js.map +1 -0
- package/dist/errors/AuthenticationError.d.ts +2 -0
- package/dist/errors/AuthenticationError.js +3 -0
- package/dist/errors/AuthenticationError.js.map +1 -0
- package/dist/errors/ManualProcessNeeded.d.ts +3 -0
- package/dist/errors/ManualProcessNeeded.js +4 -0
- package/dist/errors/ManualProcessNeeded.js.map +1 -0
- package/dist/errors/MonitorError.d.ts +2 -0
- package/dist/errors/MonitorError.js +3 -0
- package/dist/errors/MonitorError.js.map +1 -0
- package/dist/errors/NotConnectedError.d.ts +3 -0
- package/dist/errors/NotConnectedError.js +4 -0
- package/dist/errors/NotConnectedError.js.map +1 -0
- package/dist/errors/TokenError.d.ts +2 -0
- package/dist/errors/TokenError.js +3 -0
- package/dist/errors/TokenError.js.map +1 -0
- package/dist/errors/TokenExpiredError.d.ts +3 -0
- package/dist/errors/TokenExpiredError.js +4 -0
- package/dist/errors/TokenExpiredError.js.map +1 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.js +7 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/helper.d.ts +24 -0
- package/dist/helper.js +66 -0
- package/dist/helper.js.map +1 -0
- package/dist/helper.spec.d.ts +1 -0
- package/dist/helper.spec.js +74 -0
- package/dist/helper.spec.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/API.d.ts +141 -0
- package/dist/lib/API.js +362 -0
- package/dist/lib/API.js.map +1 -0
- package/dist/lib/API.spec.d.ts +1 -0
- package/dist/lib/API.spec.js +55 -0
- package/dist/lib/API.spec.js.map +1 -0
- package/dist/lib/Auth.d.ts +99 -0
- package/dist/lib/Auth.js +348 -0
- package/dist/lib/Auth.js.map +1 -0
- package/dist/lib/Auth.spec.d.ts +1 -0
- package/dist/lib/Auth.spec.js +111 -0
- package/dist/lib/Auth.spec.js.map +1 -0
- package/dist/lib/Device.d.ts +88 -0
- package/dist/lib/Device.js +95 -0
- package/dist/lib/Device.js.map +1 -0
- package/dist/lib/Device.spec.d.ts +1 -0
- package/dist/lib/Device.spec.js +53 -0
- package/dist/lib/Device.spec.js.map +1 -0
- package/dist/lib/DeviceModel.d.ts +164 -0
- package/dist/lib/DeviceModel.js +321 -0
- package/dist/lib/DeviceModel.js.map +1 -0
- package/dist/lib/DeviceModel.spec.d.ts +1 -0
- package/dist/lib/DeviceModel.spec.js +90 -0
- package/dist/lib/DeviceModel.spec.js.map +1 -0
- package/dist/lib/Gateway.d.ts +18 -0
- package/dist/lib/Gateway.js +25 -0
- package/dist/lib/Gateway.js.map +1 -0
- package/dist/lib/Gateway.spec.d.ts +1 -0
- package/dist/lib/Gateway.spec.js +35 -0
- package/dist/lib/Gateway.spec.js.map +1 -0
- package/dist/lib/Persist.d.ts +101 -0
- package/dist/lib/Persist.js +245 -0
- package/dist/lib/Persist.js.map +1 -0
- package/dist/lib/Persist.spec.d.ts +1 -0
- package/dist/lib/Persist.spec.js +90 -0
- package/dist/lib/Persist.spec.js.map +1 -0
- package/dist/lib/Session.d.ts +80 -0
- package/dist/lib/Session.js +100 -0
- package/dist/lib/Session.js.map +1 -0
- package/dist/lib/Session.spec.d.ts +1 -0
- package/dist/lib/Session.spec.js +43 -0
- package/dist/lib/Session.spec.js.map +1 -0
- package/dist/lib/ThinQ.d.ts +28 -0
- package/dist/lib/ThinQ.js +373 -0
- package/dist/lib/ThinQ.js.map +1 -0
- package/dist/lib/__tests__/API.spec.d.ts +1 -0
- package/dist/lib/__tests__/API.spec.js +55 -0
- package/dist/lib/__tests__/API.spec.js.map +1 -0
- package/dist/lib/__tests__/Auth.spec.d.ts +1 -0
- package/dist/lib/__tests__/Auth.spec.js +110 -0
- package/dist/lib/__tests__/Auth.spec.js.map +1 -0
- package/dist/lib/__tests__/Device.spec.d.ts +1 -0
- package/dist/lib/__tests__/Device.spec.js +53 -0
- package/dist/lib/__tests__/Device.spec.js.map +1 -0
- package/dist/lib/__tests__/DeviceModel.spec.d.ts +1 -0
- package/dist/lib/__tests__/DeviceModel.spec.js +90 -0
- package/dist/lib/__tests__/DeviceModel.spec.js.map +1 -0
- package/dist/lib/__tests__/Gateway.spec.d.ts +1 -0
- package/dist/lib/__tests__/Gateway.spec.js +35 -0
- package/dist/lib/__tests__/Gateway.spec.js.map +1 -0
- package/dist/lib/__tests__/Persist.spec.d.ts +1 -0
- package/dist/lib/__tests__/Persist.spec.js +90 -0
- package/dist/lib/__tests__/Persist.spec.js.map +1 -0
- package/dist/lib/__tests__/Session.spec.d.ts +1 -0
- package/dist/lib/__tests__/Session.spec.js +43 -0
- package/dist/lib/__tests__/Session.spec.js.map +1 -0
- package/dist/lib/constants.d.ts +95 -0
- package/dist/lib/constants.js +106 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/request.d.ts +2 -0
- package/dist/lib/request.js +66 -0
- package/dist/lib/request.js.map +1 -0
- package/dist/platform.d.ts +41 -0
- package/dist/platform.js +229 -0
- package/dist/platform.js.map +1 -0
- package/dist/settings.d.ts +8 -0
- package/dist/settings.js +9 -0
- package/dist/settings.js.map +1 -0
- package/dist/status/BaseStatus.d.ts +48 -0
- package/dist/status/BaseStatus.js +59 -0
- package/dist/status/BaseStatus.js.map +1 -0
- package/dist/types/snapshots.d.ts +142 -0
- package/dist/types/snapshots.js +6 -0
- package/dist/types/snapshots.js.map +1 -0
- package/dist/utils/__tests__/normalize.spec.d.ts +1 -0
- package/dist/utils/__tests__/normalize.spec.js +95 -0
- package/dist/utils/__tests__/normalize.spec.js.map +1 -0
- package/dist/utils/normalize.d.ts +22 -0
- package/dist/utils/normalize.js +51 -0
- package/dist/utils/normalize.js.map +1 -0
- package/dist/v1/__tests__/prepareControlData.spec.d.ts +1 -0
- package/dist/v1/__tests__/prepareControlData.spec.js +48 -0
- package/dist/v1/__tests__/prepareControlData.spec.js.map +1 -0
- package/dist/v1/devices/AC.d.ts +13 -0
- package/dist/v1/devices/AC.js +112 -0
- package/dist/v1/devices/AC.js.map +1 -0
- package/dist/v1/devices/AirPurifier.d.ts +15 -0
- package/dist/v1/devices/AirPurifier.js +57 -0
- package/dist/v1/devices/AirPurifier.js.map +1 -0
- package/dist/v1/devices/RangeHood.d.ts +6 -0
- package/dist/v1/devices/RangeHood.js +12 -0
- package/dist/v1/devices/RangeHood.js.map +1 -0
- package/dist/v1/devices/Refrigerator.d.ts +17 -0
- package/dist/v1/devices/Refrigerator.js +69 -0
- package/dist/v1/devices/Refrigerator.js.map +1 -0
- package/dist/v1/devices/Washer.d.ts +10 -0
- package/dist/v1/devices/Washer.js +23 -0
- package/dist/v1/devices/Washer.js.map +1 -0
- package/dist/v1/devices/index.d.ts +6 -0
- package/dist/v1/devices/index.js +7 -0
- package/dist/v1/devices/index.js.map +1 -0
- package/dist/v1/helper.d.ts +14 -0
- package/dist/v1/helper.js +111 -0
- package/dist/v1/helper.js.map +1 -0
- package/dist/v1/transforms/AirPurifierState.d.ts +2 -0
- package/dist/v1/transforms/AirPurifierState.js +9 -0
- package/dist/v1/transforms/AirPurifierState.js.map +1 -0
- package/dist/v1/transforms/AirState.d.ts +9 -0
- package/dist/v1/transforms/AirState.js +55 -0
- package/dist/v1/transforms/AirState.js.map +1 -0
- package/dist/v1/transforms/HoodState.d.ts +17 -0
- package/dist/v1/transforms/HoodState.js +20 -0
- package/dist/v1/transforms/HoodState.js.map +1 -0
- package/dist/v1/transforms/RefState.d.ts +6 -0
- package/dist/v1/transforms/RefState.js +29 -0
- package/dist/v1/transforms/RefState.js.map +1 -0
- package/dist/v1/transforms/WasherDryer.d.ts +49 -0
- package/dist/v1/transforms/WasherDryer.js +56 -0
- package/dist/v1/transforms/WasherDryer.js.map +1 -0
- package/docs/authorization.md +40 -0
- package/docs/device-configuration.md +68 -0
- package/homebridge-ui/public/index.html +120 -0
- package/homebridge-ui/public/js/app.js +300 -0
- package/homebridge-ui/public/js/countries.js +233 -0
- package/homebridge-ui/public/styles.css +185 -0
- package/homebridge-ui/server.js +103 -0
- package/jest.config.ts +39 -0
- package/package.json +83 -0
- package/sample/README.md +10 -0
- package/sample/airconditioner-model.json +3080 -0
- package/sample/airconditioner-snapshot.json +49 -0
- package/sample/airconditioner.json +157 -0
- package/sample/dishwasher-model.json +869 -0
- package/sample/dishwasher.json +125 -0
- package/sample/washer_dryer-model.json +1294 -0
- package/sample/washer_dryer.json +126 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare function normalizeBoolean(value: any): boolean;
|
|
2
|
+
export declare function normalizeNumber(value: any): number | null;
|
|
3
|
+
/**
|
|
4
|
+
* Safely parse an integer value, returning a fallback if the value is NaN.
|
|
5
|
+
*/
|
|
6
|
+
export declare function safeParseInt(value: any, fallback?: number): number;
|
|
7
|
+
/**
|
|
8
|
+
* Safely parse a float value, returning a fallback if the value is NaN.
|
|
9
|
+
*/
|
|
10
|
+
export declare function safeParseFloat(value: any, fallback?: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Convert hours, minutes, and optional seconds to total seconds.
|
|
13
|
+
*/
|
|
14
|
+
export declare function toSeconds(hours: number, minutes: number, seconds?: number): number;
|
|
15
|
+
declare const _default: {
|
|
16
|
+
normalizeBoolean: typeof normalizeBoolean;
|
|
17
|
+
normalizeNumber: typeof normalizeNumber;
|
|
18
|
+
safeParseInt: typeof safeParseInt;
|
|
19
|
+
safeParseFloat: typeof safeParseFloat;
|
|
20
|
+
toSeconds: typeof toSeconds;
|
|
21
|
+
};
|
|
22
|
+
export default _default;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export function normalizeBoolean(value) {
|
|
2
|
+
if (typeof value === 'boolean') {
|
|
3
|
+
return value;
|
|
4
|
+
}
|
|
5
|
+
if (typeof value === 'number') {
|
|
6
|
+
return value === 1;
|
|
7
|
+
}
|
|
8
|
+
if (typeof value === 'string') {
|
|
9
|
+
const v = value.toLowerCase();
|
|
10
|
+
return v === '1' || v === 'true' || v === 'on';
|
|
11
|
+
}
|
|
12
|
+
return !!value;
|
|
13
|
+
}
|
|
14
|
+
export function normalizeNumber(value) {
|
|
15
|
+
if (value === null || value === undefined) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (typeof value === 'number') {
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
const n = Number(value);
|
|
22
|
+
return Number.isNaN(n) ? null : n;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Safely parse an integer value, returning a fallback if the value is NaN.
|
|
26
|
+
*/
|
|
27
|
+
export function safeParseInt(value, fallback = 0) {
|
|
28
|
+
const parsed = parseInt(value);
|
|
29
|
+
return isNaN(parsed) ? fallback : parsed;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Safely parse a float value, returning a fallback if the value is NaN.
|
|
33
|
+
*/
|
|
34
|
+
export function safeParseFloat(value, fallback = 0) {
|
|
35
|
+
const parsed = parseFloat(value);
|
|
36
|
+
return isNaN(parsed) ? fallback : parsed;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Convert hours, minutes, and optional seconds to total seconds.
|
|
40
|
+
*/
|
|
41
|
+
export function toSeconds(hours, minutes, seconds = 0) {
|
|
42
|
+
return hours * 3600 + minutes * 60 + seconds;
|
|
43
|
+
}
|
|
44
|
+
export default {
|
|
45
|
+
normalizeBoolean,
|
|
46
|
+
normalizeNumber,
|
|
47
|
+
safeParseInt,
|
|
48
|
+
safeParseFloat,
|
|
49
|
+
toSeconds,
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,KAAU;IACzC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAU;IACxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAU,EAAE,QAAQ,GAAG,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAU,EAAE,QAAQ,GAAG,CAAC;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,OAAe,EAAE,OAAO,GAAG,CAAC;IACnE,OAAO,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC;AAC/C,CAAC;AAED,eAAe;IACb,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,cAAc;IACd,SAAS;CACV,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, test, expect } from '@jest/globals';
|
|
2
|
+
import Helper from '../../v1/helper.js';
|
|
3
|
+
import { Device } from '../../lib/Device.js';
|
|
4
|
+
describe('v1 Helper.prepareControlData', () => {
|
|
5
|
+
test('builds BINARY(BYTE) payload with boolean -> numeric coercion', () => {
|
|
6
|
+
const device = new Device({
|
|
7
|
+
deviceId: 'dev1',
|
|
8
|
+
alias: 'd',
|
|
9
|
+
modelJsonUri: '',
|
|
10
|
+
deviceType: 0,
|
|
11
|
+
snapshot: { raw: {} },
|
|
12
|
+
});
|
|
13
|
+
device.deviceModel = {
|
|
14
|
+
data: {
|
|
15
|
+
ControlWifi: {
|
|
16
|
+
type: 'BINARY(BYTE)',
|
|
17
|
+
action: { SetControl: { data: '[{{myKey}}]' } },
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
const out = Helper.prepareControlData(device, 'myKey', true);
|
|
22
|
+
expect(out.value).toBe('ControlData');
|
|
23
|
+
const expected = Buffer.from(String.fromCharCode(1)).toString('base64');
|
|
24
|
+
expect(out.data).toBe(expected);
|
|
25
|
+
expect(out.format).toBe('B64');
|
|
26
|
+
});
|
|
27
|
+
test('non-numeric replacement falls back to 0', () => {
|
|
28
|
+
const device = new Device({
|
|
29
|
+
deviceId: 'dev2',
|
|
30
|
+
alias: 'd',
|
|
31
|
+
modelJsonUri: '',
|
|
32
|
+
deviceType: 0,
|
|
33
|
+
snapshot: { raw: {} },
|
|
34
|
+
});
|
|
35
|
+
device.deviceModel = {
|
|
36
|
+
data: {
|
|
37
|
+
ControlWifi: {
|
|
38
|
+
type: 'BINARY(BYTE)',
|
|
39
|
+
action: { SetControl: { data: '[{{k}}]' } },
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const out = Helper.prepareControlData(device, 'k', 'non-numeric');
|
|
44
|
+
const expected = Buffer.from(String.fromCharCode(0)).toString('base64');
|
|
45
|
+
expect(out.data).toBe(expected);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=prepareControlData.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareControlData.spec.js","sourceRoot":"","sources":["../../../src/v1/__tests__/prepareControlData.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACxE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,GAAG;YACV,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;SACf,CAAC,CAAC;QAEV,MAAM,CAAC,WAAW,GAAG;YACnB,IAAI,EAAE;gBACJ,WAAW,EAAE;oBACX,IAAI,EAAE,cAAc;oBACpB,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;iBAChD;aACF;SACK,CAAC;QAET,MAAM,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAa,EAAE,OAAO,EAAE,IAAW,CAAC,CAAC;QAE3E,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,GAAG;YACV,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;SACf,CAAC,CAAC;QAEV,MAAM,CAAC,WAAW,GAAG;YACnB,IAAI,EAAE;gBACJ,WAAW,EAAE;oBACX,IAAI,EAAE,cAAc;oBACpB,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;iBAC5C;aACF;SACK,CAAC;QAET,MAAM,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAa,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { default as AirConditioner } from '../../devices/AirConditioner.js';
|
|
2
|
+
import { CharacteristicValue } from 'homebridge';
|
|
3
|
+
export default class AC extends AirConditioner {
|
|
4
|
+
protected createHeaterCoolerService(): void;
|
|
5
|
+
setFanState(value: CharacteristicValue): Promise<void>;
|
|
6
|
+
setJetModeActive(value: CharacteristicValue): Promise<void>;
|
|
7
|
+
setActive(value: CharacteristicValue): Promise<void>;
|
|
8
|
+
setTargetTemperature(value: CharacteristicValue): Promise<void>;
|
|
9
|
+
setFanSpeed(value: CharacteristicValue): Promise<void>;
|
|
10
|
+
setSwingMode(value: CharacteristicValue): Promise<void>;
|
|
11
|
+
setOpMode(deviceId: string, opMode: number): Promise<boolean>;
|
|
12
|
+
setLight(value: CharacteristicValue): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { default as AirConditioner, FanSpeed, OpMode } from '../../devices/AirConditioner.js';
|
|
2
|
+
import { ACOperation } from '../transforms/AirState.js';
|
|
3
|
+
import { normalizeBoolean, normalizeNumber, safeParseInt } from '../helper.js';
|
|
4
|
+
export default class AC extends AirConditioner {
|
|
5
|
+
createHeaterCoolerService() {
|
|
6
|
+
const { Characteristic, } = this.platform;
|
|
7
|
+
const device = this.accessory.context.device;
|
|
8
|
+
super.createHeaterCoolerService();
|
|
9
|
+
const currentTemperatureValue = device.deviceModel.value('TempCur');
|
|
10
|
+
this.service.getCharacteristic(Characteristic.CurrentTemperature)
|
|
11
|
+
.setProps({
|
|
12
|
+
minValue: currentTemperatureValue.min,
|
|
13
|
+
maxValue: currentTemperatureValue.max,
|
|
14
|
+
});
|
|
15
|
+
const targetTemperatureValue = device.deviceModel.value('TempCfg');
|
|
16
|
+
this.service.getCharacteristic(Characteristic.CoolingThresholdTemperature)
|
|
17
|
+
.setProps({
|
|
18
|
+
minValue: targetTemperatureValue.min,
|
|
19
|
+
maxValue: targetTemperatureValue.max,
|
|
20
|
+
});
|
|
21
|
+
this.service.getCharacteristic(Characteristic.HeatingThresholdTemperature)
|
|
22
|
+
.setProps({
|
|
23
|
+
minValue: targetTemperatureValue.min,
|
|
24
|
+
maxValue: targetTemperatureValue.max,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async setFanState(value) {
|
|
28
|
+
const { TargetFanState } = this.platform.Characteristic;
|
|
29
|
+
if (!this.Status.isPowerOn) {
|
|
30
|
+
this.logger.debug('Power is off, cannot set fan state');
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const device = this.accessory.context.device;
|
|
34
|
+
const vNum = normalizeNumber(value);
|
|
35
|
+
const isAuto = (vNum !== null) ? (vNum === TargetFanState.AUTO) : normalizeBoolean(value);
|
|
36
|
+
const windStrength = isAuto ? 8 : FanSpeed.HIGH; // 8 mean fan auto mode
|
|
37
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'WindStrength', windStrength);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
async setJetModeActive(value) {
|
|
41
|
+
const device = this.accessory.context.device;
|
|
42
|
+
const vNum = normalizeNumber(value);
|
|
43
|
+
const jetModeValue = (vNum !== null) ? vNum : (normalizeBoolean(value) ? 1 : 0);
|
|
44
|
+
if (this.Status.isPowerOn && this.Status.opMode === OpMode.COOL) {
|
|
45
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'Jet', jetModeValue);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async setActive(value) {
|
|
49
|
+
const device = this.accessory.context.device;
|
|
50
|
+
const vNum = normalizeNumber(value);
|
|
51
|
+
const isOn = (vNum !== null) ? (vNum === 1) : normalizeBoolean(value);
|
|
52
|
+
const op = isOn ? ACOperation.RIGHT_ON : ACOperation.OFF;
|
|
53
|
+
const opValue = device.deviceModel.enumValue('Operation', op);
|
|
54
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'Operation', opValue);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
async setTargetTemperature(value) {
|
|
58
|
+
if (!this.Status.isPowerOn) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const vNum = normalizeNumber(value);
|
|
62
|
+
if (vNum === null) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const device = this.accessory.context.device;
|
|
66
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'TempCfg', `${vNum}`);
|
|
67
|
+
device.data.snapshot['airState.tempState.target'] = vNum;
|
|
68
|
+
this.updateAccessoryCharacteristic(device);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
async setFanSpeed(value) {
|
|
72
|
+
if (!this.Status.isPowerOn) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const vNum = normalizeNumber(value);
|
|
76
|
+
if (vNum === null) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const speedValue = Math.max(1, Math.round(vNum));
|
|
80
|
+
const device = this.accessory.context.device;
|
|
81
|
+
const windStrength = safeParseInt(Object.keys(FanSpeed)[speedValue - 1], FanSpeed.HIGH);
|
|
82
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'WindStrength', windStrength);
|
|
83
|
+
}
|
|
84
|
+
async setSwingMode(value) {
|
|
85
|
+
if (!this.Status.isPowerOn) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const swingValue = !!value ? '100' : '0';
|
|
89
|
+
const device = this.accessory.context.device;
|
|
90
|
+
if (this.config.ac_swing_mode === 'BOTH' || this.config.ac_swing_mode === 'VERTICAL') {
|
|
91
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'WDirVStep', swingValue);
|
|
92
|
+
device.data.snapshot['airState.wDir.vStep'] = swingValue;
|
|
93
|
+
}
|
|
94
|
+
if (this.config.ac_swing_mode === 'BOTH' || this.config.ac_swing_mode === 'HORIZONTAL') {
|
|
95
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'WDirHStep', swingValue);
|
|
96
|
+
device.data.snapshot['airState.wDir.hStep'] = swingValue;
|
|
97
|
+
}
|
|
98
|
+
this.updateAccessoryCharacteristic(device);
|
|
99
|
+
}
|
|
100
|
+
async setOpMode(deviceId, opMode) {
|
|
101
|
+
const device = this.accessory.context.device;
|
|
102
|
+
const result = await this.platform.ThinQ?.thinq1DeviceControl(device, 'OpMode', opMode);
|
|
103
|
+
device.data.snapshot['airState.opMode'] = opMode;
|
|
104
|
+
this.updateAccessoryCharacteristic(device);
|
|
105
|
+
return result !== null;
|
|
106
|
+
}
|
|
107
|
+
async setLight(value) {
|
|
108
|
+
const device = this.accessory.context.device;
|
|
109
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'DisplayControl', value ? '1' : '0');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=AC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AC.js","sourceRoot":"","sources":["../../../src/v1/devices/AC.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { default as V2 } from '../../devices/AirPurifier.js';
|
|
2
|
+
import { CharacteristicValue, Logger, PlatformAccessory } from 'homebridge';
|
|
3
|
+
import { LGThinQHomebridgePlatform } from '../../platform.js';
|
|
4
|
+
import { AccessoryContext } from '../../baseDevice.js';
|
|
5
|
+
export default class AirPurifier extends V2 {
|
|
6
|
+
readonly platform: LGThinQHomebridgePlatform;
|
|
7
|
+
readonly accessory: PlatformAccessory<AccessoryContext>;
|
|
8
|
+
constructor(platform: LGThinQHomebridgePlatform, accessory: PlatformAccessory<AccessoryContext>, logger: Logger);
|
|
9
|
+
setActive(value: CharacteristicValue): Promise<void>;
|
|
10
|
+
setTargetAirPurifierState(value: CharacteristicValue): Promise<void>;
|
|
11
|
+
setRotationSpeed(value: CharacteristicValue): Promise<void>;
|
|
12
|
+
setSwingMode(value: CharacteristicValue): Promise<void>;
|
|
13
|
+
setLight(value: CharacteristicValue): Promise<void>;
|
|
14
|
+
setAirFastActive(value: CharacteristicValue): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { default as V2, RotateSpeed } from '../../devices/AirPurifier.js';
|
|
2
|
+
import { safeParseInt, normalizeNumber } from '../helper.js';
|
|
3
|
+
export default class AirPurifier extends V2 {
|
|
4
|
+
platform;
|
|
5
|
+
accessory;
|
|
6
|
+
constructor(platform, accessory, logger) {
|
|
7
|
+
super(platform, accessory, logger);
|
|
8
|
+
this.platform = platform;
|
|
9
|
+
this.accessory = accessory;
|
|
10
|
+
}
|
|
11
|
+
async setActive(value) {
|
|
12
|
+
const device = this.accessory.context.device;
|
|
13
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'Operation', value ? '1' : '0');
|
|
14
|
+
}
|
|
15
|
+
async setTargetAirPurifierState(value) {
|
|
16
|
+
const device = this.accessory.context.device;
|
|
17
|
+
if (!this.Status.isPowerOn || (!!value !== this.Status.isNormalMode)) {
|
|
18
|
+
return; // just skip it
|
|
19
|
+
}
|
|
20
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'OpMode', value ? '16' : '14');
|
|
21
|
+
}
|
|
22
|
+
async setRotationSpeed(value) {
|
|
23
|
+
if (!this.Status.isPowerOn || !this.Status.isNormalMode) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const vNum = normalizeNumber(value);
|
|
27
|
+
if (vNum === null) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const device = this.accessory.context.device;
|
|
31
|
+
const values = Object.keys(RotateSpeed);
|
|
32
|
+
const windStrength = safeParseInt(values[Math.round(vNum) - 1], RotateSpeed.EXTRA);
|
|
33
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'WindStrength', windStrength.toString());
|
|
34
|
+
}
|
|
35
|
+
async setSwingMode(value) {
|
|
36
|
+
if (!this.Status.isPowerOn || !this.Status.isNormalMode) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const device = this.accessory.context.device;
|
|
40
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'CirculateDir', value ? '1' : '0');
|
|
41
|
+
}
|
|
42
|
+
async setLight(value) {
|
|
43
|
+
if (!this.Status.isPowerOn) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const device = this.accessory.context.device;
|
|
47
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'SignalLighting', value ? '1' : '0');
|
|
48
|
+
}
|
|
49
|
+
async setAirFastActive(value) {
|
|
50
|
+
if (!this.Status.isPowerOn) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const device = this.accessory.context.device;
|
|
54
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'AirFast', value ? '1' : '0');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=AirPurifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AirPurifier.js","sourceRoot":"","sources":["../../../src/v1/devices/AirPurifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { default as RangeHoodV2 } from '../../devices/RangeHood.js';
|
|
2
|
+
import { CharacteristicValue } from 'homebridge';
|
|
3
|
+
export default class RangeHood extends RangeHoodV2 {
|
|
4
|
+
setHoodRotationSpeed(value: CharacteristicValue): Promise<void>;
|
|
5
|
+
setLightBrightness(value: CharacteristicValue): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { default as RangeHoodV2 } from '../../devices/RangeHood.js';
|
|
2
|
+
export default class RangeHood extends RangeHoodV2 {
|
|
3
|
+
async setHoodRotationSpeed(value) {
|
|
4
|
+
const device = this.accessory.context.device;
|
|
5
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'VentLevel', value);
|
|
6
|
+
}
|
|
7
|
+
async setLightBrightness(value) {
|
|
8
|
+
const device = this.accessory.context.device;
|
|
9
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'LampLevel', value);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=RangeHood.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangeHood.js","sourceRoot":"","sources":["../../../src/v1/devices/RangeHood.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIpE,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,KAAK,CAAC,oBAAoB,CAAC,KAA0B;QACnD,MAAM,MAAM,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QACrD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAA0B;QACjD,MAAM,MAAM,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QACrD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { default as RefrigeratorV2, RefrigeratorStatus } from '../../devices/Refrigerator.js';
|
|
2
|
+
import { CharacteristicValue } from 'homebridge';
|
|
3
|
+
export default class Refrigerator extends RefrigeratorV2 {
|
|
4
|
+
protected createThermostat(name: string, key: string): import("homebridge").Service | undefined;
|
|
5
|
+
setTemperature(key: string, temp: string): Promise<void>;
|
|
6
|
+
setExpressMode(value: CharacteristicValue): Promise<void>;
|
|
7
|
+
setExpressFridge(value: CharacteristicValue): Promise<void>;
|
|
8
|
+
setEcoFriendly(value: CharacteristicValue): Promise<void>;
|
|
9
|
+
get Status(): Status;
|
|
10
|
+
}
|
|
11
|
+
export declare class Status extends RefrigeratorStatus {
|
|
12
|
+
get freezerTemperature(): number;
|
|
13
|
+
get fridgeTemperature(): number;
|
|
14
|
+
get isExpressFridgeOn(): boolean;
|
|
15
|
+
get isExpressModeOn(): boolean;
|
|
16
|
+
get isEcoFriendlyOn(): boolean;
|
|
17
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { default as RefrigeratorV2, RefrigeratorStatus } from '../../devices/Refrigerator.js';
|
|
2
|
+
import { fToC, safeParseInt } from '../../helper.js';
|
|
3
|
+
export default class Refrigerator extends RefrigeratorV2 {
|
|
4
|
+
createThermostat(name, key) {
|
|
5
|
+
const keyMap = {
|
|
6
|
+
fridgeTemp: 'TempRefrigerator',
|
|
7
|
+
freezerTemp: 'TempFreezer',
|
|
8
|
+
};
|
|
9
|
+
const newKey = keyMap[key];
|
|
10
|
+
if (newKey) {
|
|
11
|
+
return super.createThermostat(name, newKey);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
this.platform.log.error('Invalid key for thermostat:', key);
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async setTemperature(key, temp) {
|
|
19
|
+
const device = this.accessory.context.device;
|
|
20
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, key, temp);
|
|
21
|
+
}
|
|
22
|
+
async setExpressMode(value) {
|
|
23
|
+
const device = this.accessory.context.device;
|
|
24
|
+
const On = device.deviceModel.enumValue('IcePlus', '@CP_ON_EN_W');
|
|
25
|
+
const Off = device.deviceModel.enumValue('IcePlus', '@CP_OFF_EN_W');
|
|
26
|
+
this.platform.ThinQ?.thinq1DeviceControl(device, 'IcePlus', value ? On : Off);
|
|
27
|
+
}
|
|
28
|
+
async setExpressFridge(value) {
|
|
29
|
+
const device = this.accessory.context.device;
|
|
30
|
+
const On = device.deviceModel.enumValue('ExpressFridge', '@CP_ON_EN_W');
|
|
31
|
+
const Off = device.deviceModel.enumValue('ExpressFridge', '@CP_OFF_EN_W');
|
|
32
|
+
this.platform.ThinQ?.thinq1DeviceControl(device, 'ExpressFridge', value ? On : Off);
|
|
33
|
+
}
|
|
34
|
+
async setEcoFriendly(value) {
|
|
35
|
+
const device = this.accessory.context.device;
|
|
36
|
+
const On = device.deviceModel.enumValue('EcoFriendly', '@CP_ON_EN_W');
|
|
37
|
+
const Off = device.deviceModel.enumValue('EcoFriendly', '@CP_OFF_EN_W');
|
|
38
|
+
this.platform.ThinQ?.thinq1DeviceControl(device, 'EcoFriendly', value ? On : Off);
|
|
39
|
+
}
|
|
40
|
+
get Status() {
|
|
41
|
+
return new Status(this.accessory.context.device.snapshot?.refState, this.accessory.context.device.deviceModel);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class Status extends RefrigeratorStatus {
|
|
45
|
+
get freezerTemperature() {
|
|
46
|
+
const defaultValue = this.deviceModel.lookupMonitorValue2('TempFreezer', this.data?.freezerTemp, '0');
|
|
47
|
+
if (this.tempUnit === 'FAHRENHEIT') {
|
|
48
|
+
return fToC(safeParseInt(this.deviceModel.lookupMonitorValue2('TempFreezer_F', this.data?.freezerTemp, `${defaultValue}`)));
|
|
49
|
+
}
|
|
50
|
+
return safeParseInt(this.deviceModel.lookupMonitorValue2('TempFreezer_C', this.data?.freezerTemp, `${defaultValue}`));
|
|
51
|
+
}
|
|
52
|
+
get fridgeTemperature() {
|
|
53
|
+
const defaultValue = this.deviceModel.lookupMonitorValue2('TempRefrigerator', this.data?.fridgeTemp, '0');
|
|
54
|
+
if (this.tempUnit === 'FAHRENHEIT') {
|
|
55
|
+
return fToC(safeParseInt(this.deviceModel.lookupMonitorValue2('TempRefrigerator_F', this.data?.fridgeTemp, `${defaultValue}`)));
|
|
56
|
+
}
|
|
57
|
+
return safeParseInt(this.deviceModel.lookupMonitorValue2('TempRefrigerator_C', this.data?.fridgeTemp, `${defaultValue}`));
|
|
58
|
+
}
|
|
59
|
+
get isExpressFridgeOn() {
|
|
60
|
+
return this.data?.expressFridge === this.deviceModel.lookupMonitorName('ExpressFridge', '@CP_ON_EN_W');
|
|
61
|
+
}
|
|
62
|
+
get isExpressModeOn() {
|
|
63
|
+
return this.data?.expressMode === this.deviceModel.lookupMonitorName('IcePlus', '@CP_ON_EN_W');
|
|
64
|
+
}
|
|
65
|
+
get isEcoFriendlyOn() {
|
|
66
|
+
return this.data?.ecoFriendly === this.deviceModel.lookupMonitorName('EcoFriendly', '@CP_ON_EN_W');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=Refrigerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Refrigerator.js","sourceRoot":"","sources":["../../../src/v1/devices/Refrigerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { default as WasherV2 } from '../../devices/WasherDryer.js';
|
|
2
|
+
import { LGThinQHomebridgePlatform } from '../../platform.js';
|
|
3
|
+
import { CharacteristicValue, Logger, PlatformAccessory } from 'homebridge';
|
|
4
|
+
import { AccessoryContext } from '../../baseDevice.js';
|
|
5
|
+
export default class Washer extends WasherV2 {
|
|
6
|
+
readonly platform: LGThinQHomebridgePlatform;
|
|
7
|
+
readonly accessory: PlatformAccessory<AccessoryContext>;
|
|
8
|
+
constructor(platform: LGThinQHomebridgePlatform, accessory: PlatformAccessory<AccessoryContext>, logger: Logger);
|
|
9
|
+
setActive(value: CharacteristicValue): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { default as WasherV2 } from '../../devices/WasherDryer.js';
|
|
2
|
+
export default class Washer extends WasherV2 {
|
|
3
|
+
platform;
|
|
4
|
+
accessory;
|
|
5
|
+
constructor(platform, accessory, logger) {
|
|
6
|
+
super(platform, accessory, logger);
|
|
7
|
+
this.platform = platform;
|
|
8
|
+
this.accessory = accessory;
|
|
9
|
+
const { Characteristic, } = this.platform;
|
|
10
|
+
this.serviceWasherDryer?.getCharacteristic(Characteristic.Active).setProps({
|
|
11
|
+
perms: [
|
|
12
|
+
"pr" /* Perms.PAIRED_READ */,
|
|
13
|
+
"ev" /* Perms.NOTIFY */,
|
|
14
|
+
"pw" /* Perms.PAIRED_WRITE */,
|
|
15
|
+
],
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async setActive(value) {
|
|
19
|
+
const device = this.accessory.context.device;
|
|
20
|
+
await this.platform.ThinQ?.thinq1DeviceControl(device, 'Power', value ? 'On' : 'Off');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=Washer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Washer.js","sourceRoot":"","sources":["../../../src/v1/devices/Washer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAMnE,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,QAAQ;IAExB;IACA;IAFlB,YACkB,QAAmC,EACnC,SAA8C,EAC9D,MAAc;QAEd,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAJnB,aAAQ,GAAR,QAAQ,CAA2B;QACnC,cAAS,GAAT,SAAS,CAAqC;QAK9D,MAAM,EACJ,cAAc,GACf,GAAG,IAAI,CAAC,QAAQ,CAAC;QAElB,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;YACzE,KAAK,EAAE;;;;aAIN;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAA0B;QACxC,MAAM,MAAM,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QACrD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnG,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Washer from './Washer.js';
|
|
2
|
+
import AC from './AC.js';
|
|
3
|
+
import Refrigerator from './Refrigerator.js';
|
|
4
|
+
import AirPurifier from './AirPurifier.js';
|
|
5
|
+
import RangeHood from './RangeHood.js';
|
|
6
|
+
export { Washer, AC, Refrigerator, AirPurifier, RangeHood };
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v1/devices/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Device } from '../lib/Device.js';
|
|
2
|
+
import { DeviceModel } from '../lib/DeviceModel.js';
|
|
3
|
+
import { Washer, AC, Refrigerator, AirPurifier, RangeHood } from './devices/index.js';
|
|
4
|
+
export default class Helper {
|
|
5
|
+
static make(device: Device): typeof Washer | typeof AC | typeof Refrigerator | typeof AirPurifier | typeof RangeHood | null;
|
|
6
|
+
/**
|
|
7
|
+
* transform device from thinq1 to thinq2 compatible (with snapshot data)
|
|
8
|
+
*/
|
|
9
|
+
static transform(device: Device, monitorData: any): Device;
|
|
10
|
+
static prepareControlData(device: Device, key: string, value: string): any;
|
|
11
|
+
}
|
|
12
|
+
export declare function lookupEnumIndex(enumType: any, value: any): string;
|
|
13
|
+
export declare function loopupEnum(deviceModel: DeviceModel, decodedMonitor: any, key: any): string | number | null;
|
|
14
|
+
export { normalizeBoolean, normalizeNumber, safeParseInt, safeParseFloat } from '../utils/normalize.js';
|