mirror of
https://github.com/lehanspb/tuya-mqtt.git
synced 2025-12-18 00:10:20 +00:00
116
merge-devices.js
116
merge-devices.js
@@ -1,116 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
const fs = require('fs');
|
||||
const json5 = require('json5');
|
||||
const utils = require('./lib/utils');
|
||||
|
||||
// Setup Exit Handlers
|
||||
process.on('exit', processExit.bind(0));
|
||||
process.on('SIGINT', processExit.bind(0));
|
||||
process.on('SIGTERM', processExit.bind(0));
|
||||
process.on('uncaughtException', processExit.bind(1));
|
||||
|
||||
async function processExit(exitCode) {
|
||||
if (exitCode || exitCode === 0)
|
||||
console.error('Exit code: ' + exitCode)
|
||||
process.exit();
|
||||
}
|
||||
|
||||
// Main code function
|
||||
const main = async() => {
|
||||
const date = new Date();
|
||||
const dateTimeStr = date.getFullYear() + '-' + ("0" + (date.getMonth() + 1)).slice(-2) + '-' + ("0" + date.getDate()).slice(-2) + '_' + ("0" + date.getHours()).slice(-2) + ("0" + date.getMinutes()).slice(-2) + ("0" + date.getSeconds()).slice(-2);
|
||||
const configDevicesFilename = 'devices.conf';
|
||||
const configDevicesBackupFilename = `${configDevicesFilename}_${dateTimeStr}.bak`;
|
||||
const configNewDevicesFilename = `new-${configDevicesFilename}`;
|
||||
|
||||
let configDevices;
|
||||
let configNewDevices;
|
||||
|
||||
try {
|
||||
console.log(`Loading ${configNewDevicesFilename}...`);
|
||||
configNewDevices = fs.readFileSync(`./${configNewDevicesFilename}`, 'utf8');
|
||||
configNewDevices = json5.parse(configNewDevices);
|
||||
}
|
||||
catch (e) {
|
||||
console.error(`Could not parse new devices config file [${configNewDevicesFilename}]!`);
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(`Loading ${configDevicesFilename}...`);
|
||||
configDevices = fs.readFileSync(`./${configDevicesFilename}`, 'utf8');
|
||||
configDevices = json5.parse(configDevices);
|
||||
}
|
||||
catch (e) {
|
||||
console.error(`Could not parse devices config file [${configDevicesFilename}]!`);
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(`Backing up devices config file [${configDevicesFilename}] to [${configDevicesBackupFilename}]...`);
|
||||
fs.copyFileSync(`./${configDevicesFilename}`, `./${configDevicesBackupFilename}`);
|
||||
}
|
||||
catch (e) {
|
||||
console.error(`Could not make backup of devices config file [${configDevicesFilename}] to [${configDevicesBackupFilename}].`);
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log('Indexing devices...');
|
||||
|
||||
// Create a dictionary for faster lookups with many devices
|
||||
const configDevicesDictionary = {};
|
||||
for (let configDevice of configDevices) {
|
||||
configDevicesDictionary[configDevice.id] = configDevice;
|
||||
}
|
||||
|
||||
console.log('Merging devices...');
|
||||
|
||||
// Add new devices and update existing devices
|
||||
for (let configNewDevice of configNewDevices) {
|
||||
let configDevice = configDevicesDictionary[configNewDevice.id];
|
||||
if (configDevice == null) {
|
||||
// Add new device
|
||||
console.log(`Adding device: ${configNewDevice.name} (id: ${configNewDevice.id})...`);
|
||||
configDevices.push(configNewDevice);
|
||||
configDevicesDictionary[configNewDevice.id] = configNewDevice;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (configDevice.allowMerge === false)
|
||||
continue; // No merge updates allowed for this device
|
||||
|
||||
// Update existing device
|
||||
if (configDevice.name !== configNewDevice.name) {
|
||||
console.log(`Updating device name: '${configDevice.name}' to '${configNewDevice.name}' (device id: ${configDevice.key})...`);
|
||||
configDevice.name = configNewDevice.name;
|
||||
}
|
||||
if (configDevice.key !== configNewDevice.key) {
|
||||
console.log(`Updating device key for: '${configDevice.name}' (device id: ${configDevice.key})...`);
|
||||
configDevice.key = configNewDevice.key;
|
||||
}
|
||||
}
|
||||
|
||||
// Sort the devices by name
|
||||
configDevices.sort((a, b) => a.name < b.name ? -1 : 1);
|
||||
const configDevicesJson = json5.stringify(configDevices, { space: ' ', quote: '"' });
|
||||
|
||||
//console.log(configDevicesJson);
|
||||
|
||||
try {
|
||||
console.log(`Saving devices config file [${configDevicesFilename}]...`);
|
||||
fs.writeFileSync(`./${configDevicesFilename}`, configDevicesJson, { encoding: 'utf8' });
|
||||
}
|
||||
catch (e) {
|
||||
console.error(`Could not write devices config file [${configDevicesFilename}]!`)
|
||||
console.error(e)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log('Done!');
|
||||
}
|
||||
|
||||
// Call the main code
|
||||
main();
|
||||
Reference in New Issue
Block a user