Skip to content

Commit

Permalink
Air purifier Airfast mode
Browse files Browse the repository at this point in the history
  • Loading branch information
Jin committed Jun 16, 2022
1 parent 040ac82 commit d5452af
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 26 deletions.
41 changes: 40 additions & 1 deletion src/devices/AirPurifier.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {LGThinQHomebridgePlatform} from '../platform';
import {CharacteristicValue, PlatformAccessory, Service} from 'homebridge';
import {CharacteristicValue, PlatformAccessory} from 'homebridge';
import {Device} from '../lib/Device';
import {baseDevice} from '../baseDevice';

Expand All @@ -16,6 +16,7 @@ export default class AirPurifier extends baseDevice {
protected serviceAirQuality;
protected serviceLight;
protected serviceFilterMaintenance;
protected serviceAirFastMode;

constructor(
protected readonly platform: LGThinQHomebridgePlatform,
Expand All @@ -29,6 +30,7 @@ export default class AirPurifier extends baseDevice {
AirQualitySensor,
Lightbulb,
FilterMaintenance,
Switch,
},
Characteristic,
} = this.platform;
Expand Down Expand Up @@ -68,12 +70,41 @@ export default class AirPurifier extends baseDevice {
this.serviceFilterMaintenance = accessory.getService(FilterMaintenance) || accessory.addService(FilterMaintenance);
this.serviceFilterMaintenance.updateCharacteristic(Characteristic.Name, 'Filter Maintenance');
}

if (this.config.air_fast_mode) {
this.serviceAirFastMode = accessory.getService('Air Fast') || accessory.addService(Switch, 'Air Fast', 'Air Fast');
this.serviceAirFastMode.updateCharacteristic(Characteristic.Name, 'Air Fast');
this.serviceAirFastMode.getCharacteristic(Characteristic.On)
.onSet(this.setAirFastActive.bind(this));
}
}

public get Status() {
return new AirPurifierStatus(this.accessory.context.device.snapshot);
}

public get config() {
return Object.assign({}, {
air_fast_mode: false,
}, super.config);
}

async setAirFastActive(value: CharacteristicValue) {
if (!this.Status.isPowerOn) {
return;
}

const device: Device = this.accessory.context.device;
const isOn = value as boolean ? 1 : 0;
this.platform.ThinQ?.deviceControl(device.id, {
dataKey: 'airState.miscFuncState.airFast',
dataValue: isOn as number,
}).then(() => {
device.data.snapshot['airState.miscFuncState.airFast'] = isOn as number;
this.updateAccessoryCharacteristic(device);
});
}

async setActive(value: CharacteristicValue) {
const device: Device = this.accessory.context.device;
const isOn = value as boolean ? 1 : 0;
Expand Down Expand Up @@ -184,6 +215,10 @@ export default class AirPurifier extends baseDevice {
this.serviceAirQuality.updateCharacteristic(Characteristic.StatusActive, this.Status.airQuality.isOn);

this.serviceLight.updateCharacteristic(Characteristic.On, this.Status.isLightOn);

if (this.config.air_fast_mode && this.serviceAirFastMode) {
this.serviceAirFastMode.updateCharacteristic(Characteristic.On, this.Status.isAirFastEnable);
}
}
}

Expand Down Expand Up @@ -236,4 +271,8 @@ export class AirPurifierStatus {
public get filterUseTime() {
return this.data['airState.filterMngStates.useTime'] || 0;
}

public get isAirFastEnable() {
return this.data['airState.miscFuncState.airFast'] || 0;
}
}
31 changes: 6 additions & 25 deletions src/v1/devices/AirPurifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ export default class AirPurifier extends V2 {
protected readonly accessory: PlatformAccessory,
) {
super(platform, accessory);

this.turboModeSetup(accessory.context.device);
}

async setActive(value: CharacteristicValue) {
Expand Down Expand Up @@ -56,29 +54,12 @@ export default class AirPurifier extends V2 {
await this.platform.ThinQ?.thinq1DeviceControl(device, 'SignalLighting', value as boolean ? '1' : '0');
}

public turboModeSetup(device: Device) {
// model supported only
if (['AIR_910604_WW'].includes(device.model)) {
const {
Service: {
Switch,
},
} = this.platform;

const serviceTurboMode = this.accessory.getService(Switch) || this.accessory.addService(Switch, 'Turbo Mode');
serviceTurboMode.updateCharacteristic(this.platform.Characteristic.Name, 'Turbo Mode');
serviceTurboMode.getCharacteristic(this.platform.Characteristic.On)
.onGet(() => {
return this.accessory.context.device.snapshot.raw['AirFast'];
})
.onSet((value: CharacteristicValue) => {
if (this.Status.isPowerOn) {
this.platform.ThinQ.thinq1DeviceControl(device, 'AirFast', value ? '1' : '0').then(() => {
device.data.snapshot.raw['AirFast'] = value ? 1 : 0;
this.updateAccessoryCharacteristic(device);
});
}
});
async setAirFastActive(value: CharacteristicValue) {
if (!this.Status.isPowerOn) {
return;
}

const device: Device = this.accessory.context.device;
await this.platform.ThinQ?.thinq1DeviceControl(device, 'AirFast', value as boolean ? '1' : '0');
}
}
1 change: 1 addition & 0 deletions src/v1/transforms/AirPurifierState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export default function AirPurifierState(deviceModel: DeviceModel, decodedMonito
const airState = AirState(deviceModel, decodedMonitor);

airState['airState.operation'] = !!parseInt(decodedMonitor['Operation']);
airState['airState.miscFuncState.airFast'] = !!parseInt(decodedMonitor['AirFast']);

return airState;
}

0 comments on commit d5452af

Please sign in to comment.