From df64a9521c84ec8e99523204b1e9957a5f4924e5 Mon Sep 17 00:00:00 2001 From: Pierre CLEMENT Date: Fri, 23 Mar 2018 23:08:53 +0100 Subject: [PATCH] feat(all): send messages as parts --- dist/devices/gateway/Magnet.js | 2 +- dist/nodes/gateway-subdevices/All.js | 22 +++++++++++++++------- package.json | 1 + src/devices/gateway/Magnet.ts | 3 ++- src/nodes/gateway-subdevices/All.ts | 27 +++++++++++++++++++-------- 5 files changed, 38 insertions(+), 17 deletions(-) diff --git a/dist/devices/gateway/Magnet.js b/dist/devices/gateway/Magnet.js index 6641a7e..9462a33 100644 --- a/dist/devices/gateway/Magnet.js +++ b/dist/devices/gateway/Magnet.js @@ -21,7 +21,7 @@ class Magnet extends GatewaySubdevice_1.GatewaySubdevice { super.handleMessage(msg); if (msg.isReadAck() || msg.isReport()) { let data = msg.data; - // mintime + // TODO: mintime if (this.status !== data.status) { this.status = data.status; this.emit('values-updated', this.sid); diff --git a/dist/nodes/gateway-subdevices/All.js b/dist/nodes/gateway-subdevices/All.js index 5dd74c7..669c659 100644 --- a/dist/nodes/gateway-subdevices/All.js +++ b/dist/nodes/gateway-subdevices/All.js @@ -1,6 +1,7 @@ "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) { @@ -12,28 +13,35 @@ exports.default = (RED) => { } constructor(props) { RED.nodes.createNode(this, props); - this.gateway = RED.nodes.getNode(props.gateway); + 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.gateway) { + if (this.gatewayConf) { // Filter input if (msg.payload && msg.payload.model && msg.payload.sid) { - if (!this.isDeviceValid(msg.payload)) { + if (!this.isDeviceValid(msg.payload.sid)) { msg = null; } this.send(msg); } else { - Object.keys(this.gateway.deviceList || {}) + let partsId = uniqid(); + Object.keys(this.gatewayConf.deviceList || {}) .filter((sid) => this.isDeviceValid(sid)) - .forEach((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.gateway; + curMsg.gateway = this.gatewayConf; this.send(curMsg); }); } @@ -44,7 +52,7 @@ exports.default = (RED) => { if ((!this.onlyModels || this.onlyModels.length == 0) && (!this.excludedSids || this.excludedSids.length == 0)) { return true; } - let device = this.gateway.deviceList[sid]; + let device = this.gatewayConf.deviceList[sid]; // Is excluded if ((this.excludedSids && this.excludedSids.length != 0) && this.excludedSids.indexOf(sid) >= 0) { return false; diff --git a/package.json b/package.json index 736c05a..51cd128 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "dependencies": { "cryptojs": "^2.5.3", "miio": "^0.15.4", + "uniqid": "^4.1.1", "yeelight-wifi": "^2.3.0" }, "engines": { diff --git a/src/devices/gateway/Magnet.ts b/src/devices/gateway/Magnet.ts index 99f396a..847b23a 100644 --- a/src/devices/gateway/Magnet.ts +++ b/src/devices/gateway/Magnet.ts @@ -29,7 +29,8 @@ export class Magnet extends GatewaySubdevice { super.handleMessage(msg); if (msg.isReadAck() || msg.isReport()) { let data = msg.data; - // mintime + + // TODO: mintime if (this.status !== data.status) { this.status = data.status; this.emit('values-updated', this.sid); diff --git a/src/nodes/gateway-subdevices/All.ts b/src/nodes/gateway-subdevices/All.ts index eb2a5e5..70c8329 100644 --- a/src/nodes/gateway-subdevices/All.ts +++ b/src/nodes/gateway-subdevices/All.ts @@ -1,9 +1,10 @@ import {Red, NodeProperties} from "node-red"; import {Constants} from "../constants"; +import * as uniqid from 'uniqid'; export default (RED: Red) => { class All { - protected gateway: any; + protected gatewayConf: any; protected onlyModels: string[]; protected excludedSids: string[]; @@ -17,7 +18,7 @@ export default (RED: Red) => { constructor(props: NodeProperties) { RED.nodes.createNode( this, props); - this.gateway = RED.nodes.getNode(( props).gateway); + this.gatewayConf = RED.nodes.getNode(( props).gateway); this.onlyModels = All.getOnlyModelsValue(( props).onlyModels || []); this.excludedSids = ( props).excludedSids; @@ -26,22 +27,31 @@ export default (RED: Red) => { protected setMessageListener() { ( this).on('input', (msg) => { - if (this.gateway) { + if (this.gatewayConf) { // Filter input if (msg.payload && msg.payload.model && msg.payload.sid) { - if (!this.isDeviceValid(msg.payload)) { + if (!this.isDeviceValid(msg.payload.sid)) { msg = null; } ( this).send(msg); } // Prepare for request else { - Object.keys(this.gateway.deviceList || {}) + let partsId = uniqid(); + Object.keys(this.gatewayConf.deviceList || {}) .filter((sid) => this.isDeviceValid(sid)) - .forEach((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.gateway; + curMsg.gateway = this.gatewayConf; + ( this).send(curMsg); }); } @@ -53,7 +63,8 @@ export default (RED: Red) => { if ((!this.onlyModels || this.onlyModels.length == 0) && (!this.excludedSids || this.excludedSids.length == 0)) { return true; } - let device = this.gateway.deviceList[sid]; + let device = this.gatewayConf.deviceList[sid]; + // Is excluded if ((this.excludedSids && this.excludedSids.length != 0) && this.excludedSids.indexOf(sid) >= 0) { return false;