@mp-consulting/homebridge-daikin-cloud 1.5.1 → 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.
Files changed (212) hide show
  1. package/README.md +40 -27
  2. package/config.schema.json +66 -12
  3. package/dist/src/accessories/air-conditioning-accessory.js +1 -1
  4. package/dist/src/accessories/air-conditioning-accessory.js.map +1 -1
  5. package/dist/src/accessories/altherma-accessory.js +1 -1
  6. package/dist/src/accessories/altherma-accessory.js.map +1 -1
  7. package/dist/src/accessories/base-accessory.d.ts +5 -4
  8. package/dist/src/accessories/base-accessory.d.ts.map +1 -1
  9. package/dist/src/accessories/base-accessory.js +9 -10
  10. package/dist/src/accessories/base-accessory.js.map +1 -1
  11. package/dist/src/api/daikin-api.d.ts +22 -6
  12. package/dist/src/api/daikin-api.d.ts.map +1 -1
  13. package/dist/src/api/daikin-api.js +49 -23
  14. package/dist/src/api/daikin-api.js.map +1 -1
  15. package/dist/src/api/daikin-controller.d.ts +4 -48
  16. package/dist/src/api/daikin-controller.d.ts.map +1 -1
  17. package/dist/src/api/daikin-controller.js +14 -84
  18. package/dist/src/api/daikin-controller.js.map +1 -1
  19. package/dist/src/api/daikin-mobile-oauth.d.ts +11 -40
  20. package/dist/src/api/daikin-mobile-oauth.d.ts.map +1 -1
  21. package/dist/src/api/daikin-mobile-oauth.js +36 -160
  22. package/dist/src/api/daikin-mobile-oauth.js.map +1 -1
  23. package/dist/src/api/daikin-oauth.d.ts +10 -37
  24. package/dist/src/api/daikin-oauth.d.ts.map +1 -1
  25. package/dist/src/api/daikin-oauth.js +36 -166
  26. package/dist/src/api/daikin-oauth.js.map +1 -1
  27. package/dist/src/api/daikin-schemas.d.ts +20 -22
  28. package/dist/src/api/daikin-schemas.d.ts.map +1 -1
  29. package/dist/src/api/daikin-schemas.js +17 -49
  30. package/dist/src/api/daikin-schemas.js.map +1 -1
  31. package/dist/src/api/daikin-types.d.ts +11 -23
  32. package/dist/src/api/daikin-types.d.ts.map +1 -1
  33. package/dist/src/api/daikin-types.js.map +1 -1
  34. package/dist/src/api/daikin-websocket.d.ts +4 -5
  35. package/dist/src/api/daikin-websocket.d.ts.map +1 -1
  36. package/dist/src/api/daikin-websocket.js +62 -34
  37. package/dist/src/api/daikin-websocket.js.map +1 -1
  38. package/dist/src/api/http-defaults.d.ts +3 -2
  39. package/dist/src/api/http-defaults.d.ts.map +1 -1
  40. package/dist/src/api/http-defaults.js.map +1 -1
  41. package/dist/src/api/http-transport.d.ts +14 -2
  42. package/dist/src/api/http-transport.d.ts.map +1 -1
  43. package/dist/src/api/http-transport.js +32 -9
  44. package/dist/src/api/http-transport.js.map +1 -1
  45. package/dist/src/api/token-client.d.ts +82 -0
  46. package/dist/src/api/token-client.d.ts.map +1 -0
  47. package/dist/src/api/token-client.js +188 -0
  48. package/dist/src/api/token-client.js.map +1 -0
  49. package/dist/src/api/token-storage.d.ts +6 -0
  50. package/dist/src/api/token-storage.d.ts.map +1 -1
  51. package/dist/src/api/token-storage.js +27 -1
  52. package/dist/src/api/token-storage.js.map +1 -1
  53. package/dist/src/config/config-manager.d.ts +69 -125
  54. package/dist/src/config/config-manager.d.ts.map +1 -1
  55. package/dist/src/config/config-manager.js +288 -225
  56. package/dist/src/config/config-manager.js.map +1 -1
  57. package/dist/src/constants/api.constants.d.ts +6 -0
  58. package/dist/src/constants/api.constants.d.ts.map +1 -1
  59. package/dist/src/constants/api.constants.js +7 -1
  60. package/dist/src/constants/api.constants.js.map +1 -1
  61. package/dist/src/constants/auth.constants.d.ts +11 -0
  62. package/dist/src/constants/auth.constants.d.ts.map +1 -1
  63. package/dist/src/constants/auth.constants.js +12 -1
  64. package/dist/src/constants/auth.constants.js.map +1 -1
  65. package/dist/src/constants/device.constants.d.ts +1 -7
  66. package/dist/src/constants/device.constants.d.ts.map +1 -1
  67. package/dist/src/constants/device.constants.js +2 -11
  68. package/dist/src/constants/device.constants.js.map +1 -1
  69. package/dist/src/constants/time.constants.d.ts +0 -2
  70. package/dist/src/constants/time.constants.d.ts.map +1 -1
  71. package/dist/src/constants/time.constants.js +1 -3
  72. package/dist/src/constants/time.constants.js.map +1 -1
  73. package/dist/src/device/accessory-factory.d.ts +0 -5
  74. package/dist/src/device/accessory-factory.d.ts.map +1 -1
  75. package/dist/src/device/accessory-factory.js +0 -7
  76. package/dist/src/device/accessory-factory.js.map +1 -1
  77. package/dist/src/device/capability-detector.d.ts +9 -1
  78. package/dist/src/device/capability-detector.d.ts.map +1 -1
  79. package/dist/src/device/capability-detector.js +32 -28
  80. package/dist/src/device/capability-detector.js.map +1 -1
  81. package/dist/src/device/capability-docs.d.ts.map +1 -1
  82. package/dist/src/device/capability-docs.js +3 -0
  83. package/dist/src/device/capability-docs.js.map +1 -1
  84. package/dist/src/device/data-paths.d.ts +18 -0
  85. package/dist/src/device/data-paths.d.ts.map +1 -0
  86. package/dist/src/device/data-paths.js +20 -0
  87. package/dist/src/device/data-paths.js.map +1 -0
  88. package/dist/src/device/profiles/device-profile.d.ts +0 -5
  89. package/dist/src/device/profiles/device-profile.d.ts.map +1 -1
  90. package/dist/src/device/profiles/device-profile.js +0 -21
  91. package/dist/src/device/profiles/device-profile.js.map +1 -1
  92. package/dist/src/features/base-feature.d.ts +53 -9
  93. package/dist/src/features/base-feature.d.ts.map +1 -1
  94. package/dist/src/features/base-feature.js +93 -40
  95. package/dist/src/features/base-feature.js.map +1 -1
  96. package/dist/src/features/feature-manager.d.ts +27 -15
  97. package/dist/src/features/feature-manager.d.ts.map +1 -1
  98. package/dist/src/features/feature-manager.js +27 -24
  99. package/dist/src/features/feature-manager.js.map +1 -1
  100. package/dist/src/features/index.d.ts +1 -0
  101. package/dist/src/features/index.d.ts.map +1 -1
  102. package/dist/src/features/index.js +1 -0
  103. package/dist/src/features/index.js.map +1 -1
  104. package/dist/src/features/modes/auto-fan-mode.feature.d.ts +16 -10
  105. package/dist/src/features/modes/auto-fan-mode.feature.d.ts.map +1 -1
  106. package/dist/src/features/modes/auto-fan-mode.feature.js +16 -40
  107. package/dist/src/features/modes/auto-fan-mode.feature.js.map +1 -1
  108. package/dist/src/features/modes/dry-operation-mode.feature.d.ts +12 -9
  109. package/dist/src/features/modes/dry-operation-mode.feature.d.ts.map +1 -1
  110. package/dist/src/features/modes/dry-operation-mode.feature.js +11 -30
  111. package/dist/src/features/modes/dry-operation-mode.feature.js.map +1 -1
  112. package/dist/src/features/modes/econo-mode.feature.d.ts +12 -9
  113. package/dist/src/features/modes/econo-mode.feature.d.ts.map +1 -1
  114. package/dist/src/features/modes/econo-mode.feature.js +11 -31
  115. package/dist/src/features/modes/econo-mode.feature.js.map +1 -1
  116. package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts +12 -9
  117. package/dist/src/features/modes/fan-only-operation-mode.feature.d.ts.map +1 -1
  118. package/dist/src/features/modes/fan-only-operation-mode.feature.js +11 -30
  119. package/dist/src/features/modes/fan-only-operation-mode.feature.js.map +1 -1
  120. package/dist/src/features/modes/firmware-update.feature.d.ts +7 -6
  121. package/dist/src/features/modes/firmware-update.feature.d.ts.map +1 -1
  122. package/dist/src/features/modes/firmware-update.feature.js +15 -22
  123. package/dist/src/features/modes/firmware-update.feature.js.map +1 -1
  124. package/dist/src/features/modes/holiday-mode.feature.d.ts +2 -1
  125. package/dist/src/features/modes/holiday-mode.feature.d.ts.map +1 -1
  126. package/dist/src/features/modes/holiday-mode.feature.js +5 -15
  127. package/dist/src/features/modes/holiday-mode.feature.js.map +1 -1
  128. package/dist/src/features/modes/indoor-silent-mode.feature.d.ts +15 -12
  129. package/dist/src/features/modes/indoor-silent-mode.feature.d.ts.map +1 -1
  130. package/dist/src/features/modes/indoor-silent-mode.feature.js +15 -39
  131. package/dist/src/features/modes/indoor-silent-mode.feature.js.map +1 -1
  132. package/dist/src/features/modes/oscillation-mode.feature.d.ts +5 -6
  133. package/dist/src/features/modes/oscillation-mode.feature.d.ts.map +1 -1
  134. package/dist/src/features/modes/oscillation-mode.feature.js +14 -36
  135. package/dist/src/features/modes/oscillation-mode.feature.js.map +1 -1
  136. package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts +12 -9
  137. package/dist/src/features/modes/outdoor-silent-mode.feature.d.ts.map +1 -1
  138. package/dist/src/features/modes/outdoor-silent-mode.feature.js +11 -31
  139. package/dist/src/features/modes/outdoor-silent-mode.feature.js.map +1 -1
  140. package/dist/src/features/modes/powerful-mode.feature.d.ts +14 -10
  141. package/dist/src/features/modes/powerful-mode.feature.d.ts.map +1 -1
  142. package/dist/src/features/modes/powerful-mode.feature.js +13 -32
  143. package/dist/src/features/modes/powerful-mode.feature.js.map +1 -1
  144. package/dist/src/features/modes/streamer-mode.feature.d.ts +12 -9
  145. package/dist/src/features/modes/streamer-mode.feature.d.ts.map +1 -1
  146. package/dist/src/features/modes/streamer-mode.feature.js +11 -31
  147. package/dist/src/features/modes/streamer-mode.feature.js.map +1 -1
  148. package/dist/src/features/on-off-data-point-feature.d.ts +43 -0
  149. package/dist/src/features/on-off-data-point-feature.d.ts.map +1 -0
  150. package/dist/src/features/on-off-data-point-feature.js +49 -0
  151. package/dist/src/features/on-off-data-point-feature.js.map +1 -0
  152. package/dist/src/platform.d.ts +56 -9
  153. package/dist/src/platform.d.ts.map +1 -1
  154. package/dist/src/platform.js +248 -128
  155. package/dist/src/platform.js.map +1 -1
  156. package/dist/src/services/climate-control/fan-speed.d.ts +45 -0
  157. package/dist/src/services/climate-control/fan-speed.d.ts.map +1 -0
  158. package/dist/src/services/climate-control/fan-speed.js +104 -0
  159. package/dist/src/services/climate-control/fan-speed.js.map +1 -0
  160. package/dist/src/services/climate-control/separate-fan.service.d.ts +45 -0
  161. package/dist/src/services/climate-control/separate-fan.service.d.ts.map +1 -0
  162. package/dist/src/services/climate-control/separate-fan.service.js +82 -0
  163. package/dist/src/services/climate-control/separate-fan.service.js.map +1 -0
  164. package/dist/src/services/climate-control/setpoint-resolver.d.ts +68 -0
  165. package/dist/src/services/climate-control/setpoint-resolver.d.ts.map +1 -0
  166. package/dist/src/services/climate-control/setpoint-resolver.js +170 -0
  167. package/dist/src/services/climate-control/setpoint-resolver.js.map +1 -0
  168. package/dist/src/services/climate-control/swing-controller.d.ts +28 -0
  169. package/dist/src/services/climate-control/swing-controller.d.ts.map +1 -0
  170. package/dist/src/services/climate-control/swing-controller.js +65 -0
  171. package/dist/src/services/climate-control/swing-controller.js.map +1 -0
  172. package/dist/src/services/climate-control.service.d.ts +39 -48
  173. package/dist/src/services/climate-control.service.d.ts.map +1 -1
  174. package/dist/src/services/climate-control.service.js +223 -554
  175. package/dist/src/services/climate-control.service.js.map +1 -1
  176. package/dist/src/services/hot-water-tank.service.d.ts +17 -8
  177. package/dist/src/services/hot-water-tank.service.d.ts.map +1 -1
  178. package/dist/src/services/hot-water-tank.service.js +102 -157
  179. package/dist/src/services/hot-water-tank.service.js.map +1 -1
  180. package/dist/src/types/daikin-enums.d.ts +0 -5
  181. package/dist/src/types/daikin-enums.d.ts.map +1 -1
  182. package/dist/src/types/daikin-enums.js +1 -7
  183. package/dist/src/types/daikin-enums.js.map +1 -1
  184. package/dist/src/types/device-capabilities.d.ts +1 -0
  185. package/dist/src/types/device-capabilities.d.ts.map +1 -1
  186. package/dist/src/utils/errors.d.ts +9 -0
  187. package/dist/src/utils/errors.d.ts.map +1 -0
  188. package/dist/src/utils/errors.js +25 -0
  189. package/dist/src/utils/errors.js.map +1 -0
  190. package/dist/src/utils/hap-write.d.ts +22 -0
  191. package/dist/src/utils/hap-write.d.ts.map +1 -0
  192. package/dist/src/utils/hap-write.js +33 -0
  193. package/dist/src/utils/hap-write.js.map +1 -0
  194. package/dist/src/utils/sleep.d.ts +5 -0
  195. package/dist/src/utils/sleep.d.ts.map +1 -0
  196. package/dist/src/utils/sleep.js +10 -0
  197. package/dist/src/utils/sleep.js.map +1 -0
  198. package/homebridge-ui/README.md +25 -2
  199. package/homebridge-ui/public/index.html +19 -17
  200. package/homebridge-ui/public/lib/kit.css +1 -1
  201. package/homebridge-ui/public/script.js +95 -32
  202. package/homebridge-ui/public/styles.css +109 -0
  203. package/homebridge-ui/server.js +321 -125
  204. package/package.json +14 -15
  205. package/dist/src/utils/log-context.d.ts +0 -105
  206. package/dist/src/utils/log-context.d.ts.map +0 -1
  207. package/dist/src/utils/log-context.js +0 -206
  208. package/dist/src/utils/log-context.js.map +0 -1
  209. package/dist/src/utils/update-mapper.d.ts +0 -59
  210. package/dist/src/utils/update-mapper.d.ts.map +0 -1
  211. package/dist/src/utils/update-mapper.js +0 -192
  212. 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.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/",
@@ -36,27 +37,25 @@
36
37
  "homebridge-plugin"
37
38
  ],
38
39
  "dependencies": {
39
- "@homebridge/plugin-ui-utils": "^2.2.4",
40
- "class-validator": "^0.15.1",
41
- "ws": "^8.21.0",
42
- "zod": "^4.4.3"
40
+ "@homebridge/plugin-ui-utils": "^2.2.6",
41
+ "ws": "^8.21.3",
42
+ "zod": "^4.5.4"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@eslint/js": "^10.0.1",
46
- "@mp-consulting/homebridge-ui-kit": "^1.0.0",
47
- "@types/node": "^25.9.4",
46
+ "@mp-consulting/homebridge-ui-kit": "^1.0.1",
47
+ "@types/node": "^26.5.0",
48
48
  "@types/ws": "^8.18.1",
49
- "@vitest/coverage-v8": "^4.1.5",
50
- "eslint": "^10.6.0",
51
- "hap-nodejs": "^1.2.0",
52
- "homebridge": "^2.1.0",
53
- "homebridge-config-ui-x": "^5.24.0",
49
+ "@vitest/coverage-v8": "^5.0.0",
50
+ "eslint": "^10.10.0",
51
+ "homebridge": "^2.4.0",
52
+ "homebridge-config-ui-x": "^5.29.0",
54
53
  "nodemon": "^3.1.14",
55
54
  "rimraf": "^6.1.3",
56
- "tsx": "^4.23.0",
55
+ "tsx": "^4.23.13",
57
56
  "typescript": "^6.0.3",
58
- "typescript-eslint": "^8.62.1",
59
- "vitest": "^4.1.5"
57
+ "typescript-eslint": "^8.70.0",
58
+ "vitest": "^5.0.0"
60
59
  },
61
60
  "funding": {
62
61
  "type": "paypal",
@@ -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":";AAAA;;;;GAIG;;;AA0NH,oCAEC;AAKD,oDAEC;AAKD,gDAUC;AA9OD,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;AACnB,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAED,IAAY,WAUX;AAVD,WAAY,WAAW;IACnB,oCAAqB,CAAA;IACrB,0BAAW,CAAA;IACX,4BAAa,CAAA;IACb,gCAAiB,CAAA;IACjB,sCAAuB,CAAA;IACvB,kCAAmB,CAAA;IACnB,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,sCAAuB,CAAA;AAC3B,CAAC,EAVW,WAAW,2BAAX,WAAW,QAUtB;AAmBD;;GAEG;AACH,MAAa,gBAAgB;IAKJ;IACA;IALN,OAAO,GAAe,EAAE,CAAC;IACzB,cAAc,GAAG,GAAG,CAAC;IAEtC,YACuB,MAAc,EACd,cAA2B;QAD3B,WAAM,GAAN,MAAM,CAAQ;QACd,mBAAc,GAAd,cAAc,CAAa;IAC/C,CAAC;IAEJ;;SAEK;IACL,KAAK,CAAC,OAAe,EAAE,OAAoB;QACzC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;SAEK;IACL,IAAI,CAAC,OAAe,EAAE,OAAoB;QACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;SAEK;IACL,IAAI,CAAC,OAAe,EAAE,OAAoB;QACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;SAEK;IACL,KAAK,CAAC,OAAe,EAAE,OAAoB;QACzC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;SAEK;IACL,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,OAAoB;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAEpE,qCAAqC;QACrC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,QAAQ,CAAC,KAAK;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,QAAQ,CAAC,IAAI;gBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,QAAQ,CAAC,IAAI;gBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,QAAQ,CAAC,KAAK;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACpC,MAAM;QACV,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,SAAS,CAAC;YACb,KAAK;YACL,OAAO;YACP,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;SAEK;IACL,KAAK,CAAC,OAAmB;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED;;SAEK;IACL,UAAU,CAAC,KAAc;QACvB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED;;SAEK;IACL,YAAY;QACV,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;SAEK;IACG,YAAY,CAAC,OAAoB;QACvC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,GAAG,IAAI,CAAC,cAAc;YACtB,GAAG,OAAO;YACV,QAAQ,EAAE;gBACR,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ;gBAChC,GAAG,OAAO,EAAE,QAAQ;aACrB;SACF,CAAC;IACJ,CAAC;IAED;;SAEK;IACG,aAAa,CAAC,OAAe,EAAE,OAAoB;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,eAAe;QACf,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,kBAAkB;QAClB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,kBAAkB;QAClB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;QACxC,CAAC;QAED,gBAAgB;QAChB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,cAAc;QACd,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,sBAAsB;QACtB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,YAAY,GAAG,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;QAEzC,0BAA0B;QAC1B,IAAI,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,YAAY,IAAI,IAAI,WAAW,EAAE,CAAC;QACpC,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;SAEK;IACG,SAAS,CAAC,KAAe;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,yBAAyB;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF;AA1KD,4CA0KC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,MAAc,EAAE,OAAoB;IAC/D,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAAc,EAAE,QAAqB;IACxE,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,MAAc,EACd,QAAgB,EAChB,UAAmB;IAEnB,OAAO,YAAY,CAAC,MAAM,EAAE;QAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM;QAC5B,QAAQ;QACR,UAAU;KACX,CAAC,CAAC;AACL,CAAC"}
@@ -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":"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"}