homebridge-rinnai-touch-platform
Version:
Homebridge Plugin to control heating/cooling via a Rinnai Touch WiFi Module
255 lines • 9.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Status = exports.States = void 0;
var States;
(function (States) {
States[States["HasMultiSetPoint"] = 0] = "HasMultiSetPoint";
States[States["TemperatureUnits"] = 1] = "TemperatureUnits";
States[States["ZoneName"] = 2] = "ZoneName";
States[States["HasHeater"] = 3] = "HasHeater";
States[States["HasCooler"] = 4] = "HasCooler";
States[States["HasEvaporative"] = 5] = "HasEvaporative";
States[States["Day"] = 6] = "Day";
States[States["Time"] = 7] = "Time";
States[States["OperatingMode"] = 8] = "OperatingMode";
States[States["OperatingState"] = 9] = "OperatingState";
States[States["FaultDetected"] = 10] = "FaultDetected";
States[States["FaultApplianceType"] = 11] = "FaultApplianceType";
States[States["FaultUnit"] = 12] = "FaultUnit";
States[States["FaultSeverity"] = 13] = "FaultSeverity";
States[States["FaultCode"] = 14] = "FaultCode";
States[States["SetDay"] = 15] = "SetDay";
States[States["SetTime"] = 16] = "SetTime";
States[States["SaveDayAndTime"] = 17] = "SaveDayAndTime";
States[States["ZoneInstalled"] = 18] = "ZoneInstalled";
States[States["PowerState"] = 19] = "PowerState";
States[States["FanState"] = 20] = "FanState";
States[States["FanSpeed"] = 21] = "FanSpeed";
States[States["PumpState"] = 22] = "PumpState";
States[States["UserEnabled"] = 23] = "UserEnabled";
States[States["ControlMode"] = 24] = "ControlMode";
States[States["SetPointTemperature"] = 25] = "SetPointTemperature";
States[States["ScheduleOverride"] = 26] = "ScheduleOverride";
States[States["CallingForHeat"] = 27] = "CallingForHeat";
States[States["CallingForCool"] = 28] = "CallingForCool";
States[States["CoolerIsBusy"] = 29] = "CoolerIsBusy";
States[States["AutoEnabled"] = 30] = "AutoEnabled";
States[States["MeasuredTemperature"] = 31] = "MeasuredTemperature";
States[States["SchedulePeriod"] = 32] = "SchedulePeriod";
})(States || (exports.States = States = {}));
class Status {
constructor() {
this.modeMap = {
H: 'HGOM',
C: 'CGOM',
E: 'ECOM',
R: undefined,
N: undefined,
};
this._status = {};
}
update(status) {
var _a;
const json = JSON.parse(status);
for (let i = 0; i < json.length; i++) {
const key = Object.keys(json[i])[0];
this._status[key] = json[i][key];
}
// Update mode
const mode = this.getState(States.OperatingMode);
if (mode !== undefined && mode !== ((_a = this.mode) === null || _a === void 0 ? void 0 : _a.substring(0, 1))) {
this._mode = this.modeMap[mode];
}
}
get mode() {
return this._mode;
}
get modeEvap() {
return this.mode === this.modeMap['E'];
}
get hasMultiSetPoint() {
if (this._hasMultiSetPoint === undefined) {
this._hasMultiSetPoint = this.getState(States.HasMultiSetPoint) === 'Y';
}
return this._hasMultiSetPoint;
}
hasStates(states) {
for (const group1 in states) {
for (const group2 in states[group1]) {
for (const command in states[group1][group2]) {
if (this.getStateByPath({ group1: group1, group2: group2, command: command }) !== states[group1][group2][command]) {
return false;
}
}
}
}
return true;
}
toString() {
return JSON.stringify(this._status);
}
getStateByPath(path) {
var _a, _b;
return (_b = (_a = this._status[path.group1]) === null || _a === void 0 ? void 0 : _a[path.group2]) === null || _b === void 0 ? void 0 : _b[path.command];
}
getState(state, zone) {
const group1 = this.getStateGroup1(state);
const group2 = this.getStateGroup2(state, zone);
const command = this.getStateCommand(state, zone);
if (group1 !== undefined && group2 !== undefined && command !== undefined) {
return this.getStateByPath({ group1: group1, group2: group2, command: command });
}
}
getStateGroup1(state) {
switch (state) {
case States.HasMultiSetPoint:
case States.TemperatureUnits:
case States.ZoneName:
case States.HasHeater:
case States.HasCooler:
case States.HasEvaporative:
case States.Day:
case States.Time:
case States.OperatingState:
case States.OperatingMode:
case States.FaultDetected:
case States.FaultApplianceType:
case States.FaultUnit:
case States.FaultSeverity:
case States.FaultCode:
case States.SetDay:
case States.SetTime:
case States.SaveDayAndTime:
return 'SYST';
default:
return this.mode;
}
}
getStateGroup2(state, zone) {
switch (state) {
case States.HasMultiSetPoint:
case States.TemperatureUnits:
case States.ZoneName:
return 'CFG';
case States.HasHeater:
case States.HasCooler:
case States.HasEvaporative:
return 'AVM';
case States.Day:
case States.Time:
case States.OperatingState:
case States.OperatingMode:
return 'OSS';
case States.FaultDetected:
case States.FaultApplianceType:
case States.FaultUnit:
case States.FaultSeverity:
case States.FaultCode:
return 'FLT';
case States.SetDay:
case States.SetTime:
case States.SaveDayAndTime:
return 'STM';
case States.ZoneInstalled:
return 'CFG';
case States.PowerState:
case States.FanState:
case States.FanSpeed:
return this.modeEvap ? 'GSO' : 'OOP';
case States.PumpState:
return this.modeEvap ? 'GSO' : undefined;
case States.UserEnabled:
return this.modeEvap ? 'GSO' : `Z${zone}O`;
case States.ControlMode:
case States.SetPointTemperature:
return this.modeEvap
? 'GSO'
: this.hasMultiSetPoint ? `Z${zone}O` : 'GSO';
case States.ScheduleOverride:
return this.modeEvap
? undefined
: this.hasMultiSetPoint ? `Z${zone}O` : 'GSO';
case States.CallingForHeat:
case States.CallingForCool:
case States.CoolerIsBusy:
return 'GSS';
case States.AutoEnabled:
case States.MeasuredTemperature:
return this.modeEvap ? 'GSS' : `Z${zone}S`;
case States.SchedulePeriod:
return this.modeEvap
? undefined
: this.hasMultiSetPoint ? `Z${zone}S` : 'GSS';
}
}
getStateCommand(state, zone) {
switch (state) {
case States.HasMultiSetPoint:
return 'MTSP';
case States.TemperatureUnits:
return 'TU';
case States.ZoneName:
return `Z${zone}`;
case States.HasHeater:
return 'HG';
case States.HasCooler:
return 'CG';
case States.HasEvaporative:
return 'EC';
case States.OperatingState:
return 'ST';
case States.OperatingMode:
return 'MD';
case States.FaultDetected:
return 'AV';
case States.FaultApplianceType:
return 'GP';
case States.FaultUnit:
return 'UT';
case States.FaultSeverity:
return 'TP';
case States.FaultCode:
return 'CD';
case States.Day:
case States.SetDay:
return 'DY';
case States.Time:
case States.SetTime:
return 'TM';
case States.SaveDayAndTime:
return 'SV';
case States.ZoneInstalled:
return `Z${zone}IS`;
case States.PowerState:
return this.modeEvap ? 'SW' : 'ST';
case States.FanState:
return this.modeEvap ? 'FS' : 'ST';
case States.FanSpeed:
return 'FL';
case States.PumpState:
return this.modeEvap ? 'PS' : undefined;
case States.UserEnabled:
return this.modeEvap ? `Z${zone}UE` : 'UE';
case States.ControlMode:
return 'OP';
case States.SetPointTemperature:
return 'SP';
case States.ScheduleOverride:
return this.modeEvap ? undefined : 'AO';
case States.CallingForHeat:
return 'HC';
case States.CallingForCool:
return 'CC';
case States.CoolerIsBusy:
return 'BY';
case States.AutoEnabled:
return this.modeEvap ? `Z${zone}AE` : 'AE';
case States.MeasuredTemperature:
return 'MT';
case States.SchedulePeriod:
return this.modeEvap ? undefined : 'AT';
}
}
}
exports.Status = Status;
//# sourceMappingURL=Status.js.map