UNPKG

homebridge-virtual-accessories

Version:
119 lines 5.57 kB
/* eslint-disable max-len */ /* eslint-disable brace-style */ /* eslint-disable curly */ import { HeaterType, TemperatureUnit, ThresholdTemperature } from '../schema.js'; import { Utils } from '../../utils/utils.js'; /** * */ export class HeaterCoolerConfiguration { type; hasFan = false; temperatureDisplayUnits; heatingThresholdCelsius; coolingThresholdCelsius; heatingThresholdFahrenheit; coolingThresholdFahrenheit; saunaHeatingThresholdCelsius; saunaHeatingThresholdFahrenheit; // HomeKit units: ºC heatingThreshold; coolingThreshold; errorFields = []; fieldNames = Utils.proxiedPropertiesOf(this); isValid(prefix) { const isValidType = (Utils.required(this.type) && HeaterType.Types.includes(this.type)); const isValidTemperatureDisplayUnits = (Utils.required(this.temperatureDisplayUnits) && TemperatureUnit.Units.includes(this.temperatureDisplayUnits)); this.heatingThreshold = this.getHeatingThreshold(); this.coolingThreshold = this.getCoolingThreshold(); const isValidHeatingThreshold = (this.isValidHeatingThreshold()); const isValidCoolingThreshold = (this.isValidCoolingThreshold()); const isValidThresholdWindow = ((this.heatingThreshold !== undefined) && (this.coolingThreshold !== undefined) ? (this.coolingThreshold > this.heatingThreshold) : true); // Store fields failing validation const heatingThresholdField = '.heatingThreshold' + this.capitalize(this.temperatureDisplayUnits); const coolingThresholdField = '.coolingThreshold' + this.capitalize(this.temperatureDisplayUnits); if (!isValidType) this.errorFields.push(prefix + '.type'); if (!isValidTemperatureDisplayUnits) this.errorFields.push(prefix + '.' + this.fieldNames.temperatureDisplayUnits); if (!isValidHeatingThreshold) this.errorFields.push(prefix + heatingThresholdField); if (!isValidCoolingThreshold) this.errorFields.push(prefix + coolingThresholdField); if (!isValidThresholdWindow) this.errorFields.push(prefix + heatingThresholdField + ' <= ' + prefix + coolingThresholdField); return [ (isValidType && isValidTemperatureDisplayUnits && isValidHeatingThreshold && isValidCoolingThreshold && isValidThresholdWindow), this.errorFields, ]; } getHeatingThreshold() { let heatingThreshold = undefined; if (this.temperatureDisplayUnits === TemperatureUnit.Celsius) { heatingThreshold = (this.type === HeaterType.Sauna) ? this.saunaHeatingThresholdCelsius : this.heatingThresholdCelsius; } else if (this.temperatureDisplayUnits === TemperatureUnit.Fahrenheit) { heatingThreshold = (this.type === HeaterType.Sauna) ? this.saunaHeatingThresholdFahrenheit : this.heatingThresholdFahrenheit; } return this.toCelsius(heatingThreshold); } getCoolingThreshold() { let coolingThreshold = undefined; if (this.temperatureDisplayUnits === TemperatureUnit.Celsius) { coolingThreshold = this.coolingThresholdCelsius; } else if (this.temperatureDisplayUnits === TemperatureUnit.Fahrenheit) { coolingThreshold = this.coolingThresholdFahrenheit; } return this.toCelsius(coolingThreshold); } isValidHeatingThreshold() { let isValidHeatingThreshold = false; // If it's a cooler only, then no heating threshold is valid if (this.type === HeaterType.Cooler) { isValidHeatingThreshold = this.heatingThreshold === undefined; } else { const HeatingThresholdMin = (this.type === HeaterType.Sauna) ? ThresholdTemperature.SaunaHeatingThresholdMin : ThresholdTemperature.HeatingThresholdMin; const HeatingThresholdMax = (this.type === HeaterType.Sauna) ? ThresholdTemperature.SaunaHeatingThresholdMax : ThresholdTemperature.HeatingThresholdMax; isValidHeatingThreshold = Utils.required(this.heatingThreshold) && (this.heatingThreshold >= HeatingThresholdMin && this.heatingThreshold <= HeatingThresholdMax); } return isValidHeatingThreshold; } isValidCoolingThreshold() { let isValidCoolingThreshold = false; // If it's a heater only, then no cooling threshold is valid if (this.type === HeaterType.Heater || this.type === HeaterType.Sauna) { isValidCoolingThreshold = (this.coolingThreshold === undefined); } else { isValidCoolingThreshold = Utils.required(this.coolingThreshold) && (this.coolingThreshold >= ThresholdTemperature.CoolingThresholdMin && this.coolingThreshold <= ThresholdTemperature.CoolingThresholdMax); } return isValidCoolingThreshold; } toCelsius(temperature) { if (temperature === undefined) { return undefined; } const temperatureCelsius = (this.temperatureDisplayUnits === TemperatureUnit.Celsius) ? temperature : (temperature - 32) * 5 / 9; return Math.round(temperatureCelsius * 10) / 10; } capitalize(value) { return String(value).charAt(0).toUpperCase() + String(value).slice(1); } } //# sourceMappingURL=configurationHeaterCooler.js.map