207 lines
No EOL
5.2 KiB
JavaScript
207 lines
No EOL
5.2 KiB
JavaScript
// const structure = {
|
|
// "192.168.1.11": {
|
|
// 1: "i-35",
|
|
// "6A": "i-60A",
|
|
// "6B": "i-60B",
|
|
// 7: "i-60B"
|
|
// },
|
|
// "192.168.1.12": {
|
|
// 18: "i-35"
|
|
// },
|
|
// };
|
|
|
|
/**
|
|
* @param {object} structure - main keys are IPs of installed modules.
|
|
* @param {object} structure.ip - configuration of installed modules
|
|
*/
|
|
const makeStreamsTable = (structure) => {
|
|
|
|
const moduleConfigStructure = {
|
|
"i-35": {
|
|
18488: "phase_1_power",
|
|
18490: "phase_2_power",
|
|
18492: "phase_3_power",
|
|
19843: "total_energy",
|
|
18444: "phase_1_voltage",
|
|
18446: "phase_2_voltage",
|
|
18448: "phase_3_voltage",
|
|
18458: "phase_1_current",
|
|
18460: "phase_2_current",
|
|
18462: "phase_3_current",
|
|
18464: "neutral_wire_current",
|
|
18494: "phase_1_react_power",
|
|
18496: "phase_2_react_power",
|
|
18498: "phase_3_react_power",
|
|
18512: "phase_1_apparent_power",
|
|
18514: "phase_2_apparent_power",
|
|
18516: "phase_3_apparent_power",
|
|
18518: "phase_1_pf",
|
|
18519: "phase_2_pf",
|
|
18520: "phase_3_pf",
|
|
18476: "total_active_power",
|
|
18478: "total_reactive_power",
|
|
18484: "total_apparent_power",
|
|
18486: "total_power_factor",
|
|
},
|
|
"i-30": {
|
|
19841: "total_energy",
|
|
18444: "phase_1_voltage",
|
|
18446: "phase_2_voltage",
|
|
18448: "phase_3_voltage",
|
|
18458: "phase_1_current",
|
|
18460: "phase_2_current",
|
|
18462: "phase_3_current",
|
|
18464: "neutral_wire_current",
|
|
18476: "total_active_power",
|
|
18478: "total_reactive_power",
|
|
18484: "total_apparent_power",
|
|
18486: "total_power_factor",
|
|
},
|
|
"i-60A": {
|
|
19841: "total_energy",
|
|
18444: "phase_1_voltage",
|
|
18446: "phase_2_voltage",
|
|
18448: "phase_3_voltage",
|
|
18458: "phase_1_current",
|
|
18460: "phase_2_current",
|
|
18462: "phase_3_current",
|
|
18464: "neutral_wire_current",
|
|
18476: "total_active_power",
|
|
18478: "total_reactive_power",
|
|
18484: "total_apparent_power",
|
|
18486: "total_power_factor",
|
|
},
|
|
"i-60B": {
|
|
21889: "total_energy",
|
|
20492: "phase_1_voltage",
|
|
20494: "phase_2_voltage",
|
|
20496: "phase_3_voltage",
|
|
20506: "phase_1_current",
|
|
20508: "phase_2_current",
|
|
20510: "phase_3_current",
|
|
20512: "neutral_wire_current",
|
|
20524: "total_active_power",
|
|
20526: "total_reactive_power",
|
|
20532: "total_apparent_power",
|
|
20534: "total_power_factor",
|
|
},
|
|
};
|
|
|
|
const bytes = {
|
|
"phase_1_power": 2,
|
|
"phase_2_power": 2,
|
|
"phase_3_power": 2,
|
|
"total_energy": 2,
|
|
"phase_1_voltage": 2,
|
|
"phase_2_voltage": 2,
|
|
"phase_3_voltage": 2,
|
|
"phase_1_current": 2,
|
|
"phase_2_current": 2,
|
|
"phase_3_current": 2,
|
|
"neutral_wire_current": 2,
|
|
"phase_1_react_power": 2,
|
|
"phase_2_react_power": 2,
|
|
"phase_3_react_power": 2,
|
|
"phase_1_apparent_power": 2,
|
|
"phase_2_apparent_power": 2,
|
|
"phase_3_apparent_power": 2,
|
|
"phase_1_pf": 1,
|
|
"phase_2_pf": 1,
|
|
"phase_3_pf": 1,
|
|
"total_active_power": 2,
|
|
"total_reactive_power": 2,
|
|
"total_apparent_power": 2,
|
|
"total_power_factor": 1
|
|
}
|
|
|
|
const multiplier = {
|
|
"phase_1_power": 1,
|
|
"phase_2_power": 1,
|
|
"phase_3_power": 1,
|
|
"total_energy": 1,
|
|
"phase_1_voltage": 100,
|
|
"phase_2_voltage": 100,
|
|
"phase_3_voltage": 100,
|
|
"phase_1_current": 1000,
|
|
"phase_2_current": 1000,
|
|
"phase_3_current": 1000,
|
|
"neutral_wire_current": 1000,
|
|
"phase_1_react_power": 1,
|
|
"phase_2_react_power": 1,
|
|
"phase_3_react_power": 1,
|
|
"phase_1_apparent_power": 1,
|
|
"phase_2_apparent_power": 1,
|
|
"phase_3_apparent_power": 1,
|
|
"phase_1_pf": 1000,
|
|
"phase_2_pf": 1000,
|
|
"phase_3_pf": 1000,
|
|
"total_active_power": 1,
|
|
"total_reactive_power": 1,
|
|
"total_apparent_power": 1,
|
|
"total_power_factor": 1000
|
|
}
|
|
|
|
let result = [];
|
|
const conversionTable = {};
|
|
|
|
Object.keys(structure).map( ip => {
|
|
|
|
Object.keys(structure[ip]).map( item => {
|
|
|
|
const modul = structure[ip][item];
|
|
// console.log(modul) //i-35, i-60A ...
|
|
|
|
let section = "";
|
|
if(modul == "i-60A")
|
|
{
|
|
section = "A";
|
|
}
|
|
else if(modul == "i-60B")
|
|
{
|
|
section = "B";
|
|
}
|
|
|
|
const allRegisters = Object.keys(moduleConfigStructure[modul]);
|
|
allRegisters.map( i => {
|
|
|
|
const tb_value = moduleConfigStructure[modul][i];
|
|
const b = bytes[tb_value];
|
|
const m = multiplier[tb_value];
|
|
|
|
if(isNaN(item)) item = item.slice(0,-1);
|
|
|
|
const stream = {
|
|
"unitId": parseInt(item),
|
|
"section": section,
|
|
"name": parseInt(i),
|
|
"tb_value": tb_value,
|
|
"bytes": b,
|
|
"multiplier": m,
|
|
}
|
|
|
|
if(tb_value == "total_energy")
|
|
{
|
|
stream.month = getCurrentMonth();
|
|
stream.previousEnergy = null;
|
|
}
|
|
|
|
result.push(stream);
|
|
|
|
})
|
|
})
|
|
|
|
conversionTable[ip] = { streams: result };
|
|
// console.log(conversionTable[ip])
|
|
result = [];
|
|
|
|
})
|
|
|
|
return conversionTable;
|
|
};
|
|
|
|
const getCurrentMonth = () => {
|
|
const date = new Date();
|
|
return date.getMonth();
|
|
};
|
|
|
|
exports.makeStreamsTable = makeStreamsTable; |