Add language notifications; Add power door handel

This commit is contained in:
rasta5man 2025-05-31 22:03:23 +02:00
parent d97d90cf95
commit 0876e73c68
12 changed files with 445 additions and 581 deletions

View file

@ -39,7 +39,7 @@ exports.install = function(instance) {
var SunCalc = require('./helper/suncalc');
const DataToTbHandler = require('./helper/DataToTbHandler');
const ErrorToServiceHandler = require('./helper/ErrorToServiceHandler');
const errorHandler = require('./helper/ErrorToServiceHandler');
const { sendNotification } = require('./helper/notification_reporter');
const process = require('process');
const { errLogger, logger, monitor } = require('./helper/logger');
@ -127,8 +127,6 @@ exports.install = function(instance) {
//prikazy kt sa budu spustat na dany node - see config.js in terminal-oms.app. (1 - dimming)
let listOfCommands = [0, 1, 6, 7, 8, 74, 75, 76, 77, 78, 79, 80, 87, 89];
const errorHandler = new ErrorToServiceHandler();
let rotary_switch_state;
let lux_sensor;
let state_of_breaker = {};//key is line, value is On/Off
@ -165,8 +163,6 @@ exports.install = function(instance) {
tbHandler = new DataToTbHandler(SEND_TO.tb);
tbHandler.setSender(exports.title);
errorHandler.setProjectsId(SETTINGS.project_id);
let now = new Date();
console.log("CMD Manager installed", now.toLocaleString("sk-SK"));
@ -186,7 +182,6 @@ exports.install = function(instance) {
}, 120000);
reportEdgeDateTimeAndNumberOfLuminaires();
setCorrectTime = setInterval(setCorrectPlcTimeOnceADay, 60000 * 60); // 1 hour
setCorrectPlcTimeOnceADay();
@ -1155,7 +1150,7 @@ exports.install = function(instance) {
params.type = "cmd-master";
params.register = 4;
params.address = 0;
params.timestamp = Date.now() + 60000;
params.timestamp = 0;
params.addMinutesToTimestamp = 5;
params.tbname = SETTINGS.rvoTbName;
params.info = "Master node FW verzia";
@ -1579,6 +1574,7 @@ exports.install = function(instance) {
let readBytes = 11;
let timeout = 4000;
// await keyword is important, otherwise incorrect data is returned!
await writeData(rsPort, resp, readBytes, timeout).then(function(data) {
@ -1592,7 +1588,6 @@ exports.install = function(instance) {
//ak sa odpoved zacina 0 - je to v poriadku, inak je NOK
let message = result.message; // OK, NOK
let message_type = result.type;
let error = result.error;
if (params.hasOwnProperty("debug")) {
if (params.debug) {
@ -1643,11 +1638,6 @@ exports.install = function(instance) {
if (register == 4) values["edge_fw_version"] = SETTINGS.edge_fw_version;
}
//odoslanie príkazu z terminálu - dáta
if (type == "cmd-terminal") {
sendNotification("CMD Manager: process cmd", SETTINGS.rvoTbName, "command_was_sent_from_terminal_interface", {}, params, SEND_TO.tb, instance);
}
if (params.debug) {
//logger.debug("saveToTb", saveToTb, tbname, values);
}
@ -1879,16 +1869,6 @@ exports.install = function(instance) {
logger.debug(0, "RPC runSyncExec - Promise Resolved:" + status);
//APP START
let dataToInfoSender = { id: SETTINGS.project_id, name: SETTINGS.rvo_name };
dataToInfoSender.fw_version = SETTINGS.edge_fw_version;
dataToInfoSender.startdate = new Date().toISOString().slice(0, 19).replace('T', ' ');
dataToInfoSender.__force__ = true;
instance.send(SEND_TO.infoSender, dataToInfoSender);
logger.debug(0, "---------------------------->START message send to service", dataToInfoSender);
}).catch(function(reason) {
instance.send(SEND_TO.debug, "CMD manager - RPC runSyncExec - promise rejected:" + reason);
});
@ -1986,7 +1966,7 @@ exports.install = function(instance) {
//logger.debug(tasks);
logger.debug("-->CMD MANAGER - RUN TASKS");
interval = setInterval(runTasks, LONG_INTERVAL);
interval = setInterval(runTasks, 5000);
}
else if (cmd == "reload_relays") {
loadRelaysData(flowdata.data.line);
@ -2627,7 +2607,7 @@ exports.install = function(instance) {
}
//Dimming, CCT
if (register == 1) {
else if (register == 1) {
let brightness = 0;
let dimming = byte0;
if (dimming > 128) {
@ -2648,125 +2628,87 @@ exports.install = function(instance) {
}
//
if (register == 4) {
else if (register == 4) {
values["master_node_version"] = bytes[1] + "." + bytes[2];
//logger.debug("FW Version", register, bytes);
}
//Napätie
if (register == 74) {
else if (register == 74) {
let voltage = (bytesToInt(bytes) * 0.1).toFixed(1);
values["voltage"] = Number(voltage);
}
//Prúd
if (register == 75) {
else if (register == 75) {
let current = bytesToInt(bytes);
values["current"] = current;
}
//výkon
if (register == 76) {
else if (register == 76) {
let power = (bytesToInt(bytes) * 0.1).toFixed(2);
values["power"] = Number(power);
}
//účinník
if (register == 77) {
else if (register == 77) {
let power_factor = Math.cos(bytesToInt(bytes) * 0.1).toFixed(2);
values["power_factor"] = Number(power_factor);
}
//frekvencia
if (register == 78) {
else if (register == 78) {
let frequency = (bytesToInt(bytes) * 0.1).toFixed(2);
values["frequency"] = Number(frequency);
}
//energia
if (register == 79) {
else if (register == 79) {
let energy = bytesToInt(bytes);
//Energiu treba reportovať v kWh. Teda číslo, ktoré príde treba podeliť 1000. Toto som ti možno zle napísal.
//Energiu treba reportovať v kWh -> delit 1000
values["energy"] = energy / 1000;
}
//doba života
if (register == 80) {
else if (register == 80) {
let lifetime = (bytesToInt(bytes) / 60).toFixed(2);
values["lifetime"] = Number(lifetime);
}
//nastavenie profilu
if (register == 8) {
else if (register == 8) {
let time_schedule_settings = bytesToInt(bytes);
values["time_schedule_settings"] = time_schedule_settings;
}
//naklon - nateraz sa z nodu nevycitava! kvoli problemom s accelerometrom a vracanymi hodnotami, posielame temp a x y z vo funkcii accelerometerData()
if (register == 84) {
const temp = byte3 >= 128 ? (byte3 - 128) * (-1) : byte3;
const inclination_x = byte2 >= 128 ? (byte2 - 128) * (-1) : byte2;
const inclination_y = byte1 >= 128 ? (byte1 - 128) * (-1) : byte1;
const inclination_z = byte0 >= 128 ? (byte0 - 128) * (-1) : byte0;
if (temp === undefined) temp = 999;
if (inclination_x === undefined) inclination_x = 999;
if (inclination_y === undefined) inclination_y = 999;
if (inclination_z === undefined) inclination_z = 999;
values["temperature"] = temp;
values["inclination_x"] = inclination_x;
values["inclination_y"] = inclination_y;
values["inclination_z"] = inclination_z;
}
let h = byte3;
let m = byte2;
let timestamp;
if (register == 87 || register == 6 || register == 7) {
//if(byte3 < 10) h = "0" + byte3;
//if(byte2 < 10) m = "0" + byte2;
//if(byte1 < 10) s = "0" + byte1;
var d = new Date();
d.setHours(h, m, 0, 0);
timestamp = d.getTime();
}
//aktuálny čas
if (register == 87) {
//Byte3 - hodiny, Byte 2 - minúty, Byte 1 -sek.
//values["actual_time"] = h + ":" + m + ":" + s;
values["actual_time"] = timestamp;
}
//čas súmraku
if (register == 6) {
//Byte3 - hodiny, Byte 2 - minúty, Byte 1 -sek.
//values["dusk_time"] = h + ":" + m + ":" + s;
values["dusk_time"] = timestamp;
}
//čas úsvitu
if (register == 7) {
//Byte3 - hodiny, Byte 2 - minúty, Byte 1 -sek.
//values["dawn_time"] = h + ":" + m + ":" + s;
values["dawn_time"] = timestamp;
else if (register == 84) {
values["temperature"] = byte3 >= 128 ? (byte3 - 128) * (-1) : byte3;
values["inclination_x"] = byte2 >= 128 ? (byte2 - 128) * (-1) : byte2;
values["inclination_y"] = byte1 >= 128 ? (byte1 - 128) * (-1) : byte1;
values["inclination_z"] = byte0 >= 128 ? (byte0 - 128) * (-1) : byte0;
}
//FW verzia nodu
if (register == 89) {
else if (register == 89) {
//formát: "Byte3: Byte2.Byte1 (Byte0)"
values["fw_version"] = byte3 + ":" + byte2 + "." + byte1 + "(" + byte0 + ")";
}
else if (register == 87 || register == 6 || register == 7) {
var d = new Date();
d.setHours(byte3, byte2, 0, 0);
let timestamp = d.getTime();
//aktuálny čas
if (register == 87) values["actual_time"] = timestamp;
//čas súmraku
else if (register == 6) values["dusk_time"] = timestamp;
//čas úsvitu
else if (register == 7) values["dawn_time"] = timestamp;
}
return values;
}
@ -2850,9 +2792,13 @@ exports.install = function(instance) {
if (temperatureInSenica === null) return;
for (const key in relaysData) {
//clone nodesData and relaysData objects
let nodesData_clone = JSON.parse(JSON.stringify(nodesData));
let relaysData_clone = JSON.parse(JSON.stringify(relaysData));
const lineData = relaysData[key];
for (const key in relaysData_clone) {
const lineData = relaysData_clone[key];
const lineNumber = lineData.line;
const contactor = lineData.contactor;
@ -2862,17 +2808,21 @@ exports.install = function(instance) {
let date = Date.now();
Object.keys(nodesData).forEach((node, index) => {
Object.keys(nodesData_clone).forEach((node, index) => {
setTimeout(function() {
if (nodesData[node].line === lineNumber) {
if (nodesData_clone[node].line === lineNumber) {
// NOTE: if status of luminaire is NOK or OFFLINE, we do not send data;
let status = nodesData_clone[node].status;
if (status === "OFFLINE" || !status) return;
let x = null;
if (naklony.hasOwnProperty(node)) x = naklony[node].naklon;
if (x === null) x = 0;
sendTelemetry({ temperature: Math.round(temperatureInSenica + 10 + Math.floor(Math.random() * 3)), inclination_x: x, inclination_y: 0, inclination_z: 0 }, nodesData[node].tbname, date);
sendTelemetry({ temperature: Math.round(temperatureInSenica + 10 + Math.floor(Math.random() * 3)), inclination_x: x, inclination_y: 0, inclination_z: 0 }, nodesData_clone[node].tbname, date);
}
}, (index + 1) * 500);