68 lines
2.7 KiB
JavaScript
68 lines
2.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const constants_1 = require("../constants");
|
|
const uniqid = require("uniqid");
|
|
exports.default = (RED) => {
|
|
class All {
|
|
static getOnlyModelsValue(input) {
|
|
var cleanOnlyModels = [];
|
|
input.forEach((value) => {
|
|
cleanOnlyModels = cleanOnlyModels.concat(value.split(','));
|
|
});
|
|
return cleanOnlyModels;
|
|
}
|
|
constructor(props) {
|
|
RED.nodes.createNode(this, props);
|
|
this.gatewayConf = RED.nodes.getNode(props.gateway);
|
|
this.onlyModels = All.getOnlyModelsValue(props.onlyModels || []);
|
|
this.excludedSids = props.excludedSids;
|
|
this.setMessageListener();
|
|
}
|
|
setMessageListener() {
|
|
this.on('input', (msg) => {
|
|
if (this.gatewayConf) {
|
|
// Filter input
|
|
if (msg.payload && msg.payload.model && msg.payload.sid) {
|
|
if (!this.isDeviceValid(msg.payload.sid)) {
|
|
msg = null;
|
|
}
|
|
this.send(msg);
|
|
}
|
|
else {
|
|
let partsId = uniqid();
|
|
Object.keys(this.gatewayConf.deviceList || {})
|
|
.filter((sid) => this.isDeviceValid(sid))
|
|
.forEach((sid, i, subSids) => {
|
|
let curMsg = Object.assign({}, msg);
|
|
delete curMsg._msgid;
|
|
curMsg.parts = {
|
|
id: partsId,
|
|
index: i,
|
|
count: subSids.length,
|
|
};
|
|
curMsg.sid = sid;
|
|
curMsg.gateway = this.gatewayConf;
|
|
this.send(curMsg);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
isDeviceValid(sid) {
|
|
if ((!this.onlyModels || this.onlyModels.length == 0) && (!this.excludedSids || this.excludedSids.length == 0)) {
|
|
return true;
|
|
}
|
|
let device = this.gatewayConf.deviceList[sid];
|
|
// Is excluded
|
|
if ((this.excludedSids && this.excludedSids.length != 0) && this.excludedSids.indexOf(sid) >= 0) {
|
|
return false;
|
|
}
|
|
if ((this.onlyModels && this.onlyModels.length != 0) && this.onlyModels.indexOf(device.internalModel) >= 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
RED.nodes.registerType(`${constants_1.Constants.NODES_PREFIX}-all`, All);
|
|
};
|