UNPKG

tsvesync

Version:

A TypeScript library for interacting with VeSync smart home devices

175 lines (174 loc) 6.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VeSyncWarmHumidifier = void 0; const humidifier_1 = require("./humidifier"); const helpers_1 = require("../helpers"); const logger_1 = require("../logger"); /** * VeSync Warm Humidifier Class */ class VeSyncWarmHumidifier extends humidifier_1.VeSyncHumidifier { constructor(details, manager) { super(details, manager); this.warmLevels = [1, 2, 3]; logger_1.logger.debug(`Initialized VeSyncWarmHumidifier device: ${this.deviceName}`); } /** * Get device details */ async getDetails() { const success = await super.getDetails(); if (success && this.details) { // Add warm humidifier specific fields this.details = { ...this.details, warm_enabled: Boolean(this.details.warm_level && this.details.warm_level > 0), drying_mode_enabled: this.details.autoDryingSwitch === 1, drying_mode_state: this.details.dryingMode || '', drying_mode_level: this.details.dryingLevel || 0, drying_mode_seconds_remaining: this.details.dryingRemainTime || 0 }; } return success; } /** * Change fan speed - Implemented to satisfy interface but redirects to setMistLevel */ async changeFanSpeed(speed) { logger_1.logger.debug(`Redirecting fan speed change to mist level for device: ${this.deviceName}`); return this.setMistLevel(speed); } /** * Set device mode */ async setMode(mode) { if (!this.modes.includes(mode)) { const error = `Invalid mode: ${mode}. Must be one of: ${this.modes.join(', ')}`; logger_1.logger.error(`${error} for device: ${this.deviceName}`); throw new Error(error); } logger_1.logger.debug(`Setting mode to ${mode} for device: ${this.deviceName}`); const [response, status] = await this.callApi('/cloud/v2/deviceManaged/bypassV2', 'post', { ...helpers_1.Helpers.reqBody(this.manager, 'bypassV2'), cid: this.cid, configModule: this.configModule, payload: { data: { mode }, method: 'setHumidityMode', source: 'APP' } }, helpers_1.Helpers.reqHeaderBypass()); const success = this.checkResponse([response, status], 'setMode'); if (success) { this.details.mode = mode; } else { logger_1.logger.error(`Failed to set mode to ${mode} for device: ${this.deviceName}`); } return success; } /** * Set warm mist level */ async setWarmLevel(level) { if (!this.hasFeature('warm')) { const error = 'Warm mist control not supported'; logger_1.logger.error(`${error} for device: ${this.deviceName}`); throw new Error(error); } if (!this.warmLevels.includes(level)) { const error = `Invalid warm level: ${level}. Must be one of: ${this.warmLevels.join(', ')}`; logger_1.logger.error(`${error} for device: ${this.deviceName}`); throw new Error(error); } logger_1.logger.debug(`Setting warm level to ${level} for device: ${this.deviceName}`); const [response, status] = await this.callApi('/cloud/v2/deviceManaged/bypassV2', 'post', { ...helpers_1.Helpers.reqBody(this.manager, 'bypassV2'), cid: this.cid, configModule: this.configModule, payload: { data: { id: 0, level: level, type: 'warm' }, method: 'setLevel', source: 'APP' } }, helpers_1.Helpers.reqHeaderBypass()); const success = this.checkResponse([response, status], 'setWarmLevel'); if (success) { this.details.warm_level = level; this.details.warm_enabled = level > 0; } else { logger_1.logger.error(`Failed to set warm level to ${level} for device: ${this.deviceName}`); } return success; } /** * Set drying mode enabled */ async setDryingModeEnabled(enabled) { if (!this.hasFeature('drying')) { const error = 'Drying mode not supported'; logger_1.logger.error(`${error} for device: ${this.deviceName}`); throw new Error(error); } logger_1.logger.debug(`Setting drying mode to ${enabled} for device: ${this.deviceName}`); const [response, status] = await this.callApi('/cloud/v2/deviceManaged/bypassV2', 'post', { ...helpers_1.Helpers.reqBody(this.manager, 'bypassV2'), cid: this.cid, configModule: this.configModule, payload: { data: { autoDryingSwitch: enabled ? 1 : 0 }, method: 'setDryingMode', source: 'APP' } }, helpers_1.Helpers.reqHeaderBypass()); const success = this.checkResponse([response, status], 'setDryingModeEnabled'); if (success) { this.details.drying_mode_enabled = enabled; this.details.autoDryingSwitch = enabled ? 1 : 0; } else { logger_1.logger.error(`Failed to set drying mode to ${enabled} for device: ${this.deviceName}`); } return success; } /** * Get warm mist enabled status */ get warmMistEnabled() { return this.details.warm_enabled || false; } /** * Get drying mode enabled status */ get dryingModeEnabled() { return this.details.drying_mode_enabled || false; } /** * Get drying mode state */ get dryingModeState() { return this.details.drying_mode_state || ''; } /** * Get drying mode level */ get dryingModeLevel() { return this.details.drying_mode_level || 0; } /** * Get drying mode seconds remaining */ get dryingModeSecondsRemaining() { return this.details.drying_mode_seconds_remaining || 0; } } exports.VeSyncWarmHumidifier = VeSyncWarmHumidifier;