homebridge-daikin-oneplus
Version:
Control a Daikin One+ thermostat.
60 lines • 2.72 kB
JavaScript
/**
* State Switch
* A switch accessory showing whether the thermostat is currently in the specified state.
*/
export class DaikinOnePlusStateSwitch {
platform;
accessory;
deviceId;
daikinApi;
switchType;
service;
constructor(platform, accessory, deviceId, daikinApi, switchType) {
this.platform = platform;
this.accessory = accessory;
this.deviceId = deviceId;
this.daikinApi = daikinApi;
this.switchType = switchType;
// set accessory information
this.accessory
.getService(this.platform.Service.AccessoryInformation)
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'Daikin')
.setCharacteristic(this.platform.Characteristic.Model, accessory.context.device.model)
.setCharacteristic(this.platform.Characteristic.SerialNumber, accessory.context.device.id)
.setCharacteristic(this.platform.Characteristic.FirmwareRevision, accessory.context.device.firmwareVersion);
// you can create multiple services for each accessory
this.service = this.accessory.getService(this.platform.Service.Switch) || this.accessory.addService(this.platform.Service.Switch);
// set the service name, this is what is displayed as the default name on the Home app
this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.displayName);
this.service
.getCharacteristic(this.platform.Characteristic.On)
.onGet(() => {
this.daikinApi.updateNow();
return this.handleCurrentStateGet();
})
.onSet(this.handleCurrentStateSet.bind(this));
this.updateValues();
this.daikinApi.addListener(this.deviceId, this.updateValues.bind(this));
}
updateValues() {
const value = this.handleCurrentStateGet();
this.service.updateCharacteristic(this.platform.Characteristic.On, value);
}
/**
* Handle requests to get the current value of the "On" characteristic
*/
handleCurrentStateGet() {
const currentStatus = this.daikinApi.getCurrentStatus(this.deviceId);
const isOn = currentStatus === this.switchType;
this.platform.log.debug('%s - Get CurrentState:', this.accessory.displayName, isOn);
return isOn;
}
/**
* Handle requests to set the "On" characteristic
*/
handleCurrentStateSet(value) {
this.platform.log.debug('%s - Changing state is not allowed.', this.accessory.displayName);
setTimeout(() => this.service.getCharacteristic(this.platform.Characteristic.On).updateValue(!value), 1000);
}
}
//# sourceMappingURL=platformStateSwitch.js.map