Stop pinging device when removed. #2419

This commit is contained in:
Koen Kanters committed 2019-11-27 18:14:39 +01:00
1 parent 2fcddb5ad5
commit 2a81a54609
2 files changed
+20 -2

No files matched your search

+6 -1
View File
@@ -69,9 +69,14 @@ class DeviceAvailability extends BaseExtension {
async handleInterval(device) {
// When a device is already unavailable, log the ping failed on 'debug' instead of 'error'.
const entity = this.zigbee.resolveEntity(device.ieeeAddr);
if (!entity) {
logger.debug(`Stop pinging '${device.ieeeAddr}', device is not known anymore`);
return;
}
const ieeeAddr = device.ieeeAddr;
const level = this.state.hasOwnProperty(ieeeAddr) && !this.state[ieeeAddr] ? 'debug' : 'error';
const entity = this.zigbee.resolveEntity(device.ieeeAddr);
try {
await device.ping();
this.publishAvailability(device, true);
+14 -1
View File
@@ -258,7 +258,7 @@ describe('Device availability', () => {
jest.advanceTimersByTime(11 * 1000);
await flushPromises();
expect(device.ping).toHaveBeenCalledTimes(0);
});
});
it('Should not read when device has no modelID and reconnects', async () => {
const device = zigbeeHerdsman.devices.nomodel;
@@ -277,4 +277,17 @@ describe('Device availability', () => {
await flushPromises();
expect(endpoint.read).toHaveBeenCalledTimes(0);
});
it('Should stop pinging device when removed', async () => {
const device = zigbeeHerdsman.devices.bulb_color;
device.ping.mockClear();
const endpoint = device.getEndpoint(1);
jest.advanceTimersByTime(11 * 1000);
await flushPromises();
expect(device.ping).toHaveBeenCalledTimes(1);
settings.removeDevice(device.ieeeAddr);
jest.advanceTimersByTime(11 * 1000);
await flushPromises();
expect(device.ping).toHaveBeenCalledTimes(1);
});
});