homey-api
Version:
59 lines (48 loc) • 1.7 kB
JavaScript
const APIDefinition = require('../APIDefinition');
const HomeyAPIV1 = require('../HomeyAPI/HomeyAPIV1');
const HomeyAPIV2 = require('../HomeyAPI/HomeyAPIV2');
const HomeyAPIV3Local = require('../HomeyAPI/HomeyAPIV3Local');
const HomeyAPIV3Cloud = require('../HomeyAPI/HomeyAPIV3Cloud');
/**
* A Homey as returned by {@link AthomCloudAPI}.
* @class
* @hideconstructor
* @memberof AthomCloudAPI
*/
class Homey extends APIDefinition {
/**
* @type string
*/
get id() {
return this._id;
}
/**
* This method returns a {@link HomeyAPI} instance matching the Homey's API level and platform.
* Additionally, it ensures a session on the Homey during initialization.
* @param {object} [opts]
* @param {string|array} [opts.strategy] - One string, or an array of {@link HomeyAPI#DISCOVERY_STRATEGIES} strings, to connect to the Homey.
* @returns {Promise<HomeyAPI>}
*/
async authenticate({ strategy, reconnect } = {}) {
const HomeyAPI = (() => {
if (this.apiVersion === 1) return HomeyAPIV1;
if (this.apiVersion === 2) return HomeyAPIV2;
if (this.apiVersion === 3 && this.platform === 'local') return HomeyAPIV3Local;
if (this.apiVersion === 3 && this.platform === 'cloud') return HomeyAPIV3Cloud;
throw new Error(`Unsupported Homey API Version: ${this.apiVersion}`);
})();
const homey = new HomeyAPI({
strategy,
reconnect,
api: this.__api,
properties: this.__properties,
debug: (...props) => {
return this.__api.__debug(`[${HomeyAPI.name}:${this.__properties.id}]`, ...props);
},
});
await homey.login();
return homey;
}
}
module.exports = Homey;
;