UNPKG

homebridge-loxone-proxy

Version:

Homebridge Dynamic Platform Plugin which exposes a Loxone System to Homekit.

104 lines 5.22 kB
"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