homebridge-tsvesync
Version:
Homebridge plugin for VeSync devices including Levoit air purifiers, humidifiers, and Etekcity smart outlets
109 lines • 4.27 kB
JavaScript
"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