homebridge-tessie
Version:
Connect Homebridge to your Tessie account.
59 lines • 3.24 kB
JavaScript
// https://developers.homebridge.io/#/service/Thermostat
import { BaseService } from "./base.js";
export class ClimateService extends BaseService {
displayUnits = 0; // Celsius by default
assumedState = 0;
constructor(parent) {
super(parent, parent.platform.Service.Thermostat, "Climate", "climate");
const currentState = this.service
.getCharacteristic(this.parent.platform.Characteristic.CurrentHeatingCoolingState);
const targetState = this.service
.getCharacteristic(this.parent.platform.Characteristic.TargetHeatingCoolingState)
.onSet(async (value) => {
targetState.updateValue(value ?
this.parent.platform.hap.Characteristic.TargetHeatingCoolingState.AUTO :
this.parent.platform.hap.Characteristic.TargetHeatingCoolingState.OFF);
await this.parent.wakeUpAndWait()
.then(() => value
? this.vehicle.auto_conditioning_start()
.then(() => currentState.updateValue(this.assumedState))
.catch((e) => this.log.error(`${this.name} vehicle auto_conditioning_start failed: ${e}`))
:
this.vehicle.auto_conditioning_stop()
.then(() => currentState.updateValue(this.parent.platform.hap.Characteristic.CurrentHeatingCoolingState.OFF))
.catch((e) => this.log.error(`${this.name} vehicle auto_conditioning_stop failed: ${e}`)));
});
const currentTemp = this.service
.getCharacteristic(this.parent.platform.Characteristic.CurrentTemperature);
const targetTemp = this.service
.getCharacteristic(this.parent.platform.Characteristic.TargetTemperature)
.onSet(async (value) => {
await this.parent.wakeUpAndWait()
.then(() => this.vehicle.set_temps(value, value))
.then(() => targetTemp.updateValue(value));
});
this.service
.getCharacteristic(this.parent.platform.Characteristic.TemperatureDisplayUnits)
.onSet((value) => {
this.displayUnits = value;
});
this.parent.emitter.on("vehicle_data", (data) => {
this.assumedState = data.climate_state.inside_temp < data.climate_state.driver_temp_setting
? this.platform.hap.Characteristic.CurrentHeatingCoolingState.HEAT
: this.platform.hap.Characteristic.CurrentHeatingCoolingState.COOL;
if (data.climate_state.is_climate_on) {
// On
currentState.updateValue(this.assumedState);
targetState.updateValue(this.platform.hap.Characteristic.TargetHeatingCoolingState.AUTO);
}
else {
// Off
currentState.updateValue(this.platform.hap.Characteristic.CurrentHeatingCoolingState.OFF);
targetState.updateValue(this.platform.hap.Characteristic.TargetHeatingCoolingState.OFF);
}
currentTemp.updateValue(data.climate_state.inside_temp);
targetTemp.updateValue(data.climate_state.driver_temp_setting);
});
}
}
//# sourceMappingURL=climate.js.map