Don't crash when devices doesn't respond to read modelID after update. https://github.com/Koenkk/zigbee2mqtt/issues/2921

This commit is contained in:
Koen Kanters
2020-02-13 21:10:44 +01:00
parent 984bad4cb3
commit 87faaa1817
2 changed files with 31 additions and 9 deletions
+13 -9
View File
@@ -16,16 +16,20 @@ class OTAUpdate extends BaseExtension {
}
async readSoftwareBuildIDAndDateCode(device, update) {
const endpoint = device.endpoints.find((e) => e.supportsInputCluster('genBasic'));
const result = await endpoint.read('genBasic', ['dateCode', 'swBuildId']);
try {
const endpoint = device.endpoints.find((e) => e.supportsInputCluster('genBasic'));
const result = await endpoint.read('genBasic', ['dateCode', 'swBuildId']);
if (update) {
device.softwareBuildID = result.swBuildId;
device.dateCode = result.dateCode;
device.save();
if (update) {
device.softwareBuildID = result.swBuildId;
device.dateCode = result.dateCode;
device.save();
}
return {softwareBuildID: result.swBuildId, dateCode: result.dateCode};
} catch (e) {
return null;
}
return {softwareBuildID: result.swBuildId, dateCode: result.dateCode};
}
async onMQTTMessage(topic, message) {
@@ -74,7 +78,7 @@ class OTAUpdate extends BaseExtension {
await device.mapped.ota.updateToLatest(device.device, logger, onProgress);
const to = await this.readSoftwareBuildIDAndDateCode(device.device, true);
const [fromS, toS] = [JSON.stringify(from_), JSON.stringify(to)];
logger.info(`Finished update of '${device.name}', from '${fromS}' to '${toS}'`);
logger.info(`Finished update of '${device.name}'` + (to ? `, from '${fromS}' to '${toS}'` : ``));
} catch (error) {
logger.error(`Update of '${device.name}' failed (${error.message})`);
}