@marcel2215/homebridge-supla-plugin 2.1.29 → 2.1.31
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/README.md +25 -1
- package/config.schema.json +26 -5
- package/dist/Accesories/ActionTriggerAccessory.d.ts +0 -1
- package/dist/Accesories/ActionTriggerAccessory.d.ts.map +1 -1
- package/dist/Accesories/ActionTriggerAccessory.js +15 -9
- package/dist/Accesories/ActionTriggerAccessory.js.map +1 -1
- package/dist/Accesories/AirQualityAccessory.d.ts +3 -1
- package/dist/Accesories/AirQualityAccessory.d.ts.map +1 -1
- package/dist/Accesories/AirQualityAccessory.js +47 -5
- package/dist/Accesories/AirQualityAccessory.js.map +1 -1
- package/dist/Accesories/ContactSensorAccessory.d.ts +3 -1
- package/dist/Accesories/ContactSensorAccessory.d.ts.map +1 -1
- package/dist/Accesories/ContactSensorAccessory.js +32 -4
- package/dist/Accesories/ContactSensorAccessory.js.map +1 -1
- package/dist/Accesories/DimmerAccessory.d.ts +5 -3
- package/dist/Accesories/DimmerAccessory.d.ts.map +1 -1
- package/dist/Accesories/DimmerAccessory.js +50 -14
- package/dist/Accesories/DimmerAccessory.js.map +1 -1
- package/dist/Accesories/DimmerRgbLightAccessory.d.ts +11 -3
- package/dist/Accesories/DimmerRgbLightAccessory.d.ts.map +1 -1
- package/dist/Accesories/DimmerRgbLightAccessory.js +148 -26
- package/dist/Accesories/DimmerRgbLightAccessory.js.map +1 -1
- package/dist/Accesories/DoorAccessory.d.ts +14 -1
- package/dist/Accesories/DoorAccessory.d.ts.map +1 -1
- package/dist/Accesories/DoorAccessory.js +146 -20
- package/dist/Accesories/DoorAccessory.js.map +1 -1
- package/dist/Accesories/ElectricityMeterAccessory.d.ts +13 -1
- package/dist/Accesories/ElectricityMeterAccessory.d.ts.map +1 -1
- package/dist/Accesories/ElectricityMeterAccessory.js +127 -12
- package/dist/Accesories/ElectricityMeterAccessory.js.map +1 -1
- package/dist/Accesories/FacadeBlindAccessory.d.ts +6 -0
- package/dist/Accesories/FacadeBlindAccessory.d.ts.map +1 -1
- package/dist/Accesories/FacadeBlindAccessory.js +205 -64
- package/dist/Accesories/FacadeBlindAccessory.js.map +1 -1
- package/dist/Accesories/FrontGateFsm.d.ts +8 -2
- package/dist/Accesories/FrontGateFsm.d.ts.map +1 -1
- package/dist/Accesories/FrontGateFsm.js +79 -19
- package/dist/Accesories/FrontGateFsm.js.map +1 -1
- package/dist/Accesories/GarageDoorOpenerAccesory.d.ts +12 -3
- package/dist/Accesories/GarageDoorOpenerAccesory.d.ts.map +1 -1
- package/dist/Accesories/GarageDoorOpenerAccesory.js +168 -21
- package/dist/Accesories/GarageDoorOpenerAccesory.js.map +1 -1
- package/dist/Accesories/GateAccessory.d.ts +6 -0
- package/dist/Accesories/GateAccessory.d.ts.map +1 -1
- package/dist/Accesories/GateAccessory.js +140 -18
- package/dist/Accesories/GateAccessory.js.map +1 -1
- package/dist/Accesories/GateLockAccessory.d.ts +17 -1
- package/dist/Accesories/GateLockAccessory.d.ts.map +1 -1
- package/dist/Accesories/GateLockAccessory.js +375 -50
- package/dist/Accesories/GateLockAccessory.js.map +1 -1
- package/dist/Accesories/LeakSensorAccessory.d.ts +3 -1
- package/dist/Accesories/LeakSensorAccessory.d.ts.map +1 -1
- package/dist/Accesories/LeakSensorAccessory.js +32 -4
- package/dist/Accesories/LeakSensorAccessory.js.map +1 -1
- package/dist/Accesories/LightBulbAccesory.d.ts +4 -3
- package/dist/Accesories/LightBulbAccesory.d.ts.map +1 -1
- package/dist/Accesories/LightBulbAccesory.js +40 -12
- package/dist/Accesories/LightBulbAccesory.js.map +1 -1
- package/dist/Accesories/PressureAccessory.d.ts +3 -1
- package/dist/Accesories/PressureAccessory.d.ts.map +1 -1
- package/dist/Accesories/PressureAccessory.js +28 -5
- package/dist/Accesories/PressureAccessory.js.map +1 -1
- package/dist/Accesories/RGBLightBulbAccesory.d.ts +10 -1
- package/dist/Accesories/RGBLightBulbAccesory.d.ts.map +1 -1
- package/dist/Accesories/RGBLightBulbAccesory.js +136 -17
- package/dist/Accesories/RGBLightBulbAccesory.js.map +1 -1
- package/dist/Accesories/RollerShutterAccessory.d.ts +6 -0
- package/dist/Accesories/RollerShutterAccessory.d.ts.map +1 -1
- package/dist/Accesories/RollerShutterAccessory.js +219 -74
- package/dist/Accesories/RollerShutterAccessory.js.map +1 -1
- package/dist/Accesories/SwitchAccessory.d.ts +4 -3
- package/dist/Accesories/SwitchAccessory.d.ts.map +1 -1
- package/dist/Accesories/SwitchAccessory.js +40 -12
- package/dist/Accesories/SwitchAccessory.js.map +1 -1
- package/dist/Accesories/TemperatureAccessory.d.ts +3 -1
- package/dist/Accesories/TemperatureAccessory.d.ts.map +1 -1
- package/dist/Accesories/TemperatureAccessory.js +28 -5
- package/dist/Accesories/TemperatureAccessory.js.map +1 -1
- package/dist/Accesories/TemperatureHumidityAccessory.d.ts +5 -1
- package/dist/Accesories/TemperatureHumidityAccessory.d.ts.map +1 -1
- package/dist/Accesories/TemperatureHumidityAccessory.js +40 -9
- package/dist/Accesories/TemperatureHumidityAccessory.js.map +1 -1
- package/dist/Accesories/ThermostatAccessory.d.ts +18 -1
- package/dist/Accesories/ThermostatAccessory.d.ts.map +1 -1
- package/dist/Accesories/ThermostatAccessory.js +193 -34
- package/dist/Accesories/ThermostatAccessory.js.map +1 -1
- package/dist/Accesories/ValveAccessory.d.ts +5 -2
- package/dist/Accesories/ValveAccessory.d.ts.map +1 -1
- package/dist/Accesories/ValveAccessory.js +47 -8
- package/dist/Accesories/ValveAccessory.js.map +1 -1
- package/dist/Accesories/WicketAccesory.d.ts +18 -3
- package/dist/Accesories/WicketAccesory.d.ts.map +1 -1
- package/dist/Accesories/WicketAccesory.js +154 -14
- package/dist/Accesories/WicketAccesory.js.map +1 -1
- package/dist/Heplers/ColorConverters.d.ts +2 -2
- package/dist/Heplers/ColorConverters.d.ts.map +1 -1
- package/dist/Heplers/ColorConverters.js +7 -3
- package/dist/Heplers/ColorConverters.js.map +1 -1
- package/dist/Heplers/DisplayName.d.ts +15 -0
- package/dist/Heplers/DisplayName.d.ts.map +1 -0
- package/dist/Heplers/DisplayName.js +174 -0
- package/dist/Heplers/DisplayName.js.map +1 -0
- package/dist/Heplers/SuplaChannelContext.d.ts +3 -1
- package/dist/Heplers/SuplaChannelContext.d.ts.map +1 -1
- package/dist/Heplers/SuplaChannelContext.js +3 -1
- package/dist/Heplers/SuplaChannelContext.js.map +1 -1
- package/dist/Heplers/SuplaMqttClient.d.ts +12 -4
- package/dist/Heplers/SuplaMqttClient.d.ts.map +1 -1
- package/dist/Heplers/SuplaMqttClient.js +214 -112
- package/dist/Heplers/SuplaMqttClient.js.map +1 -1
- package/dist/platform.d.ts +59 -3
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +1119 -116
- package/dist/platform.js.map +1 -1
- package/package.json +7 -3
- 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(
|
|
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(
|
|
90
|
+
return this.discoverLegacyRollerShuttersAsync();
|
|
86
91
|
}
|
|
87
92
|
if (topicScheme === 'cloud') {
|
|
88
|
-
return this.discoverCloudChannelsAsync(
|
|
93
|
+
return this.discoverCloudChannelsAsync();
|
|
89
94
|
}
|
|
90
|
-
const
|
|
91
|
-
if (
|
|
92
|
-
return
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
105
|
-
const
|
|
106
|
-
|
|
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
|
-
|
|
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
|
-
|
|
144
|
-
|
|
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
|
|
190
|
-
const channelFunction = entry.channelFunction
|
|
191
|
-
const
|
|
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
|
|
194
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
214
|
-
const
|
|
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
|
|
234
|
-
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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
|
-
|
|
257
|
-
this.
|
|
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
|
-
|
|
274
|
-
|
|
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
|
-
|
|
277
|
-
|
|
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
|
-
|
|
282
|
-
|
|
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
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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
|
-
|
|
293
|
-
|
|
358
|
+
clearTimeout(maxTimer);
|
|
359
|
+
if (quietTimer) {
|
|
360
|
+
clearTimeout(quietTimer);
|
|
294
361
|
}
|
|
295
|
-
this.
|
|
296
|
-
|
|
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
|
-
|
|
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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"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -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,24 @@ 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
|
|
113
|
+
private isSupportedChannel;
|
|
114
|
+
private isExplicitlyUnsupportedChannel;
|
|
115
|
+
private getExpectedServiceUuids;
|
|
116
|
+
private getLegacyNoFunctionServiceUuids;
|
|
117
|
+
private isExplicitNoFunction;
|
|
118
|
+
private cleanupObsoleteServices;
|
|
119
|
+
private prepareAccessoryForReconfiguration;
|
|
120
|
+
private removeObsoleteOptionalCharacteristics;
|
|
121
|
+
private revokeAccessoryHandlers;
|
|
122
|
+
private resolveHomeKitDisplayName;
|
|
123
|
+
private captureAccessoryNames;
|
|
124
|
+
private restoreAccessoryNames;
|
|
125
|
+
private restoreAccessoryContext;
|
|
126
|
+
private areChannelContextsEqual;
|
|
127
|
+
private updateAccessoryNames;
|
|
85
128
|
private setupAccessory;
|
|
86
129
|
private isLeakSensorChannel;
|
|
87
130
|
getCoveringControlMode(): 'set' | 'execute_action' | 'hybrid';
|
|
@@ -98,12 +141,17 @@ export declare class SuplaPlatform implements DynamicPlatformPlugin {
|
|
|
98
141
|
getGateLockPulseSeconds(): number;
|
|
99
142
|
getGateLockSetOnPayload(): string;
|
|
100
143
|
getGateLockSetOffPayload(): string;
|
|
144
|
+
claimGateLockFailSafe(accessoryUuid: string): void;
|
|
145
|
+
transferGateLockFailSafe(accessory: PlatformAccessory, stateTopic: string, commandTopic: string, offPayload: string): void;
|
|
146
|
+
private attemptGateLockFailSafe;
|
|
147
|
+
private scheduleGateLockFailSafeRetry;
|
|
101
148
|
getFrontGateConfig(): FrontGateConfig;
|
|
102
149
|
shouldFallbackFrontGateSensorToControlChannel(): boolean;
|
|
103
150
|
isMqttNoLocalAvailable(): boolean;
|
|
104
151
|
getFrontGatePulseAction(): string;
|
|
105
152
|
private normalizeCoveringControlMode;
|
|
106
153
|
private normalizeGateLockControlMode;
|
|
154
|
+
private normalizeDurationSeconds;
|
|
107
155
|
private normalizeFrontGateFullTravelMs;
|
|
108
156
|
private normalizeFrontGateReversePauseMs;
|
|
109
157
|
private normalizeFrontGateMinimumPulseGapMs;
|
|
@@ -116,15 +164,23 @@ export declare class SuplaPlatform implements DynamicPlatformPlugin {
|
|
|
116
164
|
registerMqttHandler(topic: string, handler: MqttMessageHandler, ownerId: string, options?: MqttHandlerOptions): () => void;
|
|
117
165
|
registerMqttTransportHandler(handler: (connected: boolean) => void, ownerId: string): () => void;
|
|
118
166
|
registerOwnerCleanup(ownerId: string, cleanup: () => void): () => void;
|
|
167
|
+
registerShutdownDrain(ownerId: string, drain: () => Promise<void>): () => void;
|
|
119
168
|
private unregisterMqttHandlers;
|
|
120
169
|
private unregisterAllMqttHandlers;
|
|
121
170
|
publishCommand(topic: string, payload: string | Buffer, callback?: (error?: Error) => void): void;
|
|
171
|
+
publishCommandAsync(topic: string, payload: string | Buffer): Promise<void>;
|
|
122
172
|
publishGateAction(topic: string, payload: string | Buffer, callback?: (error?: Error) => void): void;
|
|
173
|
+
publishActionAsync(topic: string, payload: string | Buffer): Promise<void>;
|
|
174
|
+
publishGateActionAsync(topic: string, payload: string | Buffer): Promise<void>;
|
|
175
|
+
isPublishCompletionUnknown(error: unknown): error is MqttPublishHapError;
|
|
176
|
+
private publishMqttAsync;
|
|
123
177
|
private publishMqtt;
|
|
124
178
|
parseBoolean(value: unknown): boolean;
|
|
125
179
|
parseBooleanStrict(value: unknown): boolean | undefined;
|
|
180
|
+
parseFiniteNumberStrict(value: unknown): number | undefined;
|
|
126
181
|
private runOwnerCleanup;
|
|
127
182
|
private updateMqttTransportState;
|
|
183
|
+
private advanceMqttTransportEpoch;
|
|
128
184
|
private clearActiveSubscriptions;
|
|
129
185
|
private clearAllSubscriptionRetries;
|
|
130
186
|
private clearSubscriptionRetry;
|