senica add rebuild tasks at 11 on tuesday and saturday

This commit is contained in:
rasta5man 2024-05-07 14:11:40 +02:00
parent 86619fbcff
commit ac2ccc1c61
2 changed files with 171 additions and 168 deletions

View file

@ -311,16 +311,19 @@ exports.install = function(instance) {
}, time); }, time);
} }
// TODO: FIND BETTER SOLUTION, THAN REBUILDING TASKS
// we ensure, all tasks will be rebuild every day at 11. To set correct switch off and on times // 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; let sendRebuildTasksAt11 = null;
const checkIf11Oclock = () => const checkIf11Oclock = () =>
{ {
const d = new Date(); const d = new Date();
const h = d.getHours(); 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"}); instance.send(instanceSendTo.cmd_manager, {sender:"dido_controller", cmd:"buildTasks"});
monitor.info("Task rebuilt at 11 o'clock, tuesday, saturday");
} }
} }
sendRebuildTasksAt11 = setInterval(checkIf11Oclock, 3600000); sendRebuildTasksAt11 = setInterval(checkIf11Oclock, 3600000);
@ -1465,13 +1468,13 @@ exports.install = function(instance) {
const lineOnSameBraker = line + 3 + ""; const lineOnSameBraker = line + 3 + "";
if(relaysData.hasOwnProperty(lineOnSameBraker)) { 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; deviceStatuses["state_of_breaker"][line + 3] = value;
reportLineStatus(line + 3); reportLineStatus(line + 3);
values[type] = value; values[type] = value;
tbname = relaysData[lineOnSameBraker].tbname; const tbname = relaysData[lineOnSameBraker].tbname;
sendTelemetry(values, tbname); sendTelemetry(values, tbname);
delete values[type]; delete values[type];
@ -1909,4 +1912,4 @@ exports.install = function(instance) {
// } // }
// } // }
// ] // ]
// } // }

View file

@ -1,163 +1,163 @@
class DataToTbHandler class DataToTbHandler
{ {
constructor(index) { constructor(index) {
this.index = index; this.index = index;
this.previousValues = {}; this.previousValues = {};
this.debug = false; this.debug = false;
this.messageCounter = 0; this.messageCounter = 0;
this.sender = ""; this.sender = "";
} }
dump() dump()
{ {
console.log("----------------------------"); console.log("----------------------------");
console.log("previousValues", this.previousValues); console.log("previousValues", this.previousValues);
console.log("----------------------------"); console.log("----------------------------");
} }
setSender(sender) setSender(sender)
{ {
this.sender = sender; this.sender = sender;
} }
isEmptyObject( obj ) { isEmptyObject( obj ) {
for ( var name in obj ) { for ( var name in obj ) {
return false; return false;
} }
return true; return true;
} }
sendToTb(dataToTb, instance) sendToTb(dataToTb, instance)
{ {
if(!FLOW.OMS_brokerready) if(!FLOW.OMS_brokerready)
{ {
return dataToTb; return dataToTb;
} }
let keys = Object.keys(dataToTb); let keys = Object.keys(dataToTb);
if(keys.length == 0) if(keys.length == 0)
{ {
if(this.debug) console.log("sendToTb received epty object", dataToTb); if(this.debug) console.log("sendToTb received epty object", dataToTb);
return; return;
} }
let tbname = keys[0]; let tbname = keys[0];
let ts; let ts;
let arrayOfValues = dataToTb[tbname]; let arrayOfValues = dataToTb[tbname];
let arrayOfValuesToSend = []; let arrayOfValuesToSend = [];
for(let i = 0; i < arrayOfValues.length; i++) for(let i = 0; i < arrayOfValues.length; i++)
{ {
ts = arrayOfValues[i].ts; ts = arrayOfValues[i].ts;
//console.log("sendToTb------------>before", arrayOfValues[i].values, tbname); //console.log("sendToTb------------>before", arrayOfValues[i].values, tbname);
let values = this.prepareValuesForTb(tbname, ts, arrayOfValues[i].values); let values = this.prepareValuesForTb(tbname, ts, arrayOfValues[i].values);
//console.log("sendToTb------------>after", values); //console.log("sendToTb------------>after", values);
if(!this.isEmptyObject(values)) if(!this.isEmptyObject(values))
{ {
arrayOfValuesToSend.push({ts: ts, values: values}); arrayOfValuesToSend.push({ts: ts, values: values});
} }
} }
if(arrayOfValuesToSend.length == 0) if(arrayOfValuesToSend.length == 0)
{ {
//if(this.debug) console.log("data not sent - empty array"); //if(this.debug) console.log("data not sent - empty array");
return; return;
} }
/* /*
let dataToTb = { let dataToTb = {
[tbname]: [ [tbname]: [
{ {
"ts": Date.now(), "ts": Date.now(),
"values": values "values": values
} }
] ]
} }
*/ */
this.messageCounter++; this.messageCounter++;
let dataToTbModified = { let dataToTbModified = {
[tbname]: arrayOfValuesToSend [tbname]: arrayOfValuesToSend
} }
//console.log(this.sender + " DATA SEND TO TB ", tbname, this.messageCounter, new Date(ts), dataToTbModified[tbname][0].values, this.instance); //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); if(this.debug) console.log(this.sender + " DATA SEND TO TB ", this.index, tbname, arrayOfValuesToSend);
instance.send(this.index, dataToTbModified); instance.send(this.index, dataToTbModified);
} }
getDiffTimestamp(key) getDiffTimestamp(key)
{ {
let seconds = 60*60;//1h let seconds = 60*60;//1h
//seconds = 1;//for testing //seconds = 1;//for testing
//TODO set different value for given key!!! //TODO set different value for given key!!!
//if(key == "status") seconds = 2*60*60;//2h //if(key == "status") seconds = 2*60*60;//2h
let timestampDiffToRemoveKey = seconds*1000; let timestampDiffToRemoveKey = seconds*1000;
return timestampDiffToRemoveKey; return timestampDiffToRemoveKey;
} }
prepareValuesForTb(tbname, timestamp, values) prepareValuesForTb(tbname, timestamp, values)
{ {
let keys = Object.keys(values); let keys = Object.keys(values);
if(!this.previousValues.hasOwnProperty(tbname)) if(!this.previousValues.hasOwnProperty(tbname))
{ {
this.previousValues[tbname] = {}; this.previousValues[tbname] = {};
} }
//if(this.debug) console.log("prepareValuesForTb", tbname, timestamp, values); //if(this.debug) console.log("prepareValuesForTb", tbname, timestamp, values);
for(let i = 0; i < keys.length; i++) for(let i = 0; i < keys.length; i++)
{ {
let key = keys[i]; let key = keys[i];
let value = values[key]; let value = values[key];
if(!this.previousValues[tbname].hasOwnProperty(key)) if(!this.previousValues[tbname].hasOwnProperty(key))
{ {
this.previousValues[tbname][key] = {ts: timestamp, value: value}; this.previousValues[tbname][key] = {ts: timestamp, value: value};
continue; continue;
} }
if(this.previousValues[tbname][key].value === value) if(this.previousValues[tbname][key].value === value)
{ {
let diff = timestamp - this.previousValues[tbname][key].ts; let diff = timestamp - this.previousValues[tbname][key].ts;
let timestampDiffToRemoveKey = this.getDiffTimestamp(key); let timestampDiffToRemoveKey = this.getDiffTimestamp(key);
if(diff > timestampDiffToRemoveKey) if(diff > timestampDiffToRemoveKey)
{ {
this.previousValues[tbname][key].ts = Date.now(); 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); //if(this.debug) console.log(this.sender + ": update ts for key", key, "diff is", diff, "messageCounter", this.messageCounter);
} }
else else
{ {
delete values[key]; delete values[key];
//if(this.debug) console.log(this.sender + ": delete key", key, "diff is", diff, "messageCounter", this.messageCounter, timestampDiffToRemoveKey); //if(this.debug) console.log(this.sender + ": delete key", key, "diff is", diff, "messageCounter", this.messageCounter, timestampDiffToRemoveKey);
} }
} }
else else
{ {
this.previousValues[tbname][key].value = value; this.previousValues[tbname][key].value = value;
this.previousValues[tbname][key].ts = timestamp; this.previousValues[tbname][key].ts = timestamp;
} }
} }
return values; return values;
} }
} }
module.exports = DataToTbHandler; module.exports = DataToTbHandler;