diff --git a/index.js b/index.js index d97d5e5..9428385 100644 --- a/index.js +++ b/index.js @@ -97,10 +97,26 @@ module.exports = function (app) { try { await bms.open(); - await bms.getStatus(); // necessario per cell/temp + + let lastErr = null; + for (let i=0; i<3; i++) { + try { + await bms.getStatus(); + lastErr = null; + break; + } catch (error) { + lastErr = error; + await new Promise(r => setTimeout(r, 500)); + } + if (lastErr) throw lastErr; + } app.setPluginStatus(`Connesso a ${opts.device}`); } catch (e) { app.setPluginError(`init failed: ${e.message}`); + if (bms) { + await bms.close().catch(()=>{}); + bms = null; + } return; } diff --git a/src/bmscore.js b/src/bmscore.js index 61bdcee..9a5faa0 100644 --- a/src/bmscore.js +++ b/src/bmscore.js @@ -29,9 +29,13 @@ class BMS { dataBits: 8, parity: 'none', stopBits: 1, + lock: true, autoOpen: false }); - this.port.open(err => err ? reject(err) : this.port.flush(() => resolve())); + this.port.open(err => { + if (err) return reject(err); + setTimeout(() => this.port.flush(() => resolve()), 300); + }); }); }