Resultados 1 al 11 de 11
  1. #1
    Agente47m está desconectado Forero Junior
    Fecha de ingreso
    oct 2020
    Mensajes
    22

    Predeterminado [Aporte] Tutorial Monitorización Node red

    Manual monitorizacioÌn .pdf
    King_product-application_pdf-20190724092401-8519-pip-gk-mk-protocol.pdf
    ProtocoloInfiniSolar.pdf
    ProtocoloP30.pdf
    ProtocoloPCM60X.pdf
    Buenos días a todos, os he hecho un manual para empezar la monitorización con node red, también os adjunto a un par de protocolos de comunicación para que los podáis usarlos según el inversor que tengáis.
    Espero poder ayudaros algo como vosotros me habéis ayudado a mi
    Un saludo


    Enviado desde mi iPhone utilizando Tapatalk

  2. #2
    Avatar de Tejota
    Tejota está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Inmortal Ciudad de Zaragoza
    Mensajes
    3.411

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Y el CRC??
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  3. #3
    Agente47m está desconectado Forero Junior
    Fecha de ingreso
    oct 2020
    Mensajes
    22

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    No sé a qué te refieres cuando preguntas por el CRC, puedes especificarme un poco más ?


    Enviado desde mi iPhone utilizando Tapatalk

  4. #4
    Avatar de Tejota
    Tejota está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Inmortal Ciudad de Zaragoza
    Mensajes
    3.411

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Cita Iniciado por Agente47m Ver mensaje
    No sé a qué te refieres cuando preguntas por el CRC, puedes especificarme un poco más ?


    Enviado desde mi iPhone utilizando Tapatalk
    [Aporte] Tutorial Monitorización Node red-imagen_2020-11-15_130224.png
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  5. #5
    Avatar de Tejota
    Tejota está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Inmortal Ciudad de Zaragoza
    Mensajes
    3.411

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Voy a ser algo mas explicito que veo que te has quedado un poco K.O.

    Segun el modelo de hibrido tipo Voltronic funcionan varios protocolos, ahi has puesto algunos pero no son todos.
    El protocolo InfiniSolar no llevan CRC, y supongo que tu has hecho esas pruebas con un Voltronic de ese protocolo.

    Sin embargo el protocolo 30 si lleva CRC y es el que he puesto yo ahi en la foto.

    El CRC son bytes de comprobacion segun un algoritmo modificado del CRCXMODEM y se envian junto al comando hacia el hibrido.... el hibrido verifica que ese CRC es correcto y acepta el comando.

    Eso implica añadir un nodo mas al flujo despues del comando que incorpore esos bytes CRC y los lance al puerto serie.

    Algo como esto:
    [Aporte] Tutorial Monitorización Node red-imagen_2020-11-15_192931.jpg

    Ahi se ve como los comandos de inyeccion atacan al nodo CRCTJ y este procesa el comando, saca los CRCs, los une al comando y acaba en un retorno de carro como indica el protocolo P30. De ahi ya el flujo ira hacia el puerto serie para que el hibrido responda a ese comando con la respuesta que marca el protocolo P30.

    Esa respuesta despues la trataremos como indicas en tu pdf pero yo las respuestas las trato de otra manera ya que no uso un solo comando para interrogar al hibrido, uso varios simultaneamente y necesitas separar las multiples respuestas que da el hibrido porque son respuestas diferentes entre si.

    Para eso hay que introducir desde el principio propiedades en el msg que diferencien las respuestas. Si no seria un caos.
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  6. #6
    Agente47m está desconectado Forero Junior
    Fecha de ingreso
    oct 2020
    Mensajes
    22

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Comprobaré todo lo que me comentas y haré una versión 2.0 del manual con más info y manera de ejecutar varios comandos.

    Ya que veo que tienes bastante control de tema ¿te se ocurre alguna manera de monitorizar batería a batería ?


    Enviado desde mi iPhone utilizando Tapatalk

  7. #7
    Avatar de Tejota
    Tejota está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Inmortal Ciudad de Zaragoza
    Mensajes
    3.411

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Cita Iniciado por Agente47m Ver mensaje
    Comprobaré todo lo que me comentas y haré una versión 2.0 del manual con más info y manera de ejecutar varios comandos.

    Ya que veo que tienes bastante control de tema ¿te se ocurre alguna manera de monitorizar batería a batería ?


    Enviado desde mi iPhone utilizando Tapatalk
    No entiendo que quieres decir, bateria a bateria. Para eso estan los BMS que se encargarn de manejar las baterias. Estos aparatos ya incorporan una salida TTL con un protocolo conocido que puede incorporarse a un flujo especifico. El BMS ya te dara todos los datos de las baterias por ese protocolo. Otra cosa seria sensorear tu mismo cada uno de las baterias o vasos. Para eso ya habria que usar protocolos I2c o 1wire. Hay nodos especificos para esto ya hechos. Prefiero el BMS para no sobrecargar a la Rpi con tanto sensor.

    Dicho todo esto y para ordenar la topologia de los flujos, yo he encontrado que la mejor manera es hacer un flujo por dispositivo. O sea, si tienes un hibrido, un regulador, un monitor de baterias, un monitor de red, sensores de temperaturas, etc que haya un flujo por cada dispositivo para procesar los datos.
    Despues con nodos de tipo link in, link out ir saltando entre flujos o dentro del mismo flujo.

    Por ejemplo, este es un flujo para la monitorizacion de un AXPERT MAX con protocolo P30.

    [Aporte] Tutorial Monitorización Node red-imagen_2020-11-15_230610.jpg

    Dejo aqui la exportacion del flujo por si alguno le interesa:
    Código HTML:
    [{"id":"9bc9a9f6.d07ec8","type":"tab","label":"Axpert MAX","disabled":false,"info":""},{"id":"509893d1.98ab3c","type":"function","z":"9bc9a9f6.d07ec8","name":"CRCTJ","func":"    //  Algoritmo para lanzar los comandos hacia Voltronics con CRC propietario\n    //  Algoritmo realizado por Tejota   \n    var topic = (msg.payload) + (\" \") + (msg.topic); // Topic con el comando string y posible descripcion\n    var comandobuffer = Buffer.from(msg.payload);   // pasando a buffer el string del comando          \n    var crc = 0x0000;                              //  inicio del crc\n    for (tj = 0; tj < comandobuffer.length; tj++)    // scaneo del buffer\n            {\n        const byte = comandobuffer[tj];          // analizando el byte para aplicarle el crc16xmodem\n        tejota = (crc >>> 8) & 0xff;\n        tejota ^= byte & 0xff;\n        tejota ^= tejota >>> 4;\n        crc = (crc << 8) & 0xffff;            //  Algoritmo\n        crc ^= tejota;                       //  crc16 xmodem \n        tejota = (tejota << 5) & 0xffff;    //   sin tabla estatica\n        crc ^= tejota;\n        tejota = (tejota << 7) & 0xffff;\n        crc ^= tejota;\n            }                            // resultante crc numerico \n    var crchexastring = crc.toString(16).padStart(4,'0');  // crc numerico a string hexa añadiendo ceros a izquierda si es preciso\n    var crchexabuffer = Buffer.from(crchexastring, \"hex\"); // buffer del crchexa\n    for (mdk=0; mdk < crchexabuffer.length; mdk++)  // scaneo del buffer\n            {\n            if (crchexabuffer[mdk]==10 || crchexabuffer[mdk]==13 || crchexabuffer[mdk]==40)   // Exceptuando estos bytes mdk \n                    {\n                        crchexabuffer[mdk]++;  // se pone el byte siguiente si es alguno de las excepciones mdk\n                    }\n            }        \n    const retornodecarro = Buffer.from(\"\\r\");\n    var crctotalbuffer = [comandobuffer, crchexabuffer, retornodecarro];  // construyendo el buffer final hacia el hibrido\n    msg.payload = Buffer.concat(crctotalbuffer);\n    msg.topic = topic;\n    return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1020,"y":640,"wires":[["650be6f8.439998"]]},{"id":"645a2e8b.dcbcb","type":"debug","z":"9bc9a9f6.d07ec8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1890,"y":320,"wires":[]},{"id":"650be6f8.439998","type":"serial request","z":"9bc9a9f6.d07ec8","name":"Puerto Serie","serial":"f455d2af.938f","x":1190,"y":640,"wires":[["22222d68.bf0a42"]]},{"id":"22222d68.bf0a42","type":"link out","z":"9bc9a9f6.d07ec8","name":"Respuesta Puerto serie","links":["4faa967b.783d88"],"x":1410,"y":640,"wires":[],"l":true},{"id":"ff4e665c.3a6d68","type":"comment","z":"9bc9a9f6.d07ec8","name":"Comunicacion Puerto Serie","info":"","x":1190,"y":600,"wires":[]},{"id":"ab516497.6a2e48","type":"switch","z":"9bc9a9f6.d07ec8","name":"Repartidor Datos Lecturas","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"QID Numero de Serie","vt":"str"},{"t":"eq","v":"QPIGS Estado General","vt":"str"},{"t":"eq","v":"QVFW Version CPU1","vt":"str"},{"t":"eq","v":"QVFW3 Firmware CPU3","vt":"str"},{"t":"eq","v":"QFLAG Miscelanea","vt":"str"},{"t":"eq","v":"QPIRI Configuracion","vt":"str"},{"t":"eq","v":"QBEQI Ecualizacion Bateria","vt":"str"},{"t":"eq","v":"QPIWS Informacion Warnings","vt":"str"},{"t":"eq","v":"QMOD Modo de Trabajo","vt":"str"},{"t":"eq","v":"QPIGS2 Campo2","vt":"str"},{"t":"eq","v":"QLED Barra LED","vt":"str"},{"t":"cont","v":"energiaproducidadiaria","vt":"str"},{"t":"cont","v":"cargadiariaentregada","vt":"str"}],"checkall":"true","repair":false,"outputs":13,"x":810,"y":280,"wires":[["9c689710.cb0018"],["e4137dce.db47"],["4423063a.c56eb8"],["198b4fc2.1fca4"],["8d3d9618.158258"],["bd349fa8.774d1"],["dd066a1.e232a98"],["af0311cf.2cd99"],["3a0b2dac.6bc8a2"],["fcd12eb.29738d"],["3b4d261d.daba4a"],["c2c747ec.cc0b58"],["f5269e19.63df9"]]},{"id":"63fac829.9a70a8","type":"comment","z":"9bc9a9f6.d07ec8","name":"Repartiendo por topic","info":"","x":820,"y":400,"wires":[]},{"id":"8d3d9618.158258","type":"function","z":"9bc9a9f6.d07ec8","name":"QFLAGExtraccion","func":"var output = msg.payload.substr(1, 11);\nvar E = output.indexOf(\"E\")+1;\nvar D = output.indexOf(\"D\");\nvar enables = output.substr(E, (D-E));\nvar disables = output.substr(D+1);\nswitch (enables.includes(\"a\")){\n    case true:\n        buzzer = 1;\n        break;\n    case false:    \n        buzzer = 0;\n}    \nswitch (enables.includes(\"b\")){\n    case true:\n        bypassoverload = 1;\n        break;\n    case false:\n        bypassoverload = 0;\n        break;\n} \nswitch (enables.includes(\"k\")){\n    case true:\n        guardapantallalcd = 1;\n        break;\n    case false:    \n        guardapantallalcd = 0;\n}    \nswitch (enables.includes(\"j\")){\n    case true:\n        powersaving = 1;\n        break;\n    case false:\n        powersaving = 0;\n        break;\n} \nswitch (enables.includes(\"u\")){\n    case true:\n        overloadrestart = 1;\n        break;\n    case false:    \n        overloadrestart = 0;\n}    \nswitch (enables.includes(\"v\")){\n    case true:\n        overtemperaturerestart = 1;\n        break;\n    case false:\n        overtemperaturerestart = 0;\n        break;\n}\nswitch (enables.includes(\"x\")){\n    case true:\n        luzlcd = 1;\n        break;\n    case false:\n        luzlcd = 0;\n        break;\n} \nswitch (enables.includes(\"y\")){\n    case true:\n        pitidosifuenteprimariafalla = 1;\n        break;\n    case false:\n        pitidosifuenteprimariafalla = 0;\n        break;\n} \nswitch (enables.includes(\"z\")){\n    case true:\n        grabarerrores = 1;\n        break;\n    case false:\n        grabarerrores = 0;\n        break;\n} \nreturn [\n    {\n        payload: {\n                buzzer: buzzer,\n                bypassoverload: bypassoverload,\n                guardapantallalcd: guardapantallalcd,\n                powersaving: powersaving,\n                overloadrestart: overloadrestart,\n                overtemperaturerestart: overtemperaturerestart,\n                luzlcd: luzlcd,\n                pitidosifuenteprimariafalla: pitidosifuenteprimariafalla,\n                grabarerrores: grabarerrores,\n                 }\n    }\n]\n","outputs":1,"noerr":0,"x":1150,"y":220,"wires":[["40daa278.7eaa8c"]]},{"id":"e4137dce.db47","type":"function","z":"9bc9a9f6.d07ec8","name":"QPIGSExtraccion","func":"var output = msg.payload.split(\" \");\nlet voltajered = parseFloat(output[0].slice(1, 5));\nlet frecuenciared = parseFloat(output[1]);\nlet voltajesalida = parseFloat(output[2]);\nlet frecuenciasalida = parseFloat(output[3]);\nlet potenciaparentesalida = parseInt(output[4]);\nlet potenciaactivasalida = parseInt(output[5]);\nlet porcentajecargasalida = parseInt(output[6]);\nlet voltajebusalta = parseInt(output[7]);\nlet voltajebateria = parseFloat(output[8]);\nlet amperioscargabat = parseInt(output[9]);\nlet capacidadbateria = parseInt(output[10]);\nlet temperaturainversor = parseInt(output[11]);\nlet amperiosenplaca = parseInt(output[12]);\nlet voltajeenplaca = parseInt(output[13]);\nlet voltajescc = parseFloat(output[14]);\nlet amperiosdescargabat = parseInt(output[15]);\nlet prioridadSBU = parseInt(output[16].slice(0,1));\nlet estadoconf = parseInt(output[16].slice(1,2));\nlet estadoscc = parseInt(output[16].slice(2,3));\nlet cargasconectadas = parseInt(output[16].slice(3,4));\nlet voltajeconstantemientrascarga = parseInt(output[16].slice(4,5));\nlet estadodecargageneral = parseInt(output[16].slice(5,6));\nlet estadodecargasolar = parseInt(output[16].slice(6,7));\nlet estadodecargared = parseInt(output[16].slice(7,9));\nlet potenciaenplaca = parseInt(output[19]);\nlet estadodelmppt = parseInt(output[20].slice(0,1));\nlet estadodelswitch = parseInt(output[20].slice(1,2));\nreturn [\n    {\n        payload: {\n                voltajered: voltajered,\n                frecuenciared: frecuenciared,\n                voltajesalida: voltajesalida,\n                frecuenciasalida: frecuenciasalida,\n                potenciaparentesalida: potenciaparentesalida,\n                potenciaactivasalida: potenciaactivasalida,\n                porcentajecargasalida: porcentajecargasalida,\n                voltajebateria: voltajebateria,\n                amperiosdescargabat: amperiosdescargabat,\n                amperioscargabat: amperioscargabat,\n                temperaturainversor: temperaturainversor,\n                potenciaenplaca: potenciaenplaca,\n                voltajeenplaca: voltajeenplaca,\n                estadodelmppt: estadodelmppt,\n                cargasconectadas: cargasconectadas,\n                voltajebusalta: voltajebusalta,\n                capacidadbateria: capacidadbateria,\n                amperiosenplaca: amperiosenplaca, \n                voltajescc: voltajescc,\n                prioridadSBU: prioridadSBU,\n                estadoconf: estadoconf,\n                estadoscc: estadoscc,\n                voltajeconstantemientrascarga: voltajeconstantemientrascarga,\n                estadodecargageneral: estadodecargageneral,\n                estadodecargasolar: estadodecargasolar,\n                estadodecargared: estadodecargared,\n                estadodelswitch: estadodelswitch\n                }\n    }\n];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1150,"y":100,"wires":[["40daa278.7eaa8c"]]},{"id":"bd349fa8.774d1","type":"function","z":"9bc9a9f6.d07ec8","name":"QPIRIExtraccion","func":"var output = msg.payload.split(\" \");\nlet voltajeredconf = parseFloat((output[0].slice(1, 5)));\nlet amperiosredmaxconf = parseFloat(output[1]);\nlet voltajesalidaconf = parseFloat(output[2]);\nlet frecuenciasalidaconf = parseFloat(output[3]);\nlet amperiossalidaconf = parseFloat(output[4]);\nlet potenciaaparentesalidaconf = parseFloat(output[5]);\nlet potenciaactivasalidaconf = parseFloat(output[6]);\nlet voltajebateriaconf = parseInt(output[7]);\nlet voltajelimitedescargabatconf = parseFloat(output[8]);\nlet voltajelimiterecargabatconf = parseFloat(output[22]);\nlet voltajeminimoparacorteconf = parseFloat(output[9]);\nlet voltajeabsorcionconf = parseFloat(output[10]);\nlet voltajeflotacionconf = parseFloat(output[11]);\nlet tipodebateriaconf = parseInt(output[12]);\nlet amperiosmaxcargadorbatconf = parseInt(output[13]);\nlet amperiosmaxtotalesabatconf = parseInt(output[14]);\nlet rangovoltajedentradaconf = parseInt(output[15]);\nlet prioridadfuentesalidaconf = parseInt(output[16]);\nlet prioridadcargadorbatconf = parseInt(output[17]);\nlet maximonumeroparalelosconf = parseInt(output[18]);\nlet tipodemaquina = parseInt(output[19]);\nlet tipodehibridoconf = parseInt(output[20]);\nlet tipodesalidaparaleloconf = parseInt(output[21]);\nlet potenciasolarparaleloconf = parseInt(output[23]);\nlet potenciasolarbalanceconf = parseInt(output[24]);\nglobal.set('voltajeabsorcionconfmax0' , voltajeabsorcionconf);\nglobal.set('voltajeflotacionconfmax0' , voltajeflotacionconf);\nreturn [\n    {\n        payload: {\n                voltajeredconf: voltajeredconf,\n                amperiosredmaxconf: amperiosredmaxconf,\n                voltajesalidaconf: voltajesalidaconf,\n                frecuenciasalidaconf: frecuenciasalidaconf,\n                amperiossalidaconf: amperiossalidaconf,\n                potenciaaparentesalidaconf: potenciaaparentesalidaconf,\n                potenciaactivasalidaconf: potenciaactivasalidaconf,\n                voltajebateriaconf: voltajebateriaconf,\n                voltajelimiterecargabatconf: voltajelimiterecargabatconf,\n                voltajelimitedescargabatconf: voltajelimitedescargabatconf,\n                voltajeminimoparacorteconf: voltajeminimoparacorteconf,\n                voltajeabsorcionconf: voltajeabsorcionconf,\n                voltajeflotacionconf: voltajeflotacionconf,\n                tipodebateriaconf: tipodebateriaconf,\n                amperiosmaxcargadorbatconf: amperiosmaxcargadorbatconf,\n                amperiosmaxtotalesabatconf: amperiosmaxtotalesabatconf,\n                rangovoltajedentradaconf: rangovoltajedentradaconf,\n                prioridadfuentesalidaconf: prioridadfuentesalidaconf,\n                prioridadcargadorbatconf: prioridadcargadorbatconf,\n                maximonumeroparalelosconf: maximonumeroparalelosconf,\n                tipodemaquina: tipodemaquina,\n                tipodehibridoconf: tipodehibridoconf,\n                tipodesalidaparaleloconf: tipodesalidaparaleloconf,\n                potenciasolarparaleloconf: potenciasolarparaleloconf,\n                potenciasolarbalanceconf: potenciasolarbalanceconf\n                }\n    }\n]","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1140,"y":260,"wires":[["40daa278.7eaa8c"]]},{"id":"4423063a.c56eb8","type":"function","z":"9bc9a9f6.d07ec8","name":"QVFW Extraccion U1","func":"var output = msg.payload;\nlet Firmware = (output.slice(10, 15));\nreturn [\n    {\n        payload: {\n                Firmware: Firmware\n                 }\n    }\n]","outputs":1,"noerr":0,"x":1160,"y":140,"wires":[["40daa278.7eaa8c"]]},{"id":"198b4fc2.1fca4","type":"function","z":"9bc9a9f6.d07ec8","name":"QVFW3 Firmware U3","func":"var output = msg.payload;\nlet Firmware3 = (output.slice(10, 15));\nreturn [\n    {\n        payload: {\n                Firmware3: Firmware3\n                 }\n    }\n]","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1160,"y":180,"wires":[["40daa278.7eaa8c"]]},{"id":"dd066a1.e232a98","type":"function","z":"9bc9a9f6.d07ec8","name":"QBEQI Ecu Extrac","func":"var output = msg.payload.split(\" \");\nlet activacionecualizacion = parseInt(output[0].slice(1, 2));\nlet tiempoecualizacion = parseInt(output[1]);\nlet diasentreecualizaciones = parseInt(output[2]);\nlet maxamperiosparaecualizar = parseInt(output[3]);\nlet diasquefaltanparaecualizar = parseInt(output[4]);\nlet voltajedeecualizacion = parseFloat(output[5]);\nlet tiempodeabsorcion = parseInt(output[6]);\nlet timeoutecualizacion = parseInt(output[7]);\nreturn [\n    {\n        payload: {\n                activacionecualizacion: activacionecualizacion,\n                tiempoecualizacion: tiempoecualizacion,\n                diasentreecualizaciones: diasentreecualizaciones,\n                maxamperiosparaecualizar: maxamperiosparaecualizar,\n                diasquefaltanparaecualizar: diasquefaltanparaecualizar,\n                voltajedeecualizacion: voltajedeecualizacion,\n                tiempodeabsorcion: tiempodeabsorcion,\n                timeoutecualizacion: timeoutecualizacion\n                 }\n    }\n]","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1150,"y":300,"wires":[["40daa278.7eaa8c"]]},{"id":"9c689710.cb0018","type":"function","z":"9bc9a9f6.d07ec8","name":"QID Nº Serie Extrac","func":"var numerodeserie = msg.payload.slice(1, 15);\nflow.set('numerodeserie', numerodeserie);\nreturn [\n    {\n        payload: {\n                numerodeserie: numerodeserie\n                 }\n    }\n];\n// Numero de Serie va a flow o incluso podria ir a global para identificar en paralelos ","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1160,"y":60,"wires":[["40daa278.7eaa8c"]]},{"id":"d4064c8b.a9e53","type":"comment","z":"9bc9a9f6.d07ec8","name":"Extractores","info":"","x":1170,"y":20,"wires":[]},{"id":"af0311cf.2cd99","type":"function","z":"9bc9a9f6.d07ec8","name":"QPIWS Warnings Extrac","func":"var output = msg.payload;\nlet reservado = parseInt(output.slice(1, 2));\nlet falloinversor = parseInt(output.slice(2, 3));\nlet fallo08voltajebusalto = parseInt(output.slice(3, 4));\nlet fallo52voltajebusbajo = parseInt(output.slice(4, 5));\nlet fallo09softwarebus = parseInt(output.slice(5, 6));\nlet peligronoacinput = parseFloat(output.slice(6, 7));\nlet peligrocortopv = parseInt(output.slice(7, 8));\nlet fallo58voltajeinversorbajo = parseInt(output.slice(8, 9));\nlet fallo06voltajeinversoralto = parseInt(output.slice(9, 10));\nlet peligro02sobretemperatura = parseInt(output.slice(10, 11));\nlet peligro01ventilador = parseInt(output.slice(11, 12));\nlet peligro03altovoltajebateria = parseInt(output.slice(12, 13));\nlet peligro04bajovoltajebateria = parseInt(output.slice(13, 14));\nlet peligro07sobrecargar = parseInt(output.slice(14, 15));\nlet peligrobateriashutdown = parseInt(output.slice(15, 16));\nlet peligro10bateriaderating = parseInt(output.slice(16, 17));\nlet peligroeeprom = parseInt(output.slice(17, 18));\nlet fallo51sobrecorriente = parseInt(output.slice(18, 19));\nlet fallosoftwareinversor = parseInt(output.slice(19, 20));\nlet falloautotest = parseInt(output.slice(20, 21));\nlet fallo55continuaenac = parseInt(output.slice(21, 22));\nlet fallo56bateriaabierta = parseInt(output.slice(22, 23));\nlet fallo57sensorcorriente = parseInt(output.slice(23, 24));\nlet fallocortobateria = parseInt(output.slice(24, 25));\nlet peligrolimitepotencia = parseInt(output.slice(25, 26));\nlet peligro13altovoltajeplaca = parseInt(output.slice(26, 27));\nlet fallompptsobrecarga = parseInt(output.slice(27, 28));\nlet peligro14mpptsobrecarga = parseInt(output.slice(28, 29));\nlet peligro12bateriabajaparamppt = parseInt(output.slice(29, 30));\nreturn [\n    {\n        payload: {\n            falloinversor: falloinversor,\n            fallo08voltajebusalto: fallo08voltajebusalto,\n            fallo52voltajebusbajo: fallo52voltajebusbajo,\n            fallo09softwarebus: fallo09softwarebus,\n            peligronoacinput: peligronoacinput,\n            peligrocortopv: peligrocortopv,\n            fallo06voltajeinversoralto: fallo06voltajeinversoralto,\n            peligro02sobretemperatura: peligro02sobretemperatura,\n            peligro01ventilador: peligro01ventilador,\n            peligro03altovoltajebateria: peligro03altovoltajebateria,\n            peligro04bajovoltajebateria: peligro04bajovoltajebateria,\n            peligro07sobrecargar: peligro07sobrecargar,\n            peligrobateriashutdown: peligrobateriashutdown,\n            peligro10bateriaderating: peligro10bateriaderating,\n            peligroeeprom: peligroeeprom,\n            fallo51sobrecorriente: fallo51sobrecorriente,\n            fallosoftwareinversor: fallosoftwareinversor,\n            falloautotest: falloautotest,\n            fallo55continuaenac: fallo55continuaenac,\n            fallo56bateriaabierta: fallo56bateriaabierta,\n            fallo57sensorcorriente: fallo57sensorcorriente,\n            fallocortobateria: fallocortobateria,\n            peligro13altovoltajeplaca: peligro13altovoltajeplaca,\n            fallompptsobrecarga: fallompptsobrecarga,\n            peligro14mpptsobrecarga: peligro14mpptsobrecarga,\n            peligro12bateriabajaparamppt: peligro12bateriabajaparamppt\n                 }\n    }\n]","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1170,"y":340,"wires":[["40daa278.7eaa8c"]]},{"id":"40daa278.7eaa8c","type":"join","z":"9bc9a9f6.d07ec8","name":"Juntando Todo 4 s","mode":"custom","build":"merged","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"4","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":1450,"y":280,"wires":[["d4e52660.0f5988"]]},{"id":"3a0b2dac.6bc8a2","type":"function","z":"9bc9a9f6.d07ec8","name":"QMOD Extractor","func":"var output = msg.payload;\nlet mdts = output.slice(1, 2);\nlet mododetrabajo;\nif (mdts === \"P\") {\n    mododetrabajo = 0;\n} else if (mdts === \"S\") {\n    mododetrabajo = 1;\n} else if (mdts === \"L\") {\n    mododetrabajo = 2;\n} else if (mdts === \"B\") {\n    mododetrabajo = 3;\n} else if (mdts === \"F\") {\n    mododetrabajo = 4;\n} else if (mdts === \"H\") {\n    mododetrabajo = 5;\n}    \nreturn [{\n    payload: {\n         mododetrabajo: mododetrabajo\n             }\n        }\n       ];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1140,"y":380,"wires":[["40daa278.7eaa8c"]]},{"id":"fcd12eb.29738d","type":"function","z":"9bc9a9f6.d07ec8","name":"QPIGS2Extraccion","func":"var output = msg.payload.split(\" \");\nlet amperiosenplaca2 = parseInt(output[0].slice(1, 5));\nlet voltajeenplaca2 = parseInt(output[1]);\nlet potenciaenplaca2 = parseInt(output[2]);\nreturn [\n    {\n        payload: {\n                potenciaenplaca2: potenciaenplaca2,\n                voltajeenplaca2: voltajeenplaca2,\n                amperiosenplaca2: amperiosenplaca2\n                }\n    }\n];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1150,"y":420,"wires":[["40daa278.7eaa8c"]]},{"id":"3b4d261d.daba4a","type":"function","z":"9bc9a9f6.d07ec8","name":"QLEDExtraccion","func":"var output = msg.payload.split(\" \");\nlet led = parseInt(output[0].slice(1, 2));\nlet ledvelocidad = parseInt(output[1]);\nlet ledefectos = parseInt(output[2]);\nlet ledbrillo = parseInt(output[3]);\nlet ledcosa = parseInt(output[4]);\nlet colorred = (output[5].slice(0,9));\nlet colorsolar = (output[5].slice(9,18));\nlet colorbateria = (output[5].slice(18,27));\nreturn [\n    {\n        payload: {\n                led: led,\n                ledvelocidad: ledvelocidad,\n                ledefectos: ledefectos,\n                ledbrillo: ledbrillo,\n                ledcosa: ledcosa,\n                colorred: colorred,\n                colorsolar: colorsolar,\n                colorbateria: colorbateria\n                }\n    }\n];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1140,"y":460,"wires":[["40daa278.7eaa8c"]]},{"id":"c2c747ec.cc0b58","type":"function","z":"9bc9a9f6.d07ec8","name":"QED Energia diaria producida","func":"var energiadiaria = parseInt(msg.payload.slice(1, 9));\nreturn [\n    {\n        payload: {\n                energiadiaria: energiadiaria\n                 }\n    }\n];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1190,"y":500,"wires":[["40daa278.7eaa8c"]]},{"id":"f5269e19.63df9","type":"function","z":"9bc9a9f6.d07ec8","name":"QLD Carga diaria entregada","func":"var cargadiariaentregada = parseInt(msg.payload.slice(1, 9));\nreturn [\n    {\n        payload: {\n                cargadiariaentregada: cargadiariaentregada\n                 }\n    }\n];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1180,"y":540,"wires":[["40daa278.7eaa8c"]]},{"id":"1dd162e5.f2db9d","type":"inject","z":"9bc9a9f6.d07ec8","name":"QPIRI Configuracion","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Configuracion","payload":"QPIRI","payloadType":"str","x":160,"y":280,"wires":[["61ce5339.3ff7ac"]]},{"id":"bb6879c0.e826a8","type":"inject","z":"9bc9a9f6.d07ec8","name":"QFLAG Miscelanea","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Miscelanea","payload":"QFLAG","payloadType":"str","x":160,"y":240,"wires":[["61ce5339.3ff7ac"]]},{"id":"60ba838c.a6dd2c","type":"inject","z":"9bc9a9f6.d07ec8","name":"QBEQI Ecualizacion Bateria","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Ecualizacion Bateria","payload":"QBEQI","payloadType":"str","x":190,"y":320,"wires":[["61ce5339.3ff7ac"]]},{"id":"a17ca4f5.bae9e8","type":"inject","z":"9bc9a9f6.d07ec8","name":"QPIWS Informacion Warnings","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Informacion Warnings","payload":"QPIWS","payloadType":"str","x":190,"y":360,"wires":[["61ce5339.3ff7ac"]]},{"id":"5acbc736.c03538","type":"inject","z":"9bc9a9f6.d07ec8","name":"QPIGS Estado General","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Estado General","payload":"QPIGS","payloadType":"str","x":170,"y":120,"wires":[["61ce5339.3ff7ac"]]},{"id":"a6e956bb.15a808","type":"inject","z":"9bc9a9f6.d07ec8","name":"QID Numero de Serie","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Numero de Serie","payload":"QID","payloadType":"str","x":160,"y":80,"wires":[["61ce5339.3ff7ac"]]},{"id":"d882e049.679d1","type":"inject","z":"9bc9a9f6.d07ec8","name":"QVFW Firmware CPU1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Version CPU1","payload":"QVFW","payloadType":"str","x":170,"y":160,"wires":[["61ce5339.3ff7ac"]]},{"id":"251c2eb7.ca3252","type":"inject","z":"9bc9a9f6.d07ec8","name":"QVFW3 Firmware CPU3","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Firmware CPU3","payload":"QVFW3","payloadType":"str","x":170,"y":200,"wires":[["61ce5339.3ff7ac"]]},{"id":"61ce5339.3ff7ac","type":"link out","z":"9bc9a9f6.d07ec8","name":"ParaCRCTJ","links":["2756c316.eadf3c"],"x":570,"y":360,"wires":[],"l":true},{"id":"497e6e1c.0ee55","type":"comment","z":"9bc9a9f6.d07ec8","name":"Comandos de monitorizacion","info":"Comandos de Monitorizacion","x":160,"y":40,"wires":[]},{"id":"39202c23.e6ea64","type":"inject","z":"9bc9a9f6.d07ec8","name":"QMOD Modo de Trabajo","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Modo de Trabajo","payload":"QMOD","payloadType":"str","x":170,"y":400,"wires":[["61ce5339.3ff7ac"]]},{"id":"c82b0d71.22c3c","type":"inject","z":"9bc9a9f6.d07ec8","name":"QPIGS2 Segundo Campo","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Campo2","payload":"QPIGS2","payloadType":"str","x":180,"y":440,"wires":[["61ce5339.3ff7ac"]]},{"id":"4813b372.e9c16c","type":"inject","z":"9bc9a9f6.d07ec8","name":"DAT Ajuste de Fecha","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 04 * * *","once":false,"onceDelay":0.1,"topic":"ajustedetiempo","payload":"DAT","payloadType":"str","x":160,"y":480,"wires":[["da8cd6b5.8dc498"]]},{"id":"da8cd6b5.8dc498","type":"simpletime","z":"9bc9a9f6.d07ec8","name":"","mydate":true,"myymd":true,"myyear":true,"mymonth":true,"mymonthn":true,"mydom":true,"mydoy":true,"myday":true,"myhourpm":true,"myhour":true,"mytime":true,"mytimes":true,"myminute":true,"myminutes":true,"mysecond":true,"mymillis":true,"myepoch":true,"myrawdate":true,"mypm":true,"x":130,"y":520,"wires":[["7ca8dbdc.f345e4"]]},{"id":"7ca8dbdc.f345e4","type":"function","z":"9bc9a9f6.d07ec8","name":"FormatoTiempo","func":"var comando = msg.payload;\nvar aa = msg.myyear.slice(2,4);\nvar mm = msg.mymonthn;\nvar dd = msg.mydom;\nvar hh = msg.myhour;\nvar ff = msg.myminute;\nvar ss = msg.mysecond;\nmsg.payload = comando + aa + mm + dd + hh + ff + ss;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":300,"y":520,"wires":[["61ce5339.3ff7ac"]]},{"id":"445143c5.a5e9fc","type":"inject","z":"9bc9a9f6.d07ec8","name":"QLED Barra LED","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"4","crontab":"","once":false,"onceDelay":0.1,"topic":"Barra LED","payload":"QLED","payloadType":"str","x":150,"y":560,"wires":[["61ce5339.3ff7ac"]]},{"id":"aa4c4d04.97883","type":"inject","z":"9bc9a9f6.d07ec8","name":"Energiaproducidadiaria","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"energiaproducidadiaria","payload":"QED","payloadType":"str","x":170,"y":600,"wires":[["aafe8fbb.da251"]]},{"id":"aafe8fbb.da251","type":"simpletime","z":"9bc9a9f6.d07ec8","name":"","mydate":true,"myymd":true,"myyear":true,"mymonth":true,"mymonthn":true,"mydom":true,"mydoy":true,"myday":true,"myhourpm":true,"myhour":true,"mytime":true,"mytimes":true,"myminute":true,"myminutes":true,"mysecond":true,"mymillis":true,"myepoch":true,"myrawdate":true,"mypm":true,"x":370,"y":600,"wires":[["2f807913.a65ce6"]]},{"id":"d4afdba8.6582e8","type":"inject","z":"9bc9a9f6.d07ec8","name":"Cargadiariaentregada","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"cargadiariaentregada","payload":"QLD","payloadType":"str","x":170,"y":640,"wires":[["dc6f9b44.a170f8"]]},{"id":"dc6f9b44.a170f8","type":"simpletime","z":"9bc9a9f6.d07ec8","name":"","mydate":true,"myymd":true,"myyear":true,"mymonth":true,"mymonthn":true,"mydom":true,"mydoy":true,"myday":true,"myhourpm":true,"myhour":true,"mytime":true,"mytimes":true,"myminute":true,"myminutes":true,"mysecond":true,"mymillis":true,"myepoch":true,"myrawdate":true,"mypm":true,"x":370,"y":640,"wires":[["985cc328.92477"]]},{"id":"2f807913.a65ce6","type":"function","z":"9bc9a9f6.d07ec8","name":"FormatoTiempo","func":"var comando = msg.payload;\nvar aa = msg.myyear;\nvar mm = msg.mymonthn;\nvar dd = msg.mydom;\nmsg.payload = comando + aa + mm + dd;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":540,"y":600,"wires":[["61ce5339.3ff7ac"]]},{"id":"985cc328.92477","type":"function","z":"9bc9a9f6.d07ec8","name":"FormatoTiempo","func":"var comando = msg.payload;\nvar aa = msg.myyear;\nvar mm = msg.mymonthn;\nvar dd = msg.mydom;\nmsg.payload = comando + aa + mm + dd;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":540,"y":640,"wires":[["61ce5339.3ff7ac"]]},{"id":"6919b517.d1e43c","type":"comment","z":"9bc9a9f6.d07ec8","name":"Monitorizacion para Hibrido AXPERT MAX SINGLE  ","info":"","x":770,"y":40,"wires":[]},{"id":"4698e682.977198","type":"link out","z":"9bc9a9f6.d07ec8","name":"TodasLecturasAXPERTMAX","links":[],"x":1940,"y":280,"wires":[],"l":true},{"id":"bd8fa222.184f2","type":"comment","z":"9bc9a9f6.d07ec8","name":"Creando Objeto con todas las lecturas del Hibrido","info":"","x":1600,"y":220,"wires":[]},{"id":"d4e52660.0f5988","type":"function","z":"9bc9a9f6.d07ec8","name":"Id en topic num serie","func":"var topic = flow.get('numerodeserie');\nmsg.topic = topic;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1680,"y":280,"wires":[["4698e682.977198","645a2e8b.dcbcb"]]},{"id":"2756c316.eadf3c","type":"link in","z":"9bc9a9f6.d07ec8","name":"EntradaalCRC","links":["61ce5339.3ff7ac"],"x":830,"y":640,"wires":[["509893d1.98ab3c"]],"l":true},{"id":"4faa967b.783d88","type":"link in","z":"9bc9a9f6.d07ec8","name":"Respuesta Puerto serie","links":["22222d68.bf0a42"],"x":580,"y":280,"wires":[["ab516497.6a2e48"]],"l":true},{"id":"f455d2af.938f","type":"serial-port","z":"","serialport":"/dev/ttyUSB0","serialbaud":"2400","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\r","bin":"false","out":"char","addchar":"","responsetimeout":"10000"}]
    He introducio los nodos simpletime para ajustar mejor los formatos de tiempo. Si no los teneis debereis de instalarlos desde la paleta de nodos. El nodo se llama simpletime cuando lo busqueis en la paleta de instalacion.

    La explicacion del flujo del Axpert MAX es la siguiente:

    1.- Se lanzan cada 4 segundos los comandos de consulta en forma de nodos inyectores (izda del flujo). Todos los comandos llevan su msg.payload en ASCII y un msg.topic que los identifica. Y todos van a un nodo link-out que es la entrada del proceso CRC para lanzarlo hacia el puerto serie. Esto es importante porque en el flujo solo tenemos una sola instancia del puerto serie para todos esos comandos. No creamos tantas instancias de puerto serie (nodos) para cada comando. Asi evitamos que el puerto serie se vuelva loco: una sola instancia y todos a pasar por el CRCTJ.

    2.- El puerto serie (nodo request serial) responde ordenadamente a todos los comandos que le entran. Y todas las respuestas llevan su correspondiente msg.payload y msg.topic referente a la consulta realizada por lo que con un nodo switch separaremos por topic y procesaremos cada msg.payload de cada respuesta a cada comando especifico (extractores especificos).

    3.- Despues de cada extractor volveremos a juntar todo con un nodo join para crear un objeto en donde se englobaran todos los parametros del dispositivo cada 4 segundos y lo sacaremos con un nodo link-out para llevarlo donde queramos: mqtt, dashboard, tablas, mariadb, mongos, etc, etc, etc.

    Creo que de esta forma haciendo este tipo de flujos por dispositvo se pueden interconectar entre ellos para interactuar segun convenga.
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  8. #8
    juanka99 está desconectado Forero Junior
    Fecha de ingreso
    sep 2021
    Mensajes
    7

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Buenos días,

    Mi inversor es un Kostal Piko 3.0-2... Se podría hacer algo con él?

    Según el manual del inversor, los datos se transmiten en formato XML. Ejemplo:

    [Aporte] Tutorial Monitorización Node red-kostal_piko.jpg

    Gracias.
    Última edición por juanka99; 08/09/2021 a las 08:27 Razón: ampliación de información

  9. #9
    Jm35 está desconectado Forero Junior
    Fecha de ingreso
    ene 2022
    Mensajes
    11

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Buenas noches, soy nuevo en el foro y en el tema de las placas solares, me instalaron las placas el pasado viernes 15/01/22, tengo una instalación de 4.8Kw en 12 Placas Jinko de 400w (2,4 Este + 2,4 Oeste) + inversor Huawei de 5Kw, mi tejado es complicado y con sombras, así que llevo 8 optimizadores Huawei, la producción de un día como ayer u hoy llega a los 12.9 Kwh, con picos máximos de 2,15 kwh, la verdad es que estoy un poco desilusionado, esperaba mas, pero el lado Oeste me frena mucho, pero bueno a lo que voy.

    He configurado en un ordenador con Windows el Node-red con conexión a influxdb y al inversor Huawei, también he instalado Grafana en donde veo los datos de la base de datos de influxdb. pero el problema lo tengo en Node-Red, aquí obtengo los datos del inversor en tiempo real y pretendo hacer un dashboard en donde se muestren las medidas que obtengo del inversor, pero no soy capaz ni encuentro información, toda la información o videos que veo es para RaspBerry Pi, nada para Windows, ¿alguien me puede ayudar?.

    Gracias de antemano y un Saludo desde Huelva.

  10. #10
    Agente47m está desconectado Forero Junior
    Fecha de ingreso
    oct 2020
    Mensajes
    22

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Independientemente del sistema operativo que tengas node red tiene un módulo de Dashboard, el paquete extracto es node-red-dashboard ,solo tienes que buscarlo en node red e instalarlo
    Una vez instalado es muy sencillo, si tienes problemas dímelo y lo resolvemos
    Un saludo


    Enviado desde mi iPhone utilizando Tapatalk

  11. #11
    Jm35 está desconectado Forero Junior
    Fecha de ingreso
    ene 2022
    Mensajes
    11

    Predeterminado Re: [Aporte] Tutorial Monitorización Node red

    Muy Buenas y gracias por responder, el paquete node-red-dashboard lo tengo instalado, pero no se como hay que configurarlo, siguiendo algunos videos he hecho lo que a continuacion te indico:

    Creo una caja mqtt-in y teóricamente esto va conectado a un vumeter, pero no se como hay que configurar el mqtt-in.

    Para configurarlo le indico en conexión la dirección de mi Inversor Huawei (http:/192.168.1.95 Port 1880) y no se conecta, he probado varias cosas y tampoco funciona.

    Sin embargo en Grafana si consigo obtener los datos de la base de Datos InfluxDb y representarlos Gráficamente, lo único que estoy aprendiendo aun y voy muy lento




1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47