homebridge-virtual-accessories
Version:
Virtual HomeKit accessories for Homebridge.
119 lines • 5.57 kB
JavaScript
/* 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