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.
Files changed (208) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +58 -33
  3. package/config.schema.json +27 -3
  4. package/dist/accessories/cover-accessory.d.ts.map +1 -1
  5. package/dist/accessories/light-accessory.d.ts.map +1 -1
  6. package/dist/accessories/sensor-accessory.d.ts.map +1 -1
  7. package/dist/accessories/thermostat-accessory.d.ts +2 -0
  8. package/dist/accessories/thermostat-accessory.d.ts.map +1 -1
  9. package/dist/accessories/thermostat-accessory.js +22 -87
  10. package/dist/accessories/thermostat-accessory.js.map +1 -1
  11. package/dist/accessories/zone-accessory.d.ts.map +1 -1
  12. package/dist/debug-capture/analysis.d.ts +6 -0
  13. package/dist/debug-capture/analysis.d.ts.map +1 -0
  14. package/dist/debug-capture/analysis.js +48 -0
  15. package/dist/debug-capture/analysis.js.map +1 -0
  16. package/dist/debug-capture/file-generator.d.ts +9 -0
  17. package/dist/debug-capture/file-generator.d.ts.map +1 -0
  18. package/dist/debug-capture/file-generator.js +116 -0
  19. package/dist/debug-capture/file-generator.js.map +1 -0
  20. package/dist/debug-capture/index.d.ts +22 -0
  21. package/dist/debug-capture/index.d.ts.map +1 -0
  22. package/dist/debug-capture/index.js +126 -0
  23. package/dist/debug-capture/index.js.map +1 -0
  24. package/dist/debug-capture/raw-message-capture.d.ts +3 -0
  25. package/dist/debug-capture/raw-message-capture.d.ts.map +1 -0
  26. package/dist/debug-capture/raw-message-capture.js +33 -0
  27. package/dist/debug-capture/raw-message-capture.js.map +1 -0
  28. package/dist/debug-capture/types.d.ts +14 -0
  29. package/dist/debug-capture/types.d.ts.map +1 -0
  30. package/dist/debug-capture/types.js +3 -0
  31. package/dist/debug-capture/types.js.map +1 -0
  32. package/dist/debug-capture.d.ts +3 -42
  33. package/dist/debug-capture.d.ts.map +1 -1
  34. package/dist/debug-capture.js +6 -278
  35. package/dist/debug-capture.js.map +1 -1
  36. package/dist/device-id.d.ts +12 -0
  37. package/dist/device-id.d.ts.map +1 -0
  38. package/dist/device-id.js +47 -0
  39. package/dist/device-id.js.map +1 -0
  40. package/dist/errors.d.ts +16 -0
  41. package/dist/errors.d.ts.map +1 -0
  42. package/dist/errors.js +37 -0
  43. package/dist/errors.js.map +1 -0
  44. package/dist/mqtt/state-payload-mapper.d.ts +3 -0
  45. package/dist/mqtt/state-payload-mapper.d.ts.map +1 -0
  46. package/dist/mqtt/state-payload-mapper.js +80 -0
  47. package/dist/mqtt/state-payload-mapper.js.map +1 -0
  48. package/dist/mqtt/topic-parser.d.ts +8 -0
  49. package/dist/mqtt/topic-parser.d.ts.map +1 -0
  50. package/dist/mqtt/topic-parser.js +42 -0
  51. package/dist/mqtt/topic-parser.js.map +1 -0
  52. package/dist/mqtt-bridge/accessory-index-service.d.ts +15 -0
  53. package/dist/mqtt-bridge/accessory-index-service.d.ts.map +1 -0
  54. package/dist/mqtt-bridge/accessory-index-service.js +77 -0
  55. package/dist/mqtt-bridge/accessory-index-service.js.map +1 -0
  56. package/dist/mqtt-bridge/command-executor.d.ts +17 -0
  57. package/dist/mqtt-bridge/command-executor.d.ts.map +1 -0
  58. package/dist/mqtt-bridge/command-executor.js +108 -0
  59. package/dist/mqtt-bridge/command-executor.js.map +1 -0
  60. package/dist/mqtt-bridge/index.d.ts +21 -0
  61. package/dist/mqtt-bridge/index.d.ts.map +1 -0
  62. package/dist/mqtt-bridge/index.js +183 -0
  63. package/dist/mqtt-bridge/index.js.map +1 -0
  64. package/dist/mqtt-bridge.d.ts +3 -30
  65. package/dist/mqtt-bridge.d.ts.map +1 -1
  66. package/dist/mqtt-bridge.js +6 -381
  67. package/dist/mqtt-bridge.js.map +1 -1
  68. package/dist/platform/accessory-handler-service.d.ts +12 -0
  69. package/dist/platform/accessory-handler-service.d.ts.map +1 -0
  70. package/dist/platform/accessory-handler-service.js +86 -0
  71. package/dist/platform/accessory-handler-service.js.map +1 -0
  72. package/dist/platform/accessory-registry.d.ts +26 -0
  73. package/dist/platform/accessory-registry.d.ts.map +1 -0
  74. package/dist/platform/accessory-registry.js +64 -0
  75. package/dist/platform/accessory-registry.js.map +1 -0
  76. package/dist/platform/config-file-service.d.ts +8 -0
  77. package/dist/platform/config-file-service.d.ts.map +1 -0
  78. package/dist/platform/config-file-service.js +62 -0
  79. package/dist/platform/config-file-service.js.map +1 -0
  80. package/dist/platform/device-list-service.d.ts +24 -0
  81. package/dist/platform/device-list-service.d.ts.map +1 -0
  82. package/dist/platform/device-list-service.js +264 -0
  83. package/dist/platform/device-list-service.js.map +1 -0
  84. package/dist/platform/discovery-service.d.ts +13 -0
  85. package/dist/platform/discovery-service.d.ts.map +1 -0
  86. package/dist/platform/discovery-service.js +69 -0
  87. package/dist/platform/discovery-service.js.map +1 -0
  88. package/dist/platform/index.d.ts +36 -0
  89. package/dist/platform/index.d.ts.map +1 -0
  90. package/dist/platform/index.js +158 -0
  91. package/dist/platform/index.js.map +1 -0
  92. package/dist/platform/platform-lifecycle-service.d.ts +10 -0
  93. package/dist/platform/platform-lifecycle-service.d.ts.map +1 -0
  94. package/dist/platform/platform-lifecycle-service.js +30 -0
  95. package/dist/platform/platform-lifecycle-service.js.map +1 -0
  96. package/dist/platform/types.d.ts +61 -0
  97. package/dist/platform/types.d.ts.map +1 -0
  98. package/dist/platform/types.js +3 -0
  99. package/dist/platform/types.js.map +1 -0
  100. package/dist/platform.d.ts +3 -87
  101. package/dist/platform.d.ts.map +1 -1
  102. package/dist/platform.js +6 -501
  103. package/dist/platform.js.map +1 -1
  104. package/dist/thermostat-mode.d.ts +7 -0
  105. package/dist/thermostat-mode.d.ts.map +1 -0
  106. package/dist/thermostat-mode.js +80 -0
  107. package/dist/thermostat-mode.js.map +1 -0
  108. package/dist/thermostat-state.d.ts +12 -0
  109. package/dist/thermostat-state.d.ts.map +1 -0
  110. package/dist/thermostat-state.js +56 -0
  111. package/dist/thermostat-state.js.map +1 -0
  112. package/dist/types/device-status.types.d.ts +34 -0
  113. package/dist/types/device-status.types.d.ts.map +1 -0
  114. package/dist/types/device-status.types.js +3 -0
  115. package/dist/types/device-status.types.js.map +1 -0
  116. package/dist/types/device.types.d.ts +41 -0
  117. package/dist/types/device.types.d.ts.map +1 -0
  118. package/dist/types/device.types.js +3 -0
  119. package/dist/types/device.types.js.map +1 -0
  120. package/dist/types/guards/device-guards.d.ts +8 -0
  121. package/dist/types/guards/device-guards.d.ts.map +1 -0
  122. package/dist/types/guards/device-guards.js +27 -0
  123. package/dist/types/guards/device-guards.js.map +1 -0
  124. package/dist/types/guards/mqtt-command-guards.d.ts +6 -0
  125. package/dist/types/guards/mqtt-command-guards.d.ts.map +1 -0
  126. package/dist/types/guards/mqtt-command-guards.js +50 -0
  127. package/dist/types/guards/mqtt-command-guards.js.map +1 -0
  128. package/dist/types/index.d.ts +8 -0
  129. package/dist/types/index.d.ts.map +1 -0
  130. package/dist/types/index.js +24 -0
  131. package/dist/types/index.js.map +1 -0
  132. package/dist/types/mqtt.types.d.ts +64 -0
  133. package/dist/types/mqtt.types.d.ts.map +1 -0
  134. package/dist/types/mqtt.types.js +3 -0
  135. package/dist/types/mqtt.types.js.map +1 -0
  136. package/dist/types/room-mapping.types.d.ts +13 -0
  137. package/dist/types/room-mapping.types.d.ts.map +1 -0
  138. package/dist/types/room-mapping.types.js +3 -0
  139. package/dist/types/room-mapping.types.js.map +1 -0
  140. package/dist/types/websocket.types.d.ts +111 -0
  141. package/dist/types/websocket.types.d.ts.map +1 -0
  142. package/dist/types/websocket.types.js +3 -0
  143. package/dist/types/websocket.types.js.map +1 -0
  144. package/dist/types.d.ts +3 -280
  145. package/dist/types.d.ts.map +1 -1
  146. package/dist/types.js +17 -76
  147. package/dist/types.js.map +1 -1
  148. package/dist/websocket/command-dispatcher.d.ts +15 -0
  149. package/dist/websocket/command-dispatcher.d.ts.map +1 -0
  150. package/dist/websocket/command-dispatcher.js +74 -0
  151. package/dist/websocket/command-dispatcher.js.map +1 -0
  152. package/dist/websocket/device-state-projector.d.ts +10 -0
  153. package/dist/websocket/device-state-projector.d.ts.map +1 -0
  154. package/dist/websocket/device-state-projector.js +157 -0
  155. package/dist/websocket/device-state-projector.js.map +1 -0
  156. package/dist/websocket/protocol-router.d.ts +16 -0
  157. package/dist/websocket/protocol-router.d.ts.map +1 -0
  158. package/dist/websocket/protocol-router.js +39 -0
  159. package/dist/websocket/protocol-router.js.map +1 -0
  160. package/dist/websocket/ws-transport.d.ts +11 -0
  161. package/dist/websocket/ws-transport.d.ts.map +1 -0
  162. package/dist/websocket/ws-transport.js +61 -0
  163. package/dist/websocket/ws-transport.js.map +1 -0
  164. package/dist/websocket-client/command-service.d.ts +37 -0
  165. package/dist/websocket-client/command-service.d.ts.map +1 -0
  166. package/dist/websocket-client/command-service.js +237 -0
  167. package/dist/websocket-client/command-service.js.map +1 -0
  168. package/dist/websocket-client/connection-service.d.ts +31 -0
  169. package/dist/websocket-client/connection-service.d.ts.map +1 -0
  170. package/dist/websocket-client/connection-service.js +243 -0
  171. package/dist/websocket-client/connection-service.js.map +1 -0
  172. package/dist/websocket-client/crc16.d.ts +2 -0
  173. package/dist/websocket-client/crc16.d.ts.map +1 -0
  174. package/dist/websocket-client/crc16.js +44 -0
  175. package/dist/websocket-client/crc16.js.map +1 -0
  176. package/dist/websocket-client/device-parsers.d.ts +8 -0
  177. package/dist/websocket-client/device-parsers.d.ts.map +1 -0
  178. package/dist/websocket-client/device-parsers.js +43 -0
  179. package/dist/websocket-client/device-parsers.js.map +1 -0
  180. package/dist/websocket-client/index.d.ts +43 -0
  181. package/dist/websocket-client/index.d.ts.map +1 -0
  182. package/dist/websocket-client/index.js +190 -0
  183. package/dist/websocket-client/index.js.map +1 -0
  184. package/dist/websocket-client/message-service.d.ts +31 -0
  185. package/dist/websocket-client/message-service.d.ts.map +1 -0
  186. package/dist/websocket-client/message-service.js +189 -0
  187. package/dist/websocket-client/message-service.js.map +1 -0
  188. package/dist/websocket-client/state.d.ts +3 -0
  189. package/dist/websocket-client/state.d.ts.map +1 -0
  190. package/dist/websocket-client/state.js +18 -0
  191. package/dist/websocket-client/state.js.map +1 -0
  192. package/dist/websocket-client/status-updater.d.ts +23 -0
  193. package/dist/websocket-client/status-updater.d.ts.map +1 -0
  194. package/dist/websocket-client/status-updater.js +192 -0
  195. package/dist/websocket-client/status-updater.js.map +1 -0
  196. package/dist/websocket-client/system-temperature-updater.d.ts +19 -0
  197. package/dist/websocket-client/system-temperature-updater.d.ts.map +1 -0
  198. package/dist/websocket-client/system-temperature-updater.js +95 -0
  199. package/dist/websocket-client/system-temperature-updater.js.map +1 -0
  200. package/dist/websocket-client/types.d.ts +76 -0
  201. package/dist/websocket-client/types.d.ts.map +1 -0
  202. package/dist/websocket-client/types.js +3 -0
  203. package/dist/websocket-client/types.js.map +1 -0
  204. package/dist/websocket-client.d.ts +3 -67
  205. package/dist/websocket-client.d.ts.map +1 -1
  206. package/dist/websocket-client.js +5 -1127
  207. package/dist/websocket-client.js.map +1 -1
  208. 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 >= 14.18.1
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/{id}/state`
174
- - **Covers**: `homebridge/klares4/cover/{id}/state`
175
- - **Thermostats**: `homebridge/klares4/thermostat/{id}/state`
176
- - **Sensors**: `homebridge/klares4/sensor/{id}/state`
177
- - **Zones**: `homebridge/klares4/zone/{id}/state`
178
- - **Scenarios**: `homebridge/klares4/scenario/{id}/state`
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/{id}/set`
185
- - **Covers**: `homebridge/klares4/cover/{id}/set`
186
- - **Thermostats**: `homebridge/klares4/thermostat/{id}/set`
187
- - **Scenarios**: `homebridge/klares4/scenario/{id}/set`
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/1/set" -m '{"on": true, "brightness": 80}'
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/2/set" -m '{"position": 50}'
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/3/set" -m '{"targetTemperature": 22, "mode": "heat"}'
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/4/set" -m '{"active": true}'
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- **Sensori Temperatura Sistema**: Temperatura interna ed esterna dalla centrale- **Aggiornamenti Real-time**: Connessione WebSocket con riconnessione automatica
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 >= 14.18.1
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/{id}/state`
445
- - **Tapparelle**: `homebridge/klares4/cover/{id}/state`
446
- - **Termostati**: `homebridge/klares4/thermostat/{id}/state`
447
- - **Sensori**: `homebridge/klares4/sensor/{id}/state`
448
- - **Zone**: `homebridge/klares4/zone/{id}/state`
449
- - **Scenari**: `homebridge/klares4/scenario/{id}/state`
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/{id}/set`
456
- - **Tapparelle**: `homebridge/klares4/cover/{id}/set`
457
- - **Termostati**: `homebridge/klares4/thermostat/{id}/set`
458
- - **Scenari**: `homebridge/klares4/scenario/{id}/set`
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/1/set" -m '{"on": true, "brightness": 80}'
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/2/set" -m '{"position": 50}'
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/3/set" -m '{"targetTemperature": 22, "mode": "heat"}'
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/4/set" -m '{"active": true}'
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
@@ -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.8 • 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>",
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,EAAe,MAAM,UAAU,CAAC;AAEzD;;;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
+ {"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,EAAe,MAAM,UAAU,CAAC;AAEzD;;;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
+ {"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,EAAgB,MAAM,UAAU,CAAC;AAE3D;;;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"}
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,EAAoB,MAAM,UAAU,CAAC;AAEnE;;;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;IA2DpC,6BAA6B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAY7D,4BAA4B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAc5D,4BAA4B,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCvE,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;IAkEtB,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;CAiEzD"}
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
- // 0 = Off, 1 = Heat, 2 = Cool
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
- // 0 = Off, 1 = Heat, 2 = Cool, 3 = Auto
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 targetState = value;
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.mode = newMode;
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.targetTemperature = targetTemperature;
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
- let currentState = 0; // Off
146
- switch (this.device.mode) {
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
- let targetState = 0;
196
- switch (newDevice.mode) {
197
- case 'heat':
198
- targetState = 1;
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":"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"}
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,EAAc,MAAM,UAAU,CAAC;AAEvD;;;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"}
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"}