UNPKG

@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
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