diff --git a/flow/dido_controller.js b/flow/dido_controller.js index 8b5a7b7..044a38f 100644 --- a/flow/dido_controller.js +++ b/flow/dido_controller.js @@ -311,16 +311,19 @@ exports.install = function(instance) { }, time); } - - // we ensure, all tasks will be rebuild every day at 11. To set correct switch off and on times + // TODO: FIND BETTER SOLUTION, THAN REBUILDING TASKS + // we ensure, all tasks will be rebuild twice a week on tuesday or saturday at 11. To set correct switch off and on times let sendRebuildTasksAt11 = null; const checkIf11Oclock = () => { const d = new Date(); const h = d.getHours(); - if(h === 11) + const day = d.getDay(); + + if((day === 2 || day === 6) && h === 11) { instance.send(instanceSendTo.cmd_manager, {sender:"dido_controller", cmd:"buildTasks"}); + monitor.info("Task rebuilt at 11 o'clock, tuesday, saturday"); } } sendRebuildTasksAt11 = setInterval(checkIf11Oclock, 3600000); @@ -1465,13 +1468,13 @@ exports.install = function(instance) { const lineOnSameBraker = line + 3 + ""; if(relaysData.hasOwnProperty(lineOnSameBraker)) { - instance.send(instanceSendTo.cmd_manager, {sender: "di_do_controller", cmd: "state_of_breaker", value: value, line: line + 3}); + instance.send(instanceSendTo.cmd_manager, {sender: "dido_controller", cmd: "state_of_breaker", value: value, line: line + 3}); deviceStatuses["state_of_breaker"][line + 3] = value; reportLineStatus(line + 3); values[type] = value; - tbname = relaysData[lineOnSameBraker].tbname; + const tbname = relaysData[lineOnSameBraker].tbname; sendTelemetry(values, tbname); delete values[type]; @@ -1909,4 +1912,4 @@ exports.install = function(instance) { // } // } // ] -// } \ No newline at end of file +// } diff --git a/flow/helper/DataToTbHandler.js b/flow/helper/DataToTbHandler.js index 15b0c0a..8fff312 100644 --- a/flow/helper/DataToTbHandler.js +++ b/flow/helper/DataToTbHandler.js @@ -1,163 +1,163 @@ -class DataToTbHandler -{ - constructor(index) { - this.index = index; - - this.previousValues = {}; - this.debug = false; - this.messageCounter = 0; - - this.sender = ""; - } - - dump() - { - console.log("----------------------------"); - console.log("previousValues", this.previousValues); - console.log("----------------------------"); - } - - setSender(sender) - { - this.sender = sender; - } - - isEmptyObject( obj ) { - for ( var name in obj ) { - return false; - } - return true; - } - - sendToTb(dataToTb, instance) - { - - if(!FLOW.OMS_brokerready) - { - return dataToTb; - } - - let keys = Object.keys(dataToTb); - - if(keys.length == 0) - { - if(this.debug) console.log("sendToTb received epty object", dataToTb); - return; - } - - - let tbname = keys[0]; - let ts; - - let arrayOfValues = dataToTb[tbname]; - let arrayOfValuesToSend = []; - - for(let i = 0; i < arrayOfValues.length; i++) - { - ts = arrayOfValues[i].ts; - - //console.log("sendToTb------------>before", arrayOfValues[i].values, tbname); - - let values = this.prepareValuesForTb(tbname, ts, arrayOfValues[i].values); - - //console.log("sendToTb------------>after", values); - - if(!this.isEmptyObject(values)) - { - arrayOfValuesToSend.push({ts: ts, values: values}); - } - } - - if(arrayOfValuesToSend.length == 0) - { - //if(this.debug) console.log("data not sent - empty array"); - return; - } - - /* - let dataToTb = { - [tbname]: [ - { - "ts": Date.now(), - "values": values - } - ] - } - */ - - this.messageCounter++; - - let dataToTbModified = { - [tbname]: arrayOfValuesToSend - } - - //console.log(this.sender + " DATA SEND TO TB ", tbname, this.messageCounter, new Date(ts), dataToTbModified[tbname][0].values, this.instance); - if(this.debug) console.log(this.sender + " DATA SEND TO TB ", this.index, tbname, arrayOfValuesToSend); - - instance.send(this.index, dataToTbModified); - } - - getDiffTimestamp(key) - { - let seconds = 60*60;//1h - //seconds = 1;//for testing - - //TODO set different value for given key!!! - //if(key == "status") seconds = 2*60*60;//2h - - let timestampDiffToRemoveKey = seconds*1000; - - return timestampDiffToRemoveKey; - } - - prepareValuesForTb(tbname, timestamp, values) - { - let keys = Object.keys(values); - if(!this.previousValues.hasOwnProperty(tbname)) - { - this.previousValues[tbname] = {}; - } - - //if(this.debug) console.log("prepareValuesForTb", tbname, timestamp, values); - - for(let i = 0; i < keys.length; i++) - { - let key = keys[i]; - let value = values[key]; - - if(!this.previousValues[tbname].hasOwnProperty(key)) - { - this.previousValues[tbname][key] = {ts: timestamp, value: value}; - continue; - } - - if(this.previousValues[tbname][key].value === value) - { - let diff = timestamp - this.previousValues[tbname][key].ts; - - let timestampDiffToRemoveKey = this.getDiffTimestamp(key); - if(diff > timestampDiffToRemoveKey) - { - this.previousValues[tbname][key].ts = Date.now(); - //if(this.debug) console.log(this.sender + ": update ts for key", key, "diff is", diff, "messageCounter", this.messageCounter); - - } - else - { - delete values[key]; - //if(this.debug) console.log(this.sender + ": delete key", key, "diff is", diff, "messageCounter", this.messageCounter, timestampDiffToRemoveKey); - } - } - else - { - this.previousValues[tbname][key].value = value; - this.previousValues[tbname][key].ts = timestamp; - } - - } - - return values; - } -} - +class DataToTbHandler +{ + constructor(index) { + this.index = index; + + this.previousValues = {}; + this.debug = false; + this.messageCounter = 0; + + this.sender = ""; + } + + dump() + { + console.log("----------------------------"); + console.log("previousValues", this.previousValues); + console.log("----------------------------"); + } + + setSender(sender) + { + this.sender = sender; + } + + isEmptyObject( obj ) { + for ( var name in obj ) { + return false; + } + return true; + } + + sendToTb(dataToTb, instance) + { + + if(!FLOW.OMS_brokerready) + { + return dataToTb; + } + + let keys = Object.keys(dataToTb); + + if(keys.length == 0) + { + if(this.debug) console.log("sendToTb received epty object", dataToTb); + return; + } + + + let tbname = keys[0]; + let ts; + + let arrayOfValues = dataToTb[tbname]; + let arrayOfValuesToSend = []; + + for(let i = 0; i < arrayOfValues.length; i++) + { + ts = arrayOfValues[i].ts; + + //console.log("sendToTb------------>before", arrayOfValues[i].values, tbname); + + let values = this.prepareValuesForTb(tbname, ts, arrayOfValues[i].values); + + //console.log("sendToTb------------>after", values); + + if(!this.isEmptyObject(values)) + { + arrayOfValuesToSend.push({ts: ts, values: values}); + } + } + + if(arrayOfValuesToSend.length == 0) + { + //if(this.debug) console.log("data not sent - empty array"); + return; + } + + /* + let dataToTb = { + [tbname]: [ + { + "ts": Date.now(), + "values": values + } + ] + } + */ + + this.messageCounter++; + + let dataToTbModified = { + [tbname]: arrayOfValuesToSend + } + + //console.log(this.sender + " DATA SEND TO TB ", tbname, this.messageCounter, new Date(ts), dataToTbModified[tbname][0].values, this.instance); + if(this.debug) console.log(this.sender + " DATA SEND TO TB ", this.index, tbname, arrayOfValuesToSend); + + instance.send(this.index, dataToTbModified); + } + + getDiffTimestamp(key) + { + let seconds = 60*60;//1h + //seconds = 1;//for testing + + //TODO set different value for given key!!! + //if(key == "status") seconds = 2*60*60;//2h + + let timestampDiffToRemoveKey = seconds*1000; + + return timestampDiffToRemoveKey; + } + + prepareValuesForTb(tbname, timestamp, values) + { + let keys = Object.keys(values); + if(!this.previousValues.hasOwnProperty(tbname)) + { + this.previousValues[tbname] = {}; + } + + //if(this.debug) console.log("prepareValuesForTb", tbname, timestamp, values); + + for(let i = 0; i < keys.length; i++) + { + let key = keys[i]; + let value = values[key]; + + if(!this.previousValues[tbname].hasOwnProperty(key)) + { + this.previousValues[tbname][key] = {ts: timestamp, value: value}; + continue; + } + + if(this.previousValues[tbname][key].value === value) + { + let diff = timestamp - this.previousValues[tbname][key].ts; + + let timestampDiffToRemoveKey = this.getDiffTimestamp(key); + if(diff > timestampDiffToRemoveKey) + { + this.previousValues[tbname][key].ts = Date.now(); + //if(this.debug) console.log(this.sender + ": update ts for key", key, "diff is", diff, "messageCounter", this.messageCounter); + + } + else + { + delete values[key]; + //if(this.debug) console.log(this.sender + ": delete key", key, "diff is", diff, "messageCounter", this.messageCounter, timestampDiffToRemoveKey); + } + } + else + { + this.previousValues[tbname][key].value = value; + this.previousValues[tbname][key].ts = timestamp; + } + + } + + return values; + } +} + module.exports = DataToTbHandler; \ No newline at end of file