@marcel2215/homebridge-supla-plugin 2.1.29 → 2.1.30

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 (116) hide show
  1. package/README.md +25 -1
  2. package/config.schema.json +26 -5
  3. package/dist/Accesories/ActionTriggerAccessory.d.ts +0 -1
  4. package/dist/Accesories/ActionTriggerAccessory.d.ts.map +1 -1
  5. package/dist/Accesories/ActionTriggerAccessory.js +15 -9
  6. package/dist/Accesories/ActionTriggerAccessory.js.map +1 -1
  7. package/dist/Accesories/AirQualityAccessory.d.ts +3 -1
  8. package/dist/Accesories/AirQualityAccessory.d.ts.map +1 -1
  9. package/dist/Accesories/AirQualityAccessory.js +47 -5
  10. package/dist/Accesories/AirQualityAccessory.js.map +1 -1
  11. package/dist/Accesories/ContactSensorAccessory.d.ts +3 -1
  12. package/dist/Accesories/ContactSensorAccessory.d.ts.map +1 -1
  13. package/dist/Accesories/ContactSensorAccessory.js +32 -4
  14. package/dist/Accesories/ContactSensorAccessory.js.map +1 -1
  15. package/dist/Accesories/DimmerAccessory.d.ts +4 -2
  16. package/dist/Accesories/DimmerAccessory.d.ts.map +1 -1
  17. package/dist/Accesories/DimmerAccessory.js +51 -14
  18. package/dist/Accesories/DimmerAccessory.js.map +1 -1
  19. package/dist/Accesories/DimmerRgbLightAccessory.d.ts +10 -2
  20. package/dist/Accesories/DimmerRgbLightAccessory.d.ts.map +1 -1
  21. package/dist/Accesories/DimmerRgbLightAccessory.js +149 -26
  22. package/dist/Accesories/DimmerRgbLightAccessory.js.map +1 -1
  23. package/dist/Accesories/DoorAccessory.d.ts +14 -1
  24. package/dist/Accesories/DoorAccessory.d.ts.map +1 -1
  25. package/dist/Accesories/DoorAccessory.js +146 -20
  26. package/dist/Accesories/DoorAccessory.js.map +1 -1
  27. package/dist/Accesories/ElectricityMeterAccessory.d.ts +13 -1
  28. package/dist/Accesories/ElectricityMeterAccessory.d.ts.map +1 -1
  29. package/dist/Accesories/ElectricityMeterAccessory.js +127 -12
  30. package/dist/Accesories/ElectricityMeterAccessory.js.map +1 -1
  31. package/dist/Accesories/FacadeBlindAccessory.d.ts +6 -0
  32. package/dist/Accesories/FacadeBlindAccessory.d.ts.map +1 -1
  33. package/dist/Accesories/FacadeBlindAccessory.js +205 -64
  34. package/dist/Accesories/FacadeBlindAccessory.js.map +1 -1
  35. package/dist/Accesories/FrontGateFsm.d.ts +8 -2
  36. package/dist/Accesories/FrontGateFsm.d.ts.map +1 -1
  37. package/dist/Accesories/FrontGateFsm.js +79 -19
  38. package/dist/Accesories/FrontGateFsm.js.map +1 -1
  39. package/dist/Accesories/GarageDoorOpenerAccesory.d.ts +12 -3
  40. package/dist/Accesories/GarageDoorOpenerAccesory.d.ts.map +1 -1
  41. package/dist/Accesories/GarageDoorOpenerAccesory.js +168 -21
  42. package/dist/Accesories/GarageDoorOpenerAccesory.js.map +1 -1
  43. package/dist/Accesories/GateAccessory.d.ts +6 -0
  44. package/dist/Accesories/GateAccessory.d.ts.map +1 -1
  45. package/dist/Accesories/GateAccessory.js +127 -19
  46. package/dist/Accesories/GateAccessory.js.map +1 -1
  47. package/dist/Accesories/GateLockAccessory.d.ts +17 -1
  48. package/dist/Accesories/GateLockAccessory.d.ts.map +1 -1
  49. package/dist/Accesories/GateLockAccessory.js +375 -50
  50. package/dist/Accesories/GateLockAccessory.js.map +1 -1
  51. package/dist/Accesories/LeakSensorAccessory.d.ts +3 -1
  52. package/dist/Accesories/LeakSensorAccessory.d.ts.map +1 -1
  53. package/dist/Accesories/LeakSensorAccessory.js +32 -4
  54. package/dist/Accesories/LeakSensorAccessory.js.map +1 -1
  55. package/dist/Accesories/LightBulbAccesory.d.ts +3 -2
  56. package/dist/Accesories/LightBulbAccesory.d.ts.map +1 -1
  57. package/dist/Accesories/LightBulbAccesory.js +41 -12
  58. package/dist/Accesories/LightBulbAccesory.js.map +1 -1
  59. package/dist/Accesories/PressureAccessory.d.ts +3 -1
  60. package/dist/Accesories/PressureAccessory.d.ts.map +1 -1
  61. package/dist/Accesories/PressureAccessory.js +28 -5
  62. package/dist/Accesories/PressureAccessory.js.map +1 -1
  63. package/dist/Accesories/RGBLightBulbAccesory.d.ts +9 -0
  64. package/dist/Accesories/RGBLightBulbAccesory.d.ts.map +1 -1
  65. package/dist/Accesories/RGBLightBulbAccesory.js +137 -17
  66. package/dist/Accesories/RGBLightBulbAccesory.js.map +1 -1
  67. package/dist/Accesories/RollerShutterAccessory.d.ts +6 -0
  68. package/dist/Accesories/RollerShutterAccessory.d.ts.map +1 -1
  69. package/dist/Accesories/RollerShutterAccessory.js +219 -74
  70. package/dist/Accesories/RollerShutterAccessory.js.map +1 -1
  71. package/dist/Accesories/SwitchAccessory.d.ts +3 -2
  72. package/dist/Accesories/SwitchAccessory.d.ts.map +1 -1
  73. package/dist/Accesories/SwitchAccessory.js +41 -12
  74. package/dist/Accesories/SwitchAccessory.js.map +1 -1
  75. package/dist/Accesories/TemperatureAccessory.d.ts +3 -1
  76. package/dist/Accesories/TemperatureAccessory.d.ts.map +1 -1
  77. package/dist/Accesories/TemperatureAccessory.js +28 -5
  78. package/dist/Accesories/TemperatureAccessory.js.map +1 -1
  79. package/dist/Accesories/TemperatureHumidityAccessory.d.ts +5 -1
  80. package/dist/Accesories/TemperatureHumidityAccessory.d.ts.map +1 -1
  81. package/dist/Accesories/TemperatureHumidityAccessory.js +40 -9
  82. package/dist/Accesories/TemperatureHumidityAccessory.js.map +1 -1
  83. package/dist/Accesories/ThermostatAccessory.d.ts +18 -1
  84. package/dist/Accesories/ThermostatAccessory.d.ts.map +1 -1
  85. package/dist/Accesories/ThermostatAccessory.js +193 -34
  86. package/dist/Accesories/ThermostatAccessory.js.map +1 -1
  87. package/dist/Accesories/ValveAccessory.d.ts +5 -2
  88. package/dist/Accesories/ValveAccessory.d.ts.map +1 -1
  89. package/dist/Accesories/ValveAccessory.js +47 -8
  90. package/dist/Accesories/ValveAccessory.js.map +1 -1
  91. package/dist/Accesories/WicketAccesory.d.ts +18 -3
  92. package/dist/Accesories/WicketAccesory.d.ts.map +1 -1
  93. package/dist/Accesories/WicketAccesory.js +154 -14
  94. package/dist/Accesories/WicketAccesory.js.map +1 -1
  95. package/dist/Heplers/ColorConverters.d.ts +2 -2
  96. package/dist/Heplers/ColorConverters.d.ts.map +1 -1
  97. package/dist/Heplers/ColorConverters.js +7 -3
  98. package/dist/Heplers/ColorConverters.js.map +1 -1
  99. package/dist/Heplers/DisplayName.d.ts +15 -0
  100. package/dist/Heplers/DisplayName.d.ts.map +1 -0
  101. package/dist/Heplers/DisplayName.js +174 -0
  102. package/dist/Heplers/DisplayName.js.map +1 -0
  103. package/dist/Heplers/SuplaChannelContext.d.ts +3 -1
  104. package/dist/Heplers/SuplaChannelContext.d.ts.map +1 -1
  105. package/dist/Heplers/SuplaChannelContext.js +3 -1
  106. package/dist/Heplers/SuplaChannelContext.js.map +1 -1
  107. package/dist/Heplers/SuplaMqttClient.d.ts +12 -4
  108. package/dist/Heplers/SuplaMqttClient.d.ts.map +1 -1
  109. package/dist/Heplers/SuplaMqttClient.js +214 -112
  110. package/dist/Heplers/SuplaMqttClient.js.map +1 -1
  111. package/dist/platform.d.ts +58 -3
  112. package/dist/platform.d.ts.map +1 -1
  113. package/dist/platform.js +1087 -115
  114. package/dist/platform.js.map +1 -1
  115. package/package.json +7 -3
  116. package/config.json +0 -3
@@ -39,7 +39,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.SuplaMqttClient = void 0;
40
40
  const mqtt_1 = __importDefault(require("mqtt"));
41
41
  const fs = __importStar(require("fs"));
42
+ const node_buffer_1 = require("node:buffer");
42
43
  const SuplaChannelContext_1 = require("./SuplaChannelContext");
44
+ const DisplayName_1 = require("./DisplayName");
43
45
  class SuplaMqttClient {
44
46
  constructor(context, log) {
45
47
  this.context = context;
@@ -78,37 +80,42 @@ class SuplaMqttClient {
78
80
  this.log.error(`MQTT client error: ${error.message}`);
79
81
  });
80
82
  }
81
- async discoverChannelsAsync(registerHandler) {
83
+ async discoverChannelsAsync() {
84
+ return (await this.discoverChannelsSnapshotAsync()).items;
85
+ }
86
+ async discoverChannelsSnapshotAsync() {
82
87
  const topicScheme = this.resolveTopicScheme();
83
88
  this.log.debug(`MQTT topic scheme: ${topicScheme}`);
84
89
  if (topicScheme === 'legacy') {
85
- return this.discoverLegacyRollerShuttersAsync(registerHandler);
90
+ return this.discoverLegacyRollerShuttersAsync();
86
91
  }
87
92
  if (topicScheme === 'cloud') {
88
- return this.discoverCloudChannelsAsync(registerHandler);
93
+ return this.discoverCloudChannelsAsync();
89
94
  }
90
- const cloudChannels = await this.discoverCloudChannelsAsync(registerHandler);
91
- if (cloudChannels.length > 0) {
92
- return cloudChannels;
95
+ const cloudSnapshot = await this.discoverCloudChannelsAsync();
96
+ if (cloudSnapshot.items.length > 0) {
97
+ return cloudSnapshot;
93
98
  }
94
99
  this.log.warn('No channels discovered via cloud topics; trying legacy rollershutter topics.');
95
- return this.discoverLegacyRollerShuttersAsync(registerHandler);
100
+ const legacySnapshot = await this.discoverLegacyRollerShuttersAsync();
101
+ return {
102
+ ...legacySnapshot,
103
+ warnings: [...cloudSnapshot.warnings, ...legacySnapshot.warnings],
104
+ complete: cloudSnapshot.complete && legacySnapshot.complete,
105
+ };
96
106
  }
97
- async discoverCloudChannelsAsync(registerHandler) {
107
+ async discoverCloudChannelsAsync() {
98
108
  const subscriptionTopic = `supla/${this.context.username}/devices/+/channels/#`;
99
109
  const includeHidden = this.resolveIncludeHidden();
100
110
  const usernamePattern = this.escapeRegex(this.context.username);
101
111
  this.log.info('Discovering channels via MQTT');
102
112
  this.log.debug(`Discovery subscribe topic: ${subscriptionTopic} includeHidden=${includeHidden}`);
103
113
  const channelMap = new Map();
104
- let resolveDone;
105
- const discoveryDone = new Promise((resolve) => {
106
- resolveDone = resolve;
107
- });
108
- let quietTimer;
114
+ const observedIds = new Set();
115
+ const warnings = [];
116
+ const invalidCaptionChannels = new Set();
109
117
  const maxWaitMs = 4000;
110
118
  const quietWindowMs = 1000;
111
- const maxTimer = setTimeout(() => resolveDone?.(), maxWaitMs);
112
119
  const messageHandler = (topic, message) => {
113
120
  const match = topic.match(new RegExp(`^supla/${usernamePattern}/devices/(\\d+)/channels/(\\d+)/(.*)$`));
114
121
  if (!match) {
@@ -116,6 +123,7 @@ class SuplaMqttClient {
116
123
  }
117
124
  const [, deviceId, channelId, suffix] = match;
118
125
  const key = `${deviceId}:${channelId}`;
126
+ observedIds.add(key);
119
127
  const entry = channelMap.get(key) ?? { deviceId, channelId };
120
128
  const value = message.toString();
121
129
  switch (suffix) {
@@ -126,7 +134,17 @@ class SuplaMqttClient {
126
134
  entry.channelFunction = value;
127
135
  break;
128
136
  case 'caption':
129
- entry.channelCaption = value;
137
+ if (!(0, node_buffer_1.isUtf8)(message)) {
138
+ if (!invalidCaptionChannels.has(key)) {
139
+ invalidCaptionChannels.add(key);
140
+ const warning = `Channel ${deviceId}/${channelId} supplied a malformed UTF-8 caption; ` +
141
+ 'retaining its previous cached caption.';
142
+ warnings.push(warning);
143
+ this.log.warn(warning);
144
+ }
145
+ break;
146
+ }
147
+ entry.channelCaption = (0, DisplayName_1.normalizeVendorCaption)(value);
130
148
  break;
131
149
  case 'hidden':
132
150
  entry.hidden = value;
@@ -135,46 +153,9 @@ class SuplaMqttClient {
135
153
  break;
136
154
  }
137
155
  channelMap.set(key, entry);
138
- if (quietTimer) {
139
- clearTimeout(quietTimer);
140
- }
141
- quietTimer = setTimeout(() => resolveDone?.(), quietWindowMs);
142
156
  };
143
- let cleanup;
144
- if (registerHandler) {
145
- cleanup = registerHandler(subscriptionTopic, (message, topic) => {
146
- messageHandler(topic, message);
147
- });
148
- }
149
- else {
150
- this.client.subscribe(subscriptionTopic, (err) => {
151
- if (err) {
152
- this.log.error(`MQTT subscribe failed for ${subscriptionTopic}: ${err.message}`);
153
- resolveDone?.();
154
- }
155
- });
156
- this.client.on('message', messageHandler);
157
- cleanup = () => {
158
- this.client.removeListener('message', messageHandler);
159
- this.client.unsubscribe(subscriptionTopic, (err) => {
160
- if (err) {
161
- this.log.error(`MQTT unsubscribe failed for ${subscriptionTopic}: ${err.message}`);
162
- }
163
- });
164
- };
165
- }
166
- try {
167
- await discoveryDone;
168
- }
169
- finally {
170
- clearTimeout(maxTimer);
171
- if (quietTimer) {
172
- clearTimeout(quietTimer);
173
- }
174
- if (cleanup) {
175
- cleanup();
176
- }
177
- }
157
+ const collection = await this.collectRetainedMessages(subscriptionTopic, messageHandler, maxWaitMs, quietWindowMs);
158
+ warnings.push(...collection.warnings);
178
159
  const result = [];
179
160
  let skippedHidden = 0;
180
161
  for (const entry of channelMap.values()) {
@@ -186,15 +167,22 @@ class SuplaMqttClient {
186
167
  skippedHidden += 1;
187
168
  continue;
188
169
  }
189
- const channelType = entry.channelType ?? 'UNKNOWN';
190
- const channelFunction = entry.channelFunction ?? 'UNKNOWN';
191
- const caption = entry.channelCaption ?? `Device ${entry.deviceId} Channel ${entry.channelId}`;
170
+ const channelType = entry.channelType?.trim();
171
+ const channelFunction = entry.channelFunction?.trim();
172
+ const suppliedCaption = (0, DisplayName_1.normalizeVendorCaption)(entry.channelCaption);
173
+ const caption = suppliedCaption || (0, DisplayName_1.generatedChannelCaption)(entry.deviceId, entry.channelId);
174
+ const captionAuthoritative = Boolean(suppliedCaption)
175
+ && !(0, DisplayName_1.isGeneratedChannelCaption)(suppliedCaption, entry.deviceId, entry.channelId);
192
176
  const topic = `supla/${this.context.username}/devices/${entry.deviceId}/channels/${entry.channelId}`;
193
- if (channelFunction === 'UNKNOWN' || channelType === 'UNKNOWN') {
194
- this.log.warn(`Channel ${entry.deviceId}/${entry.channelId} missing metadata (function=${channelFunction}, type=${channelType})`);
177
+ if (!channelFunction || !channelType) {
178
+ const warning = `Channel ${entry.deviceId}/${entry.channelId} missing required metadata ` +
179
+ `(function=${channelFunction ?? 'missing'}, type=${channelType ?? 'missing'}); deferring new accessory.`;
180
+ warnings.push(warning);
181
+ this.log.warn(warning);
182
+ continue;
195
183
  }
196
184
  this.log.debug(`Discovered channel ${caption} (${entry.deviceId}/${entry.channelId}) function=${channelFunction} type=${channelType}`);
197
- result.push(new SuplaChannelContext_1.SuplaChannelContext(topic, channelType, channelFunction, caption, entry.deviceId, entry.channelId));
185
+ result.push(new SuplaChannelContext_1.SuplaChannelContext(topic, channelType, channelFunction, caption, entry.deviceId, entry.channelId, undefined, captionAuthoritative, captionAuthoritative ? 'retained' : 'generated'));
198
186
  }
199
187
  if (channelMap.size === 0) {
200
188
  this.log.warn(`No channels discovered within ${maxWaitMs}ms. Check MQTT ACLs, username, or retained topics.`);
@@ -203,35 +191,44 @@ class SuplaMqttClient {
203
191
  this.log.info(`Skipped ${skippedHidden} hidden channel(s). Set includeHidden=true to include them.`);
204
192
  }
205
193
  this.log.info(`MQTT discovery complete. Channels discovered: ${result.length}`);
206
- return result;
194
+ return {
195
+ items: result,
196
+ observedIds,
197
+ // A short passive retained-message window cannot prove account inventory completeness.
198
+ authoritative: false,
199
+ complete: collection.complete,
200
+ warnings,
201
+ };
207
202
  }
208
- async discoverLegacyRollerShuttersAsync(registerHandler) {
203
+ async discoverLegacyRollerShuttersAsync() {
209
204
  const subscriptionTopic = 'supla/channels/status/rollershutter/#';
210
205
  this.log.info('Discovering legacy rollershutter channels via MQTT');
211
206
  this.log.debug(`Discovery subscribe topic: ${subscriptionTopic}`);
212
207
  const channelMap = new Map();
213
- let resolveDone;
214
- const discoveryDone = new Promise((resolve) => {
215
- resolveDone = resolve;
216
- });
217
- let quietTimer;
208
+ const observedIds = new Set();
209
+ const warnings = [];
218
210
  const maxWaitMs = 4000;
219
211
  const quietWindowMs = 1000;
220
- const maxTimer = setTimeout(() => resolveDone?.(), maxWaitMs);
221
212
  const messageHandler = (topic, message) => {
222
213
  const match = topic.match(/^supla\/channels\/status\/rollershutter\/(\d+)$/);
223
214
  if (!match) {
224
215
  return;
225
216
  }
226
217
  const channelId = match[1];
218
+ observedIds.add(`legacy:${channelId}`);
227
219
  if (!channelMap.has(channelId)) {
228
220
  channelMap.set(channelId, { channelId });
229
221
  }
230
222
  try {
231
223
  const payload = JSON.parse(message.toString());
232
224
  if (payload && typeof payload.id !== 'undefined') {
233
- const idValue = Number(payload.id);
234
- if (!Number.isNaN(idValue)) {
225
+ const rawId = payload.id;
226
+ const idValue = typeof rawId === 'number'
227
+ ? rawId
228
+ : typeof rawId === 'string' && /^\d+$/.test(rawId.trim())
229
+ ? Number(rawId.trim())
230
+ : Number.NaN;
231
+ if (Number.isSafeInteger(idValue) && idValue >= 0) {
235
232
  const normalizedId = idValue.toString();
236
233
  if (!channelMap.has(normalizedId)) {
237
234
  channelMap.set(normalizedId, { channelId: normalizedId });
@@ -242,62 +239,167 @@ class SuplaMqttClient {
242
239
  catch {
243
240
  // ignore non-JSON payloads
244
241
  }
245
- if (quietTimer) {
246
- clearTimeout(quietTimer);
247
- }
248
- quietTimer = setTimeout(() => resolveDone?.(), quietWindowMs);
249
242
  };
250
- let cleanup;
251
- if (registerHandler) {
252
- cleanup = registerHandler(subscriptionTopic, (message, topic) => {
253
- messageHandler(topic, message);
254
- });
243
+ const collection = await this.collectRetainedMessages(subscriptionTopic, messageHandler, maxWaitMs, quietWindowMs);
244
+ warnings.push(...collection.warnings);
245
+ const result = [];
246
+ for (const entry of channelMap.values()) {
247
+ const statusTopic = `supla/channels/status/rollershutter/${entry.channelId}`;
248
+ const caption = (0, DisplayName_1.generatedChannelCaption)('legacy', entry.channelId);
249
+ const channelContext = new SuplaChannelContext_1.SuplaChannelContext(statusTopic, 'RELAY', 'CONTROLLINGTHEROLLERSHUTTER', caption, 'legacy', entry.channelId, undefined, false, 'generated');
250
+ result.push(channelContext);
255
251
  }
256
- else {
257
- this.client.subscribe(subscriptionTopic, (err) => {
258
- if (err) {
259
- this.log.error(`MQTT subscribe failed for ${subscriptionTopic}: ${err.message}`);
260
- resolveDone?.();
261
- }
262
- });
263
- this.client.on('message', messageHandler);
264
- cleanup = () => {
265
- this.client.removeListener('message', messageHandler);
266
- this.client.unsubscribe(subscriptionTopic, (err) => {
267
- if (err) {
268
- this.log.error(`MQTT unsubscribe failed for ${subscriptionTopic}: ${err.message}`);
269
- }
270
- });
271
- };
252
+ if (channelMap.size === 0) {
253
+ this.log.warn(`No legacy rollershutter channels discovered within ${maxWaitMs}ms.`);
272
254
  }
273
- try {
274
- await discoveryDone;
255
+ this.log.info(`Legacy MQTT discovery complete. Channels discovered: ${result.length}`);
256
+ return {
257
+ items: result,
258
+ observedIds,
259
+ authoritative: false,
260
+ complete: collection.complete,
261
+ warnings,
262
+ };
263
+ }
264
+ async collectRetainedMessages(subscriptionTopic, messageHandler, maxWaitMs, quietWindowMs) {
265
+ const warnings = [];
266
+ const connected = await this.waitForConnection(15000);
267
+ if (!connected) {
268
+ const warning = `MQTT discovery did not start because the client was not connected for ${subscriptionTopic}.`;
269
+ this.log.warn(warning);
270
+ return { complete: false, warnings: [warning] };
275
271
  }
276
- finally {
277
- clearTimeout(maxTimer);
272
+ let resolveDone;
273
+ const discoveryDone = new Promise((resolve) => {
274
+ resolveDone = resolve;
275
+ });
276
+ let quietTimer;
277
+ let subscriptionGranted = false;
278
+ const onMessage = (topic, message, packet) => {
279
+ // Inventory metadata must come from the broker's retained snapshot. A
280
+ // live publication during this window is not proof that the topic is an
281
+ // authoritative or durable part of the account inventory.
282
+ if (packet?.retain !== true) {
283
+ return;
284
+ }
285
+ messageHandler(topic, message, packet);
286
+ if (!subscriptionGranted) {
287
+ return;
288
+ }
278
289
  if (quietTimer) {
279
290
  clearTimeout(quietTimer);
280
291
  }
281
- if (cleanup) {
282
- cleanup();
292
+ quietTimer = setTimeout(() => resolveDone?.(true), quietWindowMs);
293
+ };
294
+ let resolveGrant;
295
+ const onDisconnect = () => {
296
+ resolveDone?.(false);
297
+ resolveGrant?.(false);
298
+ };
299
+ this.client.on('message', onMessage);
300
+ this.client.once('close', onDisconnect);
301
+ this.client.once('offline', onDisconnect);
302
+ this.client.once('end', onDisconnect);
303
+ const granted = await new Promise((resolve) => {
304
+ let settled = false;
305
+ const finish = (accepted) => {
306
+ if (settled) {
307
+ return;
308
+ }
309
+ settled = true;
310
+ clearTimeout(grantTimer);
311
+ resolve(accepted);
312
+ };
313
+ resolveGrant = finish;
314
+ const grantTimer = setTimeout(() => {
315
+ const warning = `MQTT subscription grant timed out for ${subscriptionTopic}.`;
316
+ warnings.push(warning);
317
+ this.log.error(warning);
318
+ finish(false);
319
+ }, 15000);
320
+ this.client.subscribe(subscriptionTopic, { qos: 0 }, (error, grants) => {
321
+ if (error) {
322
+ const warning = `MQTT subscribe failed for ${subscriptionTopic}: ${error.message}`;
323
+ warnings.push(warning);
324
+ this.log.error(warning);
325
+ finish(false);
326
+ return;
327
+ }
328
+ const expectedGrant = Array.isArray(grants)
329
+ ? grants.find((entry) => entry.topic === subscriptionTopic)
330
+ : undefined;
331
+ const accepted = expectedGrant !== undefined
332
+ && (expectedGrant.qos === 0 || expectedGrant.qos === 1 || expectedGrant.qos === 2);
333
+ if (!accepted) {
334
+ const warning = `MQTT subscription for ${subscriptionTopic} returned no valid grant.`;
335
+ warnings.push(warning);
336
+ this.log.error(warning);
337
+ }
338
+ finish(accepted);
339
+ });
340
+ });
341
+ resolveGrant = undefined;
342
+ if (!granted) {
343
+ this.client.removeListener('message', onMessage);
344
+ this.client.removeListener('close', onDisconnect);
345
+ this.client.removeListener('offline', onDisconnect);
346
+ this.client.removeListener('end', onDisconnect);
347
+ if (this.client.connected) {
348
+ this.client.unsubscribe(subscriptionTopic, () => undefined);
283
349
  }
350
+ return { complete: false, warnings };
284
351
  }
285
- const result = [];
286
- for (const entry of channelMap.values()) {
287
- const statusTopic = `supla/channels/status/rollershutter/${entry.channelId}`;
288
- const caption = `RollerShutter ${entry.channelId}`;
289
- const channelContext = new SuplaChannelContext_1.SuplaChannelContext(statusTopic, 'RELAY', 'CONTROLLINGTHEROLLERSHUTTER', caption, 'legacy', entry.channelId);
290
- result.push(channelContext);
352
+ subscriptionGranted = true;
353
+ const maxTimer = setTimeout(() => resolveDone?.(true), maxWaitMs);
354
+ const complete = await discoveryDone;
355
+ if (!complete) {
356
+ warnings.push(`MQTT disconnected while collecting retained messages for ${subscriptionTopic}.`);
291
357
  }
292
- if (channelMap.size === 0) {
293
- this.log.warn(`No legacy rollershutter channels discovered within ${maxWaitMs}ms.`);
358
+ clearTimeout(maxTimer);
359
+ if (quietTimer) {
360
+ clearTimeout(quietTimer);
294
361
  }
295
- this.log.info(`Legacy MQTT discovery complete. Channels discovered: ${result.length}`);
296
- return result;
362
+ this.client.removeListener('message', onMessage);
363
+ this.client.removeListener('close', onDisconnect);
364
+ this.client.removeListener('offline', onDisconnect);
365
+ this.client.removeListener('end', onDisconnect);
366
+ if (this.client.connected) {
367
+ this.client.unsubscribe(subscriptionTopic, (error) => {
368
+ if (error) {
369
+ this.log.error(`MQTT unsubscribe failed for ${subscriptionTopic}: ${error.message}`);
370
+ }
371
+ });
372
+ }
373
+ return { complete, warnings };
374
+ }
375
+ async waitForConnection(timeoutMs) {
376
+ if (this.client.connected) {
377
+ return true;
378
+ }
379
+ return new Promise((resolve) => {
380
+ let settled = false;
381
+ const finish = (connected) => {
382
+ if (settled) {
383
+ return;
384
+ }
385
+ settled = true;
386
+ clearTimeout(timer);
387
+ this.client.removeListener('connect', onConnect);
388
+ this.client.removeListener('end', onEnd);
389
+ resolve(connected);
390
+ };
391
+ const onConnect = () => finish(true);
392
+ const onEnd = () => finish(false);
393
+ const timer = setTimeout(() => finish(false), timeoutMs);
394
+ this.client.once('connect', onConnect);
395
+ this.client.once('end', onEnd);
396
+ });
297
397
  }
298
398
  resolveProtocol() {
299
399
  const rawProtocol = (this.context.protocol ?? '').toString().toLowerCase();
300
- const tlsEnabled = this.resolveBoolean(this.context.tls, false);
400
+ // Match config.schema.json: omitted TLS means secure MQTT. Plaintext now
401
+ // requires an explicit tls=false rather than silently overriding the UI default.
402
+ const tlsEnabled = this.resolveBoolean(this.context.tls, true);
301
403
  if (!rawProtocol) {
302
404
  return tlsEnabled ? 'mqtts' : 'mqtt';
303
405
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SuplaMqttClient.js","sourceRoot":"","sources":["../../src/Heplers/SuplaMqttClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SuplaMqttClient.js","sourceRoot":"","sources":["../../src/Heplers/SuplaMqttClient.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,17 @@
1
1
  import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig, Service, Characteristic } from 'homebridge';
2
2
  import type { IPublishPacket } from 'mqtt';
3
- import { SuplaMqttClient } from './Heplers/SuplaMqttClient';
3
+ import { DiscoverySnapshot, SuplaMqttClient } from './Heplers/SuplaMqttClient';
4
4
  import { SuplaChannelContext } from './Heplers/SuplaChannelContext';
5
5
  import type { FrontGateConfig } from './Accesories/FrontGateFsm';
6
6
  export type MqttMessageHandler = (message: Buffer, topic: string, packet: IPublishPacket) => void;
7
7
  export interface MqttHandlerOptions {
8
8
  noLocal?: boolean;
9
9
  }
10
+ export type MqttPublishFailureKind = 'definite_failure' | 'completion_unknown';
11
+ export interface MqttPublishHapError extends Error {
12
+ mqttPublishFailureKind: MqttPublishFailureKind;
13
+ cause?: unknown;
14
+ }
10
15
  /**
11
16
  * HomebridgePlatform
12
17
  * This class is the main constructor for your plugin, this is where you should
@@ -52,14 +57,26 @@ export declare class SuplaPlatform implements DynamicPlatformPlugin {
52
57
  private readonly mqttTransportHandlers;
53
58
  private readonly channelRegistry;
54
59
  private readonly ownerCleanups;
60
+ private readonly shutdownDrains;
61
+ private readonly gateLockFailSafeTasks;
55
62
  private readonly mqttDesiredSubscriptions;
56
63
  private readonly mqttSubscriptions;
57
64
  private readonly mqttPendingSubscriptions;
65
+ private readonly mqttPendingSubscriptionOperations;
58
66
  private readonly mqttRetryTimers;
59
67
  private readonly mqttRetryState;
60
68
  private mqttRouterAttached;
61
69
  private mqttTransportConnected;
70
+ private mqttTransportEpoch;
71
+ private nextMqttSubscriptionOperationId;
72
+ private shutdownPromise?;
73
+ private shuttingDown;
74
+ private readonly accountNamespace;
75
+ private readonly publishTimeoutMs;
62
76
  constructor(log: Logger, config: PlatformConfig, api: API);
77
+ private start;
78
+ private shutdownGracefully;
79
+ private performGracefulShutdown;
63
80
  /**
64
81
  * This function is invoked when homebridge restores cached accessories from disk at startup.
65
82
  * It should be used to setup event handlers for characteristics and update respective values.
@@ -70,9 +87,19 @@ export declare class SuplaPlatform implements DynamicPlatformPlugin {
70
87
  * Accessories must only be registered once, previously created accessories
71
88
  * must not be registered again to prevent "duplicate UUID" errors.
72
89
  */
73
- discoverDevices(channelsOverride?: Array<SuplaChannelContext>): void;
90
+ discoverDevices(channelsOverride?: Array<SuplaChannelContext>, snapshot?: DiscoverySnapshot<SuplaChannelContext>): void;
74
91
  private loadChannelsFromConfig;
92
+ private loadPersistedChannels;
93
+ private isSafeLegacyCacheMigration;
75
94
  private persistChannels;
95
+ private getChannelCachePath;
96
+ private getLegacyChannelCachePath;
97
+ private computeAccountNamespace;
98
+ private stampAccessoryIdentity;
99
+ private isAccessoryAccountCompatible;
100
+ private isChannelAccountCompatible;
101
+ private isUnscopedLegacyChannel;
102
+ private shouldMigrateUnscopedLegacyAccessories;
76
103
  private normalizeChannelContext;
77
104
  private getChannelUuid;
78
105
  private getChannelSignature;
@@ -80,8 +107,23 @@ export declare class SuplaPlatform implements DynamicPlatformPlugin {
80
107
  private addChannelToRegistry;
81
108
  private replaceChannelRegistry;
82
109
  private deduplicateChannels;
110
+ private mergeChannels;
111
+ private isKnownMetadata;
83
112
  getKnownChannels(): SuplaChannelContext[];
84
- private resetAccessoryServices;
113
+ private isSupportedChannel;
114
+ private isExplicitlyUnsupportedChannel;
115
+ private getExpectedServiceUuids;
116
+ private isExplicitNoFunction;
117
+ private cleanupObsoleteServices;
118
+ private prepareAccessoryForReconfiguration;
119
+ private removeObsoleteOptionalCharacteristics;
120
+ private revokeAccessoryHandlers;
121
+ private resolveHomeKitDisplayName;
122
+ private captureAccessoryNames;
123
+ private restoreAccessoryNames;
124
+ private restoreAccessoryContext;
125
+ private areChannelContextsEqual;
126
+ private updateAccessoryNames;
85
127
  private setupAccessory;
86
128
  private isLeakSensorChannel;
87
129
  getCoveringControlMode(): 'set' | 'execute_action' | 'hybrid';
@@ -98,12 +140,17 @@ export declare class SuplaPlatform implements DynamicPlatformPlugin {
98
140
  getGateLockPulseSeconds(): number;
99
141
  getGateLockSetOnPayload(): string;
100
142
  getGateLockSetOffPayload(): string;
143
+ claimGateLockFailSafe(accessoryUuid: string): void;
144
+ transferGateLockFailSafe(accessory: PlatformAccessory, stateTopic: string, commandTopic: string, offPayload: string): void;
145
+ private attemptGateLockFailSafe;
146
+ private scheduleGateLockFailSafeRetry;
101
147
  getFrontGateConfig(): FrontGateConfig;
102
148
  shouldFallbackFrontGateSensorToControlChannel(): boolean;
103
149
  isMqttNoLocalAvailable(): boolean;
104
150
  getFrontGatePulseAction(): string;
105
151
  private normalizeCoveringControlMode;
106
152
  private normalizeGateLockControlMode;
153
+ private normalizeDurationSeconds;
107
154
  private normalizeFrontGateFullTravelMs;
108
155
  private normalizeFrontGateReversePauseMs;
109
156
  private normalizeFrontGateMinimumPulseGapMs;
@@ -116,15 +163,23 @@ export declare class SuplaPlatform implements DynamicPlatformPlugin {
116
163
  registerMqttHandler(topic: string, handler: MqttMessageHandler, ownerId: string, options?: MqttHandlerOptions): () => void;
117
164
  registerMqttTransportHandler(handler: (connected: boolean) => void, ownerId: string): () => void;
118
165
  registerOwnerCleanup(ownerId: string, cleanup: () => void): () => void;
166
+ registerShutdownDrain(ownerId: string, drain: () => Promise<void>): () => void;
119
167
  private unregisterMqttHandlers;
120
168
  private unregisterAllMqttHandlers;
121
169
  publishCommand(topic: string, payload: string | Buffer, callback?: (error?: Error) => void): void;
170
+ publishCommandAsync(topic: string, payload: string | Buffer): Promise<void>;
122
171
  publishGateAction(topic: string, payload: string | Buffer, callback?: (error?: Error) => void): void;
172
+ publishActionAsync(topic: string, payload: string | Buffer): Promise<void>;
173
+ publishGateActionAsync(topic: string, payload: string | Buffer): Promise<void>;
174
+ isPublishCompletionUnknown(error: unknown): error is MqttPublishHapError;
175
+ private publishMqttAsync;
123
176
  private publishMqtt;
124
177
  parseBoolean(value: unknown): boolean;
125
178
  parseBooleanStrict(value: unknown): boolean | undefined;
179
+ parseFiniteNumberStrict(value: unknown): number | undefined;
126
180
  private runOwnerCleanup;
127
181
  private updateMqttTransportState;
182
+ private advanceMqttTransportEpoch;
128
183
  private clearActiveSubscriptions;
129
184
  private clearAllSubscriptionRetries;
130
185
  private clearSubscriptionRetry;