Files
zigbee-OTA/scripts/add.js
walthowd a41b4af249 Hue smart button and Lutron Aurora dimmer (#4)
* Hue smart button and Lutron Aurora dimmer

* Firmware files
2020-06-02 17:58:04 +02:00

64 lines
1.8 KiB
JavaScript

const path = require('path');
const fs = require('fs');
const ota = require('../lib/ota');
const filename = process.argv[2];
const baseURL = 'https://github.com/Koenkk/zigbee-OTA/raw/master';
const manufacturerNameLookup = {
4107: 'Hue',
4474: 'Insta',
4448: 'Sengled',
4420: 'Lutron',
};
if (!filename) {
throw new Error('Please provide a filename');
}
const file = path.resolve(filename);
if (!fs.existsSync(file)) {
throw new Error(`${file} does not exist`);
}
const buffer = fs.readFileSync(file);
const parsed = ota.parseImage(buffer);
if (!manufacturerNameLookup[parsed.header.manufacturerCode]) {
throw new Error(`${parsed.header.manufacturerCode} not in manufacturerNameLookup (please add it)`);
}
const manufacturerName = manufacturerNameLookup[parsed.header.manufacturerCode];
const indexJSON = JSON.parse(fs.readFileSync('index.json'));
const destination = path.join('images', manufacturerName, path.basename(file));
const destinationPosix = destination.replace(/\\/g, '/');
const entry = {
fileVersion: parsed.header.fileVersion,
fileSize: parsed.header.totalImageSize,
manufacturerCode: parsed.header.manufacturerCode,
imageType: parsed.header.imageType,
url: `${baseURL}/${destinationPosix}`,
path: destinationPosix,
};
const index = indexJSON.findIndex((i) => {
return i.manufacturerCode === entry.manufacturerCode && i.imageType === entry.imageType
});
if (index !== -1) {
console.log(`Updated existing entry (${JSON.stringify(entry)})`);
indexJSON[index] = entry;
fs.unlinkSync(entry.path)
} else {
console.log(`Added new entry (${JSON.stringify(entry)})`);
indexJSON.push(entry);
}
if (!fs.existsSync(path.dirname(destination))) {
fs.mkdirSync(path.dirname(destination));
}
fs.copyFileSync(file, destination);
fs.writeFileSync('index.json', JSON.stringify(indexJSON, null, ' '));