Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 25 de 35
  1. #1
    Avatar de Tejota
    Tejota está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Inmortal Ciudad de Zaragoza
    Mensajes
    3.411

    Predeterminado [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    En este hilo vamos a diseñar una conexión TCPIP con un hibrido Voltronic con protocolo P30 como puede ser un MAX, King, PIP5048, etc.
    El flujo NODERED resultante nos dara un JSON con toda la parametrizacion standard del hibrido (solo lectura).

    Para ello vamos a usar un conversor USRIOT externo con caja de este tipo:

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-rs232ethernet.jpg

    Este modelo concretamente lleva conversion tambien para RS485 (modbus). Ahora creo que hay otro modelo mas actualizado con otro tipo de carcasa pero basicamente son iguales en hardware.


    He elegido este modelo porque su alimentacion es entre 5 y 36V por lo que lleva un regulador interno y podremos usar la alimentacion del propio hibrido para ello sin necesitar de un alimentador externo.


    Hay otro modelo de USR que es exclusivo para rs232 pero su alimentacion es a 5V y aquí tendremos que usar un alimentador externo o hacer las modificaciones oportunas incorporando algun tipo de 7805 dentro para usar la alimentacion del hibrido si no queremos usar un alimentador externo. Me refiero a este:

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-photo6039705599048004565.jpg

    La mayoria de Voltronics sacan +12V por su puerto RJ45 aunque los cables que llevan no lo usen excepto algunos modelos. Estos +12V son para alimentar los displays remotos o para otras cosas, en este caso por el consumo que tiene el conversor nos va a venir muy bien para no usar un alimentador externo. Eso si, hay que tomar precauciones y no hacer cortos con estos +12V.


    Si lo veis mucho riesgo usad el alimentador externo del conversor.


    Lo siguiente que voy a comentar es como he modificado el conversor para recibir los +12V del hibrido. Asi que si no vais a hacer esto podeis saltar directamente este parrafo.


    *****************************
    Los cables que proporciona Voltronic son:

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-cablesin12v.jpg[NODERED] Conexion Voltronic Axpert RS232-TCPIP-cablecon12v.jpg

    Es decir vamos a tener +12V en la pata 6 del DB9, asi que en el conversor TCP232-410 haremos un puente asi:

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-placacarasoldadurasrs232ethernetconpuentealimentacion.jpg

    De esta forma tendremos alimentado el conversor con el hibrido. Obviamente no deberemos enchufar ningun alimentador externo mientras usemos la alimentacion del hibrido para no romper nada. La pata 6 del DB9 esta libre en el conversor por eso es seguro hacer ese puente.

    Y queda asi de bonito:

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-tcpiprs232.jpg
    ******************************


    Bien, vamos a configurar el conversor USR para que nuestro hibrido tenga un ip local asociada a un puerto serie de comunicaciones.


    Nos conectaremos con un navegador a la ip fija que viene por defecto en el conversor entrando con el user y passwd que vendra todo en la pegatina del conversor.


    Los parametros que necesariamente tendremos que configurar en el conversor seran la ip local fija asignada, el puerto local de esa ip fija asignada y el modo de trabajo del conversor rs232 que sera en TCP server. El resto de parametros por defecto no son criticos.
    Es conveniente que la ip fija asignada localmente este dentro de nuestra subred de trabajo. Yo lo he configurado asi:

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-usriplocal.png[NODERED] Conexion Voltronic Axpert RS232-TCPIP-configrs232delconversor.png

    Con esto tenemos asociada a la ip 192,168,1,4:26 un puerto serie RS232 a 2400,8N1 listo para usarse en nuestro Voltronic.


    Para usar este tipo de conexión en nuestro NODERED tendremos que encapsular el flujo TCPIP en una comunicación serie. Para ello usaremos el comando SOCAT que si no lo tenemos en nuestro sistema lo instalaremos con sudo apt-get install socat


    Una vez instalado lo invocamos desde consola para que nos cree un encapsulamiento asociado a nuestro conversor de la siguiente forma:


    sudo socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.4:26


    Asi nos creara un device virtual llamado Voltronic que es el que pondremos en nuestro nodo serial request del flujo.


    Esto lo podemos poner como servicio mediante systemctl para que al arrancar nuestra Rpi ya lo tengamos activo. Para ello tendremos que crear el servicio en:

    sudo nano /lib/systemd/system/socatVoltronic.service


    ​con el siguiente contenido:


    Código:
    [Unit]
    Description=Socat Voltronic
    
    
    [Service]
    ExecStart=/usr/bin/socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.4:26
    Restart=always
    RestartSec=15
    
    
    [Install]
    WantedBy=multi-user.target
    Despues ya lo invocamos con los comandos tipicos del systemctl:


    sudo systemctl start socatVoltronic
    sudo systemctl stop socatVoltronic


    Para el arranque automatico sudo systemctl enable socatVoltronic


    O para quitarlo del arranque sudo systemctl disable socatVoltronic


    Despues ya en nuestro flujo de nodered lo podemos sacar asi:





    El flujo usado es este:

    Código HTML:
    [    {        "id": "b7272dd8.a8c48",        "type": "tab",        "label": "Voltronic MKS RS232-TCPIP",        "disabled": false,        "info": ""    },    {        "id": "7017e122.28a9a",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QPIRI Configuracion",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Configuracion",        "payload": "QPIRI",        "payloadType": "str",        "x": 160,        "y": 700,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "555726e6.22b9a8",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QFLAG Miscelanea",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Miscelanea",        "payload": "QFLAG",        "payloadType": "str",        "x": 160,        "y": 660,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "9e49c576.73d638",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QBEQI Ecualizacion Bateria",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Ecualizacion Bateria",        "payload": "QBEQI",        "payloadType": "str",        "x": 190,        "y": 740,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "c305e810.73d668",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QPIWS Informacion Warnings",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Informacion Warnings",        "payload": "QPIWS",        "payloadType": "str",        "x": 190,        "y": 780,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "2e92bce8.8eeb64",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QPIGS Estado General",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Estado General",        "payload": "QPIGS",        "payloadType": "str",        "x": 170,        "y": 540,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "519b6978.c6fb28",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QID Numero de Serie",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Numero de Serie",        "payload": "QID",        "payloadType": "str",        "x": 160,        "y": 500,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "25aa30b6.220b4",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "b068fb31.21c118"            ]        ]    },    {        "id": "fb44831e.f07d",        "type": "debug",        "z": "b7272dd8.a8c48",        "name": "",        "active": true,        "tosidebar": true,        "console": false,        "tostatus": false,        "complete": "payload",        "targetType": "msg",        "statusVal": "",        "statusType": "auto",        "x": 1170,        "y": 580,        "wires": []    },    {        "id": "e0624e7d.38c2e",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QVFW Firmware CPU1",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Version CPU1",        "payload": "QVFW",        "payloadType": "str",        "x": 170,        "y": 580,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "a742c979.20d098",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QVFW2 Firmware CPU2",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Firmware CPU2",        "payload": "QVFW2",        "payloadType": "str",        "x": 170,        "y": 620,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "935a89a9.60ff98",        "type": "link out",        "z": "b7272dd8.a8c48",        "name": "ParaCRCTJ",        "links": [            "c7ab3199.432e8"        ],        "x": 430,        "y": 660,        "wires": [],        "l": true    },    {        "id": "9874d159.40a27",        "type": "comment",        "z": "b7272dd8.a8c48",        "name": "Comandos de monitorizacion",        "info": "Comandos de Monitorizacion",        "x": 160,        "y": 460,        "wires": []    },    {        "id": "c7ab3199.432e8",        "type": "link in",        "z": "b7272dd8.a8c48",        "name": "ParaCRCTJ",        "links": [            "935a89a9.60ff98"        ],        "x": 130,        "y": 160,        "wires": [            [                "25aa30b6.220b4"            ]        ],        "l": true    },    {        "id": "8e74c9a3.c798a8",        "type": "link out",        "z": "b7272dd8.a8c48",        "name": "ParaExtractores",        "links": [            "35dd29ca.9c5866"        ],        "x": 680,        "y": 160,        "wires": [],        "l": true    },    {        "id": "5f40922d.df5d1c",        "type": "switch",        "z": "b7272dd8.a8c48",        "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": [            [                "79430109.77fdc"            ],            [                "457440bc.4ce9a"            ],            [                "6ba497b0.ef49b8"            ],            [                "f2beb2df.dc655"            ],            [                "5e34b45b.62b02c"            ],            [                "f6fdf9db.830318"            ],            [                "f856d2e.2e8473"            ],            [                "be5098a0.4b0628"            ],            [                "d3deff20.5ad7b"            ]        ]    },    {        "id": "35dd29ca.9c5866",        "type": "link in",        "z": "b7272dd8.a8c48",        "name": "ParaExtractores",        "links": [            "8e74c9a3.c798a8"        ],        "x": 140,        "y": 360,        "wires": [            [                "5f40922d.df5d1c"            ]        ],        "l": true    },    {        "id": "4689d658.e22818",        "type": "comment",        "z": "b7272dd8.a8c48",        "name": "Repartiendo por topic",        "info": "",        "x": 380,        "y": 260,        "wires": []    },    {        "id": "5e34b45b.62b02c",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "457440bc.4ce9a",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "f6fdf9db.830318",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "6ba497b0.ef49b8",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "f2beb2df.dc655",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "f856d2e.2e8473",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "79430109.77fdc",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "971745c4.0b0de8",        "type": "comment",        "z": "b7272dd8.a8c48",        "name": "Extractores",        "info": "",        "x": 670,        "y": 220,        "wires": []    },    {        "id": "be5098a0.4b0628",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "5016d8f3.520b58",        "type": "join",        "z": "b7272dd8.a8c48",        "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": [            [                "6d3bf727.d4d4e8"            ]        ]    },    {        "id": "59e74f6f.e908c",        "type": "link out",        "z": "b7272dd8.a8c48",        "name": "TodasLecturasHibrido",        "links": [            "610e750b.29bacc"        ],        "x": 1060,        "y": 460,        "wires": [],        "l": true    },    {        "id": "a77dcf5d.713a8",        "type": "comment",        "z": "b7272dd8.a8c48",        "name": "Creando Objeto con todas las lecturas del Hibrido",        "info": "",        "x": 1040,        "y": 320,        "wires": []    },    {        "id": "6d3bf727.d4d4e8",        "type": "function",        "z": "b7272dd8.a8c48",        "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": [            [                "59e74f6f.e908c",                "fb44831e.f07d"            ]        ]    },    {        "id": "7189e778.2dea78",        "type": "inject",        "z": "b7272dd8.a8c48",        "name": "QMOD Modo de Trabajo",        "props": [            {                "p": "payload"            },            {                "p": "topic",                "vt": "str"            }        ],        "repeat": "2",        "crontab": "",        "once": false,        "onceDelay": 0.1,        "topic": "Modo de Trabajo",        "payload": "QMOD",        "payloadType": "str",        "x": 170,        "y": 820,        "wires": [            [                "935a89a9.60ff98"            ]        ]    },    {        "id": "1a34c73e.2bbb09",        "type": "comment",        "z": "b7272dd8.a8c48",        "name": "RS232-ETHERNET Conversor   (Ver comentario dentro)",        "info": "Si no teneis el comando socat instalado. Lo instalais con sudo apt-get install socat .\nPara iniciar un socat de ese puerto automaticamente hay que crear un archivo service en /lib/systemd/system/socatVoltronic.service\ncon el siguiente contenido:\n****************************\n\n[Unit]\nDescription=Socat Voltronic\n\n[Service]\nExecStart=/usr/bin/socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.4:26\nRestart=always\nRestartSec=15\n\n[Install]\nWantedBy=multi-user.target\n\n*******************************\nLa ip y el puerto TCP server sera la del conversor rs232-ethernet. En la linea de ejemplo es ip: 192.168.1.4 y puerto 26.  El nombre del dispositivo lo he llamado Voltronic, lo podeis llamar como querais en el parametro link=/dev/loquequerais\n\nDespues en consola  sudo systemctl enable socatVoltronic\n\nReiniciar la Raspberry y nos aparecera en los /dev un pts llamado Voltronic.  Ese sera el puerto serie asociado al server conversor que configuraremos en nuestro nodo serial request",        "x": 380,        "y": 80,        "wires": []    },    {        "id": "d3deff20.5ad7b",        "type": "function",        "z": "b7272dd8.a8c48",        "name": "QMOD Extractor",        "func": "var output = msg.payload;\nlet mdts = output.slice(1, 2);\nlet mododetrabajo;\nif (mdts === \"P\") {\n    mododetrabajo = 0;\n} else if (mdts === \"S\") {\n    mododetrabajo = 1;\n} else if (mdts === \"L\") {\n    mododetrabajo = 2;\n} else if (mdts === \"B\") {\n    mododetrabajo = 3;\n} else if (mdts === \"F\") {\n    mododetrabajo = 4;\n} else if (mdts === \"H\") {\n    mododetrabajo = 5;\n}    \nreturn [{\n    payload: {\n         mododetrabajo: mododetrabajo\n             }\n        }\n       ];",        "outputs": 1,        "noerr": 0,        "initialize": "",        "finalize": "",        "x": 660,        "y": 580,        "wires": [            [                "5016d8f3.520b58"            ]        ]    },    {        "id": "b068fb31.21c118",        "type": "serial request",        "z": "b7272dd8.a8c48",        "name": "",        "serial": "afed2560.a91e08",        "x": 480,        "y": 160,        "wires": [            [                "8e74c9a3.c798a8"            ]        ]    },    {        "id": "afed2560.a91e08",        "type": "serial-port",        "z": "",        "serialport": "/dev/Voltronic",        "serialbaud": "115200",        "databits": "8",        "parity": "none",        "stopbits": "1",        "waitfor": "",        "dtr": "none",        "rts": "none",        "cts": "none",        "dsr": "none",        "newline": "\\r",        "bin": "false",        "out": "char",        "addchar": "",        "responsetimeout": "10000"    }]
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  2. #2
    Fecha de ingreso
    sep 2021
    Ubicación
    madrid
    Mensajes
    588

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    hola, yo estaba pensando en hacer lo mismo, pero enrutandolo a un router wifi y asi poder conectarlo en red interna ,y si amplio inversor en un futuro poder conectarlo tambien y tenerlo accesible en el pc de casa.o por la wifi .
    son casi los mismos pasos pero configurandolo a traves del router no?
    saludos y gracias

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por dantesinferno Ver mensaje
    hola, yo estaba pensando en hacer lo mismo, pero enrutandolo a un router wifi y asi poder conectarlo en red interna ,y si amplio inversor en un futuro poder conectarlo tambien y tenerlo accesible en el pc de casa.o por la wifi .
    son casi los mismos pasos pero configurandolo a traves del router no?
    saludos y gracias
    No se exactamente que es lo que quieres decir. El tutorial esta dirigido a tener un puerto serie como si fuera una ip fija de nuestra red interna. Yo no lo expondria a internet para conectarse desde fuera porque la seguridad es baja.... es mediante user y passwd sin encriptar. Esta pensado mas para usarse en red interna sin salir fuera ni entrar desde fuera. Es decir, que el pc o la Rpi no este cerca del inversor o de lo que queramos controlar, si no donde sea dentro de nuestra red interna (casa, almacen, fabrica, etc). Asi evitas las conexiones usb-serie o usb-usb. Y como digo vale para cualquier dispositivo que tenga un puerto serie como comunicacion. CAmbiando las velocidades en el USRIOT se puede adaptar a cualquier cosa.
    Yo lo he bricolado para un voltronic a 2400 8N1, pero se podria poner para unas pylontech por consola u otros dispositivos que se comuniquen por rs232 a su velocidad de trabajo: 9600, 19200, etc
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  4. #4
    Fecha de ingreso
    sep 2021
    Ubicación
    madrid
    Mensajes
    588

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    gracias ,yo me referia a la conexion del aparato de la foto , a un router wifi y ahí configurar una subred e ip interna, y poderlo distribuir con cable de red normal o wifi a donde se quiera en red interna (casa )me ha parecido un post muy interesante ,gracias por el trabajo.
    ,tu ya lo tienes funcionando?
    que tal lo ves?
    saludos

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por dantesinferno Ver mensaje
    gracias ,yo me referia a la conexion del aparato de la foto , a un router wifi y ahí configurar una subred e ip interna, y poderlo distribuir con cable de red normal o wifi a donde se quiera en red interna (casa )me ha parecido un post muy interesante ,gracias por el trabajo.
    ,tu ya lo tienes funcionando?
    que tal lo ves?
    saludos
    Vamos a ver, la ip interna que tu dices te la da el propio conversor porque esta configurado en ip estatica. Luego cuando conectes a la red interna el conversor ya aparecera en las tablas ARP esa ip asociada al conversor. Y esa ip fija sera accesible desde tu red interna y desde el exterior si lo configuras en el router adecuadamente. Yo esto ultimo no lo haria a no ser que pongas las protecciones adecuadas. El conversor es para convertir no para que se vea desde el exterior.
    Con exterior me refiero a todo el mundo fuera de tu casa o red interna.
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  6. #6
    Fecha de ingreso
    sep 2021
    Ubicación
    madrid
    Mensajes
    588

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    si, es correcto gracias, y es para una red interna,sin salida al exterior, por eso queria cablearlo
    gracias porr todo
    saludos

  7. #7
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Hola,

    Estoy tratando de conectar un Axpert Voltron III 48V con un USR-TCP232-302 y Node Red, pero no logro recibir información. Node Red me indica la siguiente info:

    "[serialconfig:afed2560.a91e08] serial port /dev/Voltronic error: Error: Error: No such file or directory, cannot open /dev/Voltronic"


    ¿Sirve lo descrito para el inversor que tengo?

    De antemano muchas gracias

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por jaurrut1 Ver mensaje
    Hola,

    Estoy tratando de conectar un Axpert Voltron III 48V con un USR-TCP232-302 y Node Red, pero no logro recibir información. Node Red me indica la siguiente info:

    "[serialconfig:afed2560.a91e08] serial port /dev/Voltronic error: Error: Error: No such file or directory, cannot open /dev/Voltronic"


    ¿Sirve lo descrito para el inversor que tengo?

    De antemano muchas gracias
    Eso es porque el nodered no ve el puerto /dev/Voltronic. Para que lo vea lo tienes que inicializar y definir con el comando socat y hacerlo servicio con systemctl. Esta explicado en el primer post de este hilo:

    Para usar este tipo de conexión en nuestro NODERED tendremos que encapsular el flujo TCPIP en una comunicación serie. Para ello usaremos el comando SOCAT que si no lo tenemos en nuestro sistema lo instalaremos con sudo apt-get install socat


    Una vez instalado lo invocamos desde consola para que nos cree un encapsulamiento asociado a nuestro conversor de la siguiente forma:


    sudo socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.4:26


    Asi nos creara un device virtual llamado Voltronic que es el que pondremos en nuestro nodo serial request del flujo.


    Esto lo podemos poner como servicio mediante systemctl para que al arrancar nuestra Rpi ya lo tengamos activo. Para ello tendremos que crear el servicio en:

    sudo nano /lib/systemd/system/socatVoltronic.service


    ​con el siguiente contenido:


    Código:
    [Unit]
    Description=Socat Voltronic


    [Service]
    ExecStart=/usr/bin/socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.4:26
    Restart=always
    RestartSec=15


    [Install]
    WantedBy=multi-user.target

    Despues ya lo invocamos con los comandos tipicos del systemctl:


    sudo systemctl start socatVoltronic
    sudo systemctl stop socatVoltronic


    Para el arranque automatico sudo systemctl enable socatVoltronic


    O para quitarlo del arranque sudo systemctl disable socatVoltronic
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  9. #9
    elfrisky está desconectado Forero
    Fecha de ingreso
    feb 2012
    Ubicación
    Un pueblecito de Granada
    Mensajes
    196

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Pregunto, por que no usar el nodo node-red-contrib-re-modbus-tcp-ip directamente y así te ahorras el tinglado de mapear el puerto como un serial en consola?

  10. #10
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Olvidé explicitar que si hice la parte del socat con la siguiente configuración:

    [Unit]
    Description=Socat Voltronic


    [Service]
    ExecStart=/usr/bin/socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.7:26
    Restart=always
    RestartSec=15


    [Install]
    WantedBy=multi-user.target


    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-captura-pantalla-2022-06-01-10.50.01.jpg
    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-captura-pantalla-2022-06-01-10.49.47.jpg
    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-captura-pantalla-2022-06-01-10.49.36.jpg

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por elfrisky Ver mensaje
    Pregunto, por que no usar el nodo node-red-contrib-re-modbus-tcp-ip directamente y así te ahorras el tinglado de mapear el puerto como un serial en consola?
    Igual es que el protocolo que usan los voltronics no es modbus. Es una simple comunicacion por puerto serie y ademas en ASCII puro y duro. O sea, mandas un comando en ascii mas un crc de comprobacion y el inversor te contesta con una cadena ascii pura y dura mas un crc de comprobacion.
    El nodo que indicas hace lo mismo pero no hay ascii, es todo binario en diferentes direcciones.... o sea otro protocolo de comunicaciones.
    Si ese nodo aceptase solamente msg.payloads del tipo objeto:
    modbus_ip y modbus_port inhibiendo los function_code, address y demas podria funcionar.
    Habria que ver tambien las respuestas que da ese nodo sin esas keys en el objeto de entrada.
    No lo he probado...

    - - - - - - - - - - - - - - - - - - -

    Cita Iniciado por jaurrut1 Ver mensaje
    Olvidé explicitar que si hice la parte del socat con la siguiente configuración:

    [Unit]
    Description=Socat Voltronic


    [Service]
    ExecStart=/usr/bin/socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.7:26
    Restart=always
    RestartSec=15


    [Install]
    WantedBy=multi-user.target

    Verifica que en el directorio /dev hay un archivo llamado Voltronic. Si no esta es que no se ha inicializado el dev/Voltronic y por eso el node red no lo lee.
    Y si esta hay que ver que usuarios del sistema pueden acceder a el. Con el mode 777 deberian de poder acceder todos. No creo que sea problemas de permisos.... es mas bien que el dev/Voltronic no esta creado.

    Supongo que al ejecutar la linea en consola como esta no te da ningun error:

    sudo socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.7:26

    El socat hay que tenerlo instalado en el sistema, si no no va a funcionar.
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  12. #12
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Si me aparece el archivo Voltronic.

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-captura-pantalla-2022-06-01-18.20.57.jpg

    y no tengo problemas con ejecutar:
    sudo socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.7:26

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por jaurrut1 Ver mensaje
    Si me aparece el archivo Voltronic.

    Pulsa en la imagen para verla en tamaño completo

Nombre: Captura de pantalla 2022-06-01 18.20.57.jpg
Visitas: 127
Tamaño: 58,8 KB
ID: 27533

    y no tengo problemas con ejecutar:
    sudo socat PTY,link=/dev/Voltronic,mode=777,echo=0,ignoreeof,b115200,raw TCP:192.168.1.7:26
    Entiendo que sabes moverte en el sistema rpi.
    Hay que localizar el problema. He reproducido nuevamente el sistema con un conversor y a mi no me da ningun fallo con las indicaciones apuntadas.
    Verifica el syslog. Este se localiza en /var/log/ Con un cat syslog veras el log del systema y ahi deben aparecer esos fallos. Si el puerto se abre, tendra que haber una linea de este tipo:
    Jun 2 16:52:37 Test Node-RED[347]: 2 Jun 16:52:37 - [info] [serialconfig:01bab349e2240494] serial port /dev/Voltronic opened at 115200 baud 8N1

    Y si no se abre, aparecera en el log con alguna indicacion mas.

    Si el socatVoltronic.service esta bien configurado en lib/systemd/system como parece ser.... el dev/Voltronic aparecera en el directorio /dev.

    Hay que ver tambien si en el flujo tienes bien configurado el serial request.
    Deberia de ser de este tipo:

    Código HTML:
    [{"id":"eab6fb6dfa33ef58","type":"serial request","z":"b7272dd8.a8c48","name":"","serial":"01bab349e2240494","x":1180,"y":120,"wires":[[]]},{"id":"01bab349e2240494","type":"serial-port","serialport":"/dev/Voltronic","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\r","bin":"false","out":"char","addchar":"","responsetimeout":"2000"}]
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  14. #14
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Esto es lo que tengo:

    Jun 2 12:49:59 raspberrypi cc1bd475f1b6[715]: 2 Jun 16:49:59 - [error] [function:QPIGSExtraccion] TypeError: Cannot read property 'split' of undefined#015
    Jun 2 12:50:02 raspberrypi 15953ee76b80[715]: 2022/06/02 12:50:02 Accept: TCP{100.114.86.25:1610 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 12:50:09 raspberrypi cc1bd475f1b6[715]: 2 Jun 16:50:09 - [error] [function:QID Nº Serie Extrac] TypeError: Cannot read property 'slice' of undefined#015
    Jun 2 12:50:12 raspberrypi 15953ee76b80[715]: 2022/06/02 12:50:12 Accept: TCP{100.114.86.25:1610 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 12:50:19 raspberrypi cc1bd475f1b6[715]: 2 Jun 16:50:19 - [error] [function:QVFW Extraccion U1] TypeError: Cannot read property 'slice' of undefined#015
    Jun 2 12:50:22 raspberrypi 15953ee76b80[715]: 2022/06/02 12:50:22 Accept: TCP{100.114.86.25:1610 > 192.168.1.20:22} 40 tcp non-syn

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por jaurrut1 Ver mensaje
    Esto es lo que tengo:

    Jun 2 12:49:59 raspberrypi cc1bd475f1b6[715]: 2 Jun 16:49:59 - [error] [function:QPIGSExtraccion] TypeError: Cannot read property 'split' of undefined#015
    Jun 2 12:50:02 raspberrypi 15953ee76b80[715]: 2022/06/02 12:50:02 Accept: TCP{100.114.86.25:1610 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 12:50:09 raspberrypi cc1bd475f1b6[715]: 2 Jun 16:50:09 - [error] [function:QID Nº Serie Extrac] TypeError: Cannot read property 'slice' of undefined#015
    Jun 2 12:50:12 raspberrypi 15953ee76b80[715]: 2022/06/02 12:50:12 Accept: TCP{100.114.86.25:1610 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 12:50:19 raspberrypi cc1bd475f1b6[715]: 2 Jun 16:50:19 - [error] [function:QVFW Extraccion U1] TypeError: Cannot read property 'slice' of undefined#015
    Jun 2 12:50:22 raspberrypi 15953ee76b80[715]: 2022/06/02 12:50:22 Accept: TCP{100.114.86.25:1610 > 192.168.1.20:22} 40 tcp non-syn
    Si bueno me referia hacer un cat despues de hacer un deploy... si lo haces en cualquier momento salen errores de todo tipo.

    Si afinas un poco mas con un
    Código:
    grep /dev/Voltronic syslog
    veremos que se ve. Esto hay que hacerlo dentro del directorio /var/log logicamente.

    Importar y exportar flujo sabes hacerlo no? Es para ver que tienes en el flujo a ver si hay algo incorrecto.

    Importar y exportar flujos viene explicado aqui: https://www.solarweb.net/forosolar/f...e-palette.html
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  16. #16
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    con grep /dev/Voltronic syslog:
    grep: syslog: binary file matches

    Y con cat syslog despues de un deploy:

    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] Stopping flows#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] serial port /dev/Voltronic closed#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] Stopped flows#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] Starting flows#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] Started flows#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [error] [serialconfig:01bab349e2240494] serial port /dev/Voltronic error: Error: Error: No such file or directory, cannot open /dev/Voltronic#015
    Jun 2 16:30:10 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:10 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:20 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:20 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:30 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:30 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:40 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:40 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:50 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:50 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:56 raspberrypi systemd[1976]: run-docker-runtime\x2drunc-moby-cc1bd475f1b6e0e6a064c12dff2455344206bee4e6f1e6b1ee 64e5d6d5b218ac-runc.16XjwH.mount: Succeeded.
    Jun 2 16:30:56 raspberrypi systemd[1]: run-docker-runtime\x2drunc-moby-cc1bd475f1b6e0e6a064c12dff2455344206bee4e6f1e6b1ee 64e5d6d5b218ac-runc.16XjwH.mount: Succeeded.


    Existe el archivo Voltronic en /dev y si he importado correctamente el flujo.

    Con Netcat verifiqué que el puerto estuviera abierto, además envíe información al USR, también con netcat, y aumentaron los bits de RX Count

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por jaurrut1 Ver mensaje
    con grep /dev/Voltronic syslog:
    grep: syslog: binary file matches

    Y con cat syslog despues de un deploy:

    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] Stopping flows#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] serial port /dev/Voltronic closed#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] Stopped flows#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] Starting flows#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [info] Started flows#015
    Jun 2 16:30:05 raspberrypi cc1bd475f1b6[703]: 2 Jun 20:30:05 - [error] [serialconfig:01bab349e2240494] serial port /dev/Voltronic error: Error: Error: No such file or directory, cannot open /dev/Voltronic#015
    Jun 2 16:30:10 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:10 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:20 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:20 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:30 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:30 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:40 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:40 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:50 raspberrypi 745690d313a5[703]: 2022/06/02 16:30:50 Accept: TCP{100.114.86.25:4540 > 192.168.1.20:22} 40 tcp non-syn
    Jun 2 16:30:56 raspberrypi systemd[1976]: run-docker-runtime\x2drunc-moby-cc1bd475f1b6e0e6a064c12dff2455344206bee4e6f1e6b1ee 64e5d6d5b218ac-runc.16XjwH.mount: Succeeded.
    Jun 2 16:30:56 raspberrypi systemd[1]: run-docker-runtime\x2drunc-moby-cc1bd475f1b6e0e6a064c12dff2455344206bee4e6f1e6b1ee 64e5d6d5b218ac-runc.16XjwH.mount: Succeeded.


    Existe el archivo Voltronic en /dev y si he importado correctamente el flujo.

    Con Netcat verifiqué que el puerto estuviera abierto, además envíe información al USR, también con netcat, y aumentaron los bits de RX Count
    Pues algo impide que desde nodered se abra ese puerto. No estaras usando nodered desde un contenedor??
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  18. #18
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Así es, está en un contenedor por Docker. Lo instalaré directo a ver si funciona.

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por jaurrut1 Ver mensaje
    Así es, está en un contenedor por Docker. Lo instalaré directo a ver si funciona.
    Pues ahi tienes el problema y la solucion. Usar node-red desde docker implica saber usar tecnicas docker y mas cuando lo que se ejecuta dentro del contenedor usa muchas entradas y salidas hacia hardware como es el caso.
    El problema es que el nodered rulando dentro de un docker no puede acceder por permisos a hardwares fisicos y virtuales... hay que decirselo al setup del docker en cuestion... y eso conlleva perder mas tiempo en las configs.
    Para otras cosas el docker es interesante.... para el nodered en una rpi lo desaconsejo totalmente a no ser que estes muy habituado a usar dockers.
    Yo lo intente y cuando vi que habia que perder el doble de tiempo configurando cosas lo deseche por completo. Ademas la Rpi es practicamente un hardware dedicado al nodered. No hay suficiente potencia de hardware para rular varios contenedores con otras cosas que es donde el docker adquiere su importancia.

    Es mi opinion claro... para gustos colores...
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  20. #20
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Lo instalé directo, tampoco funciona.

    2 Jun 17:30:20 - [info] Server now running at http://127.0.0.1:1880/
    2 Jun 17:30:20 - [info] Starting flows
    2 Jun 17:30:20 - [info] Started flows
    2 Jun 17:30:20 - [error] [serialconfig:d91c630be29ed5d1] serial port dev/Voltronic error: Error: Error: No such file or directory, cannot open dev/Voltronic
    2 Jun 17:30:20 - [error] [serialconfig:d91c630be29ed5d1] serial port dev/Voltronic error: Error: Error: No such file or directory, cannot open dev/Voltronic

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por jaurrut1 Ver mensaje
    Lo instalé directo, tampoco funciona.

    2 Jun 17:30:20 - [info] Server now running at http://127.0.0.1:1880/
    2 Jun 17:30:20 - [info] Starting flows
    2 Jun 17:30:20 - [info] Started flows
    2 Jun 17:30:20 - [error] [serialconfig:d91c630be29ed5d1] serial port dev/Voltronic error: Error: Error: No such file or directory, cannot open dev/Voltronic
    2 Jun 17:30:20 - [error] [serialconfig:d91c630be29ed5d1] serial port dev/Voltronic error: Error: Error: No such file or directory, cannot open dev/Voltronic
    el docker nodered esta parado totalmente no?
    exporta el serial request q tienes puesto en el flujo y ponlo por aqui... deberia de ser el mismo que he puesto yo en #13
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  22. #22
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Le cambié el grupo al archivo Voltronic, ahora se queda pegado en connected.

    [
    {
    "id": "5c5925782bda2613",
    "type": "tab",
    "label": "Flow 1",
    "disabled": false,
    "info": "",
    "env": []
    },
    {
    "id": "bfda0fe9be62915d",
    "type": "debug",
    "z": "5c5925782bda2613",
    "name": "",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "false",
    "statusVal": "",
    "statusType": "auto",
    "x": 610,
    "y": 240,
    "wires": []
    },
    {
    "id": "eab6fb6dfa33ef58",
    "type": "serial request",
    "z": "5c5925782bda2613",
    "name": "",
    "serial": "01bab349e2240494",
    "x": 360,
    "y": 240,
    "wires": [
    [
    "bfda0fe9be62915d"
    ]
    ]
    },
    {
    "id": "01bab349e2240494",
    "type": "serial-port",
    "serialport": "/dev/Voltronic",
    "serialbaud": "115200",
    "databits": "8",
    "parity": "none",
    "stopbits": "1",
    "waitfor": "",
    "dtr": "none",
    "rts": "none",
    "cts": "none",
    "dsr": "none",
    "newline": "\\r",
    "bin": "false",
    "out": "char",
    "addchar": "",
    "responsetimeout": "2000"
    }
    ]
    El log de node red me arroja esto:

    2 Jun 17:53:26 - [info] Started flows
    2 Jun 17:53:26 - [info] [serialconfig:01bab349e2240494] serial port /dev/Voltronic opened at 115200 baud 8N1

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Cita Iniciado por jaurrut1 Ver mensaje
    Le cambié el grupo al archivo Voltronic, ahora se queda pegado en connected.



    El log de node red me arroja esto:

    2 Jun 17:53:26 - [info] Started flows
    2 Jun 17:53:26 - [info] [serialconfig:01bab349e2240494] serial port /dev/Voltronic opened at 115200 baud 8N1
    Pues entonces esta abierto y deberia de funcionar.
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

  24. #24
    jaurrut1 está desconectado Forero Junior
    Fecha de ingreso
    may 2022
    Mensajes
    10

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    No logro leer nada. Mi inversor es AXPERT VMIII de 48V

    Node red arroja lo siguiente:

    2/6/2022, 18:11:35node: QPIWS Warnings Extrac
    function : (error)
    "TypeError: Cannot read property 'slice' of undefined"
    2/6/2022, 18:11:45node: QPIGSExtraccion
    function : (error)
    "TypeError: Cannot read property 'split' of undefined"
    2/6/2022, 18:11:55node: QID Nº Serie Extrac
    function : (error)
    "TypeError: Cannot read property 'slice' of undefined"
    2/6/2022, 18:12:05node: QVFW Extraccion U1
    function : (error)
    "TypeError: Cannot read property 'slice' of undefined"

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

    Predeterminado Re: [NODERED] Conexion Voltronic Axpert RS232-TCPIP

    Desconecta Para extractores y pon un nodo de debug a la salida del serial request a ver que sale ahi... en la pantalla debug de la derecha deberian de verse cosas.

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-serialrequestdebug.png

    Pulsando en la parte derecha del nodo debug se silencia la pantalla debug y al reves se vuelve a ver la info del debug sin tener que hacer deploy

    - - - - - - - - - - - - - - - - - - -

    Se me olvidaba.... la pantalla de expand function del USR yo la puse asi:

    [NODERED] Conexion Voltronic Axpert RS232-TCPIP-usr-tcp232-304.png

    Lo digo porque tu la tienes diferente. No se si influira o no.

    Ese undefined que sale es porque viene mal encapsulado del serial request y el nodo extractor no lo entiende.
    NODERED y el Autoconsumo Fotovoltaico
    NO RESPONDO PREGUNTAS TECNICAS POR PRIVADO. SOLO EN FORO PUBLICO, asi sirve para todos.

Página 1 de 2 12 ÚltimoÚltimo



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