grafia/flow/helper/energo_streambuilder.js
2025-08-14 22:41:23 +02:00

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;