@mp-consulting/homebridge-daikin-cloud 1.5.2 → 1.6.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/README.md +40 -27
- package/config.schema.json +66 -12
- package/dist/src/accessories/air-conditioning-accessory.js +1 -1
- package/dist/src/accessories/air-conditioning-accessory.js.map +1 -1
- package/dist/src/accessories/altherma-accessory.js +1 -1
- package/dist/src/accessories/altherma-accessory.js.map +1 -1
- package/dist/src/accessories/base-accessory.d.ts +5 -4
- package/dist/src/accessories/base-accessory.d.ts.map +1 -1
- package/dist/src/accessories/base-accessory.js +9 -10
- package/dist/src/accessories/base-accessory.js.map +1 -1
- package/dist/src/api/daikin-api.d.ts +22 -6
- package/dist/src/api/daikin-api.d.ts.map +1 -1
- package/dist/src/api/daikin-api.js +49 -23
- package/dist/src/api/daikin-api.js.map +1 -1
- package/dist/src/api/daikin-controller.d.ts +4 -48
- package/dist/src/api/daikin-controller.d.ts.map +1 -1
- package/dist/src/api/daikin-controller.js +14 -84
- package/dist/src/api/daikin-controller.js.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.d.ts +11 -40
- package/dist/src/api/daikin-mobile-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.js +36 -160
- package/dist/src/api/daikin-mobile-oauth.js.map +1 -1
- package/dist/src/api/daikin-oauth.d.ts +10 -37
- package/dist/src/api/daikin-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-oauth.js +36 -166
- package/dist/src/api/daikin-oauth.js.map +1 -1
- package/dist/src/api/daikin-schemas.d.ts +20 -22
- package/dist/src/api/daikin-schemas.d.ts.map +1 -1
- package/dist/src/api/daikin-schemas.js +17 -49
- package/dist/src/api/daikin-schemas.js.map +1 -1
- package/dist/src/api/daikin-types.d.ts +11 -23
- package/dist/src/api/daikin-types.d.ts.map +1 -1
- package/dist/src/api/daikin-types.js.map +1 -1
- package/dist/src/api/daikin-websocket.d.ts +4 -5
- package/dist/src/api/daikin-websocket.d.ts.map +1 -1
- package/dist/src/api/daikin-websocket.js +62 -34
- package/dist/src/api/daikin-websocket.js.map +1 -1
- package/dist/src/api/http-defaults.d.ts +3 -2
- package/dist/src/api/http-defaults.d.ts.map +1 -1
- package/dist/src/api/http-defaults.js.map +1 -1
- package/dist/src/api/http-transport.d.ts +14 -2
- package/dist/src/api/http-transport.d.ts.map +1 -1
- package/dist/src/api/http-transport.js +32 -9
- package/dist/src/api/http-transport.js.map +1 -1
- package/dist/src/api/token-client.d.ts +82 -0
- package/dist/src/api/token-client.d.ts.map +1 -0
- package/dist/src/api/token-client.js +188 -0
- package/dist/src/api/token-client.js.map +1 -0
- package/dist/src/api/token-storage.d.ts +6 -0
- package/dist/src/api/token-storage.d.ts.map +1 -1
- package/dist/src/api/token-storage.js +27 -1
- package/dist/src/api/token-storage.js.map +1 -1
- package/dist/src/config/config-manager.d.ts +69 -125
- package/dist/src/config/config-manager.d.ts.map +1 -1
- package/dist/src/config/config-manager.js +288 -225
- package/dist/src/config/config-manager.js.map +1 -1
- package/dist/src/constants/api.constants.d.ts +6 -0
- package/dist/src/constants/api.constants.d.ts.map +1 -1
- package/dist/src/constants/api.constants.js +7 -1
- package/dist/src/constants/api.constants.js.map +1 -1
- package/dist/src/constants/auth.constants.d.ts +11 -0
- package/dist/src/constants/auth.constants.d.ts.map +1 -1
- package/dist/src/constants/auth.constants.js +12 -1
- package/dist/src/constants/auth.constants.js.map +1 -1
- package/dist/src/constants/device.constants.d.ts +1 -7
- package/dist/src/constants/device.constants.d.ts.map +1 -1
- package/dist/src/constants/device.constants.js +2 -11
- package/dist/src/constants/device.constants.js.map +1 -1
- package/dist/src/constants/time.constants.d.ts +0 -2
- package/dist/src/constants/time.constants.d.ts.map +1 -1
- package/dist/src/constants/time.constants.js +1 -3
- package/dist/src/constants/time.constants.js.map +1 -1
- package/dist/src/device/accessory-factory.d.ts +0 -5
- package/dist/src/device/accessory-factory.d.ts.map +1 -1
- package/dist/src/device/accessory-factory.js +0 -7
- package/dist/src/device/accessory-factory.js.map +1 -1
- package/dist/src/device/capability-detector.d.ts +9 -1
- package/dist/src/device/capability-detector.d.ts.map +1 -1
- package/dist/src/device/capability-detector.js +32 -28
- package/dist/src/device/capability-detector.js.map +1 -1
- package/dist/src/device/capability-docs.d.ts.map +1 -1
- package/dist/src/device/capability-docs.js +3 -0
- package/dist/src/device/capability-docs.js.map +1 -1
- package/dist/src/device/data-paths.d.ts +18 -0
- package/dist/src/device/data-paths.d.ts.map +1 -0
- package/dist/src/device/data-paths.js +20 -0
- package/dist/src/device/data-paths.js.map +1 -0
- package/dist/src/device/profiles/device-profile.d.ts +0 -5
- package/dist/src/device/profiles/device-profile.d.ts.map +1 -1
- package/dist/src/device/profiles/device-profile.js +0 -21
- package/dist/src/device/profiles/device-profile.js.map +1 -1
- package/dist/src/features/base-feature.d.ts +53 -9
- package/dist/src/features/base-feature.d.ts.map +1 -1
- package/dist/src/features/base-feature.js +93 -40
- package/dist/src/features/base-feature.js.map +1 -1
- package/dist/src/features/feature-manager.d.ts +27 -15
- package/dist/src/features/feature-manager.d.ts.map +1 -1
- package/dist/src/features/feature-manager.js +27 -24
- package/dist/src/features/feature-manager.js.map +1 -1
- package/dist/src/features/index.d.ts +1 -0
- package/dist/src/features/index.d.ts.map +1 -1
- package/dist/src/features/index.js +1 -0
- package/dist/src/features/index.js.map +1 -1
- package/dist/src/features/modes/auto-fan-mode.feature.d.ts +16 -10
- package/dist/src/features/modes/auto-fan-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/auto-fan-mode.feature.js +16 -40
- package/dist/src/features/modes/auto-fan-mode.feature.js.map +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/dry-operation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/dry-operation-mode.feature.js +11 -30
- package/dist/src/features/modes/dry-operation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/econo-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/econo-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/econo-mode.feature.js +11 -31
- package/dist/src/features/modes/econo-mode.feature.js.map +1 -1
- package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/fan-only-operation-mode.feature.js +11 -30
- package/dist/src/features/modes/fan-only-operation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/firmware-update.feature.d.ts +7 -6
- package/dist/src/features/modes/firmware-update.feature.d.ts.map +1 -1
- package/dist/src/features/modes/firmware-update.feature.js +15 -22
- package/dist/src/features/modes/firmware-update.feature.js.map +1 -1
- package/dist/src/features/modes/holiday-mode.feature.d.ts +2 -1
- package/dist/src/features/modes/holiday-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/holiday-mode.feature.js +5 -15
- package/dist/src/features/modes/holiday-mode.feature.js.map +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.d.ts +15 -12
- package/dist/src/features/modes/indoor-silent-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/indoor-silent-mode.feature.js +15 -39
- package/dist/src/features/modes/indoor-silent-mode.feature.js.map +1 -1
- package/dist/src/features/modes/oscillation-mode.feature.d.ts +5 -6
- package/dist/src/features/modes/oscillation-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/oscillation-mode.feature.js +14 -36
- package/dist/src/features/modes/oscillation-mode.feature.js.map +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/outdoor-silent-mode.feature.js +11 -31
- package/dist/src/features/modes/outdoor-silent-mode.feature.js.map +1 -1
- package/dist/src/features/modes/powerful-mode.feature.d.ts +14 -10
- package/dist/src/features/modes/powerful-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/powerful-mode.feature.js +13 -32
- package/dist/src/features/modes/powerful-mode.feature.js.map +1 -1
- package/dist/src/features/modes/streamer-mode.feature.d.ts +12 -9
- package/dist/src/features/modes/streamer-mode.feature.d.ts.map +1 -1
- package/dist/src/features/modes/streamer-mode.feature.js +11 -31
- package/dist/src/features/modes/streamer-mode.feature.js.map +1 -1
- package/dist/src/features/on-off-data-point-feature.d.ts +43 -0
- package/dist/src/features/on-off-data-point-feature.d.ts.map +1 -0
- package/dist/src/features/on-off-data-point-feature.js +49 -0
- package/dist/src/features/on-off-data-point-feature.js.map +1 -0
- package/dist/src/platform.d.ts +56 -9
- package/dist/src/platform.d.ts.map +1 -1
- package/dist/src/platform.js +248 -128
- package/dist/src/platform.js.map +1 -1
- package/dist/src/services/climate-control/fan-speed.d.ts +45 -0
- package/dist/src/services/climate-control/fan-speed.d.ts.map +1 -0
- package/dist/src/services/climate-control/fan-speed.js +104 -0
- package/dist/src/services/climate-control/fan-speed.js.map +1 -0
- package/dist/src/services/climate-control/separate-fan.service.d.ts +45 -0
- package/dist/src/services/climate-control/separate-fan.service.d.ts.map +1 -0
- package/dist/src/services/climate-control/separate-fan.service.js +82 -0
- package/dist/src/services/climate-control/separate-fan.service.js.map +1 -0
- package/dist/src/services/climate-control/setpoint-resolver.d.ts +68 -0
- package/dist/src/services/climate-control/setpoint-resolver.d.ts.map +1 -0
- package/dist/src/services/climate-control/setpoint-resolver.js +170 -0
- package/dist/src/services/climate-control/setpoint-resolver.js.map +1 -0
- package/dist/src/services/climate-control/swing-controller.d.ts +28 -0
- package/dist/src/services/climate-control/swing-controller.d.ts.map +1 -0
- package/dist/src/services/climate-control/swing-controller.js +65 -0
- package/dist/src/services/climate-control/swing-controller.js.map +1 -0
- package/dist/src/services/climate-control.service.d.ts +39 -48
- package/dist/src/services/climate-control.service.d.ts.map +1 -1
- package/dist/src/services/climate-control.service.js +223 -554
- package/dist/src/services/climate-control.service.js.map +1 -1
- package/dist/src/services/hot-water-tank.service.d.ts +17 -8
- package/dist/src/services/hot-water-tank.service.d.ts.map +1 -1
- package/dist/src/services/hot-water-tank.service.js +102 -157
- package/dist/src/services/hot-water-tank.service.js.map +1 -1
- package/dist/src/types/daikin-enums.d.ts +0 -5
- package/dist/src/types/daikin-enums.d.ts.map +1 -1
- package/dist/src/types/daikin-enums.js +1 -7
- package/dist/src/types/daikin-enums.js.map +1 -1
- package/dist/src/types/device-capabilities.d.ts +1 -0
- package/dist/src/types/device-capabilities.d.ts.map +1 -1
- package/dist/src/utils/errors.d.ts +9 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +25 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/hap-write.d.ts +22 -0
- package/dist/src/utils/hap-write.d.ts.map +1 -0
- package/dist/src/utils/hap-write.js +33 -0
- package/dist/src/utils/hap-write.js.map +1 -0
- package/dist/src/utils/sleep.d.ts +5 -0
- package/dist/src/utils/sleep.d.ts.map +1 -0
- package/dist/src/utils/sleep.js +10 -0
- package/dist/src/utils/sleep.js.map +1 -0
- package/homebridge-ui/README.md +25 -2
- package/homebridge-ui/public/index.html +19 -17
- package/homebridge-ui/public/script.js +95 -32
- package/homebridge-ui/public/styles.css +109 -0
- package/homebridge-ui/server.js +321 -125
- package/package.json +2 -3
- package/dist/src/utils/log-context.d.ts +0 -105
- package/dist/src/utils/log-context.d.ts.map +0 -1
- package/dist/src/utils/log-context.js +0 -206
- package/dist/src/utils/log-context.js.map +0 -1
- package/dist/src/utils/update-mapper.d.ts +0 -59
- package/dist/src/utils/update-mapper.d.ts.map +0 -1
- package/dist/src/utils/update-mapper.js +0 -192
- package/dist/src/utils/update-mapper.js.map +0 -1
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"displayName": "Daikin Cloud",
|
|
3
3
|
"platformname": "daikincloud",
|
|
4
4
|
"name": "@mp-consulting/homebridge-daikin-cloud",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.6.0",
|
|
6
6
|
"description": "Integrate with the Daikin Cloud to control your Daikin air conditioning via the cloud",
|
|
7
7
|
"license": "(Apache-2.0 AND MIT)",
|
|
8
8
|
"repository": {
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"test:watch": "vitest",
|
|
25
25
|
"test:coverage": "vitest run --coverage",
|
|
26
26
|
"lint": "eslint . --max-warnings=0",
|
|
27
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
|
|
27
28
|
"schema:check": "tsx scripts/check-schema-drift.ts",
|
|
28
29
|
"watch": "npm run build && npm link && nodemon",
|
|
29
30
|
"copy:ui-kit": "mkdir -p homebridge-ui/public/lib && cp node_modules/@mp-consulting/homebridge-ui-kit/dist/kit.css homebridge-ui/public/lib/ && cp node_modules/@mp-consulting/homebridge-ui-kit/dist/kit.js homebridge-ui/public/lib/",
|
|
@@ -37,7 +38,6 @@
|
|
|
37
38
|
],
|
|
38
39
|
"dependencies": {
|
|
39
40
|
"@homebridge/plugin-ui-utils": "^2.2.6",
|
|
40
|
-
"class-validator": "^0.15.1",
|
|
41
41
|
"ws": "^8.21.3",
|
|
42
42
|
"zod": "^4.5.4"
|
|
43
43
|
},
|
|
@@ -48,7 +48,6 @@
|
|
|
48
48
|
"@types/ws": "^8.18.1",
|
|
49
49
|
"@vitest/coverage-v8": "^5.0.0",
|
|
50
50
|
"eslint": "^10.10.0",
|
|
51
|
-
"hap-nodejs": "^1.2.0",
|
|
52
51
|
"homebridge": "^2.4.0",
|
|
53
52
|
"homebridge-config-ui-x": "^5.29.0",
|
|
54
53
|
"nodemon": "^3.1.14",
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Structured Logging with Context
|
|
3
|
-
*
|
|
4
|
-
* Provides enhanced logging with structured context, categories, and formatting.
|
|
5
|
-
*/
|
|
6
|
-
import type { Logger } from 'homebridge';
|
|
7
|
-
export declare enum LogLevel {
|
|
8
|
-
DEBUG = "debug",
|
|
9
|
-
INFO = "info",
|
|
10
|
-
WARN = "warn",
|
|
11
|
-
ERROR = "error"
|
|
12
|
-
}
|
|
13
|
-
export declare enum LogCategory {
|
|
14
|
-
PLATFORM = "Platform",
|
|
15
|
-
API = "API",
|
|
16
|
-
AUTH = "Auth",
|
|
17
|
-
DEVICE = "Device",
|
|
18
|
-
WEBSOCKET = "WebSocket",
|
|
19
|
-
SERVICE = "Service",
|
|
20
|
-
FEATURE = "Feature",
|
|
21
|
-
CONFIG = "Config",
|
|
22
|
-
ACCESSORY = "Accessory"
|
|
23
|
-
}
|
|
24
|
-
export interface LogContext {
|
|
25
|
-
category?: LogCategory;
|
|
26
|
-
deviceId?: string;
|
|
27
|
-
deviceName?: string;
|
|
28
|
-
operation?: string;
|
|
29
|
-
embeddedId?: string;
|
|
30
|
-
feature?: string;
|
|
31
|
-
metadata?: Record<string, unknown>;
|
|
32
|
-
}
|
|
33
|
-
export interface LogEntry {
|
|
34
|
-
level: LogLevel;
|
|
35
|
-
message: string;
|
|
36
|
-
context?: LogContext;
|
|
37
|
-
timestamp: Date;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Structured logger with context support
|
|
41
|
-
*/
|
|
42
|
-
export declare class StructuredLogger {
|
|
43
|
-
private readonly logger;
|
|
44
|
-
private readonly defaultContext?;
|
|
45
|
-
private readonly history;
|
|
46
|
-
private readonly maxHistorySize;
|
|
47
|
-
constructor(logger: Logger, defaultContext?: LogContext | undefined);
|
|
48
|
-
/**
|
|
49
|
-
* Log a debug message
|
|
50
|
-
*/
|
|
51
|
-
debug(message: string, context?: LogContext): void;
|
|
52
|
-
/**
|
|
53
|
-
* Log an info message
|
|
54
|
-
*/
|
|
55
|
-
info(message: string, context?: LogContext): void;
|
|
56
|
-
/**
|
|
57
|
-
* Log a warning message
|
|
58
|
-
*/
|
|
59
|
-
warn(message: string, context?: LogContext): void;
|
|
60
|
-
/**
|
|
61
|
-
* Log an error message
|
|
62
|
-
*/
|
|
63
|
-
error(message: string, context?: LogContext): void;
|
|
64
|
-
/**
|
|
65
|
-
* Log with context
|
|
66
|
-
*/
|
|
67
|
-
log(level: LogLevel, message: string, context?: LogContext): void;
|
|
68
|
-
/**
|
|
69
|
-
* Create a child logger with additional context
|
|
70
|
-
*/
|
|
71
|
-
child(context: LogContext): StructuredLogger;
|
|
72
|
-
/**
|
|
73
|
-
* Get log history
|
|
74
|
-
*/
|
|
75
|
-
getHistory(limit?: number): LogEntry[];
|
|
76
|
-
/**
|
|
77
|
-
* Clear log history
|
|
78
|
-
*/
|
|
79
|
-
clearHistory(): void;
|
|
80
|
-
/**
|
|
81
|
-
* Merge context with defaults
|
|
82
|
-
*/
|
|
83
|
-
private mergeContext;
|
|
84
|
-
/**
|
|
85
|
-
* Format log message with context
|
|
86
|
-
*/
|
|
87
|
-
private formatMessage;
|
|
88
|
-
/**
|
|
89
|
-
* Record log entry in history
|
|
90
|
-
*/
|
|
91
|
-
private recordLog;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Create a structured logger
|
|
95
|
-
*/
|
|
96
|
-
export declare function createLogger(logger: Logger, context?: LogContext): StructuredLogger;
|
|
97
|
-
/**
|
|
98
|
-
* Create a logger for a specific category
|
|
99
|
-
*/
|
|
100
|
-
export declare function createCategoryLogger(logger: Logger, category: LogCategory): StructuredLogger;
|
|
101
|
-
/**
|
|
102
|
-
* Create a logger for a device
|
|
103
|
-
*/
|
|
104
|
-
export declare function createDeviceLogger(logger: Logger, deviceId: string, deviceName?: string): StructuredLogger;
|
|
105
|
-
//# sourceMappingURL=log-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log-context.d.ts","sourceRoot":"","sources":["../../../src/utils/log-context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,oBAAY,QAAQ;IAChB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAClB;AAED,oBAAY,WAAW;IACnB,QAAQ,aAAa;IACrB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,SAAS,cAAc;CAC1B;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAKrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IALtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;gBAGf,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,UAAU,YAAA;IAGlD;;SAEK;IACL,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD;;SAEK;IACL,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD;;SAEK;IACL,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD;;SAEK;IACL,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD;;SAEK;IACL,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IA6BjE;;SAEK;IACL,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB;IAK5C;;SAEK;IACL,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAItC;;SAEK;IACL,YAAY,IAAI,IAAI;IAIpB;;SAEK;IACL,OAAO,CAAC,YAAY;IAepB;;SAEK;IACL,OAAO,CAAC,aAAa;IA+CrB;;SAEK;IACL,OAAO,CAAC,SAAS;CAQlB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAEnF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,gBAAgB,CAE5F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,gBAAgB,CAMlB"}
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Structured Logging with Context
|
|
4
|
-
*
|
|
5
|
-
* Provides enhanced logging with structured context, categories, and formatting.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.StructuredLogger = exports.LogCategory = exports.LogLevel = void 0;
|
|
9
|
-
exports.createLogger = createLogger;
|
|
10
|
-
exports.createCategoryLogger = createCategoryLogger;
|
|
11
|
-
exports.createDeviceLogger = createDeviceLogger;
|
|
12
|
-
var LogLevel;
|
|
13
|
-
(function (LogLevel) {
|
|
14
|
-
LogLevel["DEBUG"] = "debug";
|
|
15
|
-
LogLevel["INFO"] = "info";
|
|
16
|
-
LogLevel["WARN"] = "warn";
|
|
17
|
-
LogLevel["ERROR"] = "error";
|
|
18
|
-
})(LogLevel || (exports.LogLevel = LogLevel = {}));
|
|
19
|
-
var LogCategory;
|
|
20
|
-
(function (LogCategory) {
|
|
21
|
-
LogCategory["PLATFORM"] = "Platform";
|
|
22
|
-
LogCategory["API"] = "API";
|
|
23
|
-
LogCategory["AUTH"] = "Auth";
|
|
24
|
-
LogCategory["DEVICE"] = "Device";
|
|
25
|
-
LogCategory["WEBSOCKET"] = "WebSocket";
|
|
26
|
-
LogCategory["SERVICE"] = "Service";
|
|
27
|
-
LogCategory["FEATURE"] = "Feature";
|
|
28
|
-
LogCategory["CONFIG"] = "Config";
|
|
29
|
-
LogCategory["ACCESSORY"] = "Accessory";
|
|
30
|
-
})(LogCategory || (exports.LogCategory = LogCategory = {}));
|
|
31
|
-
/**
|
|
32
|
-
* Structured logger with context support
|
|
33
|
-
*/
|
|
34
|
-
class StructuredLogger {
|
|
35
|
-
logger;
|
|
36
|
-
defaultContext;
|
|
37
|
-
history = [];
|
|
38
|
-
maxHistorySize = 100;
|
|
39
|
-
constructor(logger, defaultContext) {
|
|
40
|
-
this.logger = logger;
|
|
41
|
-
this.defaultContext = defaultContext;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Log a debug message
|
|
45
|
-
*/
|
|
46
|
-
debug(message, context) {
|
|
47
|
-
this.log(LogLevel.DEBUG, message, context);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Log an info message
|
|
51
|
-
*/
|
|
52
|
-
info(message, context) {
|
|
53
|
-
this.log(LogLevel.INFO, message, context);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Log a warning message
|
|
57
|
-
*/
|
|
58
|
-
warn(message, context) {
|
|
59
|
-
this.log(LogLevel.WARN, message, context);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Log an error message
|
|
63
|
-
*/
|
|
64
|
-
error(message, context) {
|
|
65
|
-
this.log(LogLevel.ERROR, message, context);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Log with context
|
|
69
|
-
*/
|
|
70
|
-
log(level, message, context) {
|
|
71
|
-
const mergedContext = this.mergeContext(context);
|
|
72
|
-
const formattedMessage = this.formatMessage(message, mergedContext);
|
|
73
|
-
// Call the appropriate logger method
|
|
74
|
-
switch (level) {
|
|
75
|
-
case LogLevel.DEBUG:
|
|
76
|
-
this.logger.debug(formattedMessage);
|
|
77
|
-
break;
|
|
78
|
-
case LogLevel.INFO:
|
|
79
|
-
this.logger.info(formattedMessage);
|
|
80
|
-
break;
|
|
81
|
-
case LogLevel.WARN:
|
|
82
|
-
this.logger.warn(formattedMessage);
|
|
83
|
-
break;
|
|
84
|
-
case LogLevel.ERROR:
|
|
85
|
-
this.logger.error(formattedMessage);
|
|
86
|
-
break;
|
|
87
|
-
}
|
|
88
|
-
// Record in history
|
|
89
|
-
this.recordLog({
|
|
90
|
-
level,
|
|
91
|
-
message,
|
|
92
|
-
context: mergedContext,
|
|
93
|
-
timestamp: new Date(),
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Create a child logger with additional context
|
|
98
|
-
*/
|
|
99
|
-
child(context) {
|
|
100
|
-
const mergedContext = this.mergeContext(context);
|
|
101
|
-
return new StructuredLogger(this.logger, mergedContext);
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Get log history
|
|
105
|
-
*/
|
|
106
|
-
getHistory(limit) {
|
|
107
|
-
return limit ? this.history.slice(-limit) : [...this.history];
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Clear log history
|
|
111
|
-
*/
|
|
112
|
-
clearHistory() {
|
|
113
|
-
this.history.length = 0;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Merge context with defaults
|
|
117
|
-
*/
|
|
118
|
-
mergeContext(context) {
|
|
119
|
-
if (!this.defaultContext && !context) {
|
|
120
|
-
return undefined;
|
|
121
|
-
}
|
|
122
|
-
return {
|
|
123
|
-
...this.defaultContext,
|
|
124
|
-
...context,
|
|
125
|
-
metadata: {
|
|
126
|
-
...this.defaultContext?.metadata,
|
|
127
|
-
...context?.metadata,
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Format log message with context
|
|
133
|
-
*/
|
|
134
|
-
formatMessage(message, context) {
|
|
135
|
-
if (!context) {
|
|
136
|
-
return message;
|
|
137
|
-
}
|
|
138
|
-
const parts = [];
|
|
139
|
-
// Add category
|
|
140
|
-
if (context.category) {
|
|
141
|
-
parts.push(`[${context.category}]`);
|
|
142
|
-
}
|
|
143
|
-
// Add device info
|
|
144
|
-
if (context.deviceName) {
|
|
145
|
-
parts.push(`[${context.deviceName}]`);
|
|
146
|
-
}
|
|
147
|
-
else if (context.deviceId) {
|
|
148
|
-
parts.push(`[Device:${context.deviceId}]`);
|
|
149
|
-
}
|
|
150
|
-
// Add embedded ID
|
|
151
|
-
if (context.embeddedId) {
|
|
152
|
-
parts.push(`[${context.embeddedId}]`);
|
|
153
|
-
}
|
|
154
|
-
// Add operation
|
|
155
|
-
if (context.operation) {
|
|
156
|
-
parts.push(`(${context.operation})`);
|
|
157
|
-
}
|
|
158
|
-
// Add feature
|
|
159
|
-
if (context.feature) {
|
|
160
|
-
parts.push(`[Feature:${context.feature}]`);
|
|
161
|
-
}
|
|
162
|
-
// Build final message
|
|
163
|
-
const prefix = parts.length > 0 ? `${parts.join(' ')} ` : '';
|
|
164
|
-
let finalMessage = `${prefix}${message}`;
|
|
165
|
-
// Add metadata if present
|
|
166
|
-
if (context.metadata && Object.keys(context.metadata).length > 0) {
|
|
167
|
-
const metadataStr = JSON.stringify(context.metadata);
|
|
168
|
-
finalMessage += ` ${metadataStr}`;
|
|
169
|
-
}
|
|
170
|
-
return finalMessage;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Record log entry in history
|
|
174
|
-
*/
|
|
175
|
-
recordLog(entry) {
|
|
176
|
-
this.history.push(entry);
|
|
177
|
-
// Trim history if needed
|
|
178
|
-
if (this.history.length > this.maxHistorySize) {
|
|
179
|
-
this.history.splice(0, this.history.length - this.maxHistorySize);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
exports.StructuredLogger = StructuredLogger;
|
|
184
|
-
/**
|
|
185
|
-
* Create a structured logger
|
|
186
|
-
*/
|
|
187
|
-
function createLogger(logger, context) {
|
|
188
|
-
return new StructuredLogger(logger, context);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Create a logger for a specific category
|
|
192
|
-
*/
|
|
193
|
-
function createCategoryLogger(logger, category) {
|
|
194
|
-
return createLogger(logger, { category });
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Create a logger for a device
|
|
198
|
-
*/
|
|
199
|
-
function createDeviceLogger(logger, deviceId, deviceName) {
|
|
200
|
-
return createLogger(logger, {
|
|
201
|
-
category: LogCategory.DEVICE,
|
|
202
|
-
deviceId,
|
|
203
|
-
deviceName,
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
//# sourceMappingURL=log-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log-context.js","sourceRoot":"","sources":["../../../src/utils/log-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Update Mapper
|
|
3
|
-
*
|
|
4
|
-
* Maps WebSocket device updates to HomeKit characteristic updates.
|
|
5
|
-
* Extracts update mapping logic from the platform class.
|
|
6
|
-
*/
|
|
7
|
-
import type { PlatformAccessory, Service, Characteristic } from 'homebridge';
|
|
8
|
-
import type { DaikinCloudAccessoryContext } from '../platform';
|
|
9
|
-
import type { Logger } from 'homebridge';
|
|
10
|
-
export interface DeviceUpdate {
|
|
11
|
-
deviceId: string;
|
|
12
|
-
embeddedId: string;
|
|
13
|
-
characteristicName: string;
|
|
14
|
-
data: {
|
|
15
|
-
value: unknown;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
export interface UpdateResult {
|
|
19
|
-
success: boolean;
|
|
20
|
-
updated: string[];
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Update Mapper for WebSocket device updates
|
|
24
|
-
*/
|
|
25
|
-
export declare class UpdateMapper {
|
|
26
|
-
private readonly logger;
|
|
27
|
-
private readonly serviceClass;
|
|
28
|
-
private readonly characteristicClass;
|
|
29
|
-
constructor(logger: Logger, serviceClass: typeof Service, characteristicClass: typeof Characteristic);
|
|
30
|
-
/**
|
|
31
|
-
* Map and apply a device update to an accessory
|
|
32
|
-
*/
|
|
33
|
-
applyUpdate(accessory: PlatformAccessory<DaikinCloudAccessoryContext>, update: DeviceUpdate): UpdateResult;
|
|
34
|
-
/**
|
|
35
|
-
* Handle onOffMode updates
|
|
36
|
-
*/
|
|
37
|
-
private handleOnOffModeUpdate;
|
|
38
|
-
/**
|
|
39
|
-
* Handle operationMode updates
|
|
40
|
-
*/
|
|
41
|
-
private handleOperationModeUpdate;
|
|
42
|
-
/**
|
|
43
|
-
* Handle sensoryData updates
|
|
44
|
-
*/
|
|
45
|
-
private handleSensoryDataUpdate;
|
|
46
|
-
/**
|
|
47
|
-
* Handle temperatureControl updates
|
|
48
|
-
*/
|
|
49
|
-
private handleTemperatureControlUpdate;
|
|
50
|
-
/**
|
|
51
|
-
* Map operation mode to HeaterCooler states
|
|
52
|
-
*/
|
|
53
|
-
private mapOperationModeToHeaterCooler;
|
|
54
|
-
/**
|
|
55
|
-
* Map operation mode to Thermostat state
|
|
56
|
-
*/
|
|
57
|
-
private mapOperationModeToThermostat;
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=update-mapper.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-mapper.d.ts","sourceRoot":"","sources":["../../../src/utils/update-mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,YAAY;IAEjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAFnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,OAAO,OAAO,EAC5B,mBAAmB,EAAE,OAAO,cAAc;IAGjE;;SAEK;IACL,WAAW,CACT,SAAS,EAAE,iBAAiB,CAAC,2BAA2B,CAAC,EACzD,MAAM,EAAE,YAAY,GACnB,YAAY;IA8Cf;;SAEK;IACL,OAAO,CAAC,qBAAqB;IAsD7B;;SAEK;IACL,OAAO,CAAC,yBAAyB;IAiCjC;;SAEK;IACL,OAAO,CAAC,uBAAuB;IAmB/B;;SAEK;IACL,OAAO,CAAC,8BAA8B;IA0BtC;;SAEK;IACL,OAAO,CAAC,8BAA8B;IAwBtC;;SAEK;IACL,OAAO,CAAC,4BAA4B;CAYrC"}
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Update Mapper
|
|
4
|
-
*
|
|
5
|
-
* Maps WebSocket device updates to HomeKit characteristic updates.
|
|
6
|
-
* Extracts update mapping logic from the platform class.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.UpdateMapper = void 0;
|
|
10
|
-
/**
|
|
11
|
-
* Update Mapper for WebSocket device updates
|
|
12
|
-
*/
|
|
13
|
-
class UpdateMapper {
|
|
14
|
-
logger;
|
|
15
|
-
serviceClass;
|
|
16
|
-
characteristicClass;
|
|
17
|
-
constructor(logger, serviceClass, characteristicClass) {
|
|
18
|
-
this.logger = logger;
|
|
19
|
-
this.serviceClass = serviceClass;
|
|
20
|
-
this.characteristicClass = characteristicClass;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Map and apply a device update to an accessory
|
|
24
|
-
*/
|
|
25
|
-
applyUpdate(accessory, update) {
|
|
26
|
-
const result = {
|
|
27
|
-
success: false,
|
|
28
|
-
updated: [],
|
|
29
|
-
};
|
|
30
|
-
// Determine which service type is being used
|
|
31
|
-
const heaterCoolerService = accessory.getService(this.serviceClass.HeaterCooler);
|
|
32
|
-
const thermostatService = accessory.getService(this.serviceClass.Thermostat);
|
|
33
|
-
const service = heaterCoolerService || thermostatService;
|
|
34
|
-
if (!service) {
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
const isHeaterCooler = !!heaterCoolerService;
|
|
38
|
-
// Map WebSocket characteristic names to HomeKit characteristics
|
|
39
|
-
switch (update.characteristicName) {
|
|
40
|
-
case 'onOffMode':
|
|
41
|
-
this.handleOnOffModeUpdate(service, accessory, update, isHeaterCooler, result);
|
|
42
|
-
break;
|
|
43
|
-
case 'operationMode':
|
|
44
|
-
this.handleOperationModeUpdate(service, accessory, update, isHeaterCooler, result);
|
|
45
|
-
break;
|
|
46
|
-
case 'sensoryData':
|
|
47
|
-
this.handleSensoryDataUpdate(service, update, result);
|
|
48
|
-
break;
|
|
49
|
-
case 'temperatureControl':
|
|
50
|
-
this.handleTemperatureControlUpdate(service, update, result);
|
|
51
|
-
break;
|
|
52
|
-
default:
|
|
53
|
-
// No fast-path mapping — refreshValues (driven by the same 'updated'
|
|
54
|
-
// event) will pick this up from in-memory state on the next refresh.
|
|
55
|
-
// No log needed; "unhandled" here just means "no shortcut", not an error.
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
result.success = result.updated.length > 0;
|
|
59
|
-
return result;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Handle onOffMode updates
|
|
63
|
-
*/
|
|
64
|
-
handleOnOffModeUpdate(service, accessory, update, isHeaterCooler, result) {
|
|
65
|
-
const isOn = update.data.value === 'on';
|
|
66
|
-
if (isHeaterCooler) {
|
|
67
|
-
// HeaterCooler uses Active characteristic
|
|
68
|
-
service.updateCharacteristic(this.characteristicClass.Active, isOn ? this.characteristicClass.Active.ACTIVE : this.characteristicClass.Active.INACTIVE);
|
|
69
|
-
result.updated.push(`Active=${isOn ? 'ACTIVE' : 'INACTIVE'}`);
|
|
70
|
-
// Also update CurrentHeaterCoolerState
|
|
71
|
-
if (!isOn) {
|
|
72
|
-
service.updateCharacteristic(this.characteristicClass.CurrentHeaterCoolerState, this.characteristicClass.CurrentHeaterCoolerState.INACTIVE);
|
|
73
|
-
result.updated.push('CurrentHeaterCoolerState=INACTIVE');
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
// Thermostat uses CurrentHeatingCoolingState
|
|
78
|
-
const operationMode = accessory.context.device.getData(update.embeddedId, 'operationMode', undefined).value;
|
|
79
|
-
let currentState;
|
|
80
|
-
if (!isOn) {
|
|
81
|
-
currentState = this.characteristicClass.CurrentHeatingCoolingState.OFF;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
switch (operationMode) {
|
|
85
|
-
case 'cooling':
|
|
86
|
-
currentState = this.characteristicClass.CurrentHeatingCoolingState.COOL;
|
|
87
|
-
break;
|
|
88
|
-
case 'heating':
|
|
89
|
-
currentState = this.characteristicClass.CurrentHeatingCoolingState.HEAT;
|
|
90
|
-
break;
|
|
91
|
-
default:
|
|
92
|
-
currentState = this.characteristicClass.CurrentHeatingCoolingState.HEAT;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
service.updateCharacteristic(this.characteristicClass.CurrentHeatingCoolingState, currentState);
|
|
96
|
-
result.updated.push(`CurrentHeatingCoolingState=${currentState}`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Handle operationMode updates
|
|
101
|
-
*/
|
|
102
|
-
handleOperationModeUpdate(service, accessory, update, isHeaterCooler, result) {
|
|
103
|
-
const isOn = accessory.context.device.getData(update.embeddedId, 'onOffMode', undefined).value === 'on';
|
|
104
|
-
if (!isOn) {
|
|
105
|
-
return; // Don't update target state if device is off
|
|
106
|
-
}
|
|
107
|
-
if (isHeaterCooler) {
|
|
108
|
-
// HeaterCooler uses TargetHeaterCoolerState and CurrentHeaterCoolerState
|
|
109
|
-
const mapping = this.mapOperationModeToHeaterCooler(update.data.value);
|
|
110
|
-
if (mapping) {
|
|
111
|
-
service.updateCharacteristic(this.characteristicClass.TargetHeaterCoolerState, mapping.target);
|
|
112
|
-
service.updateCharacteristic(this.characteristicClass.CurrentHeaterCoolerState, mapping.current);
|
|
113
|
-
result.updated.push(`TargetHeaterCoolerState=${mapping.target}`, `CurrentHeaterCoolerState=${mapping.current}`);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
// Thermostat uses TargetHeatingCoolingState
|
|
118
|
-
const mapping = this.mapOperationModeToThermostat(update.data.value);
|
|
119
|
-
if (mapping !== null) {
|
|
120
|
-
service.updateCharacteristic(this.characteristicClass.TargetHeatingCoolingState, mapping);
|
|
121
|
-
result.updated.push(`TargetHeatingCoolingState=${mapping}`);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Handle sensoryData updates
|
|
127
|
-
*/
|
|
128
|
-
handleSensoryDataUpdate(service, update, result) {
|
|
129
|
-
const data = update.data.value;
|
|
130
|
-
if (data.roomTemperature?.value !== undefined) {
|
|
131
|
-
service.updateCharacteristic(this.characteristicClass.CurrentTemperature, data.roomTemperature.value);
|
|
132
|
-
result.updated.push(`CurrentTemperature=${data.roomTemperature.value}`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Handle temperatureControl updates
|
|
137
|
-
*/
|
|
138
|
-
handleTemperatureControlUpdate(service, update, result) {
|
|
139
|
-
const data = update.data.value;
|
|
140
|
-
const heatingTemp = data.operationModes?.heating?.setpoints?.roomTemperature?.value;
|
|
141
|
-
const coolingTemp = data.operationModes?.cooling?.setpoints?.roomTemperature?.value;
|
|
142
|
-
if (heatingTemp !== undefined) {
|
|
143
|
-
service.updateCharacteristic(this.characteristicClass.HeatingThresholdTemperature, heatingTemp);
|
|
144
|
-
result.updated.push(`HeatingThresholdTemperature=${heatingTemp}`);
|
|
145
|
-
}
|
|
146
|
-
if (coolingTemp !== undefined) {
|
|
147
|
-
service.updateCharacteristic(this.characteristicClass.CoolingThresholdTemperature, coolingTemp);
|
|
148
|
-
result.updated.push(`CoolingThresholdTemperature=${coolingTemp}`);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Map operation mode to HeaterCooler states
|
|
153
|
-
*/
|
|
154
|
-
mapOperationModeToHeaterCooler(mode) {
|
|
155
|
-
switch (mode) {
|
|
156
|
-
case 'cooling':
|
|
157
|
-
return {
|
|
158
|
-
target: this.characteristicClass.TargetHeaterCoolerState.COOL,
|
|
159
|
-
current: this.characteristicClass.CurrentHeaterCoolerState.COOLING,
|
|
160
|
-
};
|
|
161
|
-
case 'heating':
|
|
162
|
-
return {
|
|
163
|
-
target: this.characteristicClass.TargetHeaterCoolerState.HEAT,
|
|
164
|
-
current: this.characteristicClass.CurrentHeaterCoolerState.HEATING,
|
|
165
|
-
};
|
|
166
|
-
case 'auto':
|
|
167
|
-
return {
|
|
168
|
-
target: this.characteristicClass.TargetHeaterCoolerState.AUTO,
|
|
169
|
-
current: this.characteristicClass.CurrentHeaterCoolerState.IDLE,
|
|
170
|
-
};
|
|
171
|
-
default:
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Map operation mode to Thermostat state
|
|
177
|
-
*/
|
|
178
|
-
mapOperationModeToThermostat(mode) {
|
|
179
|
-
switch (mode) {
|
|
180
|
-
case 'cooling':
|
|
181
|
-
return this.characteristicClass.TargetHeatingCoolingState.COOL;
|
|
182
|
-
case 'heating':
|
|
183
|
-
return this.characteristicClass.TargetHeatingCoolingState.HEAT;
|
|
184
|
-
case 'auto':
|
|
185
|
-
return this.characteristicClass.TargetHeatingCoolingState.AUTO;
|
|
186
|
-
default:
|
|
187
|
-
return null;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
exports.UpdateMapper = UpdateMapper;
|
|
192
|
-
//# sourceMappingURL=update-mapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-mapper.js","sourceRoot":"","sources":["../../../src/utils/update-mapper.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAkBH;;GAEG;AACH,MAAa,YAAY;IAEA;IACA;IACA;IAHvB,YACuB,MAAc,EACd,YAA4B,EAC5B,mBAA0C;QAF1C,WAAM,GAAN,MAAM,CAAQ;QACd,iBAAY,GAAZ,YAAY,CAAgB;QAC5B,wBAAmB,GAAnB,mBAAmB,CAAuB;IAC9D,CAAC;IAEJ;;SAEK;IACL,WAAW,CACT,SAAyD,EACzD,MAAoB;QAEpB,MAAM,MAAM,GAAiB;YAC3B,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,EAAE;SACZ,CAAC;QAEF,6CAA6C;QAC7C,MAAM,mBAAmB,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACjF,MAAM,iBAAiB,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,mBAAmB,IAAI,iBAAiB,CAAC;QAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,CAAC,mBAAmB,CAAC;QAE7C,gEAAgE;QAChE,QAAQ,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAClC,KAAK,WAAW;gBACd,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;gBAC/E,MAAM;YAER,KAAK,eAAe;gBAClB,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;gBACnF,MAAM;YAER,KAAK,aAAa;gBAChB,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACtD,MAAM;YAER,KAAK,oBAAoB;gBACvB,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7D,MAAM;YAER;gBACE,qEAAqE;gBACrE,qEAAqE;gBACrE,0EAA0E;gBAC1E,MAAM;QACV,CAAC;QAED,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;SAEK;IACG,qBAAqB,CAC3B,OAAgB,EAChB,SAAyD,EACzD,MAAoB,EACpB,cAAuB,EACvB,MAAoB;QAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;QAExC,IAAI,cAAc,EAAE,CAAC;YACnB,0CAA0C;YAC1C,OAAO,CAAC,oBAAoB,CAC1B,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAC/B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CACzF,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAE9D,uCAAuC;YACvC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,oBAAoB,CAC1B,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EACjD,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,QAAQ,CAC3D,CAAC;gBACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CACpD,MAAM,CAAC,UAAU,EACjB,eAAe,EACf,SAAS,CACV,CAAC,KAAe,CAAC;YAElB,IAAI,YAAoB,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,GAAG,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,QAAQ,aAAa,EAAE,CAAC;oBACtB,KAAK,SAAS;wBACZ,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,IAAI,CAAC;wBACxE,MAAM;oBACR,KAAK,SAAS;wBACZ,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,IAAI,CAAC;wBACxE,MAAM;oBACR;wBACE,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,IAAI,CAAC;gBAC5E,CAAC;YACH,CAAC;YAED,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,EAAE,YAAY,CAAC,CAAC;YAChG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED;;SAEK;IACG,yBAAyB,CAC/B,OAAgB,EAChB,SAAyD,EACzD,MAAoB,EACpB,cAAuB,EACvB,MAAoB;QAEpB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;QACxG,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,6CAA6C;QACvD,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,yEAAyE;YACzE,MAAM,OAAO,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;YACjF,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC/F,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBACjG,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,2BAA2B,OAAO,CAAC,MAAM,EAAE,EAC3C,4BAA4B,OAAO,CAAC,OAAO,EAAE,CAC9C,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;YAC/E,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;gBAC1F,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED;;SAEK;IACG,uBAAuB,CAC7B,OAAgB,EAChB,MAAoB,EACpB,MAAoB;QAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAGpB,CAAC;QAEN,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,CAAC,oBAAoB,CAC1B,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,CAC3B,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;SAEK;IACG,8BAA8B,CACpC,OAAgB,EAChB,MAAoB,EACpB,MAAoB;QAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAKpB,CAAC;QAEN,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,CAAC;QACpF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,CAAC;QAEpF,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;YAChG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;YAChG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED;;SAEK;IACG,8BAA8B,CACpC,IAAY;QAEZ,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,IAAI;oBAC7D,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,OAAO;iBACnE,CAAC;YACJ,KAAK,SAAS;gBACZ,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,IAAI;oBAC7D,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,OAAO;iBACnE,CAAC;YACJ,KAAK,MAAM;gBACT,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,IAAI;oBAC7D,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,IAAI;iBAChE,CAAC;YACJ;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;SAEK;IACG,4BAA4B,CAAC,IAAY;QAC/C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,IAAI,CAAC;YACjE,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,IAAI,CAAC;YACjE,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,IAAI,CAAC;YACjE;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF;AArPD,oCAqPC"}
|