2
0
Files
node-red-contrib-mi-devices/dist/nodes/gateway/GatewayConfigurator.js
2018-03-21 23:29:36 +01:00

59 lines
2.2 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../constants");
const GatewayServer_1 = require("../../devices/gateway/GatewayServer");
exports.default = (RED) => {
class GatewayConfigurator {
constructor(props) {
RED.nodes.createNode(this, props);
let { sid, key, deviceList } = props;
this.sid = sid;
this.key = key;
this.deviceList = deviceList;
let server = GatewayServer_1.GatewayServer.getInstance();
if (this.sid) {
this.setGateway();
}
server.on('gateway-online', (sid) => {
if (sid === this.sid) {
this.setGateway();
this.emit('gateway-online');
}
});
server.on('gateway-offline', (sid) => {
if (sid === this.sid) {
this._gateway = null;
this.emit('gateway-offline');
}
});
}
setGateway() {
this._gateway = GatewayServer_1.GatewayServer.getInstance().getGateway(this.sid);
if (this._gateway) {
this._gateway.password = this.key;
this._gateway.on("subdevice-values-updated", (sidOrMessage) => {
let sid = sidOrMessage.sid || sidOrMessage;
let subdevice = this._gateway.getSubdevice(sid);
if (subdevice) {
(sidOrMessage.data ? Object.keys(sidOrMessage.data) : []).forEach((key) => {
subdevice[key] = sidOrMessage.data[key];
});
this.emit('subdevice-update', subdevice);
}
});
}
}
get gateway() {
return this._gateway;
}
}
RED.nodes.registerType(`${constants_1.Constants.NODES_PREFIX}-gateway configurator`, GatewayConfigurator, {
settings: {
miDevicesGatewayConfiguratorDiscoveredGateways: {
value: GatewayServer_1.GatewayServer.getInstance().gateways,
exportable: true
}
}
});
};