@mp-consulting/homebridge-daikin-cloud 1.2.4 → 1.3.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/.claude/settings.local.json +22 -7
  2. package/CHANGELOG.md +49 -0
  3. package/CLAUDE.md +236 -1
  4. package/README.md +23 -0
  5. package/config.schema.json +5 -3
  6. package/dist/src/api/daikin-api.d.ts +7 -5
  7. package/dist/src/api/daikin-api.d.ts.map +1 -1
  8. package/dist/src/api/daikin-api.js +11 -11
  9. package/dist/src/api/daikin-api.js.map +1 -1
  10. package/dist/src/api/daikin-cloud.repository.d.ts.map +1 -1
  11. package/dist/src/api/daikin-cloud.repository.js +1 -1
  12. package/dist/src/api/daikin-cloud.repository.js.map +1 -1
  13. package/dist/src/api/daikin-device-tracker.d.ts +97 -0
  14. package/dist/src/api/daikin-device-tracker.d.ts.map +1 -0
  15. package/dist/src/api/daikin-device-tracker.js +136 -0
  16. package/dist/src/api/daikin-device-tracker.js.map +1 -0
  17. package/dist/src/api/daikin-device.d.ts.map +1 -1
  18. package/dist/src/api/daikin-device.js +2 -6
  19. package/dist/src/api/daikin-device.js.map +1 -1
  20. package/dist/src/api/daikin-mobile-oauth.d.ts.map +1 -1
  21. package/dist/src/api/daikin-mobile-oauth.js +2 -1
  22. package/dist/src/api/daikin-mobile-oauth.js.map +1 -1
  23. package/dist/src/api/daikin-oauth.d.ts.map +1 -1
  24. package/dist/src/api/daikin-oauth.js +2 -1
  25. package/dist/src/api/daikin-oauth.js.map +1 -1
  26. package/dist/src/api/daikin-schemas.d.ts +5760 -0
  27. package/dist/src/api/daikin-schemas.d.ts.map +1 -0
  28. package/dist/src/api/daikin-schemas.js +169 -0
  29. package/dist/src/api/daikin-schemas.js.map +1 -0
  30. package/dist/src/api/daikin-types.d.ts.map +1 -1
  31. package/dist/src/api/daikin-types.js +10 -9
  32. package/dist/src/api/daikin-types.js.map +1 -1
  33. package/dist/src/api/http-interceptor.d.ts +99 -0
  34. package/dist/src/api/http-interceptor.d.ts.map +1 -0
  35. package/dist/src/api/http-interceptor.js +177 -0
  36. package/dist/src/api/http-interceptor.js.map +1 -0
  37. package/dist/src/config/config-manager.d.ts +133 -0
  38. package/dist/src/config/config-manager.d.ts.map +1 -0
  39. package/dist/src/config/config-manager.js +233 -0
  40. package/dist/src/config/config-manager.js.map +1 -0
  41. package/dist/src/constants/api.constants.d.ts +32 -0
  42. package/dist/src/constants/api.constants.d.ts.map +1 -0
  43. package/dist/src/constants/api.constants.js +35 -0
  44. package/dist/src/constants/api.constants.js.map +1 -0
  45. package/dist/src/constants/auth.constants.d.ts +8 -0
  46. package/dist/src/constants/auth.constants.d.ts.map +1 -0
  47. package/dist/src/constants/auth.constants.js +11 -0
  48. package/dist/src/constants/auth.constants.js.map +1 -0
  49. package/dist/src/constants/device.constants.d.ts +24 -0
  50. package/dist/src/constants/device.constants.d.ts.map +1 -0
  51. package/dist/src/constants/device.constants.js +33 -0
  52. package/dist/src/constants/device.constants.js.map +1 -0
  53. package/dist/src/constants/index.d.ts +11 -0
  54. package/dist/src/constants/index.d.ts.map +1 -0
  55. package/dist/src/constants/index.js +31 -0
  56. package/dist/src/constants/index.js.map +1 -0
  57. package/dist/src/constants/time.constants.d.ts +16 -0
  58. package/dist/src/constants/time.constants.d.ts.map +1 -0
  59. package/dist/src/constants/time.constants.js +19 -0
  60. package/dist/src/constants/time.constants.js.map +1 -0
  61. package/dist/src/constants.d.ts +3 -56
  62. package/dist/src/constants.d.ts.map +1 -1
  63. package/dist/src/constants.js +17 -78
  64. package/dist/src/constants.js.map +1 -1
  65. package/dist/src/di/service-container.d.ts +92 -0
  66. package/dist/src/di/service-container.d.ts.map +1 -0
  67. package/dist/src/di/service-container.js +156 -0
  68. package/dist/src/di/service-container.js.map +1 -0
  69. package/dist/src/features/feature-registry.d.ts +100 -0
  70. package/dist/src/features/feature-registry.d.ts.map +1 -0
  71. package/dist/src/features/feature-registry.js +142 -0
  72. package/dist/src/features/feature-registry.js.map +1 -0
  73. package/dist/src/platform.d.ts +1 -0
  74. package/dist/src/platform.d.ts.map +1 -1
  75. package/dist/src/platform.js +10 -136
  76. package/dist/src/platform.js.map +1 -1
  77. package/dist/src/services/service-factory.d.ts +46 -0
  78. package/dist/src/services/service-factory.d.ts.map +1 -0
  79. package/dist/src/services/service-factory.js +72 -0
  80. package/dist/src/services/service-factory.js.map +1 -0
  81. package/dist/src/utils/error-handler.d.ts +101 -0
  82. package/dist/src/utils/error-handler.d.ts.map +1 -0
  83. package/dist/src/utils/error-handler.js +251 -0
  84. package/dist/src/utils/error-handler.js.map +1 -0
  85. package/dist/src/utils/log-context.d.ts +105 -0
  86. package/dist/src/utils/log-context.d.ts.map +1 -0
  87. package/dist/src/utils/log-context.js +206 -0
  88. package/dist/src/utils/log-context.js.map +1 -0
  89. package/dist/src/utils/retry.d.ts +42 -0
  90. package/dist/src/utils/retry.d.ts.map +1 -0
  91. package/dist/src/utils/retry.js +70 -0
  92. package/dist/src/utils/retry.js.map +1 -0
  93. package/dist/src/utils/update-mapper.d.ts +59 -0
  94. package/dist/src/utils/update-mapper.d.ts.map +1 -0
  95. package/dist/src/utils/update-mapper.js +189 -0
  96. package/dist/src/utils/update-mapper.js.map +1 -0
  97. package/docs/ARCHITECTURE.md +645 -0
  98. package/docs/IMPLEMENTATION_GUIDE.md +899 -0
  99. package/docs/IMPROVEMENTS_SUMMARY.md +415 -0
  100. package/docs/NEXT_STEPS.md +368 -0
  101. package/docs/TROUBLESHOOTING.md +475 -0
  102. package/package.json +3 -2
  103. package/test/helpers/test-isolation.ts +228 -0
  104. package/test/mocks/index.ts +1 -1
  105. package/test/unit/api/daikin-api.test.ts +5 -5
  106. package/test/unit/config/config-manager.test.ts +271 -0
  107. package/test/unit/utils/error-handler.test.ts +274 -0
  108. package/test/unit/utils/log-context.test.ts +271 -0
  109. package/test/hbConfig/.daikin-mobile-tokenset +0 -8
  110. package/test/hbConfig/.uix-dashboard.json +0 -1
  111. package/test/hbConfig/.uix-secrets +0 -1
  112. package/test/hbConfig/accessories/.cachedAccessories.bak +0 -1
  113. package/test/hbConfig/accessories/cachedAccessories +0 -1
  114. package/test/hbConfig/accessories/uiAccessoriesLayout.json +0 -1
  115. package/test/hbConfig/auth.json +0 -10
  116. package/test/hbConfig/backups/config-backups/config.json.1767953686461 +0 -25
  117. package/test/hbConfig/backups/config-backups/config.json.1767953695236 +0 -29
  118. package/test/hbConfig/backups/config-backups/config.json.1767953814763 +0 -29
  119. package/test/hbConfig/backups/config-backups/config.json.1767953823101 +0 -29
  120. package/test/hbConfig/backups/config-backups/config.json.1767954822835 +0 -29
  121. package/test/hbConfig/backups/config-backups/config.json.1767954859218 +0 -29
  122. package/test/hbConfig/backups/config-backups/config.json.1767960145503 +0 -33
  123. package/test/hbConfig/backups/config-backups/config.json.1767960168068 +0 -44
  124. package/test/hbConfig/backups/config-backups/config.json.1767960170333 +0 -46
  125. package/test/hbConfig/backups/config-backups/config.json.1767960172731 +0 -44
  126. package/test/hbConfig/backups/config-backups/config.json.1767960179323 +0 -44
  127. package/test/hbConfig/backups/config-backups/config.json.1767960182114 +0 -44
  128. package/test/hbConfig/backups/config-backups/config.json.1767960189302 +0 -44
  129. package/test/hbConfig/backups/config-backups/config.json.1767960195194 +0 -44
  130. package/test/hbConfig/backups/config-backups/config.json.1767960197301 +0 -44
  131. package/test/hbConfig/backups/config-backups/config.json.1767960199151 +0 -44
  132. package/test/hbConfig/backups/config-backups/config.json.1767960199667 +0 -44
  133. package/test/hbConfig/backups/config-backups/config.json.1767960329839 +0 -44
  134. package/test/hbConfig/backups/config-backups/config.json.1767960334503 +0 -44
  135. package/test/hbConfig/backups/config-backups/config.json.1767960336208 +0 -44
  136. package/test/hbConfig/backups/config-backups/config.json.1767960338537 +0 -44
  137. package/test/hbConfig/backups/config-backups/config.json.1767963223953 +0 -44
  138. package/test/hbConfig/backups/config-backups/config.json.1767963241753 +0 -44
  139. package/test/hbConfig/backups/config-backups/config.json.1767963252785 +0 -44
  140. package/test/hbConfig/backups/config-backups/config.json.1767963463944 +0 -44
  141. package/test/hbConfig/backups/config-backups/config.json.1767963834475 +0 -44
  142. package/test/hbConfig/backups/config-backups/config.json.1767963838474 +0 -44
  143. package/test/hbConfig/backups/config-backups/config.json.1767963843066 +0 -44
  144. package/test/hbConfig/backups/config-backups/config.json.1767965217715 +0 -44
  145. package/test/hbConfig/backups/config-backups/config.json.1767965419624 +0 -25
  146. package/test/hbConfig/backups/config-backups/config.json.1767965870934 +0 -32
  147. package/test/hbConfig/backups/config-backups/config.json.1767977675045 +0 -32
  148. package/test/hbConfig/backups/config-backups/config.json.1767977677222 +0 -33
  149. package/test/hbConfig/backups/config-backups/config.json.1767977710226 +0 -33
  150. package/test/hbConfig/backups/config-backups/config.json.1767977741397 +0 -33
  151. package/test/hbConfig/backups/config-backups/config.json.1767977977093 +0 -35
  152. package/test/hbConfig/backups/config-backups/config.json.1767977981773 +0 -35
  153. package/test/hbConfig/backups/config-backups/config.json.1767977986514 +0 -35
  154. package/test/hbConfig/backups/config-backups/config.json.1767977991174 +0 -35
  155. package/test/hbConfig/backups/config-backups/config.json.1767979424487 +0 -35
  156. package/test/hbConfig/backups/config-backups/config.json.1767979424987 +0 -35
  157. package/test/hbConfig/backups/config-backups/config.json.1767979432646 +0 -47
  158. package/test/hbConfig/backups/config-backups/config.json.1767979433150 +0 -47
  159. package/test/hbConfig/backups/config-backups/config.json.1767979436933 +0 -47
  160. package/test/hbConfig/backups/config-backups/config.json.1767979437438 +0 -47
  161. package/test/hbConfig/backups/config-backups/config.json.1767979441676 +0 -47
  162. package/test/hbConfig/backups/config-backups/config.json.1767979442180 +0 -47
  163. package/test/hbConfig/backups/config-backups/config.json.1767979466735 +0 -47
  164. package/test/hbConfig/backups/config-backups/config.json.1767979903636 +0 -47
  165. package/test/hbConfig/backups/config-backups/config.json.1767979904135 +0 -47
  166. package/test/hbConfig/backups/config-backups/config.json.1767979906606 +0 -47
  167. package/test/hbConfig/backups/config-backups/config.json.1767979907108 +0 -47
  168. package/test/hbConfig/backups/config-backups/config.json.1767988702341 +0 -47
  169. package/test/hbConfig/backups/config-backups/config.json.1767988702837 +0 -47
  170. package/test/hbConfig/backups/config-backups/config.json.1767988713159 +0 -47
  171. package/test/hbConfig/backups/config-backups/config.json.1767988713664 +0 -47
  172. package/test/hbConfig/backups/config-backups/config.json.1767988918139 +0 -47
  173. package/test/hbConfig/backups/config-backups/config.json.1767988918639 +0 -47
  174. package/test/hbConfig/backups/config-backups/config.json.1767988921120 +0 -47
  175. package/test/hbConfig/backups/config-backups/config.json.1767988921624 +0 -47
  176. package/test/hbConfig/backups/config-backups/config.json.1767988930307 +0 -47
  177. package/test/hbConfig/backups/config-backups/config.json.1767988935070 +0 -47
  178. package/test/hbConfig/backups/config-backups/config.json.1767988935574 +0 -47
  179. package/test/hbConfig/backups/config-backups/config.json.1767989710262 +0 -47
  180. package/test/hbConfig/backups/config-backups/config.json.1767989710760 +0 -47
  181. package/test/hbConfig/backups/config-backups/config.json.1767989729668 +0 -47
  182. package/test/hbConfig/backups/config-backups/config.json.1767990295225 +0 -47
  183. package/test/hbConfig/backups/config-backups/config.json.1767990479921 +0 -47
  184. package/test/hbConfig/backups/config-backups/config.json.1767990481702 +0 -49
  185. package/test/hbConfig/config.json +0 -47
  186. package/test/hbConfig/daikin-cloud-certs/server.crt +0 -22
  187. package/test/hbConfig/daikin-cloud-certs/server.key +0 -28
  188. package/test/hbConfig/persist/AccessoryInfo.1E4A432551BA.json +0 -1
  189. package/test/hbConfig/persist/IdentifierCache.1E4A432551BA.json +0 -1
  190. package/test/hbConfig/tmp/daikin_request/api.onecta.daikineurope.com_01-09-2026-16-09-04/request_12214 +0 -1
  191. package/test/hbConfig/tmp/daikin_request/api.onecta.daikineurope.com_01-09-2026-16-09-04/request_12215 +0 -1
  192. package/test/hbConfig/tmp/daikin_request/api.onecta.daikineurope.com_01-09-2026-16-09-04/request_12216 +0 -1
  193. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12195 +0 -1
  194. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12196 +0 -1
  195. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12197 +0 -1
  196. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12198 +0 -1
  197. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12200 +0 -1
  198. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12201 +0 -1
  199. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12202 +0 -1
  200. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12203 +0 -1
  201. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12204 +0 -1
  202. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12205 +0 -1
  203. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12206 +0 -1
  204. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12207 +0 -1
  205. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12208 +0 -1
  206. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12209 +0 -1
  207. package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12210 +0 -1
  208. package/test/hbConfig/tmp/daikin_request/idp.onecta.daikineurope.com_01-09-2026-16-08-54/request_12211 +0 -1
  209. package/test/hbConfig/tmp/daikin_request/idp.onecta.daikineurope.com_01-09-2026-16-08-54/request_12212 +0 -1
  210. package/test/hbConfig/tmp/daikin_request/idp.onecta.daikineurope.com_01-09-2026-16-08-54/request_12213 +0 -1
  211. package/test/hbConfig/tmp/daikin_request/request_12217 +0 -1
  212. package/test/mobile-tokens.json +0 -8
@@ -1,14 +1,29 @@
1
1
  {
2
2
  "permissions": {
3
3
  "allow": [
4
- "Bash(npm test)",
5
- "Bash(npm run lint)",
6
- "Bash(curl:*)",
7
- "Bash(npm run build:*)",
8
- "Bash(grep:*)",
9
- "Bash(python3:*)",
4
+ "Bash(node -c:*)",
5
+ "Bash(tree:*)",
6
+ "Bash(wc:*)",
7
+ "Bash(find:*)",
8
+ "Bash(git add:*)",
9
+ "Bash(git commit:*)",
10
+ "Bash(brew install:*)",
11
+ "Bash(brew link:*)",
12
+ "Bash(node --version)",
13
+ "Bash(npm --version:*)",
14
+ "Bash(~/.zshrc)",
10
15
  "Bash(npm test:*)",
11
- "Bash(timeout 60 npm test -- test/integration/air-conditioning.test.ts --testTimeout=30000)"
16
+ "Bash(npm run build:*)",
17
+ "Bash(brew --prefix:*)",
18
+ "Bash(echo:*)",
19
+ "Bash(brew list:*)",
20
+ "Bash(claude --version:*)",
21
+ "Bash(git reset:*)",
22
+ "Bash(git checkout:*)",
23
+ "Bash(npm run lint:*)",
24
+ "Bash(npm audit:*)",
25
+ "Bash(npm install:*)",
26
+ "Bash(npm uninstall:*)"
12
27
  ]
13
28
  }
14
29
  }
package/CHANGELOG.md CHANGED
@@ -5,6 +5,55 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.3.0] - 2026-01-10
9
+
10
+ ### Added
11
+
12
+ - **Strict TypeScript checking**: Enabled `strict`, `noImplicitAny`, `strictNullChecks`, `strictFunctionTypes`, and `strictPropertyInitialization` for improved type safety
13
+ - **Runtime validation with Zod**: Added comprehensive validation schemas for API responses, WebSocket messages, and configuration
14
+ - Token set validation
15
+ - Device data validation
16
+ - Configuration validation with helpful error messages
17
+ - **Utility modules** for improved reliability:
18
+ - `retry.ts`: Exponential backoff retry logic with configurable options
19
+ - `daikin-device-tracker.ts`: Device state tracking with change detection and error history
20
+ - **Comprehensive documentation** in `docs/` folder:
21
+ - `ARCHITECTURE.md`: System architecture, component design, and extension guides
22
+ - `IMPLEMENTATION_GUIDE.md`: Step-by-step guide for future improvements
23
+ - `IMPROVEMENTS_SUMMARY.md`: Executive summary of completed work
24
+ - `NEXT_STEPS.md`: Quick-start guide for continuing development
25
+ - **Enhanced CLAUDE.md**: Project-specific development guidelines and workflows
26
+
27
+ ### Changed
28
+
29
+ - Consolidated WebSocket update logic using UpdateMapper (removed 180+ lines of duplication)
30
+ - Updated GitHub Actions workflows from v2/v3 to v4 (removed deprecation warnings)
31
+ - Improved test coverage with strict TypeScript compatibility
32
+
33
+ ### Fixed
34
+
35
+ - 2 implicit `any` type errors in daikin-cloud.repository.ts
36
+ - Test compatibility issues with strict TypeScript mode
37
+ - UpdateMapper type compatibility issue
38
+
39
+ ### Security
40
+
41
+ - Verified token file permissions (already secure at mode 0o600)
42
+ - Updated CI/CD dependencies to latest versions
43
+
44
+ ### Documentation
45
+
46
+ - Moved all architectural and implementation documentation to `docs/` folder
47
+ - Enhanced project documentation for maintainers and contributors
48
+ - Added code examples and usage patterns for utilities
49
+
50
+ ## [1.2.5] - 2026-01-10
51
+
52
+ ### Fixed
53
+
54
+ - Fix API request format for temperature control to match mobile app format
55
+ - Path parameter now sent in request body instead of URL, resolving 504 Gateway Timeout errors when setting temperature
56
+
8
57
  ## [1.2.4] - 2026-01-09
9
58
 
10
59
  ### Fixed
package/CLAUDE.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Claude Code Settings
2
2
 
3
+ ## Project Overview
4
+
5
+ This is a Homebridge plugin for Daikin Cloud (Onecta) integration that allows controlling Daikin air conditioning units through Apple HomeKit. The plugin supports both Developer Portal and Mobile App authentication methods.
6
+
7
+ **Key Technologies:**
8
+ - TypeScript (target: ESNext)
9
+ - Homebridge Plugin API
10
+ - HAP-nodejs (HomeKit Accessory Protocol)
11
+ - Jest for testing
12
+ - ESLint for code quality
13
+
3
14
  ## Git Settings
4
15
 
5
16
  - `coAuthoredBy`: false
@@ -27,8 +38,232 @@ Use conventional commits format for all commit messages:
27
38
  - `perf`: Performance improvements
28
39
  - `ci`: CI/CD changes
29
40
 
41
+ ### Scopes
42
+ Common scopes used in this project:
43
+ - `api`: Daikin API client, OAuth, WebSocket
44
+ - `service`: Climate control, hot water tank services
45
+ - `accessory`: Air conditioning, Altherma accessories
46
+ - `feature`: Feature modules (modes like powerful, econo, etc.)
47
+ - `device`: Device profiles, capability detection
48
+ - `config`: Configuration management
49
+ - `utils`: Utility functions
50
+ - `build`: Build system and TypeScript configuration
51
+ - `deps`: Dependency updates
52
+
30
53
  ### Examples
31
54
  - `feat(api): add device capability detection`
32
55
  - `fix(service): resolve temperature validation warning`
33
- - `chore: update dependencies`
56
+ - `chore(deps): update dependencies`
34
57
  - `refactor(features): extract feature modules from service`
58
+ - `test(utils): add comprehensive StructuredLogger tests`
59
+
60
+ ## Code Style Guidelines
61
+
62
+ ### TypeScript & Code Quality
63
+
64
+ 1. **Indentation**: Use 4 spaces (enforced by ESLint)
65
+ 2. **Quotes**: Use single quotes for strings
66
+ 3. **Semicolons**: Optional but should be consistent
67
+ 4. **Trailing commas**: Required in multiline objects/arrays
68
+ 5. **Type safety**:
69
+ - `strict: true` in tsconfig
70
+ - `noImplicitAny: false` (be mindful of types)
71
+ - Prefer explicit types for public APIs
72
+
73
+ ### ESLint Rules
74
+ The project uses `@typescript-eslint` with custom rules:
75
+ - No `console.log` - use Homebridge logger instead
76
+ - Prefer arrow callbacks
77
+ - Always use curly braces
78
+ - Enforce comma spacing
79
+ - No trailing spaces
80
+
81
+ ### File Organization
82
+
83
+ ```
84
+ src/
85
+ ├── accessories/ # HAP accessories (air-conditioning, altherma)
86
+ ├── api/ # Daikin API clients (OAuth, WebSocket, repository)
87
+ ├── config/ # Configuration management
88
+ ├── constants/ # Shared constants (API, auth, device, time)
89
+ ├── device/ # Device profiles and capability detection
90
+ ├── di/ # Dependency injection (service container)
91
+ ├── features/ # Feature modules (modes as switches)
92
+ ├── services/ # HAP services (climate control, hot water)
93
+ ├── types/ # TypeScript type definitions
94
+ ├── utils/ # Utility functions (logging, error handling)
95
+ ├── index.ts # Plugin entry point
96
+ ├── platform.ts # Main platform class
97
+ └── settings.ts # Plugin settings
98
+ ```
99
+
100
+ ### Test Organization
101
+
102
+ ```
103
+ test/
104
+ ├── fixtures/ # Test data (device responses)
105
+ ├── mocks/ # Mock objects for testing
106
+ ├── helpers/ # Test utilities
107
+ ├── unit/ # Unit tests
108
+ │ ├── api/
109
+ │ ├── device/
110
+ │ ├── services/
111
+ │ └── utils/
112
+ └── integration/ # Integration tests
113
+ ```
114
+
115
+ ## Development Workflow
116
+
117
+ ### Building and Testing
118
+
119
+ ```bash
120
+ # Install dependencies
121
+ npm install
122
+
123
+ # Build TypeScript
124
+ npm run build
125
+
126
+ # Run linter
127
+ npm run lint
128
+
129
+ # Run tests
130
+ npm test
131
+
132
+ # Update test snapshots
133
+ npm run test:updateSnapshots
134
+
135
+ # Development with auto-rebuild
136
+ npm run watch
137
+ ```
138
+
139
+ ### Testing Guidelines
140
+
141
+ 1. **Write tests for new features**: All new functionality should include unit tests
142
+ 2. **Update snapshots carefully**: Review snapshot changes before committing
143
+ 3. **Use fixtures**: Add device response fixtures in `test/fixtures/` for new device types
144
+ 4. **Mock external dependencies**: Use mocks from `test/mocks/` for API calls
145
+ 5. **Test coverage**: Aim for good coverage, especially for API and service layers
146
+
147
+ ### Common Development Tasks
148
+
149
+ #### Adding a New Feature Mode
150
+
151
+ 1. Create feature class in `src/features/modes/`
152
+ 2. Extend `BaseFeature` class
153
+ 3. Register in feature registry
154
+ 4. Add configuration option in settings
155
+ 5. Add tests in `test/unit/features/`
156
+ 6. Update documentation
157
+
158
+ #### Adding Device Support
159
+
160
+ 1. Add device response fixture in `test/fixtures/`
161
+ 2. Update capability detector if needed
162
+ 3. Create/update device profile in `src/device/profiles/`
163
+ 4. Add integration test
164
+ 5. Document in [README.md](README.md)
165
+
166
+ #### Fixing API Issues
167
+
168
+ 1. Check error handling in `src/utils/error-handler.ts`
169
+ 2. Review rate limiting in `src/api/daikin-cloud.repository.ts`
170
+ 3. Update retry logic if needed
171
+ 4. Add tests for error scenarios
172
+
173
+ ## Homebridge-Specific Considerations
174
+
175
+ ### Platform Plugin Structure
176
+
177
+ - **Platform**: [platform.ts](src/platform.ts) - Main entry point, manages accessories
178
+ - **Accessories**: [src/accessories/](src/accessories/) - HAP accessory implementations
179
+ - **Services**: [src/services/](src/services/) - HAP service wrappers
180
+
181
+ ### HAP Service Types Used
182
+
183
+ - `HeaterCooler`: Main climate control
184
+ - `TemperatureSensor`: Room temperature
185
+ - `Switch`: Feature modes (powerful, econo, etc.)
186
+ - `Thermostat`: Altherma heating (optional)
187
+
188
+ ### Configuration Schema
189
+
190
+ Configuration is managed via Homebridge UI:
191
+ - `homebridge-ui/` directory contains custom UI
192
+ - Config schema defined in `package.json`
193
+ - Validation in [src/config/config-manager.ts](src/config/config-manager.ts)
194
+
195
+ ## API Integration Notes
196
+
197
+ ### Authentication Methods
198
+
199
+ 1. **Developer Portal** (OAuth 2.0):
200
+ - Client ID/Secret from Daikin Developer Portal
201
+ - 200 API calls/day limit
202
+ - Callback server for OAuth flow
203
+
204
+ 2. **Mobile App** (Gigya):
205
+ - Email/password authentication
206
+ - 5000 API calls/day limit
207
+ - WebSocket support for real-time updates
208
+
209
+ ### Rate Limiting
210
+
211
+ - Implemented in [daikin-cloud.repository.ts](src/api/daikin-cloud.repository.ts)
212
+ - Exponential backoff for retries
213
+ - Gateway timeout handling (502, 503, 504)
214
+
215
+ ### WebSocket Support
216
+
217
+ - Only available in Mobile App mode
218
+ - Real-time device state updates
219
+ - Implemented in [daikin-websocket.ts](src/api/daikin-websocket.ts)
220
+
221
+ ## Debugging Tips
222
+
223
+ ### Enable Debug Logging
224
+
225
+ Set Homebridge debug mode:
226
+ ```bash
227
+ homebridge -D
228
+ ```
229
+
230
+ ### Common Issues
231
+
232
+ 1. **Token expired**: Delete `~/.homebridge/.daikin-controller-cloud-tokenset`
233
+ 2. **Device not found**: Check `excludedDevicesByDeviceId` in config
234
+ 3. **WebSocket connection fails**: Verify Mobile App credentials
235
+ 4. **Rate limit hit**: Increase `updateIntervalInMinutes`
236
+
237
+ ### Useful Log Contexts
238
+
239
+ The codebase uses structured logging:
240
+ - Check [log-context.ts](src/utils/log-context.ts) for log formatting
241
+ - Error handling in [error-handler.ts](src/utils/error-handler.ts)
242
+
243
+ ## Release Process
244
+
245
+ 1. Update version in [package.json](package.json)
246
+ 2. Update [README.md](README.md) if needed
247
+ 3. Run tests: `npm test`
248
+ 4. Build: `npm run build`
249
+ 5. Commit with version bump: `chore: bump version to X.Y.Z`
250
+ 6. Tag release: `git tag vX.Y.Z`
251
+ 7. Push: `git push && git push --tags`
252
+ 8. Publish: `npm run release` (or `npm run release:beta`)
253
+
254
+ ## Important Constraints
255
+
256
+ ### Do NOT
257
+ - Use `console.log` - always use Homebridge logger
258
+ - Commit without running tests and linter
259
+ - Add dependencies without considering bundle size
260
+ - Break backward compatibility without major version bump
261
+ - Hardcode sensitive data (credentials, tokens)
262
+
263
+ ### DO
264
+ - Follow the established directory structure
265
+ - Add tests for new features
266
+ - Update documentation
267
+ - Use dependency injection via service container
268
+ - Handle errors gracefully with user-friendly messages
269
+ - Consider API rate limits in all API calls
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Homebridge Daikin Cloud
2
2
 
3
+ [![npm version](https://badge.fury.io/js/@mp-consulting%2Fhomebridge-daikin-cloud.svg)](https://badge.fury.io/js/@mp-consulting%2Fhomebridge-daikin-cloud)
4
+ [![Build and Lint](https://github.com/mp-consulting/homebridge-daikin-cloud/actions/workflows/build.yml/badge.svg)](https://github.com/mp-consulting/homebridge-daikin-cloud/actions/workflows/build.yml)
5
+ [![codecov](https://codecov.io/gh/mp-consulting/homebridge-daikin-cloud/branch/main/graph/badge.svg)](https://codecov.io/gh/mp-consulting/homebridge-daikin-cloud)
6
+
3
7
  A [Homebridge](https://homebridge.io) plugin that integrates Daikin air conditioning units via the Daikin Cloud (Onecta) API, allowing you to control your devices through Apple HomeKit.
4
8
 
5
9
  ![HomeKit Controls](images/homekit-controls.jpeg) ![HomeKit Settings](images/homekit-settings.jpeg)
@@ -212,6 +216,25 @@ npm run watch
212
216
  npm test
213
217
  ```
214
218
 
219
+ ### Code Quality
220
+
221
+ This plugin uses:
222
+ - **TypeScript strict mode** for enhanced type safety
223
+ - **Zod validation** for runtime type checking
224
+ - **ESLint** for code quality enforcement
225
+ - **Jest** with 60%+ test coverage
226
+
227
+ ### Documentation
228
+
229
+ Comprehensive developer documentation is available in the [`docs/`](docs/) folder:
230
+
231
+ - **[ARCHITECTURE.md](docs/ARCHITECTURE.md)** - System architecture, component design, data flows, and extension guides
232
+ - **[IMPLEMENTATION_GUIDE.md](docs/IMPLEMENTATION_GUIDE.md)** - Step-by-step implementation guide for improvements
233
+ - **[IMPROVEMENTS_SUMMARY.md](docs/IMPROVEMENTS_SUMMARY.md)** - Summary of recent improvements and progress
234
+ - **[NEXT_STEPS.md](docs/NEXT_STEPS.md)** - Quick-start guide for contributing
235
+
236
+ For development workflows and coding conventions, see [CLAUDE.md](CLAUDE.md).
237
+
215
238
  ## License
216
239
 
217
240
  [Apache-2.0](LICENSE)
@@ -48,10 +48,12 @@
48
48
  },
49
49
  "callbackServerPort": {
50
50
  "title": "Callback Server Port",
51
- "description": "Port for the OAuth callback server",
52
- "type": "string",
51
+ "description": "Port for the OAuth callback server (1-65535)",
52
+ "type": "integer",
53
53
  "required": false,
54
- "default": "8582",
54
+ "default": 8582,
55
+ "minimum": 1,
56
+ "maximum": 65535,
55
57
  "x-schema-form": {
56
58
  "placeholder": "8582",
57
59
  "condition": "model.authMode !== 'mobile_app'"
@@ -35,8 +35,14 @@ export declare class DaikinApi {
35
35
  getDevices(): Promise<GatewayDevice[]>;
36
36
  /**
37
37
  * Update device data (PATCH request)
38
+ *
39
+ * @param deviceId - The device ID
40
+ * @param embeddedId - The management point embedded ID (e.g., 'climateControl')
41
+ * @param dataPoint - The data point/characteristic name (e.g., 'temperatureControl')
42
+ * @param value - The value to set
43
+ * @param dataPath - Optional path within the data point (e.g., '/operationModes/heating/setpoints/roomTemperature')
38
44
  */
39
- updateDevice(deviceId: string, embeddedId: string, dataPoint: string, value: unknown): Promise<void>;
45
+ updateDevice(deviceId: string, embeddedId: string, dataPoint: string, value: unknown, dataPath?: string): Promise<void>;
40
46
  /**
41
47
  * Check if we're rate limited
42
48
  */
@@ -53,10 +59,6 @@ export declare class DaikinApi {
53
59
  * Sleep for a specified duration
54
60
  */
55
61
  private sleep;
56
- /**
57
- * Check if status code is a gateway/timeout error that can be retried
58
- */
59
- private isGatewayError;
60
62
  /**
61
63
  * Get human-readable name for gateway error status codes
62
64
  */
@@ -1 +1 @@
1
- {"version":3,"file":"daikin-api.d.ts","sourceRoot":"","sources":["../../../src/api/daikin-api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAqB,eAAe,EAAE,aAAa,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAWjG,qBAAa,gBAAiB,SAAQ,KAAK;aAGnB,UAAU,EAAE,MAAM;gBADlC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM;CAKzC;AAED,qBAAa,eAAgB,SAAQ,KAAK;aAGlB,UAAU,EAAE,MAAM;aAClB,YAAY,EAAE,MAAM;gBAFpC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM;CAK3C;AAED,qBAAa,SAAS;IAKd,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IALvC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAS;gBAGR,KAAK,EAAE,aAAa,EACpB,iBAAiB,CAAC,YAAW,eAAe,KAAK,IAAI,aAAA;IAO1E;;OAEG;WACU,aAAa,CACtB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;QAAC,SAAS,EAAE,eAAe,CAAA;KAAE,CAAC;IA6BjH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAOhC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAqChC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAI5C;;OAEG;IACG,YAAY,CACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAKhB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;YACW,OAAO;IAsGrB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;CA4CtB"}
1
+ {"version":3,"file":"daikin-api.d.ts","sourceRoot":"","sources":["../../../src/api/daikin-api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAqB,eAAe,EAAE,aAAa,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAWjG,qBAAa,gBAAiB,SAAQ,KAAK;aAGnB,UAAU,EAAE,MAAM;gBADlC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM;CAKzC;AAED,qBAAa,eAAgB,SAAQ,KAAK;aAGlB,UAAU,EAAE,MAAM;aAClB,YAAY,EAAE,MAAM;gBAFpC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM;CAK3C;AAED,qBAAa,SAAS;IAKd,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IALvC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAS;gBAGR,KAAK,EAAE,aAAa,EACpB,iBAAiB,CAAC,YAAW,eAAe,KAAK,IAAI,aAAA;IAO1E;;OAEG;WACU,aAAa,CACtB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;QAAC,SAAS,EAAE,eAAe,CAAA;KAAE,CAAC;IA6BjH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAOhC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAqChC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAI5C;;;;;;;;OAQG;IACG,YAAY,CACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;YACW,OAAO;IAsGrB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;CA4CtB"}
@@ -135,10 +135,18 @@ class DaikinApi {
135
135
  }
136
136
  /**
137
137
  * Update device data (PATCH request)
138
+ *
139
+ * @param deviceId - The device ID
140
+ * @param embeddedId - The management point embedded ID (e.g., 'climateControl')
141
+ * @param dataPoint - The data point/characteristic name (e.g., 'temperatureControl')
142
+ * @param value - The value to set
143
+ * @param dataPath - Optional path within the data point (e.g., '/operationModes/heating/setpoints/roomTemperature')
138
144
  */
139
- async updateDevice(deviceId, embeddedId, dataPoint, value) {
140
- const path = `/v1/gateway-devices/${deviceId}/management-points/${embeddedId}/characteristics/${dataPoint}`;
141
- await this.request(path, 'PATCH', { value });
145
+ async updateDevice(deviceId, embeddedId, dataPoint, value, dataPath) {
146
+ const urlPath = `/v1/gateway-devices/${deviceId}/management-points/${embeddedId}/characteristics/${dataPoint}`;
147
+ // Include path in body if provided (matches mobile app format)
148
+ const body = dataPath ? { value, path: dataPath } : { value };
149
+ await this.request(urlPath, 'PATCH', body);
142
150
  }
143
151
  /**
144
152
  * Check if we're rate limited
@@ -166,14 +174,6 @@ class DaikinApi {
166
174
  sleep(ms) {
167
175
  return new Promise(resolve => setTimeout(resolve, ms));
168
176
  }
169
- /**
170
- * Check if status code is a gateway/timeout error that can be retried
171
- */
172
- isGatewayError(statusCode) {
173
- return statusCode === constants_1.HTTP_STATUS.BAD_GATEWAY ||
174
- statusCode === constants_1.HTTP_STATUS.SERVICE_UNAVAILABLE ||
175
- statusCode === constants_1.HTTP_STATUS.GATEWAY_TIMEOUT;
176
- }
177
177
  /**
178
178
  * Get human-readable name for gateway error status codes
179
179
  */
@@ -1 +1 @@
1
- {"version":3,"file":"daikin-api.js","sourceRoot":"","sources":["../../../src/api/daikin-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daikin-api.js","sourceRoot":"","sources":["../../../src/api/daikin-api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"daikin-cloud.repository.d.ts","sourceRoot":"","sources":["../../../src/api/daikin-cloud.repository.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IACxB,MAAM,CAAC,4BAA4B,CAAC,kBAAkB,KAAA;CAiBzD"}
1
+ {"version":3,"file":"daikin-cloud.repository.d.ts","sourceRoot":"","sources":["../../../src/api/daikin-cloud.repository.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IACxB,MAAM,CAAC,4BAA4B,CAAC,kBAAkB,EAAE,GAAG;CAiB9D"}
@@ -4,7 +4,7 @@ exports.DaikinCloudRepo = void 0;
4
4
  class DaikinCloudRepo {
5
5
  static maskSensitiveCloudDeviceData(cloudDeviceDetails) {
6
6
  return {
7
- managementPoints: cloudDeviceDetails.managementPoints.map(managementPoint => {
7
+ managementPoints: cloudDeviceDetails.managementPoints.map((managementPoint) => {
8
8
  if (managementPoint.ipAddress)
9
9
  managementPoint.ipAddress.value = 'REDACTED';
10
10
  if (managementPoint.macAddress)
@@ -1 +1 @@
1
- {"version":3,"file":"daikin-cloud.repository.js","sourceRoot":"","sources":["../../../src/api/daikin-cloud.repository.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAe;IACxB,MAAM,CAAC,4BAA4B,CAAC,kBAAkB;QAClD,OAAO;YACH,gBAAgB,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;gBACxE,IAAI,eAAe,CAAC,SAAS;oBAAE,eAAe,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;gBAC5E,IAAI,eAAe,CAAC,UAAU;oBAAE,eAAe,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC;gBAC9E,IAAI,eAAe,CAAC,IAAI;oBAAE,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;gBAClE,IAAI,eAAe,CAAC,YAAY;oBAAE,eAAe,CAAC,YAAY,CAAC,KAAK,GAAG,UAAU,CAAC;gBAClF,IAAI,eAAe,CAAC,kBAAkB;oBAAE,eAAe,CAAC,kBAAkB,CAAC,KAAK,GAAG,UAAU,CAAC;gBAC9F,IAAI,eAAe,CAAC,eAAe;oBAAE,eAAe,CAAC,eAAe,GAAG,UAAU,CAAC;gBAClF,IAAI,eAAe,CAAC,QAAQ;oBAAE,eAAe,CAAC,QAAQ,GAAG,UAAU,CAAC;gBACpE,IAAI,eAAe,CAAC,eAAe;oBAAE,eAAe,CAAC,eAAe,GAAG,UAAU,CAAC;gBAElF,OAAO,eAAe,CAAC;YAC3B,CAAC,CAAC;YACF,GAAG,kBAAkB;SACxB,CAAC;IACN,CAAC;CACJ;AAlBD,0CAkBC"}
1
+ {"version":3,"file":"daikin-cloud.repository.js","sourceRoot":"","sources":["../../../src/api/daikin-cloud.repository.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAe;IACxB,MAAM,CAAC,4BAA4B,CAAC,kBAAuB;QACvD,OAAO;YACH,gBAAgB,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,eAAoB,EAAE,EAAE;gBAC/E,IAAI,eAAe,CAAC,SAAS;oBAAE,eAAe,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;gBAC5E,IAAI,eAAe,CAAC,UAAU;oBAAE,eAAe,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC;gBAC9E,IAAI,eAAe,CAAC,IAAI;oBAAE,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;gBAClE,IAAI,eAAe,CAAC,YAAY;oBAAE,eAAe,CAAC,YAAY,CAAC,KAAK,GAAG,UAAU,CAAC;gBAClF,IAAI,eAAe,CAAC,kBAAkB;oBAAE,eAAe,CAAC,kBAAkB,CAAC,KAAK,GAAG,UAAU,CAAC;gBAC9F,IAAI,eAAe,CAAC,eAAe;oBAAE,eAAe,CAAC,eAAe,GAAG,UAAU,CAAC;gBAClF,IAAI,eAAe,CAAC,QAAQ;oBAAE,eAAe,CAAC,QAAQ,GAAG,UAAU,CAAC;gBACpE,IAAI,eAAe,CAAC,eAAe;oBAAE,eAAe,CAAC,eAAe,GAAG,UAAU,CAAC;gBAElF,OAAO,eAAe,CAAC;YAC3B,CAAC,CAAC;YACF,GAAG,kBAAkB;SACxB,CAAC;IACN,CAAC;CACJ;AAlBD,0CAkBC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Device Tracker
3
+ *
4
+ * Tracks device state changes and errors for differential updates and diagnostics.
5
+ * Enables efficient polling by only updating devices that have changed.
6
+ */
7
+ import { GatewayDevice } from './daikin-types';
8
+ export interface DeviceError {
9
+ timestamp: Date;
10
+ severity: 'error' | 'warning';
11
+ message: string;
12
+ operation: string;
13
+ retryCount: number;
14
+ }
15
+ /**
16
+ * Device Tracker for managing device state and error history
17
+ */
18
+ export declare class DeviceTracker {
19
+ private lastUpdate;
20
+ private dataHash;
21
+ private errors;
22
+ private readonly maxErrors;
23
+ /**
24
+ * Check if device data has changed since last update
25
+ *
26
+ * @param newData - New device data from API
27
+ * @returns True if data has changed
28
+ */
29
+ hasChanges(newData: GatewayDevice): boolean;
30
+ /**
31
+ * Update the tracked state
32
+ *
33
+ * @param data - Device data to track
34
+ */
35
+ updateState(data: GatewayDevice): void;
36
+ /**
37
+ * Get time since last update in milliseconds
38
+ *
39
+ * @returns Milliseconds since last update
40
+ */
41
+ getTimeSinceLastUpdate(): number;
42
+ /**
43
+ * Get last update timestamp
44
+ *
45
+ * @returns Date of last update
46
+ */
47
+ getLastUpdateTime(): Date;
48
+ /**
49
+ * Add an error to the device error history
50
+ *
51
+ * @param error - Error details
52
+ */
53
+ addError(error: DeviceError): void;
54
+ /**
55
+ * Get all recorded errors
56
+ *
57
+ * @returns Array of errors
58
+ */
59
+ getErrors(): DeviceError[];
60
+ /**
61
+ * Get errors since a specific time
62
+ *
63
+ * @param since - Date to filter errors from
64
+ * @returns Filtered errors
65
+ */
66
+ getRecentErrors(since: Date): DeviceError[];
67
+ /**
68
+ * Clear all recorded errors
69
+ */
70
+ clearErrors(): void;
71
+ /**
72
+ * Check if device has recent errors (within last 5 minutes)
73
+ *
74
+ * @returns True if recent errors exist
75
+ */
76
+ hasRecentErrors(): boolean;
77
+ /**
78
+ * Get error count by severity
79
+ *
80
+ * @returns Object with error and warning counts
81
+ */
82
+ getErrorStats(): {
83
+ errors: number;
84
+ warnings: number;
85
+ };
86
+ /**
87
+ * Compute hash of device data for change detection
88
+ *
89
+ * Uses MD5 hash of JSON-stringified data for fast comparison.
90
+ * Note: This is for change detection only, not cryptographic security.
91
+ *
92
+ * @param data - Device data to hash
93
+ * @returns MD5 hash string
94
+ */
95
+ private computeHash;
96
+ }
97
+ //# sourceMappingURL=daikin-device-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin-device-tracker.d.ts","sourceRoot":"","sources":["../../../src/api/daikin-device-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAEhC;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAK3C;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKtC;;;;OAIG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;;;OAIG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAOlC;;;;OAIG;IACH,SAAS,IAAI,WAAW,EAAE;IAI1B;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE;IAI3C;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;;OAIG;IACH,eAAe,IAAI,OAAO;IAK1B;;;;OAIG;IACH,aAAa,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAOrD;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;CAatB"}