@petro-kushchak/homebridge-ch-gree-ac-eve-platform
Version:
Cooper&Hunter (based on Gree AC API) AC plugin for Homebridge (Homekit) with Web Hook/MQTT Data Sharing
151 lines • 6.19 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const stream_1 = require("stream");
const acStatus_1 = __importDefault(require("../utils/acStatus"));
const acSender_1 = __importDefault(require("../utils/acSender"));
class HeaterCooler {
constructor(platform, accessory) {
this.platform = platform;
this.accessory = accessory;
this.currentTemp = 45;
this.EVENT = 'action';
this.eventEmitter = new stream_1.EventEmitter();
this.service =
this.accessory.getService(this.platform.Service.HeaterCooler) ||
this.accessory.addService(this.platform.Service.HeaterCooler);
this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.Name);
this.getStatus = (0, acStatus_1.default)(this.accessory.context.device);
this.sendData = (0, acSender_1.default)(this.accessory.context.device);
this.activeChar = this.service
.getCharacteristic(this.platform.Characteristic.Active)
.onGet(this.handleActiveGet.bind(this))
.onSet(this.handleActiveSet.bind(this));
this.service
.getCharacteristic(this.platform.Characteristic.CurrentHeaterCoolerState)
.onGet(this.handleCurrentHeaterCoolerStateGet.bind(this));
this.service
.getCharacteristic(this.platform.Characteristic.TargetHeaterCoolerState)
.onGet(this.handleTargetHeaterCoolerStateGet.bind(this))
.onSet(this.handleTargetHeaterCoolerStateSet.bind(this));
this.service
.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
.onGet(this.handleCurrentTemperatureGet.bind(this));
this.service
.getCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits)
.onGet(this.handleTemperatureDisplayUnitsGet.bind(this))
.onSet(this.handleTemperatureDisplayUnitsSet.bind(this));
this.service
.getCharacteristic(this.platform.Characteristic.CoolingThresholdTemperature)
.setProps({
minValue: this.platform.config.coolingMinTemp,
maxValue: this.platform.config.coolingMaxTemp,
minStep: 1
})
.onGet(this.handleThresholdTemperatureGet.bind(this))
.onSet(this.handleThresholdTemperatureSet.bind(this));
this.service
.getCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature)
.setProps({
minValue: this.platform.config.heatingMinTemp,
maxValue: this.platform.config.heatingMaxTemp,
minStep: 1
})
.onGet(this.handleThresholdTemperatureGet.bind(this))
.onSet(this.handleThresholdTemperatureSet.bind(this));
}
// Getters
async handleActiveGet() {
const status = await this.getStatus();
return status.Pow;
}
async handleCurrentHeaterCoolerStateGet() {
const status = await this.getStatus();
if (!status.Pow) {
return this.platform.Characteristic.CurrentHeaterCoolerState.INACTIVE;
}
switch (status.Mod) {
case 1:
case 2:
case 3:
return this.platform.Characteristic.CurrentHeaterCoolerState.COOLING;
case 4:
return this.platform.Characteristic.CurrentHeaterCoolerState.HEATING;
default:
return this.platform.Characteristic.CurrentHeaterCoolerState.IDLE;
}
}
async handleTargetHeaterCoolerStateGet() {
const status = await this.getStatus();
switch (status.Mod) {
case 1:
case 2:
case 3:
return this.platform.Characteristic.TargetHeaterCoolerState.COOL;
case 4:
return this.platform.Characteristic.TargetHeaterCoolerState.HEAT;
default:
return this.platform.Characteristic.TargetHeaterCoolerState.AUTO;
}
}
async handleCurrentTemperatureGet() {
// let temp = this.platform.config.defaultCurrentTemp ?? 45;
// // if (this.platform.config.dhtService) {
// // temp = (await this.readDHTData())?.temperature ?? temp;
// // }
return this.currentTemp;
}
async handleThresholdTemperatureGet() {
const status = await this.getStatus();
return status.SetTem;
}
async handleTemperatureDisplayUnitsGet() {
const status = await this.getStatus();
return status.TemUn;
}
// Setters
async handleActiveSet(value) {
await this.sendData({
Pow: parseInt(value.toString())
});
this.eventEmitter.emit(this.EVENT, 'Pow', parseInt(value.toString()));
}
async handleTargetHeaterCoolerStateSet(value) {
const { TargetHeaterCoolerState } = this.platform.Characteristic;
let readValue;
switch (parseInt(value.toString())) {
case TargetHeaterCoolerState.HEAT:
readValue = 4;
break;
case TargetHeaterCoolerState.COOL:
readValue = 1;
break;
default:
readValue = 0;
break;
}
await this.sendData({
Mod: readValue
});
this.eventEmitter.emit(this.EVENT, 'Mod', parseInt(value.toString()));
}
async handleThresholdTemperatureSet(value) {
await this.sendData({
SetTem: parseInt(value.toString())
});
this.eventEmitter.emit(this.EVENT, 'SetTem', parseInt(value.toString()));
}
handleTemperatureDisplayUnitsSet() {
return undefined;
}
updateCurrentTemp(value) {
this.currentTemp = value;
this.service
.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
.updateValue(this.currentTemp);
}
}
exports.default = HeaterCooler;
//# sourceMappingURL=HeaterCooler.js.map