homebridge-loxone-proxy
Version:
Homebridge Dynamic Platform Plugin which exposes a Loxone System to Homekit.
104 lines • 5.22 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Thermostat = void 0;
const BaseService_1 = require("./BaseService");
class Thermostat extends BaseService_1.BaseService {
constructor() {
super(...arguments);
this.LoxoneEpoch = new Date('2009-01-01T00:00:00Z').getTime() / 1000;
this.State = {
CurrentHeatingCoolingState: 0,
TargetHeatingCoolingState: 3,
CurrentTemperature: 15,
TargetTemperature: 15,
TemperatureDisplayUnits: this.platform.msInfo.tempUnit,
};
}
setupService() {
this.service =
this.accessory.getService(this.platform.Service.Thermostat) ||
this.accessory.addService(this.platform.Service.Thermostat);
this.service.getCharacteristic(this.platform.Characteristic.CurrentHeatingCoolingState)
.onGet(this.handleCurrentHeatingCoolingStateGet.bind(this));
this.service.getCharacteristic(this.platform.Characteristic.TargetHeatingCoolingState)
.onGet(this.handleTargetHeatingCoolingStateGet.bind(this))
.onSet(this.handleTargetHeatingCoolingStateSet.bind(this));
this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature)
.onGet(this.handleCurrentTemperatureGet.bind(this));
this.service.getCharacteristic(this.platform.Characteristic.TargetTemperature)
.onGet(this.handleTargetTemperatureGet.bind(this))
.onSet(this.handleTargetTemperatureSet.bind(this));
this.service.getCharacteristic(this.platform.Characteristic.TemperatureDisplayUnits)
.onGet(this.handleTemperatureDisplayUnitsGet.bind(this));
}
updateService(message) {
this.platform.log.debug(`[${this.device.name}] Callback ${message.state} update for Thermostat: ${message.value}`);
switch (message.state) {
case 'operatingMode':
switch (message.value) {
case 0:
case 3:
this.State.TargetHeatingCoolingState = 3;
break;
case 1:
case 4:
this.State.TargetHeatingCoolingState = 1;
break;
case 2:
case 5:
this.State.TargetHeatingCoolingState = 2;
break;
}
break;
case 'tempActual':
this.State.CurrentTemperature = this.limitHomeKitTemperature(message.value);
this.updateCharacteristicValue('CurrentTemperature', this.State.CurrentTemperature);
this.State.CurrentHeatingCoolingState = (this.State.CurrentTemperature < this.State.TargetTemperature) ? 1 : 0;
break;
case 'tempTarget':
this.State.TargetTemperature = this.limitHomeKitTemperature(message.value);
this.updateCharacteristicValue('TargetTemperature', this.State.TargetTemperature);
this.State.CurrentHeatingCoolingState = (this.State.CurrentTemperature < this.State.TargetTemperature) ? 1 : 0;
break;
}
}
limitHomeKitTemperature(temp) {
temp = (temp < 10) ? 10 : temp;
temp = (temp > 38) ? 38 : temp;
return temp;
}
handleCurrentHeatingCoolingStateGet() {
this.platform.log.debug(`[${this.device.name}] Triggered GET CurrentHeatingCoolingState`);
return this.State.CurrentHeatingCoolingState;
}
handleTargetHeatingCoolingStateGet() {
this.platform.log.debug(`[${this.device.name}] Triggered GET TargetHeatingCoolingState`);
return this.State.TargetHeatingCoolingState;
}
handleTargetHeatingCoolingStateSet(value) {
this.platform.log.debug(`[${this.device.name}] Triggered SET TargetHeatingCoolingState: ${value}`);
}
handleCurrentTemperatureGet() {
this.platform.log.debug(`[${this.device.name}] Triggered GET CurrentTemperature`);
return this.State.CurrentTemperature;
}
handleTargetTemperatureGet() {
this.platform.log.debug(`[${this.device.name}] Triggered GET TargetTemperature`);
return this.State.TargetTemperature;
}
handleTargetTemperatureSet(value) {
const currentDate = new Date();
const nextDayAtMidnight = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() + 1, 0, 0, 0);
const nextDayAtMidnightInSeconds = nextDayAtMidnight.getTime() / 1000;
const secondsDifference = nextDayAtMidnightInSeconds - this.LoxoneEpoch;
this.platform.log.debug(`[${this.device.name}] Triggered SET TargetTemperature:${value}`);
const command = `override/3/[${secondsDifference}]/${value}`;
this.platform.LoxoneHandler.sendCommand(this.device.uuidAction, command);
}
handleTemperatureDisplayUnitsGet() {
this.platform.log.debug(`[${this.device.name}] Triggered GET TemperatureDisplayUnits`);
return this.State.TemperatureDisplayUnits;
}
}
exports.Thermostat = Thermostat;
//# sourceMappingURL=Thermostat.js.map