homebridge-lg-airco
Version:
Homebridge plugin to control a Smart Thinq enabled LG airco unit. Makes use of WideQ => https://github.com/sampsyo/wideq
138 lines (112 loc) • 5.07 kB
text/typescript
import {AirCooler, FanSpeed, HSwingMode, Mode, VSwingMode} from "./wideq-adapter";
import {Controller} from "./controller";
export class DummyController extends Controller {
private logDebug: Function;
constructor(airCooler: AirCooler, updateInterval: number, debugLogger: Function) {
super();
this.airCooler = airCooler;
this.isOn = true;
this.mode = Mode.COOL;
this.currentTemperatureInCelsius = 24;
this.fanSpeed = FanSpeed.HIGH;
this.powerDraw = 50;
this.swingModeH = HSwingMode.ALL;
this.swingModeV = VSwingMode.ALL;
this.targetCoolingTemperatureInCelsius = 18;
this.targetHeatingTemperatureInCelsius = 21;
this.logDebug = debugLogger;
}
public isPoweredOn(): boolean {
return this.isOn;
}
public async setPowerState(powerOn: boolean): Promise<void> {
if (this.isOn !== powerOn) {
this.isOn = powerOn;
this.logDebug('Setting power value: ' + (powerOn ? 'ON' : 'OFF'));
}
}
public getMode(): Mode {
this.logDebug('Getting mode value: ' + this.mode);
return this.mode;
}
public async setMode(newTargetMode: Mode): Promise<void> {
if (this.mode !== newTargetMode) {
this.isOn = true;
this.mode = newTargetMode;
this.logDebug('Setting mode value: ' + newTargetMode);
await this.setTargetTemperatureInCelsius(this.mode === Mode.COOL ? this.targetCoolingTemperatureInCelsius : this.targetHeatingTemperatureInCelsius);
} else {
this.setPowerState(true);
}
}
public getCurrentTemperatureInCelsius(): number {
this.logDebug('Getting current temperature value: ' + this.currentTemperatureInCelsius);
return this.currentTemperatureInCelsius;
}
public getTargetCoolingTemperatureInCelsius(): number {
this.logDebug('Getting target temperature value: ' + this.targetCoolingTemperatureInCelsius);
return this.targetCoolingTemperatureInCelsius;
}
public setTargetCoolingTemperatureInCelsius(newTargetCoolingTemperatureInCelsius: number): void {
if (this.targetCoolingTemperatureInCelsius !== newTargetCoolingTemperatureInCelsius) {
this.isOn = true;
this.targetCoolingTemperatureInCelsius = newTargetCoolingTemperatureInCelsius;
if(this.mode === Mode.COOL) {
this.setTargetTemperatureInCelsius(this.targetCoolingTemperatureInCelsius);
}
}
}
public getTargetHeatingTemperatureInCelsius(): number {
this.logDebug('Getting target heating temperature value: ' + this.targetHeatingTemperatureInCelsius);
return this.targetHeatingTemperatureInCelsius;
}
public setTargetHeatingTemperatureInCelsius(newTargetHeatingTemperatureInCelsius: number): void {
if (this.targetHeatingTemperatureInCelsius !== newTargetHeatingTemperatureInCelsius) {
this.isOn = true;
this.targetHeatingTemperatureInCelsius = newTargetHeatingTemperatureInCelsius;
if(this.mode === Mode.HEAT) {
this.setTargetTemperatureInCelsius(this.targetHeatingTemperatureInCelsius);
}
}
}
public async setTargetTemperatureInCelsius(newTargetTemperatureInCelsius: number): Promise<void> {
if (this.targetTemperatureInCelsius !== newTargetTemperatureInCelsius) {
this.isOn = true;
this.targetTemperatureInCelsius = newTargetTemperatureInCelsius;
this.logDebug('Setting temperature value: ' + newTargetTemperatureInCelsius);
}
}
public getVerticalSwingMode(): VSwingMode {
this.logDebug('Getting v-swing value: ' + this.swingModeV);
return this.swingModeV;
}
public async setVerticalSwingMode(newVerticalSwingMode: VSwingMode): Promise<void> {
if (this.swingModeV !== newVerticalSwingMode) {
this.isOn = true;
this.swingModeV = newVerticalSwingMode;
this.logDebug('Setting swing V value: ' + newVerticalSwingMode);
}
}
public getHorizontalSwingMode(): HSwingMode {
this.logDebug('Getting h-swing value: ' + this.swingModeH);
return this.swingModeH;
}
public async setHorizontalSwingMode(newHorizontalSwingMode: HSwingMode): Promise<void> {
if (this.swingModeH !== newHorizontalSwingMode) {
this.isOn = true;
this.swingModeH = newHorizontalSwingMode;
this.logDebug('Setting swing H value: ' + newHorizontalSwingMode);
}
}
public getFanSpeed(): FanSpeed {
this.logDebug('Getting fan speed value: ' + this.fanSpeed);
return this.fanSpeed;
}
public async setFanSpeed(newFanSpeed: FanSpeed): Promise<void> {
if (this.fanSpeed !== newFanSpeed) {
this.isOn = true;
this.fanSpeed = newFanSpeed;
this.logDebug('Setting fan speed value: ' + newFanSpeed);
}
}
}