daikin-controller
Version:
Control Daikin Air Conditioner devices using nodejs
60 lines (59 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DemandControl = void 0;
const DaikinDataParser_1 = require("../DaikinDataParser");
class DemandControl {
// ret=OK,type=1,en_demand=1,mode=0,max_pow=55,scdl_per_day=4,moc=0,tuc=0,wec=0,thc=0,frc=0,sac=0,suc=0
static parseResponse(dict, cb) {
const result = new DemandControl();
result.type = DaikinDataParser_1.DaikinDataParser.resolveInteger(dict, 'type');
result.enabled = DaikinDataParser_1.DaikinDataParser.resolveBool(dict, 'en_demand');
result.mode = DaikinDataParser_1.DaikinDataParser.resolveInteger(dict, 'mode');
result.maxPower = DaikinDataParser_1.DaikinDataParser.resolveInteger(dict, 'max_pow');
cb(null, 'OK', result);
}
overwrite(obj) {
if (obj.type !== undefined)
this.type = obj.type;
if (obj.enabled !== undefined)
this.enabled = obj.enabled;
if (obj.mode !== undefined)
this.mode = obj.mode;
if (obj.maxPower !== undefined)
this.maxPower = obj.maxPower;
}
// According to https://www.akkudoktor.net/forum/postid/190147/
getRequestDict() {
if (this.enabled == undefined)
throw new Error('Required Field enabled does not exist');
const dict = {};
dict['lpw'] = ''; // Appeared in all examples but doesn't seem to be necessary
dict['en_demand'] = this.enabled ? 1 : 0;
if (!this.enabled) {
// Switch off demand control
// http://<DAIKIN-IP>/aircon/set_demand_control?lpw=&en_demand=0
return dict;
}
// Enable and set demand control
// http://<DAIKIN-IP>/aircon/set_demand_control?lpw=&en_demand=1&mode=0&type=1&max_pow=[40-100]
// For automatic or manual demand control we need type==1, mode and maxPower
if (this.type !== 1)
throw new Error('Required Field type != 1. Assume no support for demand control');
if (this.mode === undefined)
throw new Error('Required Field mode do not exists');
if (this.maxPower === undefined)
throw new Error('Required Field maxPower do not exists');
// For now we do support automatic or manual mode only
if (this.mode !== 0 && this.mode !== 2)
throw new Error('Currently only automatic(2) or manual mode(0) is supported');
// maxPower must be between 40 and 100
if (this.maxPower < 40 || this.maxPower > 100)
throw new Error('maxPower must be between 40 and 100');
dict['type'] = 1; // must be set to 1
dict['mode'] = this.mode;
// maxPower must be a multiple of 5; round to the nearest valid value
dict['max_pow'] = Math.round(this.maxPower / 5) * 5;
return dict;
}
}
exports.DemandControl = DemandControl;