Skip to content

Conversation

@sidequestlegend
Copy link

I was attempting to use miflora in a custom node in node-red. When it re-deploys a node it will re-run all the code and I was having trouble tearing down the miflora connection and it would break on each deploy until I restarted node-red. I discovered this was due to the main miflora devices object was not reset between calls to the discover method so the same device was never discovered again and it seemed to break things. This commit hopefully solves that. Here is some code demonstrating the problem:

const miflora = require('miflora');
const opts = { 
    duration: 60000, 
    ignoreUnknown: true, 
    addresses: ['c4:7c:8d:66:23:b5']
};
(async () => {
        console.log('attempt 1')
        let device = (await miflora.discover(opts))[0];
        await device.querySensorValues();
        await device.disconnect();
        console.log('done attempt 1');

        miflora._devices = {}; // Without this line the below would fail to find the device. 

        console.log('attempt 2')
        device = (await miflora.discover(opts))[0];
        await device.querySensorValues();
        await device.disconnect();
        console.log('done attempt 2');

})();

This PR adds an option clearDevices to the options passed to the discover method to that the above would become:

const miflora = require('miflora');
const opts = { 
    duration: 60000, 
    ignoreUnknown: true, 
    clearDevices: true,
    addresses: ['c4:7c:8d:66:23:b5']
};
(async () => {
        console.log('attempt 1')
        let device = (await miflora.discover(opts))[0];
        await device.querySensorValues();
        await device.disconnect();
        console.log('done attempt 1');

        console.log('attempt 2')
        device = (await miflora.discover(opts))[0];
        await device.querySensorValues();
        await device.disconnect();
        console.log('done attempt 2');

})();

Thank you!

… so the whole scan process can start again from the begining.

I was attempting to use miflora in a custom node in node-red. When it re-deploys a node it will re-run all the code and I was having trouble tearing down the miflora connection and it would break on each deploy until I restarted node-red. I discovered this was due to the main miflora devices object was not reset between calls to the `discover` method so the same device was never discovered again and it seemed to break things. This commit hopefully solves that. Here is some code demonstrating the problem: 

```
const miflora = require('miflora');
const opts = { 
    duration: 60000, 
    ignoreUnknown: true, 
    addresses: ['c4:7c:8d:66:23:b5']
};
(async () => {
        console.log('attempt 1')
        let device = (await miflora.discover(opts))[0];
        await device.querySensorValues();
        await device.disconnect();
        console.log('done attempt 1');

        miflora._devices = {}; // Without this line the below would fail to find the device. 

        console.log('attempt 2')
        device = (await miflora.discover(opts))[0];
        await device.querySensorValues();
        await device.disconnect();
        console.log('done attempt 2');

})();

```

This PR adds an option `clearDevices` to the options passed to the discover method to that the above would become: 

```
const miflora = require('miflora');
const opts = { 
    duration: 60000, 
    ignoreUnknown: true, 
    clearDevices: true,
    addresses: ['c4:7c:8d:66:23:b5']
};
(async () => {
        console.log('attempt 1')
        let device = (await miflora.discover(opts))[0];
        await device.querySensorValues();
        await device.disconnect();
        console.log('done attempt 1');

        console.log('attempt 2')
        device = (await miflora.discover(opts))[0];
        await device.querySensorValues();
        await device.disconnect();
        console.log('done attempt 2');

})();

```

Thank you!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant