homebridge-vwconnectid
Version:
Homebridge plugin for Volkswagen ID.x cars
212 lines • 12.9 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WeConnectIDPlatform = void 0;
const settings_1 = require("./settings");
const chargingAccessory_1 = require("./chargingAccessory");
const climatisationAccessory_1 = require("./climatisationAccessory");
const settingsAccessory_1 = require("./settingsAccessory");
const locationMotionSensorAccessory_1 = require("./locationMotionSensorAccessory");
const eventMotionSensorAccessory_1 = require("./eventMotionSensorAccessory");
const destinationSwitchAccessory_1 = require("./destinationSwitchAccessory");
const vwapi = __importStar(require("npm-vwconnectidapi"));
class WeConnectIDPlatform {
constructor(log, config, api) {
this.log = log;
this.config = config;
this.api = api;
this.Service = this.api.hap.Service;
this.Characteristic = this.api.hap.Characteristic;
this.vwLog = new vwapi.Log();
this.vwConn = new vwapi.VwWeConnect();
this.idStatusEmitter = vwapi.idStatusEmitter;
this.idLogEmitter = vwapi.idLogEmitter;
this.accessories = [];
this.log.info('Finished initializing platform:', this.config.name);
this.vwConn.setLogLevel(this.config.options.logLevel || 'ERROR', true);
//this.vwConn.setLogLevel()
this.idLogEmitter.on('DEBUG', (data) => { this.log.info(data); });
this.idLogEmitter.on('ERROR', (data) => { this.log.error(data); });
this.idLogEmitter.on('INFO', (data) => { this.log.info(data); });
this.idLogEmitter.on('WARN', (data) => { this.log.warn(data); });
this.vwConn.setCredentials(this.config.weconnect.username, this.config.weconnect.password);
if (this.config.options.apiPort) {
this.vwConn.enableApi(this.config.options.apiPort);
}
this.api.on('didFinishLaunching', () => {
log.info('Executed didFinishLaunching callback');
this.vwConn.getData()
.then(() => {
this.vwConn.setActiveVin(this.config.weconnect.vin);
this.discoverDevices();
})
.catch((error) => {
log.error(error);
process.exit(1);
});
});
}
configureAccessory(accessory) {
this.log.info('Loading accessory from cache:', accessory.displayName);
this.accessories.push(accessory);
}
discoverDevices() {
//Charging accessory
const chargingUuid = this.api.hap.uuid.generate('charging');
const existingChargingAccessory = this.accessories.find(accessory => accessory.UUID === chargingUuid);
if (existingChargingAccessory) {
this.log.info('Restoring existing charging accessory from cache:', existingChargingAccessory.displayName);
new chargingAccessory_1.ChargingAccessory(this, existingChargingAccessory);
}
else {
if (this.config.options.chargingAccessory !== undefined) {
this.log.info('Adding new charging accessory:', this.config.options.chargingAccessory || 'Charging');
const accessory = new this.api.platformAccessory(this.config.options.chargingAccessory || 'Charging', chargingUuid);
new chargingAccessory_1.ChargingAccessory(this, accessory);
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
}
}
const remainingRangeUuid = this.api.hap.uuid.generate('remainingRange');
const existingRemainingRangeAccessory = this.accessories.find(accessory => accessory.UUID === remainingRangeUuid);
if (existingRemainingRangeAccessory) {
this.log.info('Restoring existing remaining range accessory from cache:', existingRemainingRangeAccessory.displayName);
new chargingAccessory_1.RemainingRangeAccessory(this, existingRemainingRangeAccessory);
}
else {
if (this.config.options.remainingRangeAccessory !== undefined) {
this.log.info('Adding new remaining range accessory:', this.config.options.remainingRangeAccessory || 'Remaining range');
const accessory = new this.api.platformAccessory(this.config.options.remainingRangeAccessory || 'Remaining range', remainingRangeUuid);
new chargingAccessory_1.RemainingRangeAccessory(this, accessory);
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
}
}
// climatisation accessory
const climatisationUuid = this.api.hap.uuid.generate('climatisation');
const existingClimatisationAccessory = this.accessories.find(accessory => accessory.UUID === climatisationUuid);
if (existingClimatisationAccessory) {
this.log.info('Restoring existing climatisation accessory from cache:', existingClimatisationAccessory.displayName);
new climatisationAccessory_1.ClimatisationAccessory(this, existingClimatisationAccessory);
}
else {
if (this.config.options.climatisationAccessory !== undefined) {
this.log.info('Adding new climatisation accessory:', this.config.options.climatisationAccessory || 'Climatisation');
const accessory = new this.api.platformAccessory(this.config.options.climatisationAccessory ||
'Climatisation', climatisationUuid);
new climatisationAccessory_1.ClimatisationAccessory(this, accessory);
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
}
}
// location based stuff
if (typeof this.config.options.destinations !== 'undefined') {
if (typeof this.config.options.locationMotionSensors !== 'undefined') {
this.log.error('You have both \'destinations\' and \'locationMotionSensors\' blocks in your config. The latter is not processed, please remove.');
}
for (const device of this.config.options.destinations) {
// destination switches
if (typeof device.address !== 'undefined') {
const uuid = this.api.hap.uuid.generate(device.name + '-dest');
const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
if (existingAccessory) {
this.log.info('Restoring existing accessory from cache:', existingAccessory.displayName);
new destinationSwitchAccessory_1.DestinationSwitchAccessory(this, existingAccessory);
}
else {
this.log.info('Adding new accessory:', device.name);
const accessory = new this.api.platformAccessory(device.name, uuid);
accessory.context.device = device;
new destinationSwitchAccessory_1.DestinationSwitchAccessory(this, accessory);
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
}
}
// destination motion sensors
if (typeof device.notificationRadius !== 'undefined') {
const uuid = this.api.hap.uuid.generate(device.name);
const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
if (existingAccessory) {
this.log.info('Restoring existing accessory from cache:', existingAccessory.displayName);
new locationMotionSensorAccessory_1.LocationMotionSensorAccessory(this, existingAccessory);
}
else {
this.log.info('Adding new accessory:', device.name);
const accessory = new this.api.platformAccessory(device.name, uuid);
accessory.context.device = device;
new locationMotionSensorAccessory_1.LocationMotionSensorAccessory(this, accessory);
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
}
}
}
}
else if (typeof this.config.options.locationMotionSensors !== 'undefined') {
this.log.error('Location aware functionality has changed. Please update your config.json. You\'re missing out on a cool new feature! See https://github.com/adhyh/homebridge-vwconnectid#upgrading-from-105-to-110 for details.');
for (const device of this.config.options.locationMotionSensors) {
const uuid = this.api.hap.uuid.generate(device.name);
const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
if (existingAccessory) {
this.log.info('Restoring existing location motion sensor accessory from cache:', existingAccessory.displayName);
new locationMotionSensorAccessory_1.LocationMotionSensorAccessory(this, existingAccessory);
}
else {
this.log.info('Adding new location motion sensor accessory:', device.name);
const accessory = new this.api.platformAccessory(device.name, uuid);
accessory.context.device = device;
new locationMotionSensorAccessory_1.LocationMotionSensorAccessory(this, accessory);
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
}
}
}
for (const device of this.config.options.eventMotionSensors) {
const uuid = this.api.hap.uuid.generate(device.name);
const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
if (existingAccessory) {
this.log.info('Restoring existing event motions sensor accessory from cache:', existingAccessory.displayName);
new eventMotionSensorAccessory_1.EventMotionSensorAccessory(this, existingAccessory);
}
else {
this.log.info('Adding new event motion sensor accessory:', device.name);
const accessory = new this.api.platformAccessory(device.name, uuid);
accessory.context.device = device;
new eventMotionSensorAccessory_1.EventMotionSensorAccessory(this, accessory);
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
}
}
for (const device of this.config.options.settingSwitches) {
const uuid = this.api.hap.uuid.generate(device.name);
const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
if (existingAccessory) {
this.log.info('Restoring existing setting switch accessory from cache:', existingAccessory.displayName);
new settingsAccessory_1.SettingAccessory(this, existingAccessory);
}
else {
this.log.info('Adding new setting switch accessory:', device.name);
const accessory = new this.api.platformAccessory(device.name, uuid);
accessory.context.device = device;
new settingsAccessory_1.SettingAccessory(this, accessory);
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
}
}
}
}
exports.WeConnectIDPlatform = WeConnectIDPlatform;
//# sourceMappingURL=platform.js.map