@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.
- package/.claude/settings.local.json +22 -7
- package/CHANGELOG.md +49 -0
- package/CLAUDE.md +236 -1
- package/README.md +23 -0
- package/config.schema.json +5 -3
- package/dist/src/api/daikin-api.d.ts +7 -5
- package/dist/src/api/daikin-api.d.ts.map +1 -1
- package/dist/src/api/daikin-api.js +11 -11
- package/dist/src/api/daikin-api.js.map +1 -1
- package/dist/src/api/daikin-cloud.repository.d.ts.map +1 -1
- package/dist/src/api/daikin-cloud.repository.js +1 -1
- package/dist/src/api/daikin-cloud.repository.js.map +1 -1
- package/dist/src/api/daikin-device-tracker.d.ts +97 -0
- package/dist/src/api/daikin-device-tracker.d.ts.map +1 -0
- package/dist/src/api/daikin-device-tracker.js +136 -0
- package/dist/src/api/daikin-device-tracker.js.map +1 -0
- package/dist/src/api/daikin-device.d.ts.map +1 -1
- package/dist/src/api/daikin-device.js +2 -6
- package/dist/src/api/daikin-device.js.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-mobile-oauth.js +2 -1
- package/dist/src/api/daikin-mobile-oauth.js.map +1 -1
- package/dist/src/api/daikin-oauth.d.ts.map +1 -1
- package/dist/src/api/daikin-oauth.js +2 -1
- package/dist/src/api/daikin-oauth.js.map +1 -1
- package/dist/src/api/daikin-schemas.d.ts +5760 -0
- package/dist/src/api/daikin-schemas.d.ts.map +1 -0
- package/dist/src/api/daikin-schemas.js +169 -0
- package/dist/src/api/daikin-schemas.js.map +1 -0
- package/dist/src/api/daikin-types.d.ts.map +1 -1
- package/dist/src/api/daikin-types.js +10 -9
- package/dist/src/api/daikin-types.js.map +1 -1
- package/dist/src/api/http-interceptor.d.ts +99 -0
- package/dist/src/api/http-interceptor.d.ts.map +1 -0
- package/dist/src/api/http-interceptor.js +177 -0
- package/dist/src/api/http-interceptor.js.map +1 -0
- package/dist/src/config/config-manager.d.ts +133 -0
- package/dist/src/config/config-manager.d.ts.map +1 -0
- package/dist/src/config/config-manager.js +233 -0
- package/dist/src/config/config-manager.js.map +1 -0
- package/dist/src/constants/api.constants.d.ts +32 -0
- package/dist/src/constants/api.constants.d.ts.map +1 -0
- package/dist/src/constants/api.constants.js +35 -0
- package/dist/src/constants/api.constants.js.map +1 -0
- package/dist/src/constants/auth.constants.d.ts +8 -0
- package/dist/src/constants/auth.constants.d.ts.map +1 -0
- package/dist/src/constants/auth.constants.js +11 -0
- package/dist/src/constants/auth.constants.js.map +1 -0
- package/dist/src/constants/device.constants.d.ts +24 -0
- package/dist/src/constants/device.constants.d.ts.map +1 -0
- package/dist/src/constants/device.constants.js +33 -0
- package/dist/src/constants/device.constants.js.map +1 -0
- package/dist/src/constants/index.d.ts +11 -0
- package/dist/src/constants/index.d.ts.map +1 -0
- package/dist/src/constants/index.js +31 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/constants/time.constants.d.ts +16 -0
- package/dist/src/constants/time.constants.d.ts.map +1 -0
- package/dist/src/constants/time.constants.js +19 -0
- package/dist/src/constants/time.constants.js.map +1 -0
- package/dist/src/constants.d.ts +3 -56
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +17 -78
- package/dist/src/constants.js.map +1 -1
- package/dist/src/di/service-container.d.ts +92 -0
- package/dist/src/di/service-container.d.ts.map +1 -0
- package/dist/src/di/service-container.js +156 -0
- package/dist/src/di/service-container.js.map +1 -0
- package/dist/src/features/feature-registry.d.ts +100 -0
- package/dist/src/features/feature-registry.d.ts.map +1 -0
- package/dist/src/features/feature-registry.js +142 -0
- package/dist/src/features/feature-registry.js.map +1 -0
- package/dist/src/platform.d.ts +1 -0
- package/dist/src/platform.d.ts.map +1 -1
- package/dist/src/platform.js +10 -136
- package/dist/src/platform.js.map +1 -1
- package/dist/src/services/service-factory.d.ts +46 -0
- package/dist/src/services/service-factory.d.ts.map +1 -0
- package/dist/src/services/service-factory.js +72 -0
- package/dist/src/services/service-factory.js.map +1 -0
- package/dist/src/utils/error-handler.d.ts +101 -0
- package/dist/src/utils/error-handler.d.ts.map +1 -0
- package/dist/src/utils/error-handler.js +251 -0
- package/dist/src/utils/error-handler.js.map +1 -0
- package/dist/src/utils/log-context.d.ts +105 -0
- package/dist/src/utils/log-context.d.ts.map +1 -0
- package/dist/src/utils/log-context.js +206 -0
- package/dist/src/utils/log-context.js.map +1 -0
- package/dist/src/utils/retry.d.ts +42 -0
- package/dist/src/utils/retry.d.ts.map +1 -0
- package/dist/src/utils/retry.js +70 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/update-mapper.d.ts +59 -0
- package/dist/src/utils/update-mapper.d.ts.map +1 -0
- package/dist/src/utils/update-mapper.js +189 -0
- package/dist/src/utils/update-mapper.js.map +1 -0
- package/docs/ARCHITECTURE.md +645 -0
- package/docs/IMPLEMENTATION_GUIDE.md +899 -0
- package/docs/IMPROVEMENTS_SUMMARY.md +415 -0
- package/docs/NEXT_STEPS.md +368 -0
- package/docs/TROUBLESHOOTING.md +475 -0
- package/package.json +3 -2
- package/test/helpers/test-isolation.ts +228 -0
- package/test/mocks/index.ts +1 -1
- package/test/unit/api/daikin-api.test.ts +5 -5
- package/test/unit/config/config-manager.test.ts +271 -0
- package/test/unit/utils/error-handler.test.ts +274 -0
- package/test/unit/utils/log-context.test.ts +271 -0
- package/test/hbConfig/.daikin-mobile-tokenset +0 -8
- package/test/hbConfig/.uix-dashboard.json +0 -1
- package/test/hbConfig/.uix-secrets +0 -1
- package/test/hbConfig/accessories/.cachedAccessories.bak +0 -1
- package/test/hbConfig/accessories/cachedAccessories +0 -1
- package/test/hbConfig/accessories/uiAccessoriesLayout.json +0 -1
- package/test/hbConfig/auth.json +0 -10
- package/test/hbConfig/backups/config-backups/config.json.1767953686461 +0 -25
- package/test/hbConfig/backups/config-backups/config.json.1767953695236 +0 -29
- package/test/hbConfig/backups/config-backups/config.json.1767953814763 +0 -29
- package/test/hbConfig/backups/config-backups/config.json.1767953823101 +0 -29
- package/test/hbConfig/backups/config-backups/config.json.1767954822835 +0 -29
- package/test/hbConfig/backups/config-backups/config.json.1767954859218 +0 -29
- package/test/hbConfig/backups/config-backups/config.json.1767960145503 +0 -33
- package/test/hbConfig/backups/config-backups/config.json.1767960168068 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960170333 +0 -46
- package/test/hbConfig/backups/config-backups/config.json.1767960172731 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960179323 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960182114 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960189302 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960195194 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960197301 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960199151 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960199667 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960329839 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960334503 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960336208 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767960338537 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767963223953 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767963241753 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767963252785 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767963463944 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767963834475 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767963838474 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767963843066 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767965217715 +0 -44
- package/test/hbConfig/backups/config-backups/config.json.1767965419624 +0 -25
- package/test/hbConfig/backups/config-backups/config.json.1767965870934 +0 -32
- package/test/hbConfig/backups/config-backups/config.json.1767977675045 +0 -32
- package/test/hbConfig/backups/config-backups/config.json.1767977677222 +0 -33
- package/test/hbConfig/backups/config-backups/config.json.1767977710226 +0 -33
- package/test/hbConfig/backups/config-backups/config.json.1767977741397 +0 -33
- package/test/hbConfig/backups/config-backups/config.json.1767977977093 +0 -35
- package/test/hbConfig/backups/config-backups/config.json.1767977981773 +0 -35
- package/test/hbConfig/backups/config-backups/config.json.1767977986514 +0 -35
- package/test/hbConfig/backups/config-backups/config.json.1767977991174 +0 -35
- package/test/hbConfig/backups/config-backups/config.json.1767979424487 +0 -35
- package/test/hbConfig/backups/config-backups/config.json.1767979424987 +0 -35
- package/test/hbConfig/backups/config-backups/config.json.1767979432646 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979433150 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979436933 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979437438 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979441676 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979442180 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979466735 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979903636 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979904135 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979906606 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767979907108 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988702341 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988702837 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988713159 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988713664 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988918139 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988918639 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988921120 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988921624 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988930307 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988935070 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767988935574 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767989710262 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767989710760 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767989729668 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767990295225 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767990479921 +0 -47
- package/test/hbConfig/backups/config-backups/config.json.1767990481702 +0 -49
- package/test/hbConfig/config.json +0 -47
- package/test/hbConfig/daikin-cloud-certs/server.crt +0 -22
- package/test/hbConfig/daikin-cloud-certs/server.key +0 -28
- package/test/hbConfig/persist/AccessoryInfo.1E4A432551BA.json +0 -1
- package/test/hbConfig/persist/IdentifierCache.1E4A432551BA.json +0 -1
- package/test/hbConfig/tmp/daikin_request/api.onecta.daikineurope.com_01-09-2026-16-09-04/request_12214 +0 -1
- package/test/hbConfig/tmp/daikin_request/api.onecta.daikineurope.com_01-09-2026-16-09-04/request_12215 +0 -1
- package/test/hbConfig/tmp/daikin_request/api.onecta.daikineurope.com_01-09-2026-16-09-04/request_12216 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12195 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12196 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12197 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12198 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12200 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12201 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12202 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12203 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12204 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12205 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12206 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12207 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12208 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12209 +0 -1
- package/test/hbConfig/tmp/daikin_request/cdc.daikin.eu_01-09-2026-16-08-45/request_12210 +0 -1
- package/test/hbConfig/tmp/daikin_request/idp.onecta.daikineurope.com_01-09-2026-16-08-54/request_12211 +0 -1
- package/test/hbConfig/tmp/daikin_request/idp.onecta.daikineurope.com_01-09-2026-16-08-54/request_12212 +0 -1
- package/test/hbConfig/tmp/daikin_request/idp.onecta.daikineurope.com_01-09-2026-16-08-54/request_12213 +0 -1
- package/test/hbConfig/tmp/daikin_request/request_12217 +0 -1
- package/test/mobile-tokens.json +0 -8
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"permissions": {
|
|
3
3
|
"allow": [
|
|
4
|
-
"Bash(
|
|
5
|
-
"Bash(
|
|
6
|
-
"Bash(
|
|
7
|
-
"Bash(
|
|
8
|
-
"Bash(
|
|
9
|
-
"Bash(
|
|
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(
|
|
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
|
+
[](https://badge.fury.io/js/@mp-consulting%2Fhomebridge-daikin-cloud)
|
|
4
|
+
[](https://github.com/mp-consulting/homebridge-daikin-cloud/actions/workflows/build.yml)
|
|
5
|
+
[](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
|
 
|
|
@@ -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)
|
package/config.schema.json
CHANGED
|
@@ -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": "
|
|
51
|
+
"description": "Port for the OAuth callback server (1-65535)",
|
|
52
|
+
"type": "integer",
|
|
53
53
|
"required": false,
|
|
54
|
-
"default":
|
|
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
|
|
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
|
|
141
|
-
|
|
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,
|
|
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,
|
|
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"}
|