// 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;