Resultados 1 al 25 de 31
- 13/06/2020, 15:28 #1
[NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Las tarjetas de comunicaciones que han tenido y tienen los Axperts han sufrido una evolucion a lo largo de los años.
En 2014 solo usaban puerto serie RJ45.
En 2016 introdujeron un puerto USB a nivel HID.
Y en 2019 han metido los Bluetooth.
Yo sigo usando el RJ45 porque es el mas fiable de todos y va directo a la placa de control. El USB HID pues lleva su conversion. Y el BT pues lo mismo.
La placa de comunicaciones de los Axperts en su salida hacia la placa de control es con aislamiento total, es decir, no hay conexion electrica fisica entre el RJ45, USB y la TTL de la placa de control. Esto se hace por seguridad ya que el negativo de la placa de control es un negativo peligroso. Y no, no es la masa del chasis este negativo.
El aislamiento en la placa de comunicaciones se hace por optoacopladores mas lentos que el caballo del malo, por eso va a 2400 baudios aunque el TTL de la placa de control vaya a 9600 baudios.
Hay algunos equipos de Voltronic, concretamente los reguladores PCM60X que su unica conexion con el exterior para datos es por RJ45 (serie) o por la tarjeta golden finger (modbus).
La golden finger no creo que valga menos de 70 euros por lo que urge una conexion rj45 con el conversor correspondiente (3 euros) y de ahi a la plataforma nodered para el tratamiento de datos.
El proceso es sencillo con el nodo de puerto serie ya instalado, un nodo de CRC especial y los nodos de parseo de datos para lectura y los de dashboard para configuracion y ajuste.
Si hay varios PCM60X se puede hacer de varias formas, usar conversores tcpip a rs232 o usar conversores usb-rs232. Con los primeros hay que usar un hub de comunicaciones tplink o similares y con los segundos un hub usb. Ya despues en la rpi via udev podremos diferenciar los usbs que corresponderan a cada regulador. En tpcip se diferencian por la ip asignada a cada conversor.
Tambien se podrian usar conversores wifi-ttl y atacar directamente la placa de control del PCM60X pero eso implica abrir el pcm60x y colocarlo dentro. Con lo cual no tendriamos que cablear nada por fuera y con el wifi de la raspberry pi concentrar los wifis de los reguladores. Pero esto ya da para otro hilo.NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
-
- 13/06/2020, 18:21 #2
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Bueno, aqui va un flujo para PCM60X hecho en unos minutos. Igual me he colado en algun slice. Me falta procesar los QPIWS pero no voy a hacer todo yo.
El codigo esta entre etiquetas HTML porque si lo pongo entre etiquetas quotes o codes el foro cambia el formato y puede ser contraproducente. Esto habra que probarlo a ver si a la hora de importarlo/exportarlo desde la plataforma hay problemas.
El proceso es: copiais la linea entera del codigo html sin dejar ningun caracter y luego la importais en la plataforma en la pestaña IMPORT (CTRL+V). Os tendran que aparecer todos los nodos en la plataforma. Los colocais y despues al deploy para que los ejecute. Al principio os parecera todo raro pero despues ya vereis como es todo muy facilmente intercambiable y transportable.
Faltara incluir el nodo conversor y la salida es un object con key:value facilmente transportable a un MQTT, emoncms, etc, etc... El nodo debug del final nos da el resultado en el stream del depurador. Para cortar el stream del depurador se le da a la barra lateral derecha de ese nodo.
Código HTML:[{"id":"713e99c3.abec98","type":"inject","z":"7f384a31.d8f874","name":"QBEQI Ecualizacion Bateria","topic":"Ecualizacion Bateria","payload":"QBEQI","payloadType":"str","repeat":"4","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":160,"wires":[["826cdcfd.d42d6"]]},{"id":"91d5f278.0fded","type":"inject","z":"7f384a31.d8f874","name":"QPIRI Configuracion","topic":"Configuracion","payload":"QPIRI","payloadType":"str","repeat":"4","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":80,"wires":[["826cdcfd.d42d6"]]},{"id":"62f79304.d61a2c","type":"inject","z":"7f384a31.d8f874","name":"QPIGS Estado General","topic":"Estado General","payload":"QPIGS","payloadType":"str","repeat":"4","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":40,"wires":[["826cdcfd.d42d6"]]},{"id":"ba220692.461ac8","type":"inject","z":"7f384a31.d8f874","name":"QVFW Firmware","topic":"Version Firmware","payload":"QVFW","payloadType":"str","repeat":"4","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":120,"wires":[["826cdcfd.d42d6"]]},{"id":"55d1db1a.b273b4","type":"inject","z":"7f384a31.d8f874","name":"QPIWS Informacion Warnings","topic":"Informacion Warnings","payload":"QPIWS","payloadType":"str","repeat":"4","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":240,"wires":[[]]},{"id":"826cdcfd.d42d6","type":"link out","z":"7f384a31.d8f874","name":"ToCRC","links":["d83b21c1.f2f39"],"x":540,"y":160,"wires":[],"l":true},{"id":"58220ee7.59c4","type":"inject","z":"7f384a31.d8f874","name":"QID Numero de Serie","topic":"Numero de Serie","payload":"QID","payloadType":"str","repeat":"4","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":200,"wires":[["826cdcfd.d42d6"]]},{"id":"d5d84e65.22085","type":"join","z":"7f384a31.d8f874","name":"Juntando Todo 4 segundos","mode":"custom","build":"merged","property":"payload","propertyType":"msg","key":"payload","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"4","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":920,"y":380,"wires":[["3a208c01.fb7434","cd02b199.4113f"]]},{"id":"879af0de.9f1a1","type":"switch","z":"7f384a31.d8f874","name":"Repartidor Datos Lecturas","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"QID","vt":"str"},{"t":"cont","v":"QPIGS","vt":"str"},{"t":"cont","v":"Firmware","vt":"str"},{"t":"cont","v":"QPIRI","vt":"str"},{"t":"cont","v":"QBEQI","vt":"str"}],"checkall":"true","repair":false,"outputs":5,"x":350,"y":380,"wires":[["9bbe9b69.876188"],["a7d14deb.7fe35"],["e308e6d6.1b42b8"],["2e26ca1d.aca776"],["150f90e1.029c5f"]]},{"id":"a7d14deb.7fe35","type":"function","z":"7f384a31.d8f874","name":"QPIGSExtraccion","func":"var output = msg.payload.split(\" \");\nlet voltajeenplaca = parseFloat(output[0]);\nlet voltajebateria = parseFloat(output[1]);\nlet amperios1 = parseFloat(output[2]);\nlet amperios2 = parseFloat(output[3]);\nlet amperios3 = parseFloat(output[4]);\nlet potenciaenplaca = parseInt(output[5]);\nlet temperatura = parseInt(output[6]);\nlet voltajebateriaremota = parseFloat(output[7]);\nlet temperaturaremota = parseInt(output[8]);\nreturn [\n {\n payload: {\n voltajeenplaca: voltajeenplaca,\n voltajebateria: voltajebateria,\n amperios1: amperios1,\n amperios2: amperios2,\n amperios3: amperios3,\n potenciaenplaca: potenciaenplaca,\n temperatura: temperatura,\n voltajebateriaremota: voltajebateriaremota,\n temperaturaremota: temperaturaremota\n }\n }\n];","outputs":1,"noerr":0,"x":590,"y":340,"wires":[["d5d84e65.22085"]]},{"id":"2e26ca1d.aca776","type":"function","z":"7f384a31.d8f874","name":"QPIRIExtraccion","func":"var output = msg.payload.split(\" \");\nlet maximapotencia = parseInt(output[0]);\nlet voltajenominalbateria = parseInt(output[1]);\nlet amperiosbateriaconf = parseFloat(output[2]);\nlet voltajeabsorcionconf = parseFloat(output[3]);\nlet voltajeflotacionconf = parseFloat(output[4]);\nlet tipodebateriaconf = parseInt(output[5]);\nlet voltajebateriadetectado = parseFloat(output[6]);\nlet compensaciontemperaturaconf = parseFloat(output[7]);\nlet activacionremotatemperaturaconf = parseInt(output[8]);\nlet voltajebateriaconf = parseInt(output[9]);\nlet numerodebateriasserieconf = parseInt(output[10]);\nlet voltajeminimoparacorteconf = parseFloat(output[11]);\nlet deteccionvoltajeminimoparacorteconf = parseInt(output[12]); \nreturn [\n {\n payload: {\n maximapotencia: maximapotencia,\n voltajenominalbateria: voltajenominalbateria,\n amperiosbateriaconf: amperiosbateriaconf,\n voltajeabsorcionconf: voltajeabsorcionconf,\n voltajeflotacionconf: voltajeflotacionconf,\n tipodebateriaconf: tipodebateriaconf,\n voltajebateriadetectado: voltajebateriadetectado,\n compensaciontemperaturaconf: compensaciontemperaturaconf,\n activacionremotatemperaturaconf: activacionremotatemperaturaconf,\n voltajebateriaconf: voltajebateriaconf,\n numerodebateriasserieconf: numerobateriasserieconf,\n voltajeminimoparacorteconf: voltajeminimoparacorteconf,\n deteccionvoltajeminimoparacorteconf: deteccionvoltajeminimoparacorteconf\n }\n }\n]","outputs":1,"noerr":0,"x":580,"y":420,"wires":[["d5d84e65.22085"]]},{"id":"e308e6d6.1b42b8","type":"function","z":"7f384a31.d8f874","name":"QVFW Extraccion Firmware","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":620,"y":380,"wires":[["d5d84e65.22085"]]},{"id":"150f90e1.029c5f","type":"function","z":"7f384a31.d8f874","name":"QBEQI Ecualizacion","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,"x":600,"y":460,"wires":[["d5d84e65.22085"]]},{"id":"3a208c01.fb7434","type":"link out","z":"7f384a31.d8f874","name":"TodaslaslecturasPCM60X","links":["3816c959.7abde6"],"x":1190,"y":380,"wires":[],"l":true},{"id":"9bbe9b69.876188","type":"function","z":"7f384a31.d8f874","name":"QID Numero de Serie","func":"var numerodeserie = msg.payload.slice(1, 15);\nreturn [\n {\n payload: {\n numerodeserie: numerodeserie\n }\n }\n];","outputs":1,"noerr":0,"x":600,"y":300,"wires":[["d5d84e65.22085"]]},{"id":"d793aeec.443f2","type":"link in","z":"7f384a31.d8f874","name":"datosconversor","links":["cfd0de13.572f1"],"x":140,"y":380,"wires":[["879af0de.9f1a1"]],"l":true},{"id":"d83b21c1.f2f39","type":"link in","z":"7f384a31.d8f874","name":"ToCRC","links":["b11162e4.22811","8cab9390.a3df1","ea1c0f2c.d6537","fcb0c2ca.47b23","c052b52a.3740b8","2c8b4591.85761a","826cdcfd.d42d6"],"x":530,"y":40,"wires":[["322b424c.4f416e"]],"l":true},{"id":"cfd0de13.572f1","type":"link out","z":"7f384a31.d8f874","name":"datosconversor","links":["d793aeec.443f2"],"x":1140,"y":40,"wires":[],"l":true},{"id":"322b424c.4f416e","type":"function","z":"7f384a31.d8f874","name":"CRCTJ","func":" // Algoritmo para lanzar los comandos hacia Voltronics 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,"x":660,"y":40,"wires":[[]]},{"id":"cd02b199.4113f","type":"debug","z":"7f384a31.d8f874","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1160,"y":460,"wires":[]},{"id":"771463d4.25c04c","type":"comment","z":"7f384a31.d8f874","name":"Aqui va el conversor segun pongamos","info":"","x":890,"y":40,"wires":[]},{"id":"41a3ebdb.a27b04","type":"comment","z":"7f384a31.d8f874","name":"Dividimos por topic","info":"","x":350,"y":320,"wires":[]}]
NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 16/06/2020, 23:37 #3
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Pues que tenia un DT-06 (3 euros) por aqui y lo he colocado anulando la placa de comunicaciones del regulador.
Esto es un DT-06:
Y aqui sacando el cable que enchufa la placa de comunicaciones pero al DT-06 directamente:
Lo del gato, es una larga historia....
Se enlaza con el wifi de la Rpi. Esto es wifi, no es bluetooth. El DT-06 convierte wifi a ttl.
Lo meto en el NODE RED y sorpresa.... que funciona y todo.
Bueno, en realidad ya sabia que iba a funcionar.
El DT-06 lo deje en AP mode (Acces Point) pero si hubiera que manejar varios PCM60X, seria bueno poner los DT-06 en STA y la Rpi en AP mode para que se conectaran todos los PCM60X a la Rpi y asi gestionar conjuntamente todos a la vez.
Veo mas versatil un wifi que un bluetooth para estos menesteres. No se porque les ha dado a los de Voltronic usar Bluetooth en los King y los VMIII. Como no sea por consumo, pero el DT-06 esta alimentado con los 5V de la placa de control y no pasa nada.NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 17/06/2020, 00:20 #4Forero
- Fecha de ingreso
- may 2014
- Ubicación
- Madrid, Spain
- Mensajes
- 446
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Yo soy más de todo cableado, no me fio ni del wifi ni del bluetooh. En mi sistema necesito fiabilidad para sincronizar los reguladores y controlar la carga por Icola, no me la juego con tecnología inalámbrica, he tenido malas experiencias (nodos que se caen y desaparecen, zonas wifi saturadas, etc)
Me molaría usar el modbus en lugar del puerto serie, sería más fácil gestionar múltiples dispositivos.... pero bueno.
Buen trabajo Tejota!MyPiDomo - Instalación solar en directo
Vídeos de montaje de mi PowerWall Diy
3300W Placas - Híbrido Axpert King 5Kw 48v - 14Kwh PowerWall DIY con celdas de litio 18650
-
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Se acabó el mundo, Tejota acaba de fabricar Skynet....XD
- 17/06/2020, 09:22 #6
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Si bueno, lo de los BT y Wifi ya sabemos que es todo postureo. Para cosas sensibles mejor el cable y un protocolo robusto.
Pues he probado el tcpip a ttl de UsRiot y me ha convencido, la alimentacion de 5V procedente de la placa de control es suficiente. Pero tengo que estudiar los aislamientos del conversor. En principio la masa de la placa de control no sale por el tcpip del conversor en ningun pin ni nada. Luego no deberia de haber problema. En teoria claro...
Al ponerlo en modo tcpserver te permite fijar una ip para el conversor, de tal forma que el hibrido o el dispositivo ttl que sea pasa a ser un identificador ip conectable a tu red lan o incluso accesible desde inet con la securizacion correspondiente. Lo veo ma versatil que un modbus a mi modo de ver. Quizas porque los tcp son mas faciles de gestionar en NODERED que en el modbus pero bueno... todo se puede hacer.
- - - - - - - - - - - - - - - - - - -
Hombre, lo de saltarse la placa de comunicaciones de voltronic que lleva aislamientos optoacoplados no es ninguna broma.
Conectar a esa placa sabemos todos. Quitar esa placa y atacar directamente al UART de la placa de control me parece que poca gente lo ha probado. Desde luego abstenerse de probarlo con conversores sin aislamiento tipo USB-TTL y demas. Ahi se unen las masas y alguno se electrocutara.
Lo que yo no sabia que los optoacopladores que llevan las placas de voltronic envejecen y dejan de funcionar. Bueno antes se rompera otra cosa. xD.NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 17/06/2020, 17:32 #7
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Bueno pues el USRiot funciona correctamente atacando la placa de control por los pines UART. Igual que el DT-06, la salvedad es que esto ya no es inhalambrico y pasamos a cable de red puro y duro en LAN. Yo creo que en principio no deberia de haber problema con los aislamientos de tierras como ocurre con los conversores USB-TTL y RS232.
La configuracion del USRIOT seria esta:
Y una vez llevado a la plataforma NODERED:
El codigo del flujo:
Código HTML:[{"id":"a6854c68.f3d438","type":"inject","z":"5c028152.ed576","name":"QPIGS Estado General","topic":"Estado General","payload":"QPIGS","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":240,"y":100,"wires":[["a83ce8ac.9f14a"]]},{"id":"a83ce8ac.9f14a","type":"function","z":"5c028152.ed576","name":"CRCTJ","func":" // Algoritmo para lanzar los comandos hacia Voltronics 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,"x":480,"y":100,"wires":[["89870c84.bebd9"]]},{"id":"db66b31a.0cc938","type":"debug","z":"5c028152.ed576","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":930,"y":100,"wires":[]},{"id":"89870c84.bebd9","type":"tcp request","z":"5c028152.ed576","server":"192.168.1.9","port":"26","out":"char","splitc":"\\r","name":"","x":710,"y":100,"wires":[["db66b31a.0cc938"]]}]
NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 19/06/2020, 00:46 #8
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 21/06/2020, 00:35 #9
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Lo que se te escapa es que el que funciona esta cargado con un firmware diferente a los otros 9. Que pareces nuevo Tejota. Y el chino.. pues eso.... de chinos, chinadas. El orden de los pinout en los dt-06 es irrelevante ya que dandole la vuelta va a funcionar.... unicamente tener cuidado de si hay que darle la vuelta o no. Si todos fueran iguales no habria que estar mirando en dar la vuelta al modulo.
He estado mirando la conexion saltando la placa de comunicaciones y no es buena idea para nada. Hay que pasar por los optoacopladores si o si, para evitar sustos tanto por la tierra digital como porque cualquier cosa que ocurra en el conversor que se use afectara directamente a la placa de control del hibrido y puede ser peligroso.
Lo que pasa que hay que usar un cable preparado para usar el rj45 del hibrido. No vale el que trae ese de rj45 a db9 ya que no usa la patilla 4 que saca una alimentacion exclusiva para los conversores a +12V. Esa alimentacion de +12V se usa para alimentar tambien el propio conversor USB HID que lleva el hibrido, luego es una alimentacion que se puede usar externamente para otros conversores, ya sean ttl-tcpip, ttl-wifi, ttl-bluetooth.
El RJ45 que lleva el PCM60X no saca +12V por la patilla 4 pero si saca +12V, -12V, tierra no digital y datos por el gold finger. Para esto igual seria bueno meter los conversores en una placa prototipo gold finger y no usar para nada el rj45 del PCM60X. Algo me inventare para no estar pendiente de alimentaciones externas.
Una placa gold finger es como la que usan los Infinisolar esos tan caros y que hay de varios tipos segun se use.NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 13/07/2020, 00:01 #10
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Os dejo por aqui el flujo para una conexion por puerto serie RJ45 con un conversor USB-RS232 transparente tipo PL2303 o FTDI232. Es un flujo para Axpert, Voltronic de tipo standard tanto modelos de 12, 24 y 48V. Puede que haya algun comando o parametro diferente pero facilmente solventable cambiando lo necesario en el flujo.
Es basicamente igual al flujo para una conexion USB sin conversores pero sin los nodos y adaptaciones del HID.
Este tipo de flujo lo vengo usando desde hace años y sin problemas. Es mas, quizas se podria forzar mas la peticion de datos por serie que por USB ya que el protocolo serie es sincronizado totalmente mientras que el USBHID es asincrono en lecturas y puede haber mas fallos.
De hecho creo que cualquier conversor adaptador transparente por RJ45, ya sea bluetooth o tcpip encapsulandolo en protocolo serie funcionara bien y mejor incluso que el USBHID.
Con esto no quiero decir que el USBHID sea malo. Funciona razonablemente bien pero puestos a elegir me decanto por el RJ45 en su protocolo serie aunque haya que poner conversores hacia RS232.
Flujo en Linea:
Código HTML:[{"id":"19564b21.32eff5","type":"tab","label":"Voltronic MKS por Serie","disabled":false,"info":""},{"id":"d4cfefe9.02213","type":"inject","z":"19564b21.32eff5","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":160,"y":700,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"d9f62829.05de08","type":"inject","z":"19564b21.32eff5","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":160,"y":660,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"2d7e0c41.621c44","type":"inject","z":"19564b21.32eff5","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":190,"y":740,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"5ecd3155.2c11b","type":"inject","z":"19564b21.32eff5","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":190,"y":780,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"61b5f624.ac2ff8","type":"inject","z":"19564b21.32eff5","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":540,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"61774ebc.bdb58","type":"inject","z":"19564b21.32eff5","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":160,"y":500,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"f2b7cde4.f8323","type":"function","z":"19564b21.32eff5","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":300,"y":160,"wires":[["7545bcea.c00be4"]]},{"id":"3e8e715b.5ee93e","type":"debug","z":"19564b21.32eff5","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1170,"y":580,"wires":[]},{"id":"458ab114.214cc","type":"inject","z":"19564b21.32eff5","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":170,"y":580,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"ebc28d21.a11f6","type":"inject","z":"19564b21.32eff5","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":170,"y":620,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"cd3d2ac7.1d46a8","type":"link out","z":"19564b21.32eff5","name":"ParaCRCTJ","links":["319f8dab.b39e82"],"x":430,"y":660,"wires":[],"l":true},{"id":"29d04a1f.362d16","type":"comment","z":"19564b21.32eff5","name":"Comandos de monitorizacion","info":"Comandos de Monitorizacion","x":160,"y":460,"wires":[]},{"id":"319f8dab.b39e82","type":"link in","z":"19564b21.32eff5","name":"CRCTJWelcome","links":["cd3d2ac7.1d46a8"],"x":140,"y":160,"wires":[["f2b7cde4.f8323"]],"l":true},{"id":"37e0fc60.268e84","type":"link out","z":"19564b21.32eff5","name":"ParaExtractores","links":["9d52fd26.2692a"],"x":700,"y":160,"wires":[],"l":true},{"id":"3853f47d.20b97c","type":"switch","z":"19564b21.32eff5","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":390,"y":360,"wires":[["7e3afdaa.d84a14"],["352dccd5.c07ce4"],["7fe9a5f8.3302dc"],["505dc93e.025028"],["2e34f984.dd4516"],["b11d5d54.57ada"],["fb4c23a9.f5653"],["5592a1b4.8fc35"],["dcec16ee.014fd8"]]},{"id":"9d52fd26.2692a","type":"link in","z":"19564b21.32eff5","name":"ExtractoresWelcome","links":["37e0fc60.268e84"],"x":150,"y":360,"wires":[["3853f47d.20b97c"]],"l":true},{"id":"7163cfa9.53c4d","type":"comment","z":"19564b21.32eff5","name":"Repartiendo por topic","info":"","x":380,"y":260,"wires":[]},{"id":"2e34f984.dd4516","type":"function","z":"19564b21.32eff5","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":650,"y":420,"wires":[["2cb73b17.d23c34"]]},{"id":"352dccd5.c07ce4","type":"function","z":"19564b21.32eff5","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":650,"y":300,"wires":[["2cb73b17.d23c34"]]},{"id":"b11d5d54.57ada","type":"function","z":"19564b21.32eff5","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":640,"y":460,"wires":[["2cb73b17.d23c34"]]},{"id":"7fe9a5f8.3302dc","type":"function","z":"19564b21.32eff5","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":660,"y":340,"wires":[["2cb73b17.d23c34"]]},{"id":"505dc93e.025028","type":"function","z":"19564b21.32eff5","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":660,"y":380,"wires":[["2cb73b17.d23c34"]]},{"id":"fb4c23a9.f5653","type":"function","z":"19564b21.32eff5","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":650,"y":500,"wires":[["2cb73b17.d23c34"]]},{"id":"7e3afdaa.d84a14","type":"function","z":"19564b21.32eff5","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":660,"y":260,"wires":[["2cb73b17.d23c34"]]},{"id":"f25ab0ee.65fde","type":"comment","z":"19564b21.32eff5","name":"Extractores","info":"","x":670,"y":220,"wires":[]},{"id":"5592a1b4.8fc35","type":"function","z":"19564b21.32eff5","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":670,"y":540,"wires":[["2cb73b17.d23c34"]]},{"id":"2cb73b17.d23c34","type":"join","z":"19564b21.32eff5","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":910,"y":380,"wires":[["565c63f0.2649fc"]]},{"id":"ea295d26.2fccd","type":"link out","z":"19564b21.32eff5","name":"TodasLecturasHibrido","links":[],"x":1060,"y":460,"wires":[],"l":true},{"id":"4bcb3d1b.5ea574","type":"comment","z":"19564b21.32eff5","name":"Creando Objeto con todas las lecturas del Hibrido","info":"","x":1040,"y":320,"wires":[]},{"id":"565c63f0.2649fc","type":"function","z":"19564b21.32eff5","name":"Id en topic num serie","func":"var topic = flow.get('numerodeserie');\nmsg.topic = topic;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1120,"y":380,"wires":[["ea295d26.2fccd","3e8e715b.5ee93e"]]},{"id":"fc5f3dc3.947c9","type":"inject","z":"19564b21.32eff5","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":170,"y":820,"wires":[["cd3d2ac7.1d46a8"]]},{"id":"dcec16ee.014fd8","type":"function","z":"19564b21.32eff5","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":640,"y":580,"wires":[["2cb73b17.d23c34"]]},{"id":"f8fed9b0.a2c708","type":"comment","z":"19564b21.32eff5","name":"RS232-USB PL2303 or FTDI Conversor","info":"","x":490,"y":100,"wires":[]},{"id":"7545bcea.c00be4","type":"serial request","z":"19564b21.32eff5","name":"","serial":"88ec1814.a229c8","x":490,"y":160,"wires":[["37e0fc60.268e84"]]},{"id":"88ec1814.a229c8","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":"1000"}]
NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 09/01/2021, 20:09 #11Forero
- Fecha de ingreso
- sep 2020
- Ubicación
- Cataluña
- Mensajes
- 316
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Tejota, estoy experimentando con tu codigo en un MAX, y parece que funciona bien, solo que veo continuamente en el nodo serie (Waiting , Timeout) y la velocidades de actualización son bajas , del orden de 2 minutos, parece que es un poco critico el puerto serie, no logro que sincronice a mas de 2400 baudios, supongo que es la velocidad del voltronic. Aun así me para demasiado tiempo 2 minutos.
Creo que los Timeout no tendrían que producirse, puede que tenga algo mal en mi adaptador ...
Despues de bajar el Default response timeout de 10s a 5 se nota un aumento de refesco, pero también aparece de tanto en tanto algún error. lo mas rápido que puede alcanzar fueron los 45"".
Tu lograste refrescos mas altos ?
- 09/01/2021, 22:00 #12
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
A mi no me salen timeouts... Y estoy usando simultaneamente 5 adaptadores rs232-usb transparentes con peticion de datos cada 4 segundos.
Algo te pasa en ese puerto serie.
2400 baudios es la velocidad de conexion con los Voltronics. Esta limitado a esa velocidad por los optoacopladores que usa para aislamiento de la placa de control.NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 09/01/2021, 23:21 #13Forero
- Fecha de ingreso
- sep 2020
- Ubicación
- Cataluña
- Mensajes
- 316
- 10/01/2021, 09:45 #14
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
De todas formas tambien hay que tener en cuenta otra cosa y es a la hora de diseñar el flujo con dispositivos serie.
No es lo mismo diseñar 4 instancias hacia puerto serie que una instancia hacia puerto serie. Funciona muchisimo mejor una sola instancia de puerto serie y usar nodos link in-out como hago yo en los flujos que meter 4 instancias de puerto serie para cada comando u orden. Si usas varias instancias te va a dar timeouts seguro.
Con las instancias me refiero a esto:
NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 10/01/2021, 13:21 #15Forero
- Fecha de ingreso
- sep 2020
- Ubicación
- Cataluña
- Mensajes
- 316
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Sin duda, el puerto serie no es el mejor para manejar trafico sin atender, no se donde encontré una explicación tuya sobre este tema, y el tratamiento para evitarlo. De todas formas, estoy usando tu código tal cual, simplemente le añadí algún nodo para visualización de datos, pero aun no toque una solo lineal de código, y hablando de cogido, utilizas dos variables (potenciaenplaca , voltajeenplaca) que creo que solo están consultando un string, y este equipo tiene dos, puede que no ¿bajara el código adecuado para el MAX?
Por cierto ya pedí otro cable haber si mejora la conexión.
- 10/01/2021, 13:49 #16
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Es que el MAX lleva mas parametrizacion. Ese codigo es para un Axpert off-grid standard.... los ultimos que han sacado llevan algun parametro mas que habria que incluir en su codigo.
He sacado otro hilo para conexiones rs232-tcpip en los Voltronics. Seguro que a mas de uno le sera util. Yo no los estoy usando porque tengo la Rpi cerca de los hibridos y con el cable usb-rs232 es suficiente pero en caso de estar mas alejados ya la cosa se vuelve util. Al fin y al cabo es asignar una ip local a tu hibrido sin usar el sospechoso wifi que lleva incorporado.NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 10/01/2021, 16:03 #17Forero
- Fecha de ingreso
- sep 2020
- Ubicación
- Cataluña
- Mensajes
- 316
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Pues lo mismo me entretengo esta tarde y monto una rasb que tengo sin uso hace tiempo ... haber que hace con el cable sospechoso este que parece que da problemas en windows. ... funciona pero con lentitud .
- 10/01/2021, 16:16 #18
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Usar un puerto serie en windows necesita de driver.... y puede que ahi tengas el problema.... usa un kernel de linux y veras ....
Una distro raspbian completa lleva el nodered incorporado. Es grabar la sdcard, configurar cuatro cosas y probar.NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 27/03/2021, 13:24 #19Forero Junior
- Fecha de ingreso
- feb 2021
- Ubicación
- Seafield, South Africa
- Mensajes
- 10
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Hi Tejota
Sorry I can only speak english (from South Africa).
I have been following your tutorials (using Google translator) and this tread and it is very good.
I h've got a MAX with 2S5P and 2S4P PV panels and 3x3k3 pylon batteries and want to monitor them with Node Red. Your review on the MAX helped me alot as I had the F55 error and managed to fix it with firmware update to 90.19. All working well now.
Looking at your tutorials in this tread I managed to complete the 1st phase and can now monitor the MAX in Node Red (then via influxdb made Grafana Daskboards) with rs232 (serial cable and usb- serial) and that works well. Next steps is to read batteries and then control the MAX from Node Red.
I am now trying to read the Pylon batteries and got the cable to read the console port on batteries. The cable works when I send commands with with terminal but not sure how to do in Node Red. I tried to add another serial node in node red but then everything get screwed up.
Can you maybe help me?
Tj
- 27/03/2021, 20:50 #20
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Ok, Can you send commands to pylon via terminal?
On prompt pylon> send "login debug" without quotes then you are in Pylon_debug prompt.
On prompt Pylon_debug> send pwrsys then you get all info about pylon batteries in ascii.
Like that:
pylon_debug>pwrsys
@
Power System Information
---------------------------------
System is discharging
Total Num : 4
Present Num : 4
Sleep Num : 0
System Volt : 49804 mV
System Curr : -5256 mA
System RC : 187488 mAH
System FCC : 199600 mAH
System SOC : 94 %
System SOH : 100 %
Highest voltage : 3323 mV
Average voltage : 3320 mV
Lowest voltage : 3320 mV
Highest temperature : 25200 mC
Average temperature : 24166 mC
Lowest temperature : 22700 mC
Recommend chg voltage : 53250 mV
Recommend dsg voltage : 46000 mV
Recommend chg current : 10000 mA
Recommend dsg current : -25000 mA
system Recommend chg voltage: 53250 mV
system Recommend dsg voltage: 46000 mV
system Recommend chg current: 40000 mA
system Recommend dsg current: -100000 mA
Command completed successfully
$$
Tell me if you get similar above data??
If that OK, you need extractor node from that. You also need inject node with pwrsys command and serial node with correct baud and parity. (default 1200baud 8N1)
Sorry, I havent got pylontech batteries but there are more debug commands to get more data about individual pylon bat. You will need an extractor node by each debug command.
Pd: If you use the same chipset converter (USB-RS232) in both cables (MAX and Pylon) you need modify rules (/etc/udev/rules.d/archive.rules) to identifier converters. This is very important.NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 28/03/2021, 09:20 #21Forero Junior
- Fecha de ingreso
- feb 2021
- Ubicación
- Seafield, South Africa
- Mensajes
- 10
Re: [NODERED] Connection with Axperts per RJ45 serial port (PCM60X and the rest)
I can get the data with Minicom terminal...
===================
pylon_debug>pwrsys
Power System Information
---------------------------------
System is charging
Total Num : 3
Present Num : 3
Sleep Num : 0
System Volt : 49584 mV
System Curr : 8157 mA
System RC : 88875 mAH
System FCC : 221556 mAH
System SOC : 40 %
System SOH : 100 %
Highest voltage : 3306 mV
Average voltage : 3305 mV
Lowest voltage : 3305 mV
Highest temperature : 26000 mC
Average temperature : 25700 mC
Lowest temperature : 25100 mC
Recommend chg voltage : 53250 mV
Recommend dsg voltage : 46000 mV
Recommend chg current : 37000 mA
Recommend dsg current : -37000 mA
system Recommend chg voltage: 53250 mV
system Recommend dsg voltage: 46000 mV
system Recommend chg current: 111000 mA
system Recommend dsg current: -111000 mA
Command completed successfully
$$
pylon_debug>
<INTERRUPT>pylon_debug>
CTRL-A Z for help | 115200 8N1 | NOR | Minicom 2.7.1 | VT102 | Offline | ttyUSB1
=========================
And the USB port I'm using is
raspberrypi:~ $ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter -- (Pylon)
Bus 001 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port -- (MAX)
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
==========================
I'm not sure how to put nodes on Node Red to get the different data streams?
Also what do you mean.....
"P: If you use the same chipset converter (USB-RS232) in both cables (MAX and Pylon) you need to modify rules (/etc/udev/rules.d/archive.rules) to identifier converters.
This is very important."
- 28/03/2021, 15:54 #22Forero Junior
- Fecha de ingreso
- feb 2021
- Ubicación
- Seafield, South Africa
- Mensajes
- 10
Re: [NODERED] Connection with Axperts per RJ45 serial port (PCM60X and the rest)
I have added the serial node...
And then also created a few nodes injectors with debug commands....
With the msg.payload info\n....
When I inject the Pylon Debug: INFO I can see it inserted on the Pi MiniCom terminal and then see the values display....
But in Node Red in the debug all I get back is a message with no data and the serial node shows 'timeout'...
What am I doing wrong?...
- 28/03/2021, 16:13 #23
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Export flow and paste here please.
NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 28/03/2021, 18:42 #24
Re: [NODERED] Conexion con Axperts por puerto serie RJ45 (PCM60X y el resto)
Follow discussion here please: https://www.solarweb.net/forosolar/f...sole-port.html
NODERED y el Autoconsumo Fotovoltaico
NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.
- 29/03/2021, 10:18 #25Forero Junior
- Fecha de ingreso
- feb 2021
- Ubicación
- Seafield, South Africa
- Mensajes
- 10
Re: [NODERED] Connection with Axperts per RJ45 serial port (PCM60X and the rest)
The flow
Código HTML:[{"id":"38c7c06f.91bde","type":"tab","label":"Pylon Connection","disabled":false,"info":""},{"id":"ef1c7c5b.d906","type":"comment","z":"38c7c06f.91bde","name":"RS232-USB PL2303 or FTDI Conversor transparente (NO TTL)","info":"","x":470,"y":60,"wires":[]},{"id":"4905e6b9.67a498","type":"debug","z":"38c7c06f.91bde","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":100,"wires":[]},{"id":"be30c92d.24a888","type":"serial request","z":"38c7c06f.91bde","name":"Get Pylon Batteries","serial":"a4822951.b73cc8","x":570,"y":120,"wires":[["4905e6b9.67a498"]]},{"id":"d35c1d3f.4263","type":"inject","z":"38c7c06f.91bde","name":"Pylon INFO","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Get the Pylon values INFO","payload":"\"info\\n\"","payloadType":"jsonata","x":170,"y":200,"wires":[["2e3e8822.35bb68"]]},{"id":"1f93bd3e.c85453","type":"inject","z":"38c7c06f.91bde","name":"Pylon PWR","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Get the Pylon values PWR","payload":"\"pwr\\n\"","payloadType":"jsonata","x":170,"y":240,"wires":[["2e3e8822.35bb68"]]},{"id":"a283d8aa.8cf0c8","type":"inject","z":"38c7c06f.91bde","name":"Pylon PWRSYS","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Get the Pylon values PWRSYS","payload":"\"pwrsys\\n\"","payloadType":"jsonata","x":180,"y":280,"wires":[["2e3e8822.35bb68"]]},{"id":"2e3e8822.35bb68","type":"link out","z":"38c7c06f.91bde","name":"SendToSerialConverter","links":["ad93eb1f.0e10d8"],"x":365,"y":200,"wires":[]},{"id":"ad93eb1f.0e10d8","type":"link in","z":"38c7c06f.91bde","name":"GetBatteryData","links":["2e3e8822.35bb68"],"x":395,"y":120,"wires":[["be30c92d.24a888"]]},{"id":"28f3fa92.87e8b6","type":"inject","z":"38c7c06f.91bde","name":"Pylon SOCD","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Get the Pylon values SOCD","payload":"\"socd\\n\"","payloadType":"jsonata","x":170,"y":320,"wires":[["2e3e8822.35bb68"]]},{"id":"9a904c9a.d0ada","type":"inject","z":"38c7c06f.91bde","name":"Pylon SOCD","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Get the Pylon values SOH","payload":"\"soh\\n\"","payloadType":"jsonata","x":170,"y":360,"wires":[["2e3e8822.35bb68"]]},{"id":"a4822951.b73cc8","type":"serial-port","serialport":"/dev/ttyUSB1","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"2000"}]