homebridge-hilo
Version:
Plugin Homebridge (non officiel) pour la passerelle et les appareils Hilo de Hydro-Québec | Unofficial Homebridge plugin for Hydro-Québec Hilo bridge and devices
126 lines • 7.1 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Thermostat = void 0;
const axios_1 = __importDefault(require("axios"));
const HiloDevice_1 = require("./HiloDevice");
const hiloApi_1 = require("../hiloApi");
class Thermostat extends HiloDevice_1.HiloDevice {
constructor(accessory, api) {
var _a, _b, _c, _d;
super(accessory, api);
this.service =
accessory.getService(this.api.hap.Service.Thermostat) ||
accessory.addService(this.api.hap.Service.Thermostat);
this.service.setCharacteristic(this.api.hap.Characteristic.Name, this.accessory.context.device.name);
this.service
.getCharacteristic(this.api.hap.Characteristic.CurrentHeatingCoolingState)
.onGet(this.getCurrentHeatingCoolingState.bind(this))
.setProps({
validValues: [
this.api.hap.Characteristic.CurrentHeatingCoolingState.OFF,
this.api.hap.Characteristic.CurrentHeatingCoolingState.HEAT,
],
maxValue: this.api.hap.Characteristic.CurrentHeatingCoolingState.HEAT,
});
this.service
.getCharacteristic(this.api.hap.Characteristic.TargetHeatingCoolingState)
.onGet(this.getTargetHeatingCoolingState.bind(this))
.onSet(this.setTargetHeatingCoolingState.bind(this))
.setProps({
validValues: [
this.api.hap.Characteristic.TargetHeatingCoolingState.OFF,
this.api.hap.Characteristic.TargetHeatingCoolingState.HEAT,
],
maxValue: this.api.hap.Characteristic.TargetHeatingCoolingState.HEAT,
});
this.service
.getCharacteristic(this.api.hap.Characteristic.CurrentTemperature)
.onGet(this.getCurrentTemperature.bind(this));
this.service
.getCharacteristic(this.api.hap.Characteristic.TargetTemperature)
.onGet(this.getTargetTemperature.bind(this))
.onSet(this.setTargetTemperature.bind(this))
.setProps({
minValue: (_b = (_a = this.device.minAmbientTempSetpoint) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 5,
minStep: 0.5,
maxValue: (_d = (_c = this.device.maxAmbientTempSetpoint) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : 30,
});
this.service
.getCharacteristic(this.api.hap.Characteristic.TemperatureDisplayUnits)
.onGet(this.getTemperatureDisplayUnits.bind(this))
.onSet(this.setTemperatureDisplayUnits.bind(this));
}
updateDevice(device) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
super.updateDevice(device);
if ("ambientTemperature" in device &&
device.ambientTemperature !== undefined &&
device.ambientTemperature !== null) {
(_b = (_a = this.service) === null || _a === void 0 ? void 0 : _a.getCharacteristic(this.api.hap.Characteristic.CurrentTemperature)) === null || _b === void 0 ? void 0 : _b.updateValue((_c = device.ambientTemperature.value) !== null && _c !== void 0 ? _c : 20);
}
if ("ambientTempSetpoint" in device &&
device.ambientTempSetpoint !== undefined &&
device.ambientTempSetpoint !== null) {
(_e = (_d = this.service) === null || _d === void 0 ? void 0 : _d.getCharacteristic(this.api.hap.Characteristic.TargetTemperature)) === null || _e === void 0 ? void 0 : _e.updateValue((_g = (_f = device.ambientTempSetpoint) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : 20);
}
if ("power" in device &&
device.power !== undefined &&
device.power !== null &&
"value" in device.power &&
device.power.value !== null &&
device.power.value !== undefined) {
(_j = (_h = this.service) === null || _h === void 0 ? void 0 : _h.getCharacteristic(this.api.hap.Characteristic.CurrentHeatingCoolingState)) === null || _j === void 0 ? void 0 : _j.updateValue(device.power.value > 0
? this.api.hap.Characteristic.CurrentHeatingCoolingState.HEAT
: this.api.hap.Characteristic.CurrentHeatingCoolingState.OFF);
}
}
async getCurrentHeatingCoolingState() {
this.logger.debug(`Getting ${this.accessory.context.device.name} currentHeatingCoolingState`);
return this.device.power &&
this.device.power.value !== null &&
this.device.power.value !== undefined &&
this.device.power.value > 0
? this.api.hap.Characteristic.CurrentHeatingCoolingState.HEAT
: this.api.hap.Characteristic.CurrentHeatingCoolingState.OFF;
}
async getTargetHeatingCoolingState() {
this.logger.debug(`Getting ${this.accessory.context.device.name} targetHeatingCoolingState`);
return this.api.hap.Characteristic.TargetHeatingCoolingState.HEAT;
}
async setTargetHeatingCoolingState(value) {
this.logger.debug(`Setting ${this.accessory.context.device.name} targetHeatingCoolingState to ${value}`);
}
async getTargetTemperature() {
var _a, _b;
this.logger.debug(`Getting ${this.accessory.context.device.name} target temperature`);
return (_b = (_a = this.device.ambientTempSetpoint) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 20;
}
async setTargetTemperature(value) {
var _a;
const targetTemperature = value;
this.logger.debug(`Setting ${this.accessory.context.device.name} target temparature to ${targetTemperature}`);
try {
await hiloApi_1.hiloApi.put(`/Automation/v1/api/Locations/${this.accessory.context.device.locationId}/Devices/${this.accessory.context.device.id}/Attributes`, { TargetTemperature: targetTemperature });
}
catch (error) {
this.logger.error("Failed to set target temperature", axios_1.default.isAxiosError(error) ? (_a = error.response) === null || _a === void 0 ? void 0 : _a.data : error);
}
}
async getCurrentTemperature() {
var _a, _b;
this.logger.debug(`Getting ${this.accessory.context.device.name} current temperature`);
return (_b = (_a = this.device.ambientTemperature) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 20;
}
async getTemperatureDisplayUnits() {
this.logger.debug(`Getting ${this.accessory.context.device.name} temperature display units`);
return this.api.hap.Characteristic.TemperatureDisplayUnits.CELSIUS;
}
async setTemperatureDisplayUnits(value) {
this.logger.debug(`Setting ${this.accessory.context.device.name} temperature display units to ${value}`);
}
}
exports.Thermostat = Thermostat;
//# sourceMappingURL=Thermostat.js.map