Página 2 de 2 PrimerPrimer 12
Resultados 26 al 38 de 38
  1. #26
    ministropepon está desconectado Forero
    Fecha de ingreso
    may 2014
    Ubicación
    Madrid, Spain
    Mensajes
    446

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Hola Tejota, Me he visto obligado a usar el USB porque por puerto serial estaba teniendo problemas de ruido con otros dispositivos.

    Tienes la función CRCTJ actualizada para los comandos de más de 8bits?

    Un saludo!

  2. #27
    ministropepon está desconectado Forero
    Fecha de ingreso
    may 2014
    Ubicación
    Madrid, Spain
    Mensajes
    446

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Cita Iniciado por ministropepon Ver mensaje
    Hola Tejota, Me he visto obligado a usar el USB porque por puerto serial estaba teniendo problemas de ruido con otros dispositivos.

    Tienes la función CRCTJ actualizada para los comandos de más de 8bits?

    Un saludo!
    Me auto-respondo con la solución que de momento he encontrado:

    [NODERED] Conexion con Axperts Voltronics por puerto USB.-screenshot_20210718_175658.jpg


    Un nodo js que parte en 2 buffers y que se envían con un pequeño delay:

    Código:
    var payload = msg.payload;
    
    if (payload.length <= 8){
        return [msg,null];
    }else{
        node.warn("CRT > 8Bytes: "+msg.payload);
        
        buff=Buffer.from(payload);
        
        first={}
        first.payload=buff.slice(0,8);
        first.topic=msg.topic;
        
        second={}
        second.payload=buff.slice(8);
        second.topic=msg.topic;
        
        node.warn("-first: "+first.payload);
        node.warn("-second:"+second.payload);
        
        return [first,second];
    }
    Por si a alguien le viene bien.

    Un saludo!
    Última edición por ministropepon; 18/07/2021 a las 18:09

  3. #28
    ranademiradafija está desconectado Forero Junior
    Fecha de ingreso
    oct 2022
    Mensajes
    11

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Hola,
    A ver si alguíen pudiera ayudarme.
    Ya pude hacer funcionar la versión Rs232 de tejota y estoy emocionado por si puedo hacer funcionar la versión USB pero me esta costando muchas horas de sueño y no lo consigo

    El problema que tengo es la instalación del repositorio node-contrib-usbhid.
    He seguido todos los pasos pero obtengo error en el ultimo paso

    .node-red/ npm i somebuddy87/node-red-contrib-usbhid


    es posible que el repositorio no exista?

    GRACIAS a todos !

    NOta: en breve pongo una captura, que me ahogo en un vaso de agua.
    NOta2: dificil va a ser resucitar este foro -
    Última edición por ranademiradafija; 31/10/2022 a las 18:11

  4. #29
    ministropepon está desconectado Forero
    Fecha de ingreso
    may 2014
    Ubicación
    Madrid, Spain
    Mensajes
    446

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    No veo el error, luego miro si yo puedo instalarlo.

    deberías poder usando esta librería:

    https://flows.nodered.org/node/node-red-contrib-usbhid

  5. #30
    ministropepon está desconectado Forero
    Fecha de ingreso
    may 2014
    Ubicación
    Madrid, Spain
    Mensajes
    446

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Hola Rana,

    Tienes razón, el modulo usbhid no compila en un linux moderno por problemas de versiones con libudev-dev, libusb-1.0-0-dev, el desarrollador no ha actualizado ese nodo desde hace años y parece que no es compatible con alguna actualización.

    Yo lo tengo funcionando pero en un Debian 10, en un 11 es donde me ha dado ese problema que comentas.

    Si averiguo algo más lo pongo por aquí.

    Un saludo.

    PD: ahora están más de moda los grupos de telegram y otras "moderneces" que no me gustan porque son completamente efímeras, lo que escribes en telegram se olvida y pierde fácilmente, pero en un blog o en un foro queda ahí. Un saludo!

  6. #31
    ranademiradafija está desconectado Forero Junior
    Fecha de ingreso
    oct 2022
    Mensajes
    11

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    GRACIAS mini , pensé que podía quedarme solo en esta cruzada, llevo la "L" en esto de linux, ya sabes, como el inglés, toda la vida estudiandolo y siempre con un nivel medio bajo.
    Es un reto el poder usar ese módulo USBHID por el potencial que tiene,
    he leido que degradando nodejs a versiones anteriores se podría solucionar el problema.

    En breve postearé una captura del error, está claro que todo esto me ayudará para tener una mejor comprensión de linux.

    PD: coincido plenamente con lo que dices de Telegram y los foros. espero que sea una moda pasajera y vuelva la cordura..

  7. #32
    ranademiradafija está desconectado Forero Junior
    Fecha de ingreso
    oct 2022
    Mensajes
    11

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Hola!,

    Hice una instalación de node-red en ubuntuserver,
    y después instalé los paquetes propuestos por Tjota

    Esté es el error que obtengo en el último paso(todos los demás paquetes se instalan ok)
    solo puse las primeras líneas para no cargar mucho el mensaje:


    ubuntuvantserver:/usr/local/lib/node_modules/node-red$ sudo npm i somebuddy87/node-red-contrib-usbhid
    npm ERR! code 1
    npm ERR! path /usr/local/lib/node_modules/node-red/node_modules/node-hid
    npm ERR! command failed
    npm ERR! command sh -c -- prebuild-install || node-gyp rebuild
    npm ERR! make: Entering directory '/usr/local/lib/node_modules/node-red/node_modules/node-hid/build'
    npm ERR! CC(target) Release/obj.target/hidapi-linux-hidraw/hidapi/linux/hid.o
    npm ERR! AR(target) Release/obj.target/hidapi-linux-hidraw.a

    .................................................. ...

    Hice la instalación desde esta carpeta /usr/local/lib/node_modules/node-red, no encontré la carpeta oculta donde indica tjota en la misma ubicación
    pero por comparación es la carpeta correcta (creo)

    Estos fueron los comandos que usé que son los que puso tjota en el tutorial.

    #! /bin/bash

    sudo apt-get install build-essential git

    sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev

    sudo apt-get install libudev-dev

    sudo npm install node-hid --build -from –source

    sudo npm i somebuddy87/node-red-contrib-usbhid

    A ver si me podeís hechar una mano y por lo menos me quedo tranquilo que yo hice bien el proceso. GRACIAS!!!!!!!!
    Última edición por ranademiradafija; 02/11/2022 a las 17:28

  8. #33
    ariasmonyvelarde está desconectado Forero Junior
    Fecha de ingreso
    oct 2022
    Ubicación
    Sur Occidente del Norte
    Mensajes
    23

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    yo estoy igual que tu, mismos errores.
    En mi caso instanlado en un ubuntu server dentro de una raspbery y no hubo manera

  9. #34
    ranademiradafija está desconectado Forero Junior
    Fecha de ingreso
    oct 2022
    Mensajes
    11

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    , de momento gracias a la solución a través de RS232 me estoy apañando, pero tengo la espinita clavada de hacerlo a través de USB y no tener que depender de adaptador USB-RS232.
    Con la solución a través de RS232 pude conectar con inversores de la marca Voltronic y Axpert(que creo que es el mismo fabricante) y solo hay que cambiar algunas lineas de código en la función "QPIGSExtraccion".
    Si encuentro una solución no te quepa duda que postearé por aquí, mis conocimientos de Linux ganan enteros a base de horas de sueño y fracaso tras fracaso a base de prueba/error .

  10. #35
    ariasmonyvelarde está desconectado Forero Junior
    Fecha de ingreso
    oct 2022
    Ubicación
    Sur Occidente del Norte
    Mensajes
    23

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Cita Iniciado por ranademiradafija Ver mensaje
    , de momento gracias a la solución a través de RS232 me estoy apañando, pero tengo la espinita clavada de hacerlo a través de USB y no tener que depender de adaptador USB-RS232.
    Con la solución a través de RS232 pude conectar con inversores de la marca Voltronic y Axpert(que creo que es el mismo fabricante) y solo hay que cambiar algunas lineas de código en la función "QPIGSExtraccion".
    Si encuentro una solución no te quepa duda que postearé por aquí, mis conocimientos de Linux ganan enteros a base de horas de sueño y fracaso tras fracaso a base de prueba/error .
    Pues tu experiencia me interesa, porque yo por RS232 tampoco soy capaz de sacar los datos .......
    Me podrías explicar que líneas de código has cambiado?

    En este hilo explico mi caso y el inversor que tengo, que no me queda claro si es un clon de voltronic válido para los flujos que se usan en los tutoriales de nodeRed del foro.
    https://www.solarweb.net/forosolar/f...n-aislada.html

  11. #36
    ranademiradafija está desconectado Forero Junior
    Fecha de ingreso
    oct 2022
    Mensajes
    11

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Cita Iniciado por ariasmonyvelarde Ver mensaje
    Pues tu experiencia me interesa, porque yo por RS232 tampoco soy capaz de sacar los datos .......
    Me podrías explicar que líneas de código has cambiado?

    En este hilo explico mi caso y el inversor que tengo, que no me queda claro si es un clon de voltronic válido para los flujos que se usan en los tutoriales de nodeRed del foro.
    https://www.solarweb.net/forosolar/f...n-aislada.html
    OK, puse un post en el hilo que has comentado

  12. #37
    ariasmonyvelarde está desconectado Forero Junior
    Fecha de ingreso
    oct 2022
    Ubicación
    Sur Occidente del Norte
    Mensajes
    23

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Cita Iniciado por ranademiradafija Ver mensaje
    OK, puse un post en el hilo que has comentado
    Muchas gracias, he respondido en ese hilo para no enredar en este.
    Pero de momento sigo sin suerte.

  13. #38
    SantiER está desconectado Forero
    Fecha de ingreso
    may 2022
    Mensajes
    68
    Entradas de blog
    1

    Predeterminado Re: [NODERED] Conexion con Axperts Voltronics por puerto USB.

    Cita Iniciado por Tejota Ver mensaje
    Si por puerto serie (RJ45) es bastante sencillo conectar un Voltronic en NODERED, por el puerto USB lleva algo mas de complicacion. La mayoria de los programadores que trabajan con el puerto USB de Voltronic usan solamente las librerias de file descriptor (fd). Si bien es suficiente para un uso de unos pocos comandos cuando al hibrido le hacemos multiples peticiones de comandos en pocos segundos por el USB la cosa no es tan suficiente con el fd. El file descriptor es un archivo temporal que el kernel crea para comunicarse con los dispositivos, generalmente esta en el directorio /dev y sera algo similar a /dev/hidraw0, 1, etc. No voy a entrar en detalles comparativos entre el RJ45 y el USB. A mi modo de ver es mas versatil y fiable el RJ45 que el USB en estos equipos, mas que nada porque el USB es un HID de lo mas cutre que os podais encontrar. No he podido o no he sabido sacar ningun featurereport ni nada para controlar el flujo del HID. O sea, este HID va en plan emisor de eventos puro y duro: tu pregunta y yo te contesto a mi bola. Y al no haber flujo de control como en el puerto serie en cuanto le preguntas mucho, se "atora" por lo que hay que medir bien la velocidad de preguntas y pillar bien las respuestas para que no se solapen entre ellas. O sea, fabricarse un driver desde cero. Con un par.

    Por cierto, el USBHID del hibrido se alimenta del exterior, o sea de tu Rpi o de tu ordenador. Puedes apagar el hibrido, incluso de baterias que el HID lo va a detectar la Rpi. De ahi que problemas de alimentacion con la Rpi afecten a la perdida de comunicacion por USB con el hibrido en casos puntuales.


    En NODERED no voy a usar file descriptor. Voy a usar una API que habla directamente con el HID. Se trata de node-hid api . En paleta de nodos instalables hay un nodo llamado node-contrib-usbhid NO LO INSTALEIS DESDE PALETA, EL AUTOR NO HA ACTUALIZADO LAS DEPENDENCIAS y da error al instalar desde paleta. Hay que instalarlo desde npm.

    Pongo fotos en orden del proceso de instalacion de la API (node-hid) y de los nodos en paleta (node-contrib-usbhid). No creo que tengais mucho problema en seguirlos. Estan bastante claros.

    Archivo adjunto 22882
    Archivo adjunto 22883
    Desde .node-red teclead npm i somebuddy87/node-red-contrib-usbhid
    Archivo adjunto 22884
    Archivo adjunto 22885

    Ahora vamos a nuestra plataforma NODE RED y tendremos que ver los nodos usbhid instalados en la paleta:

    Archivo adjunto 22886

    Antes de ponernos a funcionar con el usbhid tenemos que dar permisos de lectura y escritura a los dispositivos que se van a generar cuando usemos usbhid.
    Volvemos a linea de comandos. Tendremos que crear el archivo 99-voltronic.rules con sudo y añadir las lineas de la foto:



    Archivo adjunto 22908
    De esta forma los 4 usbs en cuanto detecten un HID con ese Idproduct e Idvendor tendran los permisos de lectura y escritura para la plataforma. Mirad tambien como he asignado un symlink virtual a cada conector USB para ese HID. Asi podreis asignar fisicamente un dev a cada puerto usb.
    Una vez creado el archivo rules tendreis que reiniciar el sistema para que los cambios hagan efecto.


    Vamos a ver si los nodos usbhid funcionan en la plataforma y el hibrido dice algo o esta callado:

    Archivo adjunto 22892

    De momento se ve que la plataforma detecta el HID del hibrido con el nodo getHIDdevices.

    Ponemos el nodo de HIDdevices y configuramos los datos que nos ha dado el getHIDdevices:

    Archivo adjunto 22893

    Hacemos alguna peticion de algun comando y el hibrido no esta mudo..... Oh!!! habla en hebreo... pero habla.

    Archivo adjunto 22894

    Bueno, pues nada.... cuestion de llamar a los traductores de hebreo:

    Archivo adjunto 22895

    Y ya vemos en la pantalla de depuracion cosas legibles.


    Un poco de arquitectura NODERED y tenemos un flujo para un Axpert Voltronic que nos da un JSON de bastantes parametros del hibrido para su almacenamiento, redireccion mosquitera o representacion donde sea menester.

    Archivo adjunto 22896

    Por supuesto he dejado las entradas y salidas del flujo para ir incorporando mas cosas, como pueden ser botones, sliders y demas dashboard para configurar los parametros del hibrido desde la Rpi. Idem para nodos de funcion exclusivos de algoritmos de carga y demas cacharreria.

    A ver si alguno se anima. Esto da para una personalizacion de la instalacion a gusto del usuario. Y por supuesto que el flujo que he puesto es mejorable pero como no tengo criticos...

    Dejo el flujo en linea:

    Código HTML:
    [{"id":"2c0cfdc.c46c602","type":"tab","label":"Voltronic MKS por USB","disabled":false,"info":""},{"id":"6c0a3edc.a82de","type":"inject","z":"2c0cfdc.c46c602","name":"QPIRI Configuracion","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"7","crontab":"","once":false,"onceDelay":0.1,"topic":"Configuracion","payload":"QPIRI","payloadType":"str","x":140,"y":700,"wires":[["ac2a49dd.512438"]]},{"id":"b8681580.f6b638","type":"inject","z":"2c0cfdc.c46c602","name":"QFLAG Miscelanea","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"7","crontab":"","once":false,"onceDelay":0.1,"topic":"Miscelanea","payload":"QFLAG","payloadType":"str","x":140,"y":660,"wires":[["ac2a49dd.512438"]]},{"id":"c315c02f.2bed1","type":"inject","z":"2c0cfdc.c46c602","name":"QBEQI Ecualizacion Bateria","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"Ecualizacion Bateria","payload":"QBEQI","payloadType":"str","x":170,"y":740,"wires":[["ac2a49dd.512438"]]},{"id":"47b7567a.4dc558","type":"inject","z":"2c0cfdc.c46c602","name":"QPIWS Informacion Warnings","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"Informacion Warnings","payload":"QPIWS","payloadType":"str","x":170,"y":780,"wires":[["ac2a49dd.512438"]]},{"id":"8d340413.a06bf8","type":"inject","z":"2c0cfdc.c46c602","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":150,"y":540,"wires":[["ac2a49dd.512438"]]},{"id":"2cd7dbcd.7d01a4","type":"inject","z":"2c0cfdc.c46c602","name":"QID Numero de Serie","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"Numero de Serie","payload":"QID","payloadType":"str","x":140,"y":500,"wires":[["ac2a49dd.512438"]]},{"id":"fb0c9d3a.bd42f","type":"function","z":"2c0cfdc.c46c602","name":"CRCTJ","func":"    //  Algoritmo para lanzar los comandos hacia Voltronics por puerto serie con CRC propietario\n    //  Algoritmo realizado por Tejota   [email protected]\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":280,"y":160,"wires":[["89c0f835.c54ab8"]]},{"id":"89c0f835.c54ab8","type":"delay","z":"2c0cfdc.c46c602","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"0.8","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":430,"y":160,"wires":[["99e3facb.0c2fc8","f37f99b4.47fcd8"]]},{"id":"99e3facb.0c2fc8","type":"HIDdevice","z":"2c0cfdc.c46c602","connection":"ca5b4d52.c7dc6","name":"Voltronic","x":600,"y":160,"wires":[["765057a0.9c7028"],[]]},{"id":"6196de4d.452f","type":"join","z":"2c0cfdc.c46c602","name":"String final","mode":"custom","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"","joinerType":"str","accumulate":false,"timeout":"","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":810,"y":100,"wires":[["88f539c9.d84ee8"]]},{"id":"280e455d.250e1a","type":"debug","z":"2c0cfdc.c46c602","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1150,"y":580,"wires":[]},{"id":"765057a0.9c7028","type":"function","z":"2c0cfdc.c46c602","name":"Completo en 13 (\\r)","func":"var payload = msg.payload;\nfor (tj = 0; tj < payload.length; tj++) {\nif (payload[tj] == 13) {\n    msg.complete = true;\n         }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":790,"y":160,"wires":[["6196de4d.452f"]]},{"id":"f37f99b4.47fcd8","type":"change","z":"2c0cfdc.c46c602","name":"Delete payload","rules":[{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":100,"wires":[["6196de4d.452f"]]},{"id":"68985b5e.c2a8f4","type":"inject","z":"2c0cfdc.c46c602","name":"QVFW Firmware CPU1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"Version CPU1","payload":"QVFW","payloadType":"str","x":150,"y":580,"wires":[["ac2a49dd.512438"]]},{"id":"bd3d203f.623d9","type":"inject","z":"2c0cfdc.c46c602","name":"QVFW2 Firmware CPU2","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"Firmware CPU2","payload":"QVFW2","payloadType":"str","x":150,"y":620,"wires":[["ac2a49dd.512438"]]},{"id":"ac2a49dd.512438","type":"link out","z":"2c0cfdc.c46c602","name":"ParaCRCTJ","links":["13b953a1.2ef79c"],"x":410,"y":660,"wires":[],"l":true},{"id":"45507b31.ce6ee4","type":"comment","z":"2c0cfdc.c46c602","name":"Comandos de monitorizacion","info":"Comandos de Monitorizacion","x":140,"y":460,"wires":[]},{"id":"13b953a1.2ef79c","type":"link in","z":"2c0cfdc.c46c602","name":"CRCTJWelcome","links":["ac2a49dd.512438"],"x":120,"y":160,"wires":[["fb0c9d3a.bd42f"]],"l":true},{"id":"3bc02c65.358c14","type":"comment","z":"2c0cfdc.c46c602","name":"Rate Limit a 1 msg cada 0,8s","info":"","x":360,"y":120,"wires":[]},{"id":"3d67e40a.721a8c","type":"comment","z":"2c0cfdc.c46c602","name":"Generando cadena de salida con descripcion en topic","info":"","x":720,"y":60,"wires":[]},{"id":"754880f1.ee725","type":"comment","z":"2c0cfdc.c46c602","name":"Juntando payloads hasta completar string","info":"","x":1080,"y":160,"wires":[]},{"id":"88f539c9.d84ee8","type":"link out","z":"2c0cfdc.c46c602","name":"ParaExtractores","links":["175dfd79.d26a83"],"x":1030,"y":100,"wires":[],"l":true},{"id":"c8d39d7e.6c58","type":"switch","z":"2c0cfdc.c46c602","name":"Repartidor Datos Lecturas","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"QID","vt":"str"},{"t":"cont","v":"QPIGS","vt":"str"},{"t":"cont","v":"CPU1","vt":"str"},{"t":"cont","v":"QVFW2","vt":"str"},{"t":"cont","v":"QFLAG","vt":"str"},{"t":"cont","v":"QPIRI","vt":"str"},{"t":"cont","v":"QBEQI","vt":"str"},{"t":"cont","v":"QPIWS","vt":"str"},{"t":"cont","v":"QMOD","vt":"str"}],"checkall":"true","repair":false,"outputs":9,"x":370,"y":360,"wires":[["208b6136.748a4e"],["16809939.52bd57"],["848b4d62.aae62"],["f68d0ca2.3e3b"],["268069a2.5ee866"],["231c7627.1620fa"],["4cccba7e.48b844"],["c7108bd6.a898e8"],["1c62fbc2.20db04"]]},{"id":"175dfd79.d26a83","type":"link in","z":"2c0cfdc.c46c602","name":"ExtractoresWelcome","links":["88f539c9.d84ee8"],"x":130,"y":360,"wires":[["c8d39d7e.6c58"]],"l":true},{"id":"5aa9fcfa.2fbbd4","type":"comment","z":"2c0cfdc.c46c602","name":"Repartiendo por topic","info":"","x":360,"y":260,"wires":[]},{"id":"268069a2.5ee866","type":"function","z":"2c0cfdc.c46c602","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":630,"y":420,"wires":[["4c1a593c.2808d8"]]},{"id":"16809939.52bd57","type":"function","z":"2c0cfdc.c46c602","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));\n/*var numerodeserie = flow.get(numerodeserie);*/\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/*        topic: {numerodeserie: numerodeserie}*/\n    }\n];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":300,"wires":[["4c1a593c.2808d8"]]},{"id":"231c7627.1620fa","type":"function","z":"2c0cfdc.c46c602","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]);\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,"x":620,"y":460,"wires":[["4c1a593c.2808d8"]]},{"id":"848b4d62.aae62","type":"function","z":"2c0cfdc.c46c602","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":640,"y":340,"wires":[["4c1a593c.2808d8"]]},{"id":"f68d0ca2.3e3b","type":"function","z":"2c0cfdc.c46c602","name":"QVFW2 Firmware U2","func":"var output = msg.payload;\nlet Firmware2 = (output.slice(11, 16));\nreturn [\n    {\n        payload: {\n                Firmware2: Firmware2\n                 }\n    }\n]","outputs":1,"noerr":0,"x":640,"y":380,"wires":[["4c1a593c.2808d8"]]},{"id":"4cccba7e.48b844","type":"function","z":"2c0cfdc.c46c602","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":630,"y":500,"wires":[["4c1a593c.2808d8"]]},{"id":"208b6136.748a4e","type":"function","z":"2c0cfdc.c46c602","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":640,"y":260,"wires":[["4c1a593c.2808d8"]]},{"id":"76b888ca.efad58","type":"comment","z":"2c0cfdc.c46c602","name":"Extractores","info":"","x":650,"y":220,"wires":[]},{"id":"c7108bd6.a898e8","type":"function","z":"2c0cfdc.c46c602","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":650,"y":540,"wires":[["4c1a593c.2808d8"]]},{"id":"4c1a593c.2808d8","type":"join","z":"2c0cfdc.c46c602","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":890,"y":380,"wires":[["eff4f325.390ac"]]},{"id":"c683b45d.2d7cb8","type":"link out","z":"2c0cfdc.c46c602","name":"TodasLecturasHibrido","links":[],"x":1040,"y":460,"wires":[],"l":true},{"id":"1b65284f.139fa8","type":"comment","z":"2c0cfdc.c46c602","name":"Creando Objeto con todas las lecturas del Hibrido","info":"","x":1020,"y":320,"wires":[]},{"id":"eff4f325.390ac","type":"function","z":"2c0cfdc.c46c602","name":"Id en topic num serie","func":"var topic = flow.get('numerodeserie');\nmsg.topic = topic;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1100,"y":380,"wires":[["c683b45d.2d7cb8","280e455d.250e1a"]]},{"id":"10de9cf2.6fb1a3","type":"inject","z":"2c0cfdc.c46c602","name":"QMOD Modo de Trabajo","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"Modo de Trabajo","payload":"QMOD","payloadType":"str","x":150,"y":820,"wires":[["ac2a49dd.512438"]]},{"id":"1c62fbc2.20db04","type":"function","z":"2c0cfdc.c46c602","name":"QMOD Extractor","func":"var output = msg.payload;\nlet mododetrabajo = output.slice(1, 2);\nreturn [{\n    payload: {\n         mododetrabajo: mododetrabajo\n             }\n        }\n       ];","outputs":1,"noerr":0,"initialize":"","finalize":"","x":620,"y":580,"wires":[["4c1a593c.2808d8"]]},{"id":"ca5b4d52.c7dc6","type":"HIDConfig","z":"","path":"/dev/Voltronic","name":""}]
    Hola Tejota! Tengo un Axpert VMIII, he recibido un minipc con la intencion de poner el inversor en home assistant, y veo q no hay manera, debería meterlo por nodered, para hacer eso, de momento soy novato, tengo nociones de python pero no voy muy sobrado, en el minipc tengo instalado debian11, instalo ahi nodered y a traves de python hago las instalacion hid? A lo mejor digo tonterias, pero bueno ya m cuentas🤣

Página 2 de 2 PrimerPrimer 12



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