homebridge-virtual-accessories
Version:
Virtual HomeKit accessories for Homebridge.
67 lines • 2.75 kB
JavaScript
import { MeasurementSensor } from './measurementSensor.js';
import { InvalidSensorValueType, SensorValueUpdateNotAllowed } from '../errors.js';
import { TemperatureUnit } from '../configuration/schema.js';
/**
* TemperatureSensor - Sensor implementation
*/
export class TemperatureSensor extends MeasurementSensor {
static ACCESSORY_TYPE_NAME = 'TemperatureSensor';
static DEFAULT_TEMPERATURE_CELSIUS = 20;
constructor(platform, accessory, accessoryConfiguration) {
super(platform, accessory, accessoryConfiguration);
}
getService() {
return this.platform.Service.TemperatureSensor;
}
getMeasurementCharacteristic() {
return this.platform.Characteristic.CurrentTemperature;
}
getDefaultValue() {
return TemperatureSensor.DEFAULT_TEMPERATURE_CELSIUS;
}
getAccessoryTypeName() {
return TemperatureSensor.ACCESSORY_TYPE_NAME;
}
getDegreeUnits() {
let units;
switch (this.states.SensorUnits) {
case undefined: {
units = 'º';
break;
}
case TemperatureUnit.Celsius: {
units = 'ºC';
break;
}
case TemperatureUnit.Fahrenheit: {
units = 'ºF';
break;
}
default: {
units = 'º';
}
}
return units;
}
toCelsius(temperature) {
const temperatureCelsius = (this.states.SensorUnits === TemperatureUnit.Celsius) ? temperature : (temperature - 32) * 5 / 9;
return Math.round(temperatureCelsius * 10) / 10;
}
// Updatable Sensor interface
updateMeasurementSensor(value, accessoryId) {
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Request update humidity sensor to ${value}${this.getDegreeUnits()}`);
if (accessoryId !== this.accessoryConfiguration.accessoryID) {
this.log.error(`[${this.accessoryConfiguration.accessoryName}] Accessory Id ${accessoryId} is not valid for this accessory`);
throw new SensorValueUpdateNotAllowed(`Invalid accessory id: ${accessoryId}`);
}
else if (typeof value !== 'number') {
this.log.error(`[${this.accessoryConfiguration.accessoryName}] Value ${value} is not valid for Heater/Cooler sensor`);
throw new InvalidSensorValueType(`Invalid sensor value: ${value}`);
}
else {
this.log.debug(`[${this.accessoryConfiguration.accessoryName}] Updating temperature sensor to ${value}${this.getDegreeUnits()}`);
this.states.SensorValue = this.toCelsius(value);
}
}
}
//# sourceMappingURL=virtualSensorTemperature.js.map