59 lines
2.2 KiB
JavaScript
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
|
|
}
|
|
}
|
|
});
|
|
};
|