homebridge-melcloud-control 4.0.0-beta.8 → 4.0.0-beta.9

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/melcloud.js +23 -11
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "4.0.0-beta.8",
4
+ "version": "4.0.0-beta.9",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
package/src/melcloud.js CHANGED
@@ -262,22 +262,34 @@ class MelCloud extends EventEmitter {
262
262
  throw new Error('❌ Could not find login button on the page.');
263
263
  }
264
264
 
265
- // Czekanie cookies C1 i C2 będą ustawione (max 15s)
266
- this.emit('warn', 'Waiting for MELCloud Home cookies (C1 & C2)...');
265
+ // Opcjonalnie obsługa "Stay signed in?"
266
+ const staySignedInSelector = 'input[name="rememberDevice"], button[type="submit"]';
267
+ if (await page.$(staySignedInSelector)) {
268
+ console.log('Handling "Stay signed in?" screen...');
269
+ await Promise.all([
270
+ page.click(staySignedInSelector),
271
+ page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 20000 })
272
+ ]);
273
+ }
274
+
275
+ // Monitorowanie requestów i oczekiwanie na cookies C1 i C2
267
276
  let c1 = null, c2 = null;
277
+ page.on('response', async response => {
278
+ const url = response.url();
279
+ if (url.includes('GetDevices') || url.includes('Dashboard')) {
280
+ const cookies = await page.cookies();
281
+ c1 = cookies.find(c => c.name === '__Secure-monitorandcontrolC1')?.value || c1;
282
+ c2 = cookies.find(c => c.name === '__Secure-monitorandcontrolC2')?.value || c2;
283
+ }
284
+ });
285
+
286
+ // Retry loop max 15s
268
287
  const start = Date.now();
269
288
  while ((!c1 || !c2) && Date.now() - start < 15000) {
270
- const cookies = await page.cookies();
271
- c1 = cookies.find(c => c.name === '__Secure-monitorandcontrolC1')?.value || null;
272
- c2 = cookies.find(c => c.name === '__Secure-monitorandcontrolC2')?.value || null;
273
- if (!c1 || !c2) {
274
- await new Promise(resolve => setTimeout(resolve, 500)); // retry co 0.5s
275
- }
289
+ await new Promise(resolve => setTimeout(resolve, 500));
276
290
  }
277
291
 
278
- if (!c1 || !c2) {
279
- throw new Error('❌ Cookies C1/C2 not found after login');
280
- }
292
+ if (!c1 || !c2) throw new Error('Cookies C1/C2 not found after login');
281
293
 
282
294
  const data = { C1: c1, C2: c2, date: new Date().toISOString() };
283
295
  await this.functions.saveData(this.cookiesFile, data);