homenet-plugin-zway
Version:
Homenet plugin for Z-Way connected Z-Wave devices
73 lines (60 loc) • 2.56 kB
text/typescript
import { plugin, service, Dict, IPluginLoader, ILogger, IConfig, ILockManager, ISensorManager, ILock, ISensor, ITriggerManager, IPresenceManager, IValuesManager } from 'homenet-core';
import { ZwayController } from './controller';
import { ZwayLock } from './lock';
import { createLockFactory } from './factories';
// import { ZwaySensor } from './sensor';
export class ZwayPluginLoader implements IPluginLoader {
private _logger : ILogger;
private _config : IConfig;
private _locks : ILockManager;
private _sensors : ISensorManager;
private _controllers : Dict<ZwayController>;
private _triggers: ITriggerManager;
private _presence: IPresenceManager;
private _values: IValuesManager;
constructor(
config: IConfig,
locks: ILockManager,
sensors: ISensorManager,
logger: ILogger,
triggers: ITriggerManager,
presence: IPresenceManager,
values: IValuesManager) {
this._locks = locks;
this._sensors = sensors;
this._triggers = triggers;
this._presence = presence;
this._values = values;
this._logger = logger;
this._config = config;
this._init();
locks.addType('zway', createLockFactory(this._controllers, this._logger));
// sensors.addType('zway', sensorFactory);
}
load() : void {
this._logger.info('Starting zway controllers...');
Object.keys(this._controllers).forEach(key => {
this._controllers[key].start();
});
}
_init() : void {
this._logger.info('Starting zway plugin');
const zwayConfig = (<any>this._config).zway || {};
const controllersConfigs = zwayConfig.controllers || [];
this._controllers = {};
controllersConfigs.forEach(c => {
this._controllers[c.id] = new ZwayController(c.id, c.host, c.user, c.password, c.port);
});
}
_lockFactory(id : string, opts : any) : ILock {
this._logger.info('Adding Z-Way lock: ' + id);
const controller : ZwayController = this._controllers[opts.controller];
return new ZwayLock(id, controller, opts.deviceId);
}
// _sensorFactory(id : string, opts : any) : ISensor {
// this._logger.info('Adding Z-Way sensor: ' + id);
// const controller : ZwayController = this._controllers[opts.controller];
// return new ZwaySensor(id, controller, opts, this._triggers, this._presence, this._values);
// }
}