homebridge-plugin-klares4 1.1.8 → 2.0.0-beta.2
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/CHANGELOG.md +75 -0
- package/README.md +58 -33
- package/config.schema.json +27 -3
- package/dist/accessories/cover-accessory.d.ts.map +1 -1
- package/dist/accessories/light-accessory.d.ts.map +1 -1
- package/dist/accessories/sensor-accessory.d.ts.map +1 -1
- package/dist/accessories/thermostat-accessory.d.ts +2 -0
- package/dist/accessories/thermostat-accessory.d.ts.map +1 -1
- package/dist/accessories/thermostat-accessory.js +22 -87
- package/dist/accessories/thermostat-accessory.js.map +1 -1
- package/dist/accessories/zone-accessory.d.ts.map +1 -1
- package/dist/debug-capture/analysis.d.ts +6 -0
- package/dist/debug-capture/analysis.d.ts.map +1 -0
- package/dist/debug-capture/analysis.js +48 -0
- package/dist/debug-capture/analysis.js.map +1 -0
- package/dist/debug-capture/file-generator.d.ts +9 -0
- package/dist/debug-capture/file-generator.d.ts.map +1 -0
- package/dist/debug-capture/file-generator.js +116 -0
- package/dist/debug-capture/file-generator.js.map +1 -0
- package/dist/debug-capture/index.d.ts +22 -0
- package/dist/debug-capture/index.d.ts.map +1 -0
- package/dist/debug-capture/index.js +126 -0
- package/dist/debug-capture/index.js.map +1 -0
- package/dist/debug-capture/raw-message-capture.d.ts +3 -0
- package/dist/debug-capture/raw-message-capture.d.ts.map +1 -0
- package/dist/debug-capture/raw-message-capture.js +33 -0
- package/dist/debug-capture/raw-message-capture.js.map +1 -0
- package/dist/debug-capture/types.d.ts +14 -0
- package/dist/debug-capture/types.d.ts.map +1 -0
- package/dist/debug-capture/types.js +3 -0
- package/dist/debug-capture/types.js.map +1 -0
- package/dist/debug-capture.d.ts +3 -42
- package/dist/debug-capture.d.ts.map +1 -1
- package/dist/debug-capture.js +6 -278
- package/dist/debug-capture.js.map +1 -1
- package/dist/device-id.d.ts +12 -0
- package/dist/device-id.d.ts.map +1 -0
- package/dist/device-id.js +47 -0
- package/dist/device-id.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +37 -0
- package/dist/errors.js.map +1 -0
- package/dist/mqtt/state-payload-mapper.d.ts +3 -0
- package/dist/mqtt/state-payload-mapper.d.ts.map +1 -0
- package/dist/mqtt/state-payload-mapper.js +80 -0
- package/dist/mqtt/state-payload-mapper.js.map +1 -0
- package/dist/mqtt/topic-parser.d.ts +8 -0
- package/dist/mqtt/topic-parser.d.ts.map +1 -0
- package/dist/mqtt/topic-parser.js +42 -0
- package/dist/mqtt/topic-parser.js.map +1 -0
- package/dist/mqtt-bridge/accessory-index-service.d.ts +15 -0
- package/dist/mqtt-bridge/accessory-index-service.d.ts.map +1 -0
- package/dist/mqtt-bridge/accessory-index-service.js +77 -0
- package/dist/mqtt-bridge/accessory-index-service.js.map +1 -0
- package/dist/mqtt-bridge/command-executor.d.ts +17 -0
- package/dist/mqtt-bridge/command-executor.d.ts.map +1 -0
- package/dist/mqtt-bridge/command-executor.js +108 -0
- package/dist/mqtt-bridge/command-executor.js.map +1 -0
- package/dist/mqtt-bridge/index.d.ts +21 -0
- package/dist/mqtt-bridge/index.d.ts.map +1 -0
- package/dist/mqtt-bridge/index.js +183 -0
- package/dist/mqtt-bridge/index.js.map +1 -0
- package/dist/mqtt-bridge.d.ts +3 -30
- package/dist/mqtt-bridge.d.ts.map +1 -1
- package/dist/mqtt-bridge.js +6 -381
- package/dist/mqtt-bridge.js.map +1 -1
- package/dist/platform/accessory-handler-service.d.ts +12 -0
- package/dist/platform/accessory-handler-service.d.ts.map +1 -0
- package/dist/platform/accessory-handler-service.js +86 -0
- package/dist/platform/accessory-handler-service.js.map +1 -0
- package/dist/platform/accessory-registry.d.ts +26 -0
- package/dist/platform/accessory-registry.d.ts.map +1 -0
- package/dist/platform/accessory-registry.js +64 -0
- package/dist/platform/accessory-registry.js.map +1 -0
- package/dist/platform/config-file-service.d.ts +8 -0
- package/dist/platform/config-file-service.d.ts.map +1 -0
- package/dist/platform/config-file-service.js +62 -0
- package/dist/platform/config-file-service.js.map +1 -0
- package/dist/platform/device-list-service.d.ts +24 -0
- package/dist/platform/device-list-service.d.ts.map +1 -0
- package/dist/platform/device-list-service.js +264 -0
- package/dist/platform/device-list-service.js.map +1 -0
- package/dist/platform/discovery-service.d.ts +13 -0
- package/dist/platform/discovery-service.d.ts.map +1 -0
- package/dist/platform/discovery-service.js +69 -0
- package/dist/platform/discovery-service.js.map +1 -0
- package/dist/platform/index.d.ts +36 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +158 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/platform-lifecycle-service.d.ts +10 -0
- package/dist/platform/platform-lifecycle-service.d.ts.map +1 -0
- package/dist/platform/platform-lifecycle-service.js +30 -0
- package/dist/platform/platform-lifecycle-service.js.map +1 -0
- package/dist/platform/types.d.ts +61 -0
- package/dist/platform/types.d.ts.map +1 -0
- package/dist/platform/types.js +3 -0
- package/dist/platform/types.js.map +1 -0
- package/dist/platform.d.ts +3 -87
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +6 -501
- package/dist/platform.js.map +1 -1
- package/dist/thermostat-mode.d.ts +7 -0
- package/dist/thermostat-mode.d.ts.map +1 -0
- package/dist/thermostat-mode.js +80 -0
- package/dist/thermostat-mode.js.map +1 -0
- package/dist/thermostat-state.d.ts +12 -0
- package/dist/thermostat-state.d.ts.map +1 -0
- package/dist/thermostat-state.js +56 -0
- package/dist/thermostat-state.js.map +1 -0
- package/dist/types/device-status.types.d.ts +34 -0
- package/dist/types/device-status.types.d.ts.map +1 -0
- package/dist/types/device-status.types.js +3 -0
- package/dist/types/device-status.types.js.map +1 -0
- package/dist/types/device.types.d.ts +41 -0
- package/dist/types/device.types.d.ts.map +1 -0
- package/dist/types/device.types.js +3 -0
- package/dist/types/device.types.js.map +1 -0
- package/dist/types/guards/device-guards.d.ts +8 -0
- package/dist/types/guards/device-guards.d.ts.map +1 -0
- package/dist/types/guards/device-guards.js +27 -0
- package/dist/types/guards/device-guards.js.map +1 -0
- package/dist/types/guards/mqtt-command-guards.d.ts +6 -0
- package/dist/types/guards/mqtt-command-guards.d.ts.map +1 -0
- package/dist/types/guards/mqtt-command-guards.js +50 -0
- package/dist/types/guards/mqtt-command-guards.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mqtt.types.d.ts +64 -0
- package/dist/types/mqtt.types.d.ts.map +1 -0
- package/dist/types/mqtt.types.js +3 -0
- package/dist/types/mqtt.types.js.map +1 -0
- package/dist/types/room-mapping.types.d.ts +13 -0
- package/dist/types/room-mapping.types.d.ts.map +1 -0
- package/dist/types/room-mapping.types.js +3 -0
- package/dist/types/room-mapping.types.js.map +1 -0
- package/dist/types/websocket.types.d.ts +111 -0
- package/dist/types/websocket.types.d.ts.map +1 -0
- package/dist/types/websocket.types.js +3 -0
- package/dist/types/websocket.types.js.map +1 -0
- package/dist/types.d.ts +3 -280
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +17 -76
- package/dist/types.js.map +1 -1
- package/dist/websocket/command-dispatcher.d.ts +15 -0
- package/dist/websocket/command-dispatcher.d.ts.map +1 -0
- package/dist/websocket/command-dispatcher.js +74 -0
- package/dist/websocket/command-dispatcher.js.map +1 -0
- package/dist/websocket/device-state-projector.d.ts +10 -0
- package/dist/websocket/device-state-projector.d.ts.map +1 -0
- package/dist/websocket/device-state-projector.js +157 -0
- package/dist/websocket/device-state-projector.js.map +1 -0
- package/dist/websocket/protocol-router.d.ts +16 -0
- package/dist/websocket/protocol-router.d.ts.map +1 -0
- package/dist/websocket/protocol-router.js +39 -0
- package/dist/websocket/protocol-router.js.map +1 -0
- package/dist/websocket/ws-transport.d.ts +11 -0
- package/dist/websocket/ws-transport.d.ts.map +1 -0
- package/dist/websocket/ws-transport.js +61 -0
- package/dist/websocket/ws-transport.js.map +1 -0
- package/dist/websocket-client/command-service.d.ts +37 -0
- package/dist/websocket-client/command-service.d.ts.map +1 -0
- package/dist/websocket-client/command-service.js +237 -0
- package/dist/websocket-client/command-service.js.map +1 -0
- package/dist/websocket-client/connection-service.d.ts +31 -0
- package/dist/websocket-client/connection-service.d.ts.map +1 -0
- package/dist/websocket-client/connection-service.js +243 -0
- package/dist/websocket-client/connection-service.js.map +1 -0
- package/dist/websocket-client/crc16.d.ts +2 -0
- package/dist/websocket-client/crc16.d.ts.map +1 -0
- package/dist/websocket-client/crc16.js +44 -0
- package/dist/websocket-client/crc16.js.map +1 -0
- package/dist/websocket-client/device-parsers.d.ts +8 -0
- package/dist/websocket-client/device-parsers.d.ts.map +1 -0
- package/dist/websocket-client/device-parsers.js +43 -0
- package/dist/websocket-client/device-parsers.js.map +1 -0
- package/dist/websocket-client/index.d.ts +43 -0
- package/dist/websocket-client/index.d.ts.map +1 -0
- package/dist/websocket-client/index.js +190 -0
- package/dist/websocket-client/index.js.map +1 -0
- package/dist/websocket-client/message-service.d.ts +31 -0
- package/dist/websocket-client/message-service.d.ts.map +1 -0
- package/dist/websocket-client/message-service.js +189 -0
- package/dist/websocket-client/message-service.js.map +1 -0
- package/dist/websocket-client/state.d.ts +3 -0
- package/dist/websocket-client/state.d.ts.map +1 -0
- package/dist/websocket-client/state.js +18 -0
- package/dist/websocket-client/state.js.map +1 -0
- package/dist/websocket-client/status-updater.d.ts +23 -0
- package/dist/websocket-client/status-updater.d.ts.map +1 -0
- package/dist/websocket-client/status-updater.js +192 -0
- package/dist/websocket-client/status-updater.js.map +1 -0
- package/dist/websocket-client/system-temperature-updater.d.ts +19 -0
- package/dist/websocket-client/system-temperature-updater.d.ts.map +1 -0
- package/dist/websocket-client/system-temperature-updater.js +95 -0
- package/dist/websocket-client/system-temperature-updater.js.map +1 -0
- package/dist/websocket-client/types.d.ts +76 -0
- package/dist/websocket-client/types.d.ts.map +1 -0
- package/dist/websocket-client/types.js +3 -0
- package/dist/websocket-client/types.js.map +1 -0
- package/dist/websocket-client.d.ts +3 -67
- package/dist/websocket-client.d.ts.map +1 -1
- package/dist/websocket-client.js +5 -1127
- package/dist/websocket-client.js.map +1 -1
- package/package.json +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,81 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.0.0-beta.2] - 2026-03-07
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Output/scenario commands no longer wait for strict `CMD_USR_RES` ACK, preventing 8s command timeouts on centrales that apply command and emit only realtime state updates.
|
|
15
|
+
- Reconnect scheduler now avoids duplicate timer registration, removing duplicated "Scheduling reconnection..." log lines after connection failures.
|
|
16
|
+
|
|
17
|
+
## [2.0.0-beta.1] - 2026-03-07
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Release version bump for npm publication continuity after `2.0.0-beta.0` version lock.
|
|
22
|
+
|
|
23
|
+
## [2.0.0-beta.0] - 2026-03-07
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- **Modular architecture rollout** with facade compatibility preserved:
|
|
28
|
+
- `platform/` split with dedicated lifecycle/discovery/registry/config services
|
|
29
|
+
- `websocket-client/` split with transport/router/dispatcher/projector internals
|
|
30
|
+
- `mqtt-bridge/` split with command execution and accessory indexing services
|
|
31
|
+
- `debug-capture/` split with capture/analysis/file generation modules
|
|
32
|
+
- **Governance quality gates**:
|
|
33
|
+
- `npm run check:max-lines` enforcing `src/**/*.ts <= 300` lines
|
|
34
|
+
- `npm run verify` for strict TypeScript + tests + build
|
|
35
|
+
- CI workflow for automated gate execution on push/PR
|
|
36
|
+
- **Release scripts**:
|
|
37
|
+
- `npm run release:dry-run`
|
|
38
|
+
- `npm run release:beta`
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Internal architecture now follows explicit layered hierarchy:
|
|
43
|
+
- `Communication -> Domain -> Infrastructure`
|
|
44
|
+
- `ARCHITECTURE.md` updated to document module responsibilities and flows.
|
|
45
|
+
|
|
46
|
+
### Compatibility
|
|
47
|
+
|
|
48
|
+
- No breaking changes to Homebridge runtime contract:
|
|
49
|
+
- `PLATFORM_NAME` / `PLUGIN_NAME` unchanged
|
|
50
|
+
- accessory UUID generation unchanged
|
|
51
|
+
- config schema keys unchanged
|
|
52
|
+
- MQTT topic/payload contract unchanged
|
|
53
|
+
- public facades (`Lares4Platform`, `KseniaWebSocketClient`, `MqttBridge`, `DebugCaptureManager`) preserved
|
|
54
|
+
|
|
55
|
+
## [1.1.9-beta0] - 2026-03-07
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
|
|
59
|
+
- **Command response timeout control**: Added `commandTimeoutMs` configuration to tune write command ACK timeout.
|
|
60
|
+
- **Refactoring architecture modules** (internal, non-breaking):
|
|
61
|
+
- `device-id` helpers for canonical ID parsing/building
|
|
62
|
+
- `thermostat-mode` mapping helpers
|
|
63
|
+
- `thermostat-state` compatibility adapter (status as canonical)
|
|
64
|
+
- WebSocket internal components (`command-dispatcher`, `protocol-router`, `device-state-projector`, `ws-transport`)
|
|
65
|
+
- MQTT internal helpers (`topic-parser`, `state-payload-mapper`)
|
|
66
|
+
- Platform internal services (`accessory-registry`, `discovery-service`, `platform-lifecycle-service`)
|
|
67
|
+
- **Architecture documentation**: Added `ARCHITECTURE.md`.
|
|
68
|
+
- **Extended automated test suite**: Added characterization/contract tests for lifecycle helpers, WS command flow components, topic/payload contracts, thermostat mappings and ID utilities (`node --test`).
|
|
69
|
+
|
|
70
|
+
### Fixed
|
|
71
|
+
|
|
72
|
+
- **Thermostat discovery gap**: Outputs recognized as thermostats are now discovered and exposed correctly.
|
|
73
|
+
- **Login false-positive**: WebSocket `connect()` now resolves only after `LOGIN_RES=OK` with explicit login timeout.
|
|
74
|
+
- **Accessory cache drift**: Added stale accessory pruning after initial sync to remove ghost accessories.
|
|
75
|
+
- **Race conditions on commands**: Added per-device command queueing and command ACK waiting to avoid concurrent command overlap.
|
|
76
|
+
- **Runtime value validation**: Added numeric parsing/clamping guards before HomeKit characteristic updates to avoid `NaN`/out-of-range propagation.
|
|
77
|
+
- **Gate handling consistency**: Added `gate_` normalization in IDs and room mapping validation.
|
|
78
|
+
- **Shutdown cleanup**: Improved disconnect flow for WebSocket and MQTT bridge on Homebridge shutdown.
|
|
79
|
+
- **Debug capture safety**: Masked sensitive parsed payload data and restored WebSocket hooks reliably after capture.
|
|
80
|
+
|
|
81
|
+
### Security
|
|
82
|
+
|
|
83
|
+
- **TLS verification policy**: Certificate verification is strict by default; insecure TLS requires explicit `allowInsecureTls=true`.
|
|
84
|
+
|
|
10
85
|
## [1.1.8] - 2026-03-07
|
|
11
86
|
|
|
12
87
|
### Fixed
|
package/README.md
CHANGED
|
@@ -19,14 +19,16 @@ Complete plugin for Ksenia Lares4 systems integrating security zones, lights, co
|
|
|
19
19
|
- **Environmental Sensors**: Real-time temperature, humidity, and light levels
|
|
20
20
|
- **System Temperature Sensors**: Internal and external temperature from central unit
|
|
21
21
|
- **Real-time Updates**: WebSocket connection with automatic reconnection
|
|
22
|
+
- **Command ACK & Timeout**: Write commands wait for API response with configurable timeout
|
|
22
23
|
- **UI Configuration**: Complete graphical interface in Homebridge UI
|
|
23
24
|
- **Customization**: Custom names and selective entity exclusion
|
|
24
25
|
- **MQTT Bridge**: State publishing and command reception via MQTT (optional)
|
|
26
|
+
- **Documented Internal Architecture**: See `ARCHITECTURE.md` for module responsibilities and flows
|
|
25
27
|
|
|
26
28
|
### Prerequisites
|
|
27
29
|
|
|
28
30
|
- Homebridge >= 1.6.0
|
|
29
|
-
- Node.js >=
|
|
31
|
+
- Node.js >= 20.0.0
|
|
30
32
|
- Ksenia Lares4 system with WebSocket access enabled
|
|
31
33
|
|
|
32
34
|
### Installation
|
|
@@ -103,6 +105,8 @@ The plugin can be fully configured via the Homebridge UI graphical interface. Re
|
|
|
103
105
|
| `maxSeconds` | number | 30 | Max cover travel time (seconds) |
|
|
104
106
|
| `reconnectInterval` | number | 5000 | Reconnection interval (ms) |
|
|
105
107
|
| `heartbeatInterval` | number | 30000 | Heartbeat interval (ms) |
|
|
108
|
+
| `commandTimeoutMs` | number | 8000 | API command response timeout (ms) |
|
|
109
|
+
| `allowInsecureTls` | boolean | false | Disable TLS certificate validation (trusted LAN only) |
|
|
106
110
|
| `debug` | boolean | false | Detailed logging |
|
|
107
111
|
| `excludeZones` | string[] | [] | Zones to exclude |
|
|
108
112
|
| `excludeOutputs` | string[] | [] | Outputs to exclude |
|
|
@@ -133,7 +137,7 @@ The plugin can be fully configured via the Homebridge UI graphical interface. Re
|
|
|
133
137
|
#### Thermostats
|
|
134
138
|
|
|
135
139
|
- **HomeKit Type**: Thermostat
|
|
136
|
-
- **Modes**: Off/Heat/Cool
|
|
140
|
+
- **Modes**: Off/Heat/Cool/Auto
|
|
137
141
|
- **Control**: Target temperature
|
|
138
142
|
- **Sensors**: Current temperature
|
|
139
143
|
|
|
@@ -170,46 +174,48 @@ Enable the MQTT bridge in the "MQTT Bridge" configuration section:
|
|
|
170
174
|
|
|
171
175
|
Accessory states are published to the following topics:
|
|
172
176
|
|
|
173
|
-
- **Lights**: `homebridge/klares4/light/{
|
|
174
|
-
- **Covers**: `homebridge/klares4/cover/{
|
|
175
|
-
- **Thermostats**: `homebridge/klares4/thermostat/{
|
|
176
|
-
- **Sensors**: `homebridge/klares4/sensor/{
|
|
177
|
-
- **Zones**: `homebridge/klares4/zone/{
|
|
178
|
-
- **Scenarios**: `homebridge/klares4/scenario/{
|
|
177
|
+
- **Lights**: `homebridge/klares4/light/{slug}/state`
|
|
178
|
+
- **Covers**: `homebridge/klares4/cover/{slug}/state`
|
|
179
|
+
- **Thermostats**: `homebridge/klares4/thermostat/{slug}/state`
|
|
180
|
+
- **Sensors**: `homebridge/klares4/sensor/{slug}/state`
|
|
181
|
+
- **Zones**: `homebridge/klares4/zone/{slug}/state`
|
|
182
|
+
- **Scenarios**: `homebridge/klares4/scenario/{slug}/state`
|
|
179
183
|
|
|
180
184
|
#### Command Reception
|
|
181
185
|
|
|
182
186
|
Send commands to accessories on the following topics:
|
|
183
187
|
|
|
184
|
-
- **Lights**: `homebridge/klares4/light/{
|
|
185
|
-
- **Covers**: `homebridge/klares4/cover/{
|
|
186
|
-
- **Thermostats**: `homebridge/klares4/thermostat/{
|
|
187
|
-
- **Scenarios**: `homebridge/klares4/scenario/{
|
|
188
|
+
- **Lights**: `homebridge/klares4/light/{device_id_or_slug}/set`
|
|
189
|
+
- **Covers**: `homebridge/klares4/cover/{device_id_or_slug}/set`
|
|
190
|
+
- **Thermostats**: `homebridge/klares4/thermostat/{device_id_or_slug}/set`
|
|
191
|
+
- **Scenarios**: `homebridge/klares4/scenario/{device_id_or_slug}/set`
|
|
192
|
+
|
|
193
|
+
Examples of canonical device IDs: `light_1`, `cover_2`, `thermostat_3`, `scenario_4`.
|
|
188
194
|
|
|
189
195
|
#### Usage Examples
|
|
190
196
|
|
|
191
197
|
##### Turn on a light:
|
|
192
198
|
|
|
193
199
|
```bash
|
|
194
|
-
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/light/
|
|
200
|
+
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/light/light_1/set" -m '{"on": true, "brightness": 80}'
|
|
195
201
|
```
|
|
196
202
|
|
|
197
203
|
##### Move a cover:
|
|
198
204
|
|
|
199
205
|
```bash
|
|
200
|
-
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/cover/
|
|
206
|
+
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/cover/cover_2/set" -m '{"position": 50}'
|
|
201
207
|
```
|
|
202
208
|
|
|
203
209
|
##### Set thermostat temperature:
|
|
204
210
|
|
|
205
211
|
```bash
|
|
206
|
-
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/thermostat/
|
|
212
|
+
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/thermostat/thermostat_3/set" -m '{"targetTemperature": 22, "mode": "heat"}'
|
|
207
213
|
```
|
|
208
214
|
|
|
209
215
|
##### Trigger a scenario:
|
|
210
216
|
|
|
211
217
|
```bash
|
|
212
|
-
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/scenario/
|
|
218
|
+
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/scenario/scenario_4/set" -m '{"active": true}'
|
|
213
219
|
```
|
|
214
220
|
|
|
215
221
|
### Troubleshooting
|
|
@@ -233,6 +239,21 @@ Enable debug logging for detailed diagnostics:
|
|
|
233
239
|
}
|
|
234
240
|
```
|
|
235
241
|
|
|
242
|
+
### Development Quality Gates
|
|
243
|
+
|
|
244
|
+
For local validation before publishing:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
npm run verify
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
This runs:
|
|
251
|
+
|
|
252
|
+
- max file size gate (`src/**/*.ts` <= 300 lines),
|
|
253
|
+
- strict TypeScript checks (`--noUnusedLocals --noUnusedParameters`),
|
|
254
|
+
- full test suite,
|
|
255
|
+
- build compatibility gate.
|
|
256
|
+
|
|
236
257
|
### Roadmap
|
|
237
258
|
|
|
238
259
|
#### Planned for v1.2.0
|
|
@@ -289,7 +310,9 @@ This project is released under the MIT license.
|
|
|
289
310
|
- **Controllo Luci**: Accensione/spegnimento di tutte le luci del sistema
|
|
290
311
|
- **Tapparelle Intelligenti**: Controllo percentuale con timing configurabile
|
|
291
312
|
- **Termostati**: Controllo temperatura e modalita riscaldamento/raffreddamento
|
|
292
|
-
- **Sensori Ambientali**: Temperatura, umidita e luminosita in tempo reale
|
|
313
|
+
- **Sensori Ambientali**: Temperatura, umidita e luminosita in tempo reale
|
|
314
|
+
- **Sensori Temperatura Sistema**: Temperatura interna ed esterna dalla centrale
|
|
315
|
+
- **Aggiornamenti Real-time**: Connessione WebSocket con riconnessione automatica
|
|
293
316
|
- **Configurazione UI**: Interfaccia grafica completa in Homebridge UI
|
|
294
317
|
- **Personalizzazione**: Nomi personalizzati ed esclusione selettiva di entita
|
|
295
318
|
- **Bridge MQTT**: Pubblicazione stati e ricezione comandi via MQTT (opzionale)
|
|
@@ -297,7 +320,7 @@ This project is released under the MIT license.
|
|
|
297
320
|
### Prerequisiti
|
|
298
321
|
|
|
299
322
|
- Homebridge >= 1.6.0
|
|
300
|
-
- Node.js >=
|
|
323
|
+
- Node.js >= 20.0.0
|
|
301
324
|
- Sistema Ksenia Lares4 con accesso WebSocket abilitato
|
|
302
325
|
|
|
303
326
|
### Installazione
|
|
@@ -404,7 +427,7 @@ Il plugin puo essere configurato completamente tramite l'interfaccia grafica di
|
|
|
404
427
|
#### Termostati
|
|
405
428
|
|
|
406
429
|
- **Tipo HomeKit**: Thermostat
|
|
407
|
-
- **Modalita**: Off/Heat/Cool
|
|
430
|
+
- **Modalita**: Off/Heat/Cool/Auto
|
|
408
431
|
- **Controllo**: Temperatura target
|
|
409
432
|
- **Sensori**: Temperatura corrente
|
|
410
433
|
|
|
@@ -441,46 +464,48 @@ Abilita il bridge MQTT nella sezione "MQTT Bridge" della configurazione:
|
|
|
441
464
|
|
|
442
465
|
Gli stati degli accessori vengono pubblicati sui seguenti topic:
|
|
443
466
|
|
|
444
|
-
- **Luci**: `homebridge/klares4/light/{
|
|
445
|
-
- **Tapparelle**: `homebridge/klares4/cover/{
|
|
446
|
-
- **Termostati**: `homebridge/klares4/thermostat/{
|
|
447
|
-
- **Sensori**: `homebridge/klares4/sensor/{
|
|
448
|
-
- **Zone**: `homebridge/klares4/zone/{
|
|
449
|
-
- **Scenari**: `homebridge/klares4/scenario/{
|
|
467
|
+
- **Luci**: `homebridge/klares4/light/{slug}/state`
|
|
468
|
+
- **Tapparelle**: `homebridge/klares4/cover/{slug}/state`
|
|
469
|
+
- **Termostati**: `homebridge/klares4/thermostat/{slug}/state`
|
|
470
|
+
- **Sensori**: `homebridge/klares4/sensor/{slug}/state`
|
|
471
|
+
- **Zone**: `homebridge/klares4/zone/{slug}/state`
|
|
472
|
+
- **Scenari**: `homebridge/klares4/scenario/{slug}/state`
|
|
450
473
|
|
|
451
474
|
#### Ricezione Comandi
|
|
452
475
|
|
|
453
476
|
Invia comandi agli accessori sui seguenti topic:
|
|
454
477
|
|
|
455
|
-
- **Luci**: `homebridge/klares4/light/{
|
|
456
|
-
- **Tapparelle**: `homebridge/klares4/cover/{
|
|
457
|
-
- **Termostati**: `homebridge/klares4/thermostat/{
|
|
458
|
-
- **Scenari**: `homebridge/klares4/scenario/{
|
|
478
|
+
- **Luci**: `homebridge/klares4/light/{device_id_or_slug}/set`
|
|
479
|
+
- **Tapparelle**: `homebridge/klares4/cover/{device_id_or_slug}/set`
|
|
480
|
+
- **Termostati**: `homebridge/klares4/thermostat/{device_id_or_slug}/set`
|
|
481
|
+
- **Scenari**: `homebridge/klares4/scenario/{device_id_or_slug}/set`
|
|
482
|
+
|
|
483
|
+
Esempi di ID canonici: `light_1`, `cover_2`, `thermostat_3`, `scenario_4`.
|
|
459
484
|
|
|
460
485
|
#### Esempi di Utilizzo
|
|
461
486
|
|
|
462
487
|
##### Accendere una luce:
|
|
463
488
|
|
|
464
489
|
```bash
|
|
465
|
-
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/light/
|
|
490
|
+
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/light/light_1/set" -m '{"on": true, "brightness": 80}'
|
|
466
491
|
```
|
|
467
492
|
|
|
468
493
|
##### Muovere una tapparella:
|
|
469
494
|
|
|
470
495
|
```bash
|
|
471
|
-
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/cover/
|
|
496
|
+
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/cover/cover_2/set" -m '{"position": 50}'
|
|
472
497
|
```
|
|
473
498
|
|
|
474
499
|
##### Impostare temperatura termostato:
|
|
475
500
|
|
|
476
501
|
```bash
|
|
477
|
-
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/thermostat/
|
|
502
|
+
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/thermostat/thermostat_3/set" -m '{"targetTemperature": 22, "mode": "heat"}'
|
|
478
503
|
```
|
|
479
504
|
|
|
480
505
|
##### Attivare uno scenario:
|
|
481
506
|
|
|
482
507
|
```bash
|
|
483
|
-
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/scenario/
|
|
508
|
+
mosquitto_pub -h 192.168.1.100 -t "homebridge/klares4/scenario/scenario_4/set" -m '{"active": true}'
|
|
484
509
|
```
|
|
485
510
|
|
|
486
511
|
### Risoluzione Problemi
|
package/config.schema.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"singular": true,
|
|
5
5
|
"customUi": false,
|
|
6
6
|
"headerDisplay": "<div class='text-center mb-3'><h3>klares4 - Ksenia Lares4 per Homebridge</h3><p class='text-muted'>Integrazione professionale per sistemi di sicurezza Ksenia Lares 4.0</p></div><div class='alert alert-info'><strong>Prima di iniziare, verifica che:</strong><ul class='mb-0 mt-2'><li>La centrale Lares4 sia raggiungibile in rete locale</li><li>L'accesso WebSocket sia abilitato sulla centrale</li><li>Tu disponga di un PIN utente</li></ul></div>",
|
|
7
|
-
"footerDisplay": "<div class='text-center mt-4 pt-3 border-top'><p class='text-muted mb-2'>Versione 1.1.
|
|
7
|
+
"footerDisplay": "<div class='text-center mt-4 pt-3 border-top'><p class='text-muted mb-2'>Versione 1.1.9-beta0 • Sviluppato da Paolo Trivisonno</p><a href='https://github.com/paolo-trivi/homebridge-plugin-klares4' target='_blank' class='btn btn-sm btn-outline-primary mr-2'>Documentazione</a> <a href='https://github.com/paolo-trivi/homebridge-plugin-klares4/issues' target='_blank' class='btn btn-sm btn-outline-secondary mr-2'>Segnala Bug</a> <a href='https://github.com/sponsors/paolo-trivi' target='_blank' class='btn btn-sm btn-outline-success'>Supporta</a></div>",
|
|
8
8
|
"schema": {
|
|
9
9
|
"type": "object",
|
|
10
10
|
"properties": {
|
|
@@ -38,6 +38,12 @@
|
|
|
38
38
|
"default": true,
|
|
39
39
|
"description": "Usa connessione crittografata - raccomandata per la sicurezza"
|
|
40
40
|
},
|
|
41
|
+
"allowInsecureTls": {
|
|
42
|
+
"title": "Consenti TLS Insicuro",
|
|
43
|
+
"type": "boolean",
|
|
44
|
+
"default": false,
|
|
45
|
+
"description": "Disabilita la verifica del certificato TLS (solo per certificati self-signed in rete locale fidata)"
|
|
46
|
+
},
|
|
41
47
|
"sender": {
|
|
42
48
|
"title": "Identificativo Client",
|
|
43
49
|
"type": "string",
|
|
@@ -113,6 +119,14 @@
|
|
|
113
119
|
"maximum": 300000,
|
|
114
120
|
"description": "Millisecondi tra i ping di keep-alive per verificare la connessione"
|
|
115
121
|
},
|
|
122
|
+
"commandTimeoutMs": {
|
|
123
|
+
"title": "Timeout Comandi API",
|
|
124
|
+
"type": "integer",
|
|
125
|
+
"default": 8000,
|
|
126
|
+
"minimum": 1000,
|
|
127
|
+
"maximum": 30000,
|
|
128
|
+
"description": "Timeout massimo (ms) per attendere la risposta ai comandi inviati alla centrale"
|
|
129
|
+
},
|
|
116
130
|
"coverStepSize": {
|
|
117
131
|
"title": "Step Animazione Tapparelle",
|
|
118
132
|
"type": "integer",
|
|
@@ -337,7 +351,7 @@
|
|
|
337
351
|
"deviceId": {
|
|
338
352
|
"title": "ID Dispositivo",
|
|
339
353
|
"type": "string",
|
|
340
|
-
"pattern": "^(light_|cover_|sensor_temp_|sensor_hum_|sensor_light_|zone_|thermostat_|scenario_)[0-9]+$"
|
|
354
|
+
"pattern": "^(light_|cover_|gate_|sensor_temp_|sensor_hum_|sensor_light_|zone_|thermostat_|scenario_)[0-9]+$"
|
|
341
355
|
},
|
|
342
356
|
"deviceName": {
|
|
343
357
|
"title": "Nome Dispositivo",
|
|
@@ -741,6 +755,16 @@
|
|
|
741
755
|
"key": "heartbeatInterval",
|
|
742
756
|
"flex": "1 1 200px",
|
|
743
757
|
"description": "Frequenza ping keep-alive con timeout PONG (v1.1.6)"
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
"key": "commandTimeoutMs",
|
|
761
|
+
"flex": "1 1 200px",
|
|
762
|
+
"description": "Timeout risposta per comandi write/cmd_usr"
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
"key": "allowInsecureTls",
|
|
766
|
+
"flex": "1 1 220px",
|
|
767
|
+
"description": "Solo per impianti con certificato self-signed"
|
|
744
768
|
}
|
|
745
769
|
]
|
|
746
770
|
}
|
|
@@ -798,4 +822,4 @@
|
|
|
798
822
|
]
|
|
799
823
|
}
|
|
800
824
|
]
|
|
801
|
-
}
|
|
825
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cover-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/cover-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"cover-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/cover-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;GAGG;AACH,qBAAa,cAAc;IAUnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAV9B,OAAO,CAAC,OAAO,CAAU;IAClB,MAAM,EAAE,WAAW,CAAC;IAC3B,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,YAAY,CAAC,CAAiC;gBAGjC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,iBAAiB;IAsDpC,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC5D,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIjD,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIlD,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI7D,OAAO,CAAC,gBAAgB;IA2DjB,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;CA8CpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/light-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"light-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/light-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;GAGG;AACH,qBAAa,cAAc;IAKnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL9B,OAAO,CAAC,OAAO,CAAU;IAClB,MAAM,EAAE,WAAW,CAAC;gBAGN,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,iBAAiB;IAkCpC,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhD,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIrC,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BxD,aAAa,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAInD,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;CAmBpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensor-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/sensor-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"sensor-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/sensor-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;GAGG;AACH,qBAAa,eAAe;IAKpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL9B,OAAO,CAAC,OAAO,CAAU;IAClB,MAAM,EAAE,YAAY,CAAC;gBAGP,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,iBAAiB;IAsBjD,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,mBAAmB;IAYd,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMrD,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMlD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMpD,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIjD,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAK5D,OAAO,CAAC,kBAAkB;IAiBnB,YAAY,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;CAwCrD"}
|
|
@@ -21,5 +21,7 @@ export declare class ThermostatAccessory {
|
|
|
21
21
|
getCurrentRelativeHumidity(): Promise<CharacteristicValue>;
|
|
22
22
|
private updateCharacteristics;
|
|
23
23
|
updateStatus(newDevice: KseniaThermostat): void;
|
|
24
|
+
private deriveTargetState;
|
|
25
|
+
private deriveCurrentState;
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=thermostat-accessory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thermostat-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/thermostat-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"thermostat-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/thermostat-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAQjD;;;GAGG;AACH,qBAAa,mBAAmB;IAKxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL9B,OAAO,CAAC,OAAO,CAAU;IAClB,MAAM,EAAE,gBAAgB,CAAC;gBAGX,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,iBAAiB;IA4DpC,6BAA6B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI7D,4BAA4B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI5D,4BAA4B,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvE,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAWrD,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAepD,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/D,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI1D,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAOvE,OAAO,CAAC,qBAAqB;IA4CtB,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAkDtD,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,kBAAkB;CAO7B"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ThermostatAccessory = void 0;
|
|
4
|
+
const thermostat_mode_1 = require("../thermostat-mode");
|
|
5
|
+
const thermostat_state_1 = require("../thermostat-state");
|
|
4
6
|
/**
|
|
5
7
|
* Thermostat Accessory Handler
|
|
6
8
|
* Handles HomeKit Thermostat service for Ksenia Lares4 thermostats
|
|
@@ -10,6 +12,7 @@ class ThermostatAccessory {
|
|
|
10
12
|
this.platform = platform;
|
|
11
13
|
this.accessory = accessory;
|
|
12
14
|
this.device = accessory.context.device;
|
|
15
|
+
(0, thermostat_state_1.syncThermostatTopLevelFromStatus)(this.device);
|
|
13
16
|
const accessoryInfoService = this.accessory.getService(this.platform.Service.AccessoryInformation);
|
|
14
17
|
if (accessoryInfoService) {
|
|
15
18
|
accessoryInfoService
|
|
@@ -53,49 +56,16 @@ class ThermostatAccessory {
|
|
|
53
56
|
this.updateCharacteristics();
|
|
54
57
|
}
|
|
55
58
|
async getCurrentHeatingCoolingState() {
|
|
56
|
-
|
|
57
|
-
switch (this.device.mode) {
|
|
58
|
-
case 'heat':
|
|
59
|
-
return this.device.currentTemperature < this.device.targetTemperature ? 1 : 0;
|
|
60
|
-
case 'cool':
|
|
61
|
-
return this.device.currentTemperature > this.device.targetTemperature ? 2 : 0;
|
|
62
|
-
default:
|
|
63
|
-
return 0; // Off
|
|
64
|
-
}
|
|
59
|
+
return this.deriveCurrentState(this.device);
|
|
65
60
|
}
|
|
66
61
|
async getTargetHeatingCoolingState() {
|
|
67
|
-
|
|
68
|
-
switch (this.device.mode) {
|
|
69
|
-
case 'heat':
|
|
70
|
-
return 1;
|
|
71
|
-
case 'cool':
|
|
72
|
-
return 2;
|
|
73
|
-
case 'auto':
|
|
74
|
-
return 3;
|
|
75
|
-
default:
|
|
76
|
-
return 0; // Off
|
|
77
|
-
}
|
|
62
|
+
return (0, thermostat_mode_1.domainModeToHomeKitTarget)(this.device.mode);
|
|
78
63
|
}
|
|
79
64
|
async setTargetHeatingCoolingState(value) {
|
|
80
|
-
const
|
|
81
|
-
let newMode;
|
|
82
|
-
switch (targetState) {
|
|
83
|
-
case 1:
|
|
84
|
-
newMode = 'heat';
|
|
85
|
-
break;
|
|
86
|
-
case 2:
|
|
87
|
-
newMode = 'cool';
|
|
88
|
-
break;
|
|
89
|
-
case 3:
|
|
90
|
-
newMode = 'auto';
|
|
91
|
-
break;
|
|
92
|
-
default:
|
|
93
|
-
newMode = 'off';
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
65
|
+
const newMode = (0, thermostat_mode_1.homeKitTargetToDomainMode)(value);
|
|
96
66
|
try {
|
|
97
67
|
await this.platform.wsClient?.setThermostatMode(this.device.id, newMode);
|
|
98
|
-
this.device
|
|
68
|
+
(0, thermostat_state_1.updateThermostatStatus)(this.device, { mode: newMode });
|
|
99
69
|
this.platform.log.info(`${this.device.name}: Mode ${newMode}`);
|
|
100
70
|
}
|
|
101
71
|
catch (error) {
|
|
@@ -124,7 +94,7 @@ class ThermostatAccessory {
|
|
|
124
94
|
const targetTemperature = value;
|
|
125
95
|
try {
|
|
126
96
|
await this.platform.wsClient?.setThermostatTemperature(this.device.id, targetTemperature);
|
|
127
|
-
this.device
|
|
97
|
+
(0, thermostat_state_1.updateThermostatStatus)(this.device, { targetTemperature });
|
|
128
98
|
this.platform.log.info(`${this.device.name}: Target temperature ${targetTemperature}C`);
|
|
129
99
|
}
|
|
130
100
|
catch (error) {
|
|
@@ -142,29 +112,8 @@ class ThermostatAccessory {
|
|
|
142
112
|
return 50; // Default value
|
|
143
113
|
}
|
|
144
114
|
updateCharacteristics() {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
case 'heat':
|
|
148
|
-
currentState =
|
|
149
|
-
this.device.currentTemperature < this.device.targetTemperature ? 1 : 0;
|
|
150
|
-
break;
|
|
151
|
-
case 'cool':
|
|
152
|
-
currentState =
|
|
153
|
-
this.device.currentTemperature > this.device.targetTemperature ? 2 : 0;
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
let targetState = 0; // Off
|
|
157
|
-
switch (this.device.mode) {
|
|
158
|
-
case 'heat':
|
|
159
|
-
targetState = 1;
|
|
160
|
-
break;
|
|
161
|
-
case 'cool':
|
|
162
|
-
targetState = 2;
|
|
163
|
-
break;
|
|
164
|
-
case 'auto':
|
|
165
|
-
targetState = 3;
|
|
166
|
-
break;
|
|
167
|
-
}
|
|
115
|
+
const currentState = this.deriveCurrentState(this.device);
|
|
116
|
+
const targetState = this.deriveTargetState(this.device.mode);
|
|
168
117
|
this.service.updateCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState, currentState);
|
|
169
118
|
this.service.updateCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState, targetState);
|
|
170
119
|
const currentTemp = this.device.currentTemperature !== undefined &&
|
|
@@ -183,6 +132,7 @@ class ThermostatAccessory {
|
|
|
183
132
|
}
|
|
184
133
|
}
|
|
185
134
|
updateStatus(newDevice) {
|
|
135
|
+
(0, thermostat_state_1.syncThermostatTopLevelFromStatus)(newDevice);
|
|
186
136
|
const oldDevice = this.device;
|
|
187
137
|
this.device = newDevice;
|
|
188
138
|
if (oldDevice.currentTemperature !== newDevice.currentTemperature) {
|
|
@@ -191,38 +141,23 @@ class ThermostatAccessory {
|
|
|
191
141
|
if (oldDevice.targetTemperature !== newDevice.targetTemperature) {
|
|
192
142
|
this.service.updateCharacteristic(this.platform.Characteristic.TargetTemperature, newDevice.targetTemperature);
|
|
193
143
|
}
|
|
194
|
-
if (oldDevice.mode !== newDevice.mode
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
break;
|
|
200
|
-
case 'cool':
|
|
201
|
-
targetState = 2;
|
|
202
|
-
break;
|
|
203
|
-
case 'auto':
|
|
204
|
-
targetState = 3;
|
|
205
|
-
break;
|
|
206
|
-
}
|
|
207
|
-
let currentState = 0;
|
|
208
|
-
switch (newDevice.mode) {
|
|
209
|
-
case 'heat':
|
|
210
|
-
currentState =
|
|
211
|
-
newDevice.currentTemperature < newDevice.targetTemperature ? 1 : 0;
|
|
212
|
-
break;
|
|
213
|
-
case 'cool':
|
|
214
|
-
currentState =
|
|
215
|
-
newDevice.currentTemperature > newDevice.targetTemperature ? 2 : 0;
|
|
216
|
-
break;
|
|
217
|
-
}
|
|
218
|
-
this.service.updateCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState, targetState);
|
|
219
|
-
this.service.updateCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState, currentState);
|
|
144
|
+
if (oldDevice.mode !== newDevice.mode ||
|
|
145
|
+
oldDevice.currentTemperature !== newDevice.currentTemperature ||
|
|
146
|
+
oldDevice.targetTemperature !== newDevice.targetTemperature) {
|
|
147
|
+
this.service.updateCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState, (0, thermostat_mode_1.domainModeToHomeKitTarget)(newDevice.mode));
|
|
148
|
+
this.service.updateCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState, (0, thermostat_mode_1.deriveHomeKitCurrentState)(newDevice.mode, newDevice.currentTemperature, newDevice.targetTemperature));
|
|
220
149
|
}
|
|
221
150
|
if (oldDevice.humidity !== newDevice.humidity && newDevice.humidity !== undefined) {
|
|
222
151
|
this.service.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, Math.max(0, Math.min(100, newDevice.humidity)));
|
|
223
152
|
}
|
|
224
153
|
this.platform.log.debug(`Updated thermostat ${this.device.name}: ${this.device.currentTemperature}C -> ${this.device.targetTemperature}C (${this.device.mode})`);
|
|
225
154
|
}
|
|
155
|
+
deriveTargetState(mode) {
|
|
156
|
+
return (0, thermostat_mode_1.domainModeToHomeKitTarget)(mode);
|
|
157
|
+
}
|
|
158
|
+
deriveCurrentState(device) {
|
|
159
|
+
return (0, thermostat_mode_1.deriveHomeKitCurrentState)(device.mode, device.currentTemperature, device.targetTemperature);
|
|
160
|
+
}
|
|
226
161
|
}
|
|
227
162
|
exports.ThermostatAccessory = ThermostatAccessory;
|
|
228
163
|
//# sourceMappingURL=thermostat-accessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thermostat-accessory.js","sourceRoot":"","sources":["../../src/accessories/thermostat-accessory.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"thermostat-accessory.js","sourceRoot":"","sources":["../../src/accessories/thermostat-accessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zone-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/zone-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"zone-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/zone-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;GAGG;AACH,qBAAa,aAAa;IAKlB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL9B,OAAO,CAAC,OAAO,CAAU;IAClB,MAAM,EAAE,UAAU,CAAC;gBAGL,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,iBAAiB;IAwCpC,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAK/C,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI/C,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAK9C,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAK9D,OAAO,CAAC,qBAAqB;IAsBtB,YAAY,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAmDhD,OAAO,CAAC,mBAAmB;CAS9B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RawMessage } from './types';
|
|
2
|
+
export declare function analyzeMessages(rawMessages: RawMessage[]): Record<string, number>;
|
|
3
|
+
export declare function extractCommands(rawMessages: RawMessage[]): string[];
|
|
4
|
+
export declare function getUniquePayloadTypes(rawMessages: RawMessage[]): string[];
|
|
5
|
+
export declare function countByCommand(rawMessages: RawMessage[]): Record<string, number>;
|
|
6
|
+
//# sourceMappingURL=analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/debug-capture/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUjF;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CASnE;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAUzE;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAShF"}
|