homebridge-tahoma-fork
Version:
Sample Platform plugin for TaHoma and Cozytouch services (Somfy,Atlantic,Thermor,Sauter): https://github.com/Stuard40/homebridge-tahoma
123 lines • 6.24 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Platform_1 = require("../../Platform");
const overkiz_client_1 = require("overkiz-client");
const HeatingSystem_1 = __importDefault(require("../HeatingSystem"));
class SomfyThermostat extends HeatingSystem_1.default {
constructor() {
super(...arguments);
this.MIN_TEMP = 0;
this.MAX_TEMP = 26;
this.TARGET_MODES = [
Platform_1.Characteristics.TargetHeatingCoolingState.AUTO,
Platform_1.Characteristics.TargetHeatingCoolingState.HEAT,
Platform_1.Characteristics.TargetHeatingCoolingState.COOL,
Platform_1.Characteristics.TargetHeatingCoolingState.OFF,
];
this.lastRefresh = Date.now();
}
registerMainService() {
var _a;
const service = super.registerMainService();
(_a = this.targetState) === null || _a === void 0 ? void 0 : _a.onGet(this.refreshStates.bind(this));
return service;
}
async refreshStates() {
var _a, _b;
if (this.lastRefresh < Date.now() - (60 * 1000)) {
this.lastRefresh = Date.now();
await this.executeCommands(new overkiz_client_1.Command('refreshState'));
}
return (_b = (_a = this.targetState) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : Platform_1.Characteristics.TargetHeatingCoolingState.OFF;
}
getTargetStateCommands(value) {
switch (value) {
case Platform_1.Characteristics.TargetHeatingCoolingState.AUTO:
return new overkiz_client_1.Command('exitDerogation');
case Platform_1.Characteristics.TargetHeatingCoolingState.HEAT:
return new overkiz_client_1.Command('setDerogation', ['atHomeMode', 'further_notice']);
case Platform_1.Characteristics.TargetHeatingCoolingState.COOL:
return new overkiz_client_1.Command('setDerogation', ['sleepingMode', 'further_notice']);
case Platform_1.Characteristics.TargetHeatingCoolingState.OFF:
return new overkiz_client_1.Command('setDerogation', ['awayMode', 'further_notice']);
}
}
getTargetTemperatureCommands(value) {
return new overkiz_client_1.Command('setDerogation', [value, 'further_notice']);
}
onStateChanged(name, value) {
switch (name) {
case 'core:TargetTemperatureState':
case 'core:DerogatedTargetTemperatureState':
case 'core:DerogationActivationState':
case 'somfythermostat:DerogationHeatingModeState':
this.postpone(this.computeStates);
break;
default:
super.onStateChanged(name, value);
break;
}
}
computeStates() {
var _a, _b, _c;
let targetState;
let targetTemperature;
const derog = this.device.get('core:DerogationActivationState') === 'active';
const mode = this.device.get(derog ? 'somfythermostat:DerogationHeatingModeState' : 'somfythermostat:HeatingModeState');
switch (mode) {
case 'atHomeMode':
case 'geofencingMode':
case 'manualMode':
(_a = this.currentState) === null || _a === void 0 ? void 0 : _a.updateValue(Platform_1.Characteristics.CurrentHeatingCoolingState.HEAT);
targetState = derog ? Platform_1.Characteristics.TargetHeatingCoolingState.HEAT : Platform_1.Characteristics.TargetHeatingCoolingState.AUTO;
break;
case 'sleepingMode':
case 'suddenDropMode':
(_b = this.currentState) === null || _b === void 0 ? void 0 : _b.updateValue(Platform_1.Characteristics.CurrentHeatingCoolingState.COOL);
targetState = derog ? Platform_1.Characteristics.TargetHeatingCoolingState.COOL : Platform_1.Characteristics.TargetHeatingCoolingState.AUTO;
break;
case 'awayMode':
case 'freezeMode':
(_c = this.currentState) === null || _c === void 0 ? void 0 : _c.updateValue(Platform_1.Characteristics.CurrentHeatingCoolingState.OFF);
targetState = Platform_1.Characteristics.TargetHeatingCoolingState.OFF;
break;
}
switch (mode) {
case 'atHomeMode':
targetTemperature = this.device.get('somfythermostat:AtHomeTargetTemperatureState');
break;
case 'geofencingMode':
targetTemperature = this.device.get('somfythermostat:GeofencingModeTargetTemperatureState');
break;
case 'manualMode':
targetTemperature = this.device.get('somfythermostat:ManualModeTargetTemperatureState');
break;
case 'sleepingMode':
targetTemperature = this.device.get('somfythermostat:SleepingModeTargetTemperatureState');
break;
case 'suddenDropMode':
targetTemperature = this.device.get('somfythermostat:SuddenDropModeTargetTemperatureState');
break;
case 'awayMode':
targetTemperature = this.device.get('somfythermostat:AwayModeTargetTemperatureState');
break;
case 'freezeMode':
targetTemperature = this.device.get('somfythermostat:FreezeModeTargetTemperatureState');
break;
}
if (targetTemperature === undefined || targetTemperature === null) {
targetTemperature = this.device.get(derog ? 'core:DerogatedTargetTemperatureState' : 'core:TargetTemperatureState');
}
if (this.targetTemperature !== undefined && targetTemperature !== undefined) {
this.targetTemperature.updateValue(targetTemperature);
}
if (this.targetState !== undefined && targetState !== undefined && this.isIdle) {
this.targetState.updateValue(targetState);
}
}
}
exports.default = SomfyThermostat;
//# sourceMappingURL=SomfyThermostat.js.map