Always ping xiaomi devices through ‘basic’ mechanism. #1248

This commit is contained in:
Koen Kanters
2019-03-24 14:38:08 +01:00
parent 69d04d0648
commit 40596bab6a
3 changed files with 11 additions and 10 deletions
+8 -6
View File
@@ -38,7 +38,7 @@ class DeviceAvailability {
return true;
}
return device.type === 'Router' && (device.powerSource && device.powerSource !== 'Battery');
return utils.isRouter(device) && !utils.isBatteryPowered(device);
}
getAllPingableDevices() {
@@ -53,12 +53,13 @@ class DeviceAvailability {
.forEach((device) => this.publishAvailability(device.ieeeAddr, true));
// Start timers for all devices
this.getAllPingableDevices().forEach((device) => this.setTimer(device.ieeeAddr));
this.getAllPingableDevices().forEach((device) => this.setTimer(device));
}
handleInterval(ieeeAddr) {
handleInterval(device) {
// Check if a job is already pending.
// This avoids overflowing of the queue in case the queue is not able to catch-up with the jobs being added.
const ieeeAddr = device.ieeeAddr;
if (this.pending.includes(ieeeAddr)) {
logger.debug(`Skipping ping for ${ieeeAddr} becuase job is already in queue`);
return;
@@ -68,6 +69,7 @@ class DeviceAvailability {
// When a device is already unavailable, log the ping failed on 'debug' instead of 'error'.
const errorLogLevel = this.state.hasOwnProperty(ieeeAddr) && !this.state[ieeeAddr] ? 'debug' : 'error';
const mechanism = utils.isXiaomiDevice(device) ? 'basic' : 'default';
this.zigbee.ping(ieeeAddr, errorLogLevel, (error) => {
this.publishAvailability(ieeeAddr, !error);
@@ -78,8 +80,8 @@ class DeviceAvailability {
this.pending.splice(index, 1);
}
this.setTimer(ieeeAddr);
});
this.setTimer(device);
}, mechanism);
}
setTimer(ieeeAddr) {
@@ -148,7 +150,7 @@ class DeviceAvailability {
this.publishAvailability(device.ieeeAddr, true);
}
this.setTimer(device.ieeeAddr);
this.setTimer(device);
}
}
}
+2 -4
View File
@@ -53,10 +53,8 @@ class Xiaomi {
handleInterval() {
this.zigbee.getAllClients()
.filter((d) => utils.isXiaomiDevice(d)) // Filter Xiaomi devices
.filter((d) => d.type === 'Router') // Filter routers
.filter((d) => d.powerSource && d.powerSource !== 'Battery') // Remove battery powered devices
.forEach((d) => this.ping(d.ieeeAddr)); // Ping devices.
.filter((d) => utils.isXiaomiDevice(d) && utils.isRouter(d) && !utils.isBatteryPowered(d))
.forEach((d) => this.ping(d.ieeeAddr));
}
}
+1
View File
@@ -95,6 +95,7 @@ module.exports = {
isXiaomiDevice: (device) => device.modelId !== 'lumi.router' && xiaomiManufacturerID.includes(device.manufId),
isIkeaTradfriDevice: (device) => ikeaTradfriManufacturerID.includes(device.manufId),
isRouter: (device) => device.type === 'Router',
isBatteryPowered: (device) => device.powerSource && device.powerSource === 'Battery',
isNumeric: (string) => /^\d+$/.test(string),
toLocalISOString: (dDate) => toLocalISOString(dDate),
getPostfixes: () => postfixes,