viernes, 6 de enero de 2023

 Formatear Respuesta  del Inversor Voltronic al comando QPIGS.

Esta entrada está relacionada con mi vídeo (parte 3) de cómo comunicar con el Inversor Voltronic vía RS232, coger los datos a través de Node-Red y cargar los parámetros obtenidos en variables para su uso en el propio DashBoard de Node-Red, en Emoncms o cualquier otra aplicación...

El vídeo de referencia es el siguiente:

https://youtu.be/MZ6NZo-BHqY


La función de análisis de la respuesta es la siguiente, está entrada la he realizado precisamente para daros disponibilidad y las podáis implementar en Node-Red tal y como describo en el vídeo.

Están los cálculos de la Potencia Reactiva y el Factor de Potencia, así cómo la hora de obtención de los datos para tener un Timestamp asociado.


La función es la siguiente (algunos datos no son exportados y están comentados ya que no los utilizo, podemos obtener los datos de este comando qué más nos interesen):


var output = msg.payload.split(" ");

let gridvoltage = parseFloat(output[0].slice(1,5));

let gridfrequency = parseFloat(output[1]);

let outputvoltage = parseFloat(output[2]);

let outputfrequency = parseFloat(output[3]);

let outputapparentpw = parseInt(output[4]);

let outputactivepw = parseInt(output[5]);

let outputloadpercent = parseInt(output[6]);

let busvoltage = parseInt(output[7]);

let batteryvoltage = parseFloat(output[8]);

let batterychargingcurrent = parseInt(output[9]);

let batterycapacity = parseInt(output[10])

let heatsinktemp = parseInt(output[11]);

let pvinputcurrentforbatt = parseInt(output[12]);

let pvinputvoltage = parseInt(output[13]);

let batteryvoltagefromscc = parseFloat(output[14]);

let batterydischargecurrent = parseInt(output[15]);

let devicestatus = parseInt(output[16].slice(0,1));

let configstatus = parseInt(output[16].slice(1,2));

let sccfirmwareversion = parseInt(output[16].slice(2,3));

let loadstatus = parseInt(output[16].slice(3,4));

let battvoltagetosteadywhilecharging = parseInt(output[16].slice(4,5));

let chargingstatus = parseInt(output[16].slice(5,6));

let chargingstatusscc = parseInt(output[16].slice(6,7));

let chargingstatusac = parseInt(output[16].slice(7,9));

let chargingonwithsccchargeon = parseInt(output[19]);

let chargingonwithacchargeon = parseInt(output[20].slice(0,1));

let chargingonwithsccandacchargeon = parseInt(output[20].slice(1,2));

var powerfactor = (outputactivepw / outputapparentpw);

powerfactor = parseFloat(powerfactor.toFixed(2));

//ojo que se opera en Radianes

var outputreactivepw = ((Math.acos(powerfactor) * 180) / 3.141592653);

outputreactivepw = Math.sin((outputreactivepw * 3.141592653) / 180) * outputapparentpw;

outputreactivepw = parseInt(outputreactivepw);

var time = new Date();

var horas = time.getHours();

var minutos = time.getMinutes();

if (minutos < 10){

    minutos = "0" + minutos;

}

if (horas < 10){

    horas = "0" + horas;

}

var hora = horas + ":" + minutos;

batteryvoltage = batteryvoltage.toFixed(1)


return [

    {

        payload: {

                gridvoltage: gridvoltage,

                gridfrequency: gridfrequency,

                outputvoltage: outputvoltage,

                outputfrequency: outputfrequency,

                outputactivepw: outputactivepw,

                outputapparentpw: outputapparentpw,

                outputreactivepw: outputreactivepw,

                outputpowerfactor: powerfactor,

                outputloadpercent: outputloadpercent,

                //busvoltage: busvoltage,

                batteryvoltage: batteryvoltage,

                batterychargingcurrent: batterychargingcurrent,

                batterycapacity: batterycapacity,

                heatsinktemp: heatsinktemp,

                pvinputcurrentforbatt: pvinputcurrentforbatt,

                pvinputvoltage: pvinputvoltage,

                batteryvoltagefromscc: batteryvoltagefromscc,

                batterydischargecurrent: batterydischargecurrent,

                //devicestatus: devicestatus,

                //configstatus: configstatus,

                //sccfirmwareversion:  sccfirmwareversion, 

                //loadstatus: loadstatus,

                //battvoltagetosteadywhilecharging: battvoltagetosteadywhilecharging,

                //chargingstatus: chargingstatus,

                //chargingstatusscc: chargingstatusscc,

                //chargingstatusac: chargingstatusac,

                //chargingonwithsccchargeon: chargingonwithsccchargeon,

                //chargingonwithacchargeon: chargingonwithacchargeon,

                //chargingonwithsccandacchargeon: chargingonwithsccandacchargeon

                } ,

        fecha: {hora: hora

              }

    }

];


No hay comentarios: