UNPKG

node-red-contrib-virtualmeter

Version:

Virtual Meter Node to be used within Corrently Ecosystem (German Electricity Grid)

46 lines (33 loc) 1.26 kB
const _ = require("lodash"); module.exports = function(RED) { function SimpleGSINode(config) { RED.nodes.createNode(this,config); var node = this; node.on('input', async function(msg) { let saldo = msg.payload; let min = 9999999999; let max = -999999999999; for(let i=0; i<saldo.length;i++) { saldo[i].measurement = config.name; if(saldo[i].fields.power > max) max = saldo[i].fields.power; if(saldo[i].fields.power < min) min = saldo[i].fields.power; } let delta = max - min; let gsi_sum = 0; let gsi_cnt = 0; for(let i=0; i<saldo.length;i++) { saldo[i].fields.gsi = 100-(((saldo[i].fields.power - min) / delta)*100); gsi_cnt++; gsi_sum += saldo[i].fields.gsi; } let gsi_mean = gsi_sum / gsi_cnt; let mean_scale = 50-gsi_mean; for(let i=0; i<saldo.length;i++) { saldo[i].fields.gsi = 100 - ((saldo[i].fields.gsi*((100-mean_scale)/100) ) + mean_scale); } msg.payload = saldo; node.send(msg); }); } RED.nodes.registerType("simplegsi",SimpleGSINode); }