From 9bb69c1dce2093fe06202994913a194e195648cd Mon Sep 17 00:00:00 2001 From: Luis Godinez Date: Mon, 12 Aug 2024 00:54:08 -0700 Subject: [PATCH] Revert "remove redundant accessories" This reverts commit e3b593697c0574cb0bffdc33dc05ee12b683875b. --- src/platform.ts | 45 +++++++++++++++++++++++++++------------- src/platformAccessory.ts | 10 +++++++++ 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/platform.ts b/src/platform.ts index 02a134a..72bad12 100644 --- a/src/platform.ts +++ b/src/platform.ts @@ -35,7 +35,6 @@ export class OpenSaunaPlatform implements DynamicPlatformPlugin { this.accessories.push(accessory); } - // Modify the discoverDevices method to add a single accessory discoverDevices() { if (!isOpenSaunaConfig(this.config)) { this.log.error( @@ -52,40 +51,58 @@ export class OpenSaunaPlatform implements DynamicPlatformPlugin { devices.saunaTimeout = devices.saunaTimeout ?? 60; // in minutes devices.steamTimeout = devices.steamTimeout ?? 60; // in minutes devices.saunaMaxTemperature = - devices.saunaMaxTemperature ?? (devices.temperatureUnitFahrenheit ? 212 : 100); + devices.saunaMaxTemperature ?? (devices.temperatureUnitFahrenheit ? 212 : 100); devices.steamMaxTemperature = - devices.steamMaxTemperature ?? (devices.temperatureUnitFahrenheit ? 140 : 60); + devices.steamMaxTemperature ?? (devices.temperatureUnitFahrenheit ? 140 : 60); devices.steamMaxHumidity = devices.steamMaxHumidity ?? 60; // in percent devices.saunaSafetyTemperature = devices.saunaSafetyTemperature ?? (devices.temperatureUnitFahrenheit ? 248 : 120); devices.steamSafetyTemperature = devices.steamSafetyTemperature ?? (devices.temperatureUnitFahrenheit ? 140 : 60); devices.controllerSafetyTemperature = devices.controllerSafetyTemperature ?? (devices.temperatureUnitFahrenheit ? 194 : 90); - // Add a single accessory for all configured devices - this.addAccessory(devices); + // Conditionally add Sauna accessory + if (devices.hasSauna) { + this.addAccessory(devices, 'sauna'); + } + + // Conditionally add Steam accessory + if (devices.hasSteam) { + this.addAccessory(devices, 'steam'); + } + + // Add Light and Fan accessories if they exist + if (devices.hasLight) { + this.addAccessory(devices, 'light'); + } + + if (devices.hasFan) { + this.addAccessory(devices, 'fan'); + } } - // Adjust addAccessory to handle a single accessory with all features - private addAccessory(devices: OpenSaunaConfig) { - // Generate a unique UUID for the combined accessory - const uuid = this.api.hap.uuid.generate(devices.name); + private addAccessory( + devices: OpenSaunaConfig, + type: 'sauna' | 'steam' | 'light' | 'fan', + ) { + // Generate a unique UUID for each accessory + const uuid = this.api.hap.uuid.generate(`${devices.name}-${type}`); const existingAccessory = this.accessories.find( (accessory) => accessory.UUID === uuid, ); if (existingAccessory) { - // The accessory already exists, update it + // The accessory already exists, update it this.log.info( 'Restoring existing accessory from cache:', existingAccessory.displayName, ); - new OpenSaunaAccessory(this, existingAccessory, devices); + new OpenSaunaAccessory(this, existingAccessory, devices, type); } else { - // Create a new accessory - this.log.info('Adding new accessory:', devices.name); + // Create a new accessory + this.log.info('Adding new accessory:', devices.name, type); const accessory = new this.api.platformAccessory(devices.name, uuid); // Create the accessory handler - new OpenSaunaAccessory(this, accessory, devices); + new OpenSaunaAccessory(this, accessory, devices, type); // Register the accessory this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [ diff --git a/src/platformAccessory.ts b/src/platformAccessory.ts index e3c0e3a..9d9df95 100644 --- a/src/platformAccessory.ts +++ b/src/platformAccessory.ts @@ -37,6 +37,7 @@ export class OpenSaunaAccessory { private readonly platform: OpenSaunaPlatform, private readonly accessory: PlatformAccessory, private readonly config: OpenSaunaConfig, + private readonly accessoryType: 'sauna' | 'steam' | 'light' | 'fan', ) { // Set the accessory information this.accessory @@ -51,6 +52,15 @@ export class OpenSaunaAccessory { '58008', ); + // Set the accessory's name + this.accessory.displayName = `${config.name} ${accessoryType}`; + this.accessory + .getService(this.platform.Service.AccessoryInformation)! + .setCharacteristic( + this.platform.Characteristic.Name, + this.accessory.displayName, + ); + // Initialize RPIO with desired options rpio.init({ mapping: 'gpio', // Use GPIO pin numbering