Initial commit - ip 10.0.0.76
This commit is contained in:
parent
e189e5334b
commit
cd65481ac4
5 changed files with 608 additions and 460 deletions
|
|
@ -12,20 +12,10 @@ exports.readme = `Modbus requests to energomonitor socomec suitcase`;
|
|||
const streamBuilder = require("./helper/energo_streambuilder");
|
||||
|
||||
const structure = {
|
||||
"192.168.1.11": {
|
||||
51: "i-35", // nový merák I-35, bez zóny
|
||||
16: "i-35", // zmena adresy z 1 na 16 - 13.5.2022
|
||||
"6A": "i-60A",
|
||||
"6B": "i-60B",
|
||||
"7A": "i-60A",
|
||||
"7B": "i-60B",
|
||||
"8A": "i-60A",
|
||||
"8B": "i-60B",
|
||||
9: "i-30",
|
||||
"10A": "i-60A",
|
||||
"10B": "i-60B",
|
||||
"11A": "i-60A",
|
||||
"11B": "i-60B",
|
||||
"192.168.1.31": {
|
||||
3: "i-35",
|
||||
2: "i-30",
|
||||
11: "i-35",
|
||||
"12A": "i-60A",
|
||||
"12B": "i-60B",
|
||||
"13A": "i-60A",
|
||||
|
|
@ -34,59 +24,19 @@ const structure = {
|
|||
"14B": "i-60B",
|
||||
"15A": "i-60A",
|
||||
"15B": "i-60B",
|
||||
5: "i-30",
|
||||
"2A": "i-60A",
|
||||
"2B": "i-60B",
|
||||
"3A": "i-60A",
|
||||
"3B": "i-60B",
|
||||
"4A": "i-60A",
|
||||
"4B": "i-60B",
|
||||
//novo nainstalovane 28.10.2024
|
||||
"21A": "i-60A",
|
||||
"21B": "i-60B"
|
||||
|
||||
// "36B": "i-60B" // vymyslene kvoli chybe
|
||||
},
|
||||
"192.168.1.12": {
|
||||
18: "i-35",
|
||||
"2A": "i-60A",
|
||||
"2B": "i-60B",
|
||||
"3A": "i-60A",
|
||||
"3B": "i-60B",
|
||||
"4A": "i-60A",
|
||||
"4B": "i-60B",
|
||||
"5A": "i-60A",
|
||||
"5B": "i-60B",
|
||||
"6A": "i-60A",
|
||||
"6B": "i-60B",
|
||||
"7A": "i-60A",
|
||||
"7B": "i-60B",
|
||||
"8A": "i-60A",
|
||||
"8B": "i-60B",
|
||||
"9A": "i-60A",
|
||||
"9B": "i-60B",
|
||||
"10A": "i-60A",
|
||||
"10B": "i-60B",
|
||||
"11A": "i-60A",
|
||||
"11B": "i-60B",
|
||||
"12A": "i-60A",
|
||||
"12B": "i-60B",
|
||||
"13A": "i-60A",
|
||||
"13B": "i-60B",
|
||||
"14A": "i-60A",
|
||||
"14B": "i-60B",
|
||||
"15A": "i-60A",
|
||||
"15B": "i-60B",
|
||||
"16A": "i-60A",
|
||||
"16B": "i-60B",
|
||||
"17A": "i-60A",
|
||||
"17B": "i-60B"
|
||||
16: "i-30",
|
||||
21: "i-30",
|
||||
"22A": "i-60A",
|
||||
"22B": "i-60B",
|
||||
"23A": "i-60A",
|
||||
"23B": "i-60B",
|
||||
"24A": "i-60A",
|
||||
"24B": "i-60B",
|
||||
// 76: "i-30"//vymyslene pre testovanie
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
exports.install = function(instance) {
|
||||
|
||||
const modbus = require('jsmodbus');
|
||||
|
|
@ -94,8 +44,7 @@ exports.install = function(instance) {
|
|||
|
||||
require('events').EventEmitter.defaultMaxListeners = 20;
|
||||
|
||||
|
||||
const allModulesEnergy = {unipi_74: ""}; // key to identify source data
|
||||
const allModulesEnergy = {unipi_76: ""}; // key to identify source data
|
||||
const date = new Date();
|
||||
let hour = date.getHours();
|
||||
|
||||
|
|
@ -130,85 +79,48 @@ exports.install = function(instance) {
|
|||
// "multiplier":1,
|
||||
// },
|
||||
// ]
|
||||
// }
|
||||
// },
|
||||
// "192.168.1.12": {
|
||||
// "streams": [
|
||||
// {
|
||||
// "unitId": 18,
|
||||
// "section": "",
|
||||
// "name": 18488,
|
||||
// "tb_value": "total_energy",
|
||||
// "bytes": 2,
|
||||
// "multiplier": 1,
|
||||
// "month": 0
|
||||
// }
|
||||
// ]
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
const tbNames = {
|
||||
"192.168.1.11": {
|
||||
"51": "1JMYvnx2RzKEo4aWQ7D93vAL8yZV3m9NBePXbrdj", // nový merák I-35, bez zóny
|
||||
"16": "6lQGaY9RDywdVzObj0PZer7Pg4NBn3exEK51LWZq", // zmena adresy z 1 na 16, 13.5.2022
|
||||
"6A": "JzwxZXOvDj1bVrN4nkWeR8A8qdyBl3MRKLpGPgaQ",
|
||||
"6B": "g9OxBZ5KRwNznlY6pApbGmkWXvjdEL4eGQobMDy2",
|
||||
"7A": "OzNMgZ9n43qPbjXmy7zOgGA2DKdYvW5e6pxGRrVa",
|
||||
"7B": "JX1ObgmqGZ54DMyYL7aJzJAEVdve38WKRzwjNrQ9",
|
||||
"8A": "RvmwNz8QPblKp41GD7l4WK7JrLVYoBO92dMegn6W",
|
||||
"8B": "RO8rjaBDy21qPQJzW7oKpD7pK3xmNleVZg9Ed4Gw",
|
||||
"9": "3JjOWdylwgNLzxVab7NPjw0Z2vG64rq8PEB5QmDo",
|
||||
"10A": "Z5KyJe9nEg1QNbWlX0wmnM7oDjBLdqzR83VGv624",
|
||||
"10B": "1JMYvnx2RzKEo4aWQ7D9xzAL8yZV3m9NBePXbrdj",
|
||||
"11A": "PjLblDgRBO6WQqnxmkJwga7Jv3ewZN4p5a89yKdY",
|
||||
"11B": "dz4ojlpP85JMgDLZWkQ12jkaKYqQexEr62GXRV1y",
|
||||
"12A": "d5xjWYMwEJon6rLlK7yl3wkqgV4DaOeNB9ZX3Gzb",
|
||||
"12B": "gRoJEyXVx4qD9er287LwbOkwBzGldaPjLWQKm3Mv",
|
||||
"13A": "K94XLav1glVRnyQ6r01V3Wkme3YJwBxM5oOzdP2j",
|
||||
"13B": "d9x2V5LGYBzXp4mMRAOPr10PloaqJwnQj6DgrNe3",
|
||||
"14A": "B5EoxeMVp4zwr8nqW0Gen57RjvD1PNamOGbLg63Z",
|
||||
"14B": "aw4eELG2DlPMdn1JW0Bz4Z0qQXOZRN3xB5yp8VKr",
|
||||
"15A": "ZmRwd93QL4gaezxEbAx1Xw01prn2XjlPvGyqJ6BO",
|
||||
"15B": "eod9aRWLVl34Gx1Dn7VYmDk2rz6qjgmpEXwQJN5Z",
|
||||
"5": "3a5oqJN1bgnx4Ol9dk8BdqAByE6jQ8mKDWMpGrLV",
|
||||
"2A": "EjgWGnXaLy9opPOz20ngWQk86BlYM3w1deVQvbKr",
|
||||
"2B": "wvKJdZML6mXP4DzWBAXOK87jxNloa5g23Ve9Y1ry",
|
||||
"3A": "Nzp2OoJlqn6r1ZgvdA3RqE7abBwP5G4eE3RQmyxD",
|
||||
"3B": "PLBJzmK1r3Gynd6OW0g2WzAe5wV4vx9bDEqNgYR8",
|
||||
"4A": "52dD6ZlV1QaOpRBmbAqvWb0KnGzWMLj4eJq38Pgo",
|
||||
"4B": "rDbQ84xzwgdqEoPm3kbPWWA9anOZY1RXyBv2LVM6",
|
||||
"21A": "1558",
|
||||
"21B": "1559"
|
||||
// "36B": "vymyslene kvoli chybe"
|
||||
},
|
||||
"192.168.1.12": {
|
||||
"18": "m6EYyZoJ4gWexdjVPARapL7RDOq9wv2N5XzKGplr",
|
||||
"2A": "E6Kg9oDnLWyzPRMva7vW8yAJxp4VG58qO2w1lZYe",
|
||||
"2B": "roKgWqY95V3mXMRzyAjrW6AbLjexpJPvaGDBw826",
|
||||
"3A": "nJL5lPMwBx23YpqRe0rqa4AdamXvWVbOrD4gNzy8",
|
||||
"3B": "XMBbew5z4ELrZa2mRAdZW9k8vPN6gy3DdVYlpKjq",
|
||||
"4A": "gYbDLqlyZVoRerQpB72GgvAWJnwM5z24POKa8Exj",
|
||||
"4B": "zdQO8GwxDqjRgP4137Y5eo7NyKlpem2nL65rvVJY",
|
||||
"5A": "5dBNwRp9graYJxZn409R28klVov1b2QLPDqGm6XK",
|
||||
"5B": "JzwxZXOvDj1bVrN4nkWeZ8A8qdyBl3MRKLpGPgaQ",
|
||||
"6A": "zrR51V2ajQ9ZLygPKkEPVW0YDq38xOJolENBXGnv",
|
||||
"6B": "g9OxBZ5KRwNznlY6pApbymkWXvjdEL4eGQobMDy2",
|
||||
"7A": "OzNMgZ9n43qPbjXmy7zOyGA2DKdYvW5e6pxGRrVa",
|
||||
"7B": "JX1ObgmqGZ54DMyYL7aJZJAEVdve38WKRzwjNrQ9",
|
||||
"8A": "RvmwNz8QPblKp41GD7l4yK7JrLVYoBO92dMegn6W",
|
||||
"8B": "RO8rjaBDy21qPQJzW7oKyD7pK3xmNleVZg9Ed4Gw",
|
||||
"9A": "3JjOWdylwgNLzxVab7NPxw0Z2vG64rq8PEB5QmDo",
|
||||
"9B": "Z5KyJe9nEg1QNbWlX0wmyM7oDjBLdqzR83VGv624",
|
||||
"10A": "1JMYvnx2RzKEo4aWQ7D9MzAL8yZV3m9NBePXbrdj",
|
||||
"10B": "PjLblDgRBO6WQqnxmkJwea7Jv3ewZN4p5a89yKdY",
|
||||
"11A": "WlVJBygjDZMeKX3vnAMWvLk8NqdmG2x1Y69LQ4P5",
|
||||
"11B": "dz4ojlpP85JMgDLZWkQ1njkaKYqQexEr62GXRV1y",
|
||||
"12A": "BaY3Xpy1EbKGjLq2O7m9W27rx8owgQz9P4dDJRmN",
|
||||
"12B": "DbQY6zyveZRwK5drV0Zl4j7joE4XJM83N9xl2nWq",
|
||||
"13A": "apKVJBwOyrP35m2lv7KEqd0YXbeWNd64En9GxRqg",
|
||||
"13B": "o9vbeQlLMVg8j5dq4kedWy0NxZpEmnXzwYKO1ar2",
|
||||
"14A": "gP1eOZVj3Q9lv5aDEk4MbP7rdpqW8yLm2BbKzJxM",
|
||||
"14B": "2O14VBzl8aDmWdNw3A53vOkGyZ5qLJoEMpj6R9ng",
|
||||
"15A": "pE5X8NQPaow6vlOZxk6Yjw0q42ezGBMyWgDVjR3L",
|
||||
"15B": "d5xjWYMwEJon6rLlK7ylywkqgV4DaOeNB9ZX3Gzb",
|
||||
"16A": "6lQGaY9RDywdVzObj0PZdr7Pg4NBn3exEK51LWZq",
|
||||
"16B": "m6EYyZoJ4gWexdjVPARaYL7RDOq9wv2N5XzKGplr",
|
||||
"17A": "gRoJEyXVx4qD9er287LwBOkwBzGldaPjLWQKm3Mv",
|
||||
"17B": "K94XLav1glVRnyQ6r01VpWkme3YJwBxM5oOzdP2j"
|
||||
"192.168.1.31": {
|
||||
"3": "JX1ObgmqGZ54DMyYL7aJMlAEVdve38WKRzwjNrQ9",
|
||||
"2": "RO8rjaBDy21qPQJzW7oKN17pK3xmNleVZg9Ed4Gw",
|
||||
"11": "RvmwNz8QPblKp41GD7l4NY7JrLVYoBO92dMegn6W",
|
||||
"12A": "K94XLav1glVRnyQ6r01VZ3kme3YJwBxM5oOzdP2j",
|
||||
"12B": "3JjOWdylwgNLzxVab7NPpJ0Z2vG64rq8PEB5QmDo",
|
||||
"13A": "Z5KyJe9nEg1QNbWlX0wmNP7oDjBLdqzR83VGv624",
|
||||
"13B": "PjLblDgRBO6WQqnxmkJwpb7Jv3ewZN4p5a89yKdY",
|
||||
"14A": "dz4ojlpP85JMgDLZWkQ1p3kaKYqQexEr62GXRV1y",
|
||||
"14B": "d9x2V5LGYBzXp4mMRAOPpV0PloaqJwnQj6DgrNe3",
|
||||
"15A": "1JMYvnx2RzKEo4aWQ7D9pXAL8yZV3m9NBePXbrdj",
|
||||
"15B": "d5xjWYMwEJon6rLlK7ylNxkqgV4DaOeNB9ZX3Gzb",
|
||||
"16": "gRoJEyXVx4qD9er287LwpEkwBzGldaPjLWQKm3Mv",
|
||||
"21": "3JjOWdylwgNLzxVab7NPyn0Z2vG64rq8PEB5QmDo",
|
||||
"22A": "Z5KyJe9nEg1QNbWlX0wmEB7oDjBLdqzR83VGv624",
|
||||
"22B": "1JMYvnx2RzKEo4aWQ7D9y5AL8yZV3m9NBePXbrdj",
|
||||
"23A": "PjLblDgRBO6WQqnxmkJwyr7Jv3ewZN4p5a89yKdY",
|
||||
"23B": "dz4ojlpP85JMgDLZWkQ1GGkaKYqQexEr62GXRV1y",
|
||||
"24A": "d5xjWYMwEJon6rLlK7ylZmkqgV4DaOeNB9ZX3Gzb",
|
||||
"24B": "gRoJEyXVx4qD9er287LwyvkwBzGldaPjLWQKm3Mv"
|
||||
// "76": "vymyslene pre testovanie"
|
||||
}
|
||||
};
|
||||
|
||||
const meter51 = ["total_energy","phase_1_power","phase_2_power","phase_3_power","phase_1_voltage","phase_2_voltage",
|
||||
"phase_3_voltage","phase_1_react_power","phase_2_react_power","phase_3_react_power","phase_1_apparent_power",
|
||||
"phase_2_apparent_power","phase_3_apparent_power","total_active_power","total_reactive_power","total_apparent_power"];
|
||||
|
||||
|
||||
class SocketWithClients {
|
||||
|
||||
|
|
@ -223,7 +135,7 @@ exports.install = function(instance) {
|
|||
this.streams = data.streams; //pole
|
||||
|
||||
this.startSocket();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
startSocket = () => {
|
||||
|
|
@ -240,14 +152,14 @@ exports.install = function(instance) {
|
|||
this.socket.on('error', function(e) {
|
||||
console.log('socket connection error', e);
|
||||
if(e.code == 'ECONNREFUSED' || e.code == 'ECONNRESET') {
|
||||
console.log(exports.title + ' Waiting 1 minute before trying to connect again');
|
||||
setTimeout(obj.startSocket, 60000);
|
||||
console.log(exports.title + ' Waiting 10 seconds before trying to connect again');
|
||||
setTimeout(obj.startSocket, 10000);
|
||||
}
|
||||
});
|
||||
|
||||
this.socket.on('close', function() {
|
||||
console.log('Socket connection closed ' + exports.title + ' Waiting 1 minute before trying to connect again');
|
||||
setTimeout(obj.startSocket, 60000);
|
||||
console.log('Socket connection closed ' + exports.title + ' Waiting 10 seconds before trying to connect again');
|
||||
setTimeout(obj.startSocket, 10000);
|
||||
});
|
||||
|
||||
// we create client for all modules (unitIds) and push them into dictionary
|
||||
|
|
@ -286,7 +198,7 @@ exports.install = function(instance) {
|
|||
let date = Date.now();
|
||||
let tbval = this.streams[this.index].tb_value;
|
||||
|
||||
// console.log("citam tieto hodnoty",unitId, register, tbval);
|
||||
// console.log("citam tieto hodnoty", unitId, register, tbval);
|
||||
let obj = this;
|
||||
|
||||
this.clients[unitId].readHoldingRegisters(register, bytes)
|
||||
|
|
@ -303,10 +215,11 @@ exports.install = function(instance) {
|
|||
|
||||
console.log("error pri citani z grafie", register, unitId, section, tbNames[obj.ip][unitId + section], tbval);
|
||||
|
||||
//! IMPLEMENTOVAT POSIELANIE CHYB PODLA POSLEDNHO REGISTRA V MODULE === "total_power_factor"
|
||||
// IMPLEMENTOVAT POSIELANIE CHYB PODLA POSLEDNHO REGISTRA V MODULE === "total_power_factor"
|
||||
if(tbval === "total_power_factor")
|
||||
{
|
||||
obj.sendNokStatus(tbNames[obj.ip][unitId + section], date);
|
||||
|
||||
if(arguments["0"].err == "Offline")
|
||||
{
|
||||
obj.socket.emit("close");
|
||||
|
|
@ -314,7 +227,7 @@ exports.install = function(instance) {
|
|||
}
|
||||
}
|
||||
|
||||
//! POSIELANIE NOK STATUSU - posle sa az pri poslednom registri z daneho unitu, nie pri kazdej chybnej hlaske
|
||||
// POSIELANIE NOK STATUSU - posle sa az pri poslednom registri z daneho unitu, nie pri kazdej chybnej hlaske
|
||||
// if(obj.index + 1 == lenghtOfStreams)
|
||||
// {
|
||||
// obj.sendNokStatus(tbNames[obj.ip][unitId + section], date);
|
||||
|
|
@ -323,10 +236,10 @@ exports.install = function(instance) {
|
|||
// {
|
||||
// obj.sendNokStatus(tbNames[obj.ip][unitId + section], date);
|
||||
// }
|
||||
|
||||
//console.error(require('util').inspect(arguments, {
|
||||
// depth: null
|
||||
//}))
|
||||
|
||||
console.error(require('util').inspect(arguments, {
|
||||
depth: null
|
||||
}))
|
||||
|
||||
obj.index++;
|
||||
setTimeout(obj.readRegisters, 0);
|
||||
|
|
@ -372,8 +285,6 @@ exports.install = function(instance) {
|
|||
|
||||
if(temp_val >= (2**31)) // ak je MSB bit nastavený, eventuálne sa dá použiť aj (temp_val & 0x80000000), ak vieš robiť logický súčin
|
||||
{
|
||||
//temp_val = temp_val - 2**31; // odstránim MSB bit, eventuálne sa dá použiť aj (temp_val & 0x7FFFFFFF), ak vieš robiť logický súčin
|
||||
//temp_val = temp_val * (-1); // spravím z toho zápornú hodnotu
|
||||
temp_val = temp_val - "0xFFFFFFFF" + 1;
|
||||
}
|
||||
}
|
||||
|
|
@ -383,9 +294,7 @@ exports.install = function(instance) {
|
|||
|
||||
if(temp_val >= (2**15)) // ak je MSB bit nastavený, eventuálne sa dá použiť aj (temp_val & 0x8000), ak vieš robiť logický súčin
|
||||
{
|
||||
// temp_val = temp_val - 2**15; // odstránim MSB bit, eventuálne sa dá použiť aj (temp_val & 0x7FFF), ak vieš robiť logický súčin
|
||||
// temp_val = temp_val * (-1); // spravím z toho zápornú hodnotu
|
||||
temp_val = temp_val - "0xFFFF" + 1;
|
||||
temp_val = temp_val - "0xFFFF" + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -398,18 +307,16 @@ exports.install = function(instance) {
|
|||
|
||||
if(tbName == undefined) return;
|
||||
|
||||
// we handle multimeter 51 values: - if voltage or power, we multiply with 55
|
||||
if(tbName == '1JMYvnx2RzKEo4aWQ7D93vAL8yZV3m9NBePXbrdj' && meter51.includes(tb_value)) value = parseFloat((value * 55).toFixed(2));
|
||||
|
||||
const values = {
|
||||
"status": "OK",
|
||||
[tb_value]: value
|
||||
};
|
||||
|
||||
|
||||
// we send "energy_last_month" value, that is equal to "total_energy" value, on first day and first minute of new month ==> it means when month has changed
|
||||
// we send "energy_last_month" value, that is equal to "total_energy" value, on first day of new month ==> it means when month changes
|
||||
if(tb_value == "total_energy")
|
||||
{
|
||||
|
||||
const previousEnergy = a.previousEnergy;
|
||||
a.previousEnergy = value;
|
||||
|
||||
|
|
@ -429,6 +336,7 @@ exports.install = function(instance) {
|
|||
}
|
||||
|
||||
allModulesEnergy[this.ip + '@' + unitId + section] = value;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -448,8 +356,8 @@ exports.install = function(instance) {
|
|||
};
|
||||
}
|
||||
|
||||
const newSocket = new SocketWithClients("192.168.1.11", conversionTable["192.168.1.11"]);
|
||||
const newSocket2 = new SocketWithClients("192.168.1.12", conversionTable["192.168.1.12"]);
|
||||
|
||||
const newSocket = new SocketWithClients("192.168.1.31", conversionTable["192.168.1.31"]);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue