@ronniepettersson/homebridge-dummy
Version:
Create Homebridge accessories to help with automation and control — scheduling, delays, sensors, commands, webhooks, and more
86 lines • 3.2 kB
JavaScript
import fs from 'fs';
import { strings } from '../i18n/i18n.js';
import { LEGACY_ALIAS, PLATFORM_NAME } from '../homebridge/settings.js';
import { AccessoryType, TimeUnits } from '../model/enums.js';
function migrateAccessory(legacyConfig) {
const dummyConfig = {
id: crypto.randomUUID(),
name: legacyConfig.name,
type: AccessoryType.Switch,
disableLogging: legacyConfig.disableLogging,
};
if (legacyConfig.reverse) {
const onOffConfig = dummyConfig;
onOffConfig.defaultOn = 1;
}
if (legacyConfig.dimmer) {
const lightbulbConfig = dummyConfig;
lightbulbConfig.type = AccessoryType.Lightbulb;
lightbulbConfig.defaultBrightness = legacyConfig.brightness ?? 0;
}
if (!legacyConfig.stateful && legacyConfig.time) {
dummyConfig.timer = {
delay: legacyConfig.time,
units: TimeUnits.MILLISECONDS,
random: legacyConfig.random,
};
}
return dummyConfig;
}
export async function migrateAccessories(log, configPath) {
try {
const config = JSON.parse(fs.readFileSync(configPath, { encoding: 'utf8' }));
fs.writeFileSync(configPath + '.bak', JSON.stringify(config, null, 4));
let dummyPlatformConfig;
for (const platformConfig of config.platforms) {
if (platformConfig.platform !== PLATFORM_NAME) {
continue;
}
dummyPlatformConfig = platformConfig;
break;
}
if (!dummyPlatformConfig) {
log.error(strings.startup.migrationFailed);
return;
}
dummyPlatformConfig.accessories = dummyPlatformConfig.accessories?.length ? dummyPlatformConfig.accessories : [];
const migrated = [];
const others = [];
let childBridge;
for (const accessoryConfig of config.accessories) {
if (accessoryConfig.accessory !== LEGACY_ALIAS) {
others.push(accessoryConfig);
continue;
}
const dummyConfig = migrateAccessory(accessoryConfig);
migrated.push(dummyConfig);
dummyPlatformConfig.accessories.push(dummyConfig);
if (accessoryConfig._bridge?.port) {
childBridge = accessoryConfig._bridge;
}
}
config.accessories = others;
if (!dummyPlatformConfig._bridge) {
dummyPlatformConfig._bridge = childBridge;
}
delete dummyPlatformConfig.migrationNeeded;
fs.writeFileSync(configPath, JSON.stringify(config, null, 4));
if (migrated.length === 0) {
log.warning(strings.startup.migrationNoAccessories);
return;
}
log.success(strings.startup.migrationComplete, migrated.length);
log.warning(strings.startup.migrationRevert);
if (childBridge) {
log.error(strings.startup.migrationBridge);
}
else {
log.warning(strings.startup.migrationIgnore);
}
return migrated;
}
catch (err) {
log.error(strings.startup.migrationFailed, err);
}
}
//# sourceMappingURL=configMigration.js.map