UNPKG

homebridge-tsvesync

Version:

Homebridge plugin for VeSync devices including Levoit air purifiers, humidifiers, and Etekcity smart outlets

109 lines 4.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DeviceFactory = void 0; const air_purifier_accessory_1 = require("../accessories/air-purifier.accessory"); const humidifier_accessory_1 = require("../accessories/humidifier.accessory"); const fan_accessory_1 = require("../accessories/fan.accessory"); const light_accessory_1 = require("../accessories/light.accessory"); const outlet_accessory_1 = require("../accessories/outlet.accessory"); const switch_accessory_1 = require("../accessories/switch.accessory"); // Device model constants const AIR_PURIFIER_MODELS = [ 'Core200S', 'Core300S', 'Core400S', 'Core600S', 'Vital100S', 'Vital200S', 'LV-PUR131S', 'LV-RH131S', 'EverestAir' ]; const HUMIDIFIER_MODELS = [ 'Classic200S', 'Classic300S', 'Dual200S', 'LV600S', 'OasisMist', 'OasisMist600S', 'Superior6000S', 'OasisMist1000S' ]; const FAN_MODELS = ['LTF-F422']; const OUTLET_MODELS = [ 'ESO15-TB', 'ESW15-USA', 'ESW03-USA', 'ESW01-EU', 'ESW10-USA', 'wifi-switch-1.3' ]; const SWITCH_MODELS = ['ESWD16', 'ESWL01', 'ESWL03']; class DeviceFactory { static modelMatches(deviceType, models) { const upperDeviceType = deviceType.toUpperCase(); return models.some(model => upperDeviceType.includes(model.toUpperCase())); } static isAirPurifier(deviceType) { return deviceType.startsWith('LAP-') || this.modelMatches(deviceType, AIR_PURIFIER_MODELS); } static isHumidifier(deviceType) { return deviceType.startsWith('LUH-') || deviceType.startsWith('LEH-') || this.modelMatches(deviceType, HUMIDIFIER_MODELS); } static isFan(deviceType) { return deviceType.startsWith('LTF-') || this.modelMatches(deviceType, FAN_MODELS); } static isBulb(deviceType) { return deviceType.startsWith('ESL') || deviceType === 'XYD0001'; } static isOutlet(deviceType) { return this.modelMatches(deviceType, OUTLET_MODELS); } static isSwitch(deviceType) { return this.modelMatches(deviceType, SWITCH_MODELS); } static createAccessory(platform, accessory, device) { const deviceType = device.deviceType.toUpperCase(); // Air Purifiers if (this.isAirPurifier(deviceType)) { return new air_purifier_accessory_1.AirPurifierAccessory(platform, accessory, device); } // Humidifiers if (this.isHumidifier(deviceType)) { return new humidifier_accessory_1.HumidifierAccessory(platform, accessory, device); } // Fans if (this.isFan(deviceType)) { return new fan_accessory_1.FanAccessory(platform, accessory, device); } // Bulbs if (this.isBulb(deviceType)) { return new light_accessory_1.LightAccessory(platform, accessory, device); } // Outlets if (this.isOutlet(deviceType)) { return new outlet_accessory_1.OutletAccessory(platform, accessory, device); } // Switches if (this.isSwitch(deviceType)) { return new switch_accessory_1.SwitchAccessory(platform, accessory, device); } // Default to outlet for unknown devices platform.log.warn(`Unknown device type: ${deviceType}, defaulting to outlet`); return new outlet_accessory_1.OutletAccessory(platform, accessory, device); } static getAccessoryCategory(deviceType) { const type = deviceType.toUpperCase(); if (this.isAirPurifier(type)) { return 19 /* Categories.AIR_PURIFIER */; } if (this.isHumidifier(type)) { return 22 /* Categories.AIR_HUMIDIFIER */; } if (this.isFan(type)) { return 3 /* Categories.FAN */; } if (this.isBulb(type)) { return 5 /* Categories.LIGHTBULB */; } if (this.isSwitch(type)) { return 8 /* Categories.SWITCH */; } if (this.isOutlet(type)) { return 7 /* Categories.OUTLET */; } // Default to outlet for unknown devices return 7 /* Categories.OUTLET */; } } exports.DeviceFactory = DeviceFactory; //# sourceMappingURL=device-factory.js.map