Skip to content
This repository has been archived by the owner on Oct 30, 2021. It is now read-only.

Commit

Permalink
All basic operations now supported!
Browse files Browse the repository at this point in the history
Added current power draw as a bonus (for logging)
  • Loading branch information
Kevin Van den Abeele committed Jun 1, 2020
1 parent 5a9cc16 commit e5799b8
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 19 deletions.
10 changes: 8 additions & 2 deletions resources/wideq/example.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,15 @@ def set_swing_mode_v(client, device_id, swing_mode_v):


def set_swing_mode_h(client, device_id, swing_mode_h):
ac= wideq.ACDevice(client, _force_device(client, device_id))
ac = wideq.ACDevice(client, _force_device(client, device_id))
ac.set_horz_swing(wideq.ACHSwingMode[swing_mode_h])


def get_power_draw(client, device_id):
ac = wideq.ACDevice(client, _force_device(client, device_id))
print(ac.get_power())


def turn(client, device_id, on_off):
"""Turn on/off an AC device."""

Expand Down Expand Up @@ -188,7 +193,8 @@ def ac_config(client, device_id):
'set-mode': set_mode,
'set-speed': set_fan_speed,
'set-swing-v': set_swing_mode_v,
'set-swing-h': set_swing_mode_h
'set-swing-h': set_swing_mode_h,
'get-power-draw': get_power_draw
}


Expand Down
101 changes: 84 additions & 17 deletions src/lg/wideq-adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,57 @@ export class WideqAdapter {
return processedDevices;
}

public async getStatus(): Promise<AirCoolerStatus> {
return null;
public async getStatus(deviceId: string): Promise<AirCoolerStatus> {
try {
const data: string = await this.pythonUtils.executePython3(this.wideqScriptFile, ['-c ' + this.country, '-l ' + this.language, '-v', 'ac-mon ' + deviceId], true);
console.log(data);

const dataPieces: string[] = data.split(';').map(s => s.trim());
console.log(dataPieces);
return {
isOn: dataPieces[0].toLowerCase() === 'on',
mode: (<any>Mode)[dataPieces[1]],
currentTempInCelsius: parseFloat(dataPieces[2].substring(4)),
targetTempInCelsius: parseFloat(dataPieces[3].substring(4)),
fanSpeed: (<any>FanSpeed)[dataPieces[4].substring(10)]
};
} catch (error) {
console.error(error);
return null;
}
}

public async getCurrentPowerUsage(deviceId: string): Promise<number> {
try {
const data: string = await this.pythonUtils.executePython3(this.wideqScriptFile, ['-c ' + this.country, '-l ' + this.language, '-v', 'get-power-draw ' + deviceId]);
console.log(data);
return parseInt(data);
} catch (error) {
console.error(error);
return null;
}
}

public async setPowerOnOff(deviceId: string, poweredOn: boolean): Promise<boolean> {
return false;
try {
const data: string = await this.pythonUtils.executePython3(this.wideqScriptFile, ['-c ' + this.country, '-l ' + this.language, '-v', 'turn ' + deviceId + ' ' + poweredOn ? 'on': 'off']);
console.log(data);
return true;
} catch (error) {
console.error(error);
return false;
}
}

public async setTargetTemperature(deviceId: string, temperatureInCelcius: number): Promise<boolean> {
return false;
public async setTargetTemperature(deviceId: string, temperatureInCelsius: number): Promise<boolean> {
try {
const data: string = await this.pythonUtils.executePython3(this.wideqScriptFile, ['-c ' + this.country, '-l ' + this.language, '-v', 'set-temp ' + deviceId + ' ' + temperatureInCelsius]);
console.log(data);
return true;
} catch (error) {
console.error(error);
return false;
}
}

public async setMode(deviceId: string, mode: Mode): Promise<boolean> {
Expand All @@ -69,7 +110,14 @@ export class WideqAdapter {
}

public async setFanSpeed(deviceId: string, fanSpeed: FanSpeed): Promise<boolean> {
return false;
try {
const data: string = await this.pythonUtils.executePython3(this.wideqScriptFile, ['-c ' + this.country, '-l ' + this.language, '-v', 'set-speed ' + deviceId + ' ' + fanSpeed]);
console.log(data);
return true;
} catch (error) {
console.error(error);
return false;
}
}

public async setSwingModeV(deviceId: string, swingModeV: VSwingMode): Promise<boolean> {
Expand Down Expand Up @@ -97,24 +145,35 @@ export class WideqAdapter {

//TODO: Testing only!
setTimeout(async () => {
const sleep = (ms: number) => {
return new Promise(resolve => setTimeout(resolve, ms));
};

const testAdapter = new WideqAdapter('BE', 'en-UK');
const airCoolers: AirCooler[] = await testAdapter.listAirCoolers();
const airCooler: AirCooler = airCoolers[0];
console.log(airCooler);
const status: AirCoolerStatus = await testAdapter.getStatus();
let status: AirCoolerStatus = await testAdapter.getStatus(airCooler.deviceId);
console.log(status);

const sleep = (ms: number) => {
return new Promise(resolve => setTimeout(resolve, ms));
};
await sleep(2500);
console.log(await testAdapter.getCurrentPowerUsage(airCooler.deviceId) + ' watts');

let success: boolean = false;
//success = await testAdapter.setMode(airCooler.deviceId, Mode.COOL);
success = await testAdapter.setSwingModeV(airCooler.deviceId, VSwingMode.ONE);
console.log(success);
/*
await sleep(2500);
success = await testAdapter.setMode(airCooler.deviceId, Mode.COOL);
*/

/*
await sleep(2500);
success = await testAdapter.setSwingModeH(airCooler.deviceId, HSwingMode.ONE);
console.log(success);
success = await testAdapter.setSwingModeV(airCooler.deviceId, VSwingMode.ALL);
await sleep(2500);
success = await testAdapter.setSwingModeH(airCooler.deviceId, HSwingMode.ALL);
await sleep(2500);
success = await testAdapter.setTargetTemperature(airCooler.deviceId, 18);
await sleep(2500);
success = await testAdapter.setFanSpeed(airCooler.deviceId, FanSpeed.HIGH);
*/
});

export interface AirCooler {
Expand All @@ -123,7 +182,11 @@ export interface AirCooler {
}

export interface AirCoolerStatus {

isOn: boolean
mode: Mode,
currentTempInCelsius: number,
targetTempInCelsius: number,
fanSpeed: FanSpeed
}

/*
Expand Down Expand Up @@ -160,6 +223,8 @@ export enum Mode {
FAN = "FAN",
AI = "AI",
HEAT = "HEAT",

//TODO: Figure out which mode settings actually work!
AIRCLEAN = "AIRCLEAN",
ACO = "ACO",
AROMA = "AROMA",
Expand All @@ -175,6 +240,8 @@ export enum FanSpeed {
MID = 'MID',
MID_HIGH = 'MID_HIGH',
HIGH = 'HIGH',

//TODO: Figure out which fan speed settings actually work!
POWER = 'POWER',
AUTO = 'AUTO',
NATURE = 'NATURE',
Expand Down

0 comments on commit e5799b8

Please sign in to comment.