Página 1 de 11 12 ... ÚltimoÚltimo
Resultados 1 al 25 de 257
  1. #1
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Raspberry e híbrido tipo axpert

    La idea es extraer, usando python, algunos de los parámetros del híbrido para usarlos según convenga.

    Lo primero es conectar el híbrido vía USB a la raspberry. Una vez conectados, ejecutamos el comando:

    $ lsusb

    Raspberry e híbrido tipo axpert-lsusb.jpg

    Deberíamos ver el contenido subrayado en rojo. Y se ha creado el dispositivo /dev/hidraw0

    A través de ese dispositvo accederemos al híbrido. Voy a poner un ejemplo usando el IDE de python:

    Raspberry e híbrido tipo axpert-hidraw0.jpg

    Empezamos a obtener resultados. Falta interpretarlos.

    Mientras buscaba más información, topé con un programa hecho en C para linux que más o menos hace lo que quiero: https://skyboo.net/2017/03/monitorin...r-under-linux/

    Una vez descargado y compilado (es muy fácil, basta seguir las instrucciones) este es el resultado:

    Raspberry e híbrido tipo axpert-photo_2017-05-30_18-29-55.jpg

    Le hice algún retoque y ahora también me permite visualizar de forma clara el voltaje e intensidad de paneles.

    Raspberry e híbrido tipo axpert-skymax.jpg

    Pero esto es en C, sigo trabajando para que funcione en python.
    Cualquier aporte y/o ayuda será bienvenida. Ya veis que lo único necesario es un híbrido tipo Axpert y una raspberry.

    Existen varios programas para visualizar todos los datos, tipo WatchPower, pero no busco eso.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  2. #2
    Fecha de ingreso
    ene 2016
    Ubicación
    arroyomolinos
    Mensajes
    362

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Madre mía, si se pudieran usar relés en función de esos datos, sería el control de excedentes total.
    Saludos.

  3. #3
    Pidjey está desconectado Forero
    Fecha de ingreso
    ene 2013
    Ubicación
    Leon
    Mensajes
    1.521

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Hace mucho que no uso python i ahora me paso el dia programando en c porque programo mucho microcontrolador. Yo te podria ayudar en c i con un simple scanf lo solucionarias.

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

    Acabo de fijarme que dices que eso ya es un programa. Lo he abierto i en el fondo no es un programa, es una biblioteca con un programa de demostracion. Yo haria mi programa con esa biblioteca que ya te devuelve todos los valores ya en variables o portaria esa biblioteca a python. Te podria dar recomendaciones para portarla pero por otro canal, que aqui es un poco pesado.

  4. #4
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Cita Iniciado por fran_pascualin Ver mensaje
    Madre mía, si se pudieran usar relés en función de esos datos, sería el control de excedentes total.
    Saludos.
    Claro que se puede, mira mi firma.

    Cita Iniciado por Pidjey Ver mensaje
    Hace mucho que no uso python i ahora me paso el dia programando en c porque programo mucho microcontrolador. Yo te podria ayudar en c i con un simple scanf lo solucionarias.

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

    Acabo de fijarme que dices que eso ya es un programa. Lo he abierto i en el fondo no es un programa, es una biblioteca con un programa de demostracion. Yo haria mi programa con esa biblioteca que ya te devuelve todos los valores ya en variables o portaria esa biblioteca a python. Te podria dar recomendaciones para portarla pero por otro canal, que aqui es un poco pesado.
    Gracias Pidjey. Te he mandado un privado.

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

    Por ahora ya tengo claro como mandar los comandos:

    Código PHP:
    import ossys
    fd 
    os.open('/dev/hidraw0'os.O_RDWR os.O_NONBLOCK)
    os.write(fd"QPI\xBE\xAC\r"
    sería hasta aquí. Analizando un poco esta última instrucción, dentro de las comillas vemos:

    Instrucción = QPI
    CRC1 = \xBE (hexadecimal)
    CRC2 = \xAC (hexadecimal)
    CR = \r (retorno de carro)

    Para calcular CRC1 y 2 podemos usar una librería/programa, pero como ando escaso de conocimientos, he buscado por internet alguna web que me los calcule.

    crc-calculation
    otra

    Para la primera usaremos CRC-CCITT (XModem) para el cálculo y en la segunda, elegimos CRC-16, Predefined y ponemos como String: QPI

    Ejemplo 2a web:

    Raspberry e híbrido tipo axpert-crc.jpg

    Como podeis ver el resultado es: Result CRC value: 0xBEAC

    Partiendo ese valor en dos mitades, tenemos CRC1 y CRC2.

    ¿ Qué instrucciones tenemos disponibles ?

    ....
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  5. #5
    rpsli está desconectado Forero
    Fecha de ingreso
    ene 2010
    Ubicación
    manresa
    Mensajes
    149

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Con vuestro permiso pillo sitio, ya que es lo que me falta en la instalación
    poder controlar relés con los parámetros del hibrido.

    Josep

  6. #6
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Instrucciones/comandos disponibles:

    Comandos Axpert

    Por otra parte, ya he encontrado una librería, para python, para calcular los CRC. Hay que descargarla e instalarla como indica esta web:
    https://pypi.python.org/pypi/crcmod

    En esta imagen podéis ver el funcionamiento:

    Raspberry e híbrido tipo axpert-crcs.jpg

    Veréis que el resultado obtenido es el mismo que nos daba en las dos páginas web mencionadas anteriormente. Ahora toca mezclarlo todo un poco y ya tendríamos la primera parte del programa (envío de comandos).
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  7. #7
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Veo que el tema de los comandos disponibles esta bien documentado

    Con esto para el caso de tener un regulador/inversor de este tipo se simplifica la captura de los datos FV para usarlos en el Control posterior (reles, graficas, excedentes,.....)

    Entiendo que con esto ahorras:
    - el shunt de Iplaca
    - el de Ibat no podrias quitarlo salvo que no tengas consumo directo en 24v ...¿ok?
    - Los valores de Vbat y Vplaca tambien los tienes
    - Ademas puedes usar otros datos (salida inversor, etc) como variables dentro del programa de Control que hemos desarrollado


    Una pena que yo no tenga un inversor y regulador tan "facil" de sacarle los datos

    La siguiente version del SW tendra una opcion "premium" para usuarios con Axpert

  8. #8
    Pidjey está desconectado Forero
    Fecha de ingreso
    ene 2013
    Ubicación
    Leon
    Mensajes
    1.521

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Yo tengo un controlador e inversor tracer i los dos te dan tensiones i corrienes de entrada i de salida de cada uno. No tuve tiempo pero cualquier dia le hago alguna cosa way, como control de estado de carga que ahora no tiene.

  9. #9
    joaquinsfy está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    barcelona
    Mensajes
    28

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Hola Chicos
    Yo hace ya unas semanas que lo tengo funcionando,
    en mi caso uso una raspberry pi3 conectada al pip4048ms que es lo mismo que el axpert, no uso python , use node.js o sea javascript.


    Lo que hago ahora es:

    1. leer todos los datos del hibrido, y guardarlo en una base de datos en la raspi (influxdb)
    2. usar un comando schedule para pasar de SBU (Solar,Battery, Utility) a Utility, ahora como no tengo las placas solares funcionando cargo las baterias en horario valle.
    3. uso grafana para mostrar toda la informacion.

    Aun no lo tengo 100% acabado para ponerlo publico, pero si alguien lo quiere MP y se lo envio.

    Saludos.

    Raspberry e híbrido tipo axpert-captura-pantalla-2017-06-01-las-14.48.59.jpg


    los comandos con sus CRC's
    #Commands with CRC cheats
    QPGS = '\x51\x50\x47\x53\x30\x3f\xda\x0d'
    QPIGS = '\x51\x50\x49\x47\x53\xB7\xA9\x0d'
    QMCHGCR ='\x51\x4D\x43\x48\x47\x43\x52\xD8\x55\x0D' #?
    QMUCHGCR='\x51\x4D\x55\x43\x48\x47\x43\x52\x26\x34 \x0D' #?
    QPIWS = '\x51\x50\x49\x57\x53\xB4\xDA\x0D' #valid?
    POP02 = '\x50\x4F\x50\x30\x32\xE2\x0B\x0D' # set to SBU
    POP00 = '\x50\x4F\x50\x30\x30\xC2\x48\x0D' #Set to UTILITY
    "QMOD\x49\xC1";
    "QID\xD6\xEA";
    "QVFW\x62\x99";
    "QVFW2\xC3\xF5";
    "QPIRI\xF8\x54"; -->51 50 49 52 49
    QPIRI = '\x51\x50\x49\x52\x49\xF8\x54\x0D'
    "QFLAG\x98\x74";

  10. #10
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Gracias Joaquín, una opción a tener en cuenta si se busca la monitorización del sistema.

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

    Con la ayuda de Manuel (mleon), gracias compañero, hemos conseguido particionar CRC en CRC1 y CRC2.

    Código PHP:
    import ossys
    import crcmod
    import time

    comando 
    'QPI'

    xmodem_crc_func crcmod.mkCrcFun(0x11021rev=FalseinitCrc=0x0000xorOut=0x0000)

    def crc(comando):
        global 
    crc
        crc 
    hex(xmodem_crc_func(comando))
        return 
    crc

    # calcular crc
    crc(comando)
    print (
    'CRC='),crc

    crc1
    =crc[0:4]
    crc2=crc[0:2]+crc[4:6]

    crc1=int(crc1base=16)
    crc2=int(crc2base=16)

    fd os.open('/dev/hidraw0'os.O_RDWR os.O_NONBLOCK)
    os.write(fdcomando+chr(crc1)+chr(crc2)+'\r')
    time.sleep(1)
    res os.read(fd5)
    print 
    res

    os
    .close(fd
    He añadido una función que nos devuelve el CRC a enviar según el comando deseado.

    En este caso, lo devuelve como cadena de texto, p.e. 0xbeac

    Lo siguiente es dividir CRC en CRC1 y CRC2 => 0xbe y 0xac respectivamente
    y pasar las dos cadenas de texto a enteros.

    Una vez conseguido, con os.write() mandamos el comando y los CRCs obtenidos. Esperamos 1 segundo. Y leemos con os.read().

    Hasta aquí la parte de envío de comandos. Ahora toca centrarme en la lectura/recepción, ya que por algún motivo, el máximo recibido en cada lectura es de 8bytes. Y hay que ir repitiendo os.read() hasta recibirlo todo.

    La recepción también incluye CRCs, por lo que usaré la misma definición anterior, para verificar que los datos recibidos sean correctos.

    Seguimos estudiando.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  11. #11
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Cita Iniciado por joaquinsfy Ver mensaje
    Hola Chicos
    Yo hace ya unas semanas que lo tengo funcionando,
    en mi caso uso una raspberry pi3 conectada al pip4048ms que es lo mismo que el axpert, no uso python , use node.js o sea javascript.


    Lo que hago ahora es:

    1. leer todos los datos del hibrido, y guardarlo en una base de datos en la raspi (influxdb)
    2. usar un comando schedule para pasar de SBU (Solar,Battery, Utility) a Utility, ahora como no tengo las placas solares funcionando cargo las baterias en horario valle.
    3. uso grafana para mostrar toda la informacion.

    Aun no lo tengo 100% acabado para ponerlo publico, pero si alguien lo quiere MP y se lo envio.

    Saludos.

    Pulsa en la imagen para verla en tamaño completo

Nombre: Captura de pantalla 2017-06-01 a las 14.48.59.jpg
Visitas: 722
Tamaño: 89,6 KB
ID: 16578


    los comandos con sus CRC's
    #Commands with CRC cheats
    QPGS = '\x51\x50\x47\x53\x30\x3f\xda\x0d'
    QPIGS = '\x51\x50\x49\x47\x53\xB7\xA9\x0d'
    QMCHGCR ='\x51\x4D\x43\x48\x47\x43\x52\xD8\x55\x0D' #?
    QMUCHGCR='\x51\x4D\x55\x43\x48\x47\x43\x52\x26\x34 \x0D' #?
    QPIWS = '\x51\x50\x49\x57\x53\xB4\xDA\x0D' #valid?
    POP02 = '\x50\x4F\x50\x30\x32\xE2\x0B\x0D' # set to SBU
    POP00 = '\x50\x4F\x50\x30\x30\xC2\x48\x0D' #Set to UTILITY
    "QMOD\x49\xC1";
    "QID\xD6\xEA";
    "QVFW\x62\x99";
    "QVFW2\xC3\xF5";
    "QPIRI\xF8\x54"; -->51 50 49 52 49
    QPIRI = '\x51\x50\x49\x52\x49\xF8\x54\x0D'
    "QFLAG\x98\x74";
    Estupendo trabajo

    Una vez que ya tienes la monitorizacion supongo que te meteras con el control para optimizar el tema

    Poco puedo ayudar yo dado que no tengo dicho inversor

    No obstante Nikitto esta teniendo algunos problemas en la lectura de los datos que envia el equipo

    Si puedes pasar el codigo de como los lees supongo que vendra bien para hacerlo en Python

  12. #12
    joaquinsfy está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    barcelona
    Mensajes
    28

    Predeterminado Re: Raspberry e híbrido tipo axpert

    solo estoy monitor izando, pero mandar comandos es exactamente lo mismo, ahora mando comandos POP para el cambio de corriente a batería, pero podría mandar el que quisiera.

    os dejo el código en node.js (javascript) para el que lo quiera usar

    Saludos



    /* eslint-disable require-path-exists/exists */
    'use strict';
    var express = require('express')
    var app = express()
    var request = require('request');
    const SerialPort = require('serialport');
    var fs = require('fs');


    var schedule = require('node-schedule');

    var ja = schedule.scheduleJob('16 23 * * *', function(){
    console.log('nos vamos a corriente');
    port.write([0X50,0X4F,0X50,0X30,0X30,0XC2,0X48,0X0D]);
    });

    var js = schedule.scheduleJob('07 13 * * *', function(){
    console.log('nos vamos a SBU');
    port.write([0X50,0X4F,0X50,0X30,0X32,0XE2,0X0B,0X0D]);
    });

    /*
    #Commands with CRC cheats
    QPGS = '\x51\x50\x47\x53\x30\x3f\xda\x0d'
    QPIGS = '\x51\x50\x49\x47\x53\xB7\xA9\x0d'
    QMCHGCR ='\x51\x4D\x43\x48\x47\x43\x52\xD8\x55\x0D' #?
    QMUCHGCR='\x51\x4D\x55\x43\x48\x47\x43\x52\x26\x34 \x0D' #?
    QPIWS = '\x51\x50\x49\x57\x53\xB4\xDA\x0D' #valid?
    POP02 = '\x50\x4F\x50\x30\x32\xE2\x0B\x0D' # set to SBU
    POP00 = '\x50\x4F\x50\x30\x30\xC2\x48\x0D' #Set to UTILITY
    "QMOD\x49\xC1";
    "QID\xD6\xEA";
    "QVFW\x62\x99";
    "QVFW2\xC3\xF5";
    "QPIRI\xF8\x54"; -->51 50 49 52 49
    QPIRI = '\x51\x50\x49\x52\x49\xF8\x54\x0D'
    "QFLAG\x98\x74";
    */

    var the_interval = 7 * 1000;
    var the_interval2 = 10 * 1000;


    setInterval(function() {
    port.write([0X51,0X50,0X49,0X47,0X53,0XB7,0XA9,0X0D]);
    }, the_interval);

    setInterval(function() {
    //QPIRI
    port.write([0X51,0X50,0X49,0X52,0X49,0XF8,0X54,0X0D]);

    }, the_interval2);


    const port = new SerialPort('/dev/ttyAMA0', {
    baudRate: 2400,
    parser: SerialPort.parsers.readline('\r')
    });

    port.on('open', () =>
    {
    console.log('Port open');
    port.write([0X51,0X50,0X49,0X47,0X53,0XB7,0XA9,0X0D]);

    }
    );

    port.on('data', function (data) {
    console.log('Data: ' + data+" "+data.length);
    if (data.length==109 && data.substring(0,1)=="(") {
    data=data.substring(1,data.length-2);
    var arr = data.split(" ");
    var cuerpo="solar "+preparacadena(arr);
    request.post({
    headers: {'content-type' : 'application/x-www-form-urlencoded'},
    url: 'http://localhost:8086/write?db=logger',
    body: cuerpo
    }, function(error, response, body){
    });
    }
    if (data.length==101 && data.substring(0,1)=="(") {
    data=data.substring(1,data.length-2);
    var arr = data.split(" ");
    var cuerpo="solar2 "+preparacadenaqpiri(arr);
    request.post({
    headers: {'content-type' : 'application/x-www-form-urlencoded'},
    url: 'http://localhost:8086/write?db=logger',
    body: cuerpo
    }, function(error, response, body){
    });
    }
    });

    //Data: (230.0 21.7 230.0 50.0 21.7 5000 4000 48.0 46.0 42.0 56.4 54.0 2 30 060 0 2 0 9 01 0 0 54.0 0 1 000�T 101
    function preparacadenaqpiri(arr)
    {
    var grid_rating_voltage=arr[0];
    var grid_rating_current=arr[1];
    var ac_output_rating_voltage=arr[2];
    var ac_output_rating_frecuency=arr[3];
    var ac_output_rating_current=arr[4];
    var ac_output_rating_apparent_power=arr[5];
    var ac_output_rating_active_power=arr[6];
    var battery_rating_voltage=arr[7];
    var battery_recharge_voltage=arr[8];
    var battery_under_voltage=arr[9];
    var battery_bulk_voltage=arr[10];
    var battery_float_voltage=arr[11];
    var battery_type=arr[12];
    var current_max_ac_charging=arr[13];
    var current_max_charging_current=arr[14];
    var input_voltage_range=arr[15];
    var output_source_priority=arr[16];
    var charger_source_priority=arr[17];
    var parallel_max_num=arr[18];
    var machine_type=arr[19];
    var topology=arr[20];
    var output_mode=arr[21];
    var battery_re_discharge_voltage=arr[22];
    var pv_condition=arr[23];
    var pv_power_balance=arr[24];

    var cadena="";
    cadena =cadena +"battery_rating_voltage="+battery_rating_volta ge;
    cadena =cadena +",battery_recharge_voltage="+battery_recharge_vol tage;
    cadena =cadena +",battery_under_voltage="+battery_under_voltag e;
    cadena =cadena +",battery_float_voltage="+battery_float_voltag e;
    cadena =cadena +",battery_bulk_voltage="+battery_bulk_voltage;
    cadena =cadena +",current_max_charging_current="+current_max_char ging_current;
    cadena =cadena +",output_source_priority="+output_source_priority ;
    cadena =cadena +",charger_source_priority="+charger_source_priori ty;
    cadena =cadena +",temperatura="+temperatura;
    cadena =cadena +",temperatura2="+temperatura2;
    return cadena;
    }





    //ejemplo Data: (234.7 49.9 000.0 00.0 0000 0000 000 450 55.70 000 100 0049 0000 000.0 00.00 00000 00000101 00 00 00000 100�
    function preparacadena(arr)
    {
    var grid_voltage=arr[0];
    var grid_frecuency=arr[1];
    var ac_output_voltage=arr[2];
    var ac_output_frecuency=arr[3];
    var ac_output_power_va=arr[4];
    var ac_output_active_power=arr[5];
    var output_load_percent=arr[6];
    var bus_voltage=arr[7];
    var battery_voltage=arr[8];
    var battery_charging_current=arr[9];
    var battery_capacity=arr[10];
    var inverter_heat_sink_temperature=arr[11];
    var pv_input_current_for_battery=arr[12];
    var pv_input_voltage_1=arr[13];
    var battery_voltage_from_scc=arr[14];
    var battery_discharge_current=arr[15];
    var device_status=arr[16];

    var cadena="";
    cadena =cadena +"grid_voltage="+grid_voltage;
    cadena =cadena +",ac_output_voltage="+ac_output_voltage;
    cadena =cadena +",ac_output_power_va="+ac_output_power_va;
    cadena =cadena +",ac_output_active_power="+ac_output_active_power ;
    cadena =cadena +",output_load_percent="+output_load_percent;
    cadena =cadena +",bus_voltage="+bus_voltage;
    cadena =cadena +",battery_voltage="+battery_voltage;
    cadena =cadena +",battery_charging_current="+battery_charging_cur rent;
    cadena =cadena +",battery_capacity="+battery_capacity;
    cadena =cadena +",inverter_heat_sink_temperature="+inverter_heat_ sink_temperature;
    cadena =cadena +",pv_input_current_for_battery="+pv_input_current _for_battery;
    cadena =cadena +",pv_input_voltage_1="+pv_input_voltage_1;
    cadena =cadena +",battery_voltage_from_scc="+battery_voltage_from _scc;
    cadena =cadena +",battery_discharge_current="+battery_discharge_c urrent;
    cadena =cadena +",device_status="+device_status;
    if (device_status.length==8) {
    cadena =cadena +",charging_scc="+device_status.substring(5,6);
    cadena =cadena +",charging_ac="+device_status.substring(6,7);
    cadena =cadena +",charging_scc_acc="+device_status.substring(7,8) ;
    }
    return cadena;
    }
    app.listen(3001, function () {
    console.log('Example app listening on port 3001!')
    })

  13. #13
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Ok gracias...de node.js estoy "pez" pero seguro que ayuda para Python, que no es que tenga mucha idea, pero es lo que hemos usado Nikitto y yo para el control de FV implementado

    Lo de meterse con el control lo comentaba no solo para mandar comandos al Hibrido (que si veo que puede ser útil..por ejm ponerlo en bajo consumo por la noche.....) sino ademas para gestionar excedentes, encender/apagar cosas en función de parámetros FV (Vbateria, SOC, etc) u horario
    Última edición por Mleon; 02/06/2017 a las 15:44

  14. #14
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Ayer, mleon y yo, tuvimos otra de nuestras sesiones nocturnas (hasta las tantas de la madrugada) para sacar en claro el tema de la recepción de datos desde el axpert (= Datos + CRC1 + CRC2 + CR). Bueno, ya está. Manuel se pego un curso acelerado de 'split' y yo de encode/decode. Usaremos el método de Manuel, ya que es mucho más práctico y de fácil manejo.

    Me da miedo el hombre, porque no tiene un híbrido, y ya veo que le está cogiendo vicio a esto, tanto que seguro va donde la FV y conecta un cable desde la RPi hasta el FM que tiene allí.

    Fuera bromas. Si el cuerpo aguanta, esta noche subiré los avances.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  15. #15
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Ayer estaba cansado. Estos son los avances:

    Código PHP:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-


    import ossys
    import crcmod
    import time


    comando 
    'QPIGS'

    xmodem_crc_func crcmod.mkCrcFun(0x11021rev=FalseinitCrc=0x0000xorOut=0x0000)

    def crc(comando):
        global 
    crc
        crc 
    hex(xmodem_crc_func(comando))
        return 
    crc

    # calcular crc
    crc(comando)
    print (
    'CRC='),crc

    crc1
    =crc[0:4]
    crc2=crc[0:2]+crc[4:6]

    crc1=int(crc1base=16)
    crc2=int(crc2base=16)

    fd os.open('/dev/hidraw0'os.O_RDWR os.O_NONBLOCK)
    os.write(fdcomando+chr(crc1)+chr(crc2)+'\r')
    time.sleep(1)

    os.read(fd8).encode('string-escape')

    while 
    r.find('r') == -:
        
    time.sleep(1)
        
    os.read(fd8).encode('string-escape')

    r.split("\\")
    print 
    s

    os
    .close(fd
    Realizamos una primera lectura (os.read) y guardamos el contenido en r. Posteriormente analizamos el contenido de r en busca de la letra r (\r = CR = retorno de carro). Mientras no se encuentre (-1) repite el bucle (while) añadiendo el contenido de la variable r dentro de la propia variable (r = r + nuevo_contenido).

    A grandes rasgos, .encode('string-escape') es para que no codifique los carácteres escape (\) como carácteres ascii.

    Una vez encuentra r (\r), divide (split) el contenido de la variable r en distintos campos según contengan o no '\' y asigna la salida a la variable s, que es la que acabamos imprimiendo en pantalla.

    El bucle se repite cada segundo, hasta conseguir todo el contenido, pero deduzco que con menos tiempo funcionará igual.

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

    Raspberry e híbrido tipo axpert-axpert.jpg

    Esta es la salida. Cada campo se guarda en una posición distinta dentro de la variable s

    Una de las opciones, que ya comenté, es comprobar que los datos enviados por el híbrido (s[0]) son correctos, comprobándolos con los CRC1 y CRC2 que nos da el híbrido. Usando para ello la definición def crc(comando). Pero en vez de mandar un comando, mandamos los datos.

    Como veis en la imagen, cada elemento tiene una posición dentro de la lista:
    s[0] = datos
    s[1] = CRC1
    s[2] = CRC2
    s[3] = CR ( \r )
    s[4...] = ceros (no computan, son sólo relleno)

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

    Si por ejemplo queremos visualizar el voltaje de salida AC, haremos:

    print s[0][12:15]

    s[0] son los datos y [12:15] son las posiciones de inicio y final del valor. Empezamos a contar desde 0, incluyendo el ( y los espacios vacíos.

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

    Sobre este último punto, mejor coger el campo 0 de la lista, s[0] y dividir su contenido:

    Código PHP:
    s[0][1:].split(" ")
    print 

    Y de paso, le quitamos el paréntesis inicial.

    ['001.0', '00.0', '228.0', '50.0', '0000', '0000', '000', '376', '25.75', '000', '068', '0314', '0000', '033.4', '25.83', '00001', '10010110', '14', '06', '00002', '100']

    Ahora tenemos i[0], i[1], i[2], ... i[n] con cada valor.

    Gracias Manuel por tu ayuda.
    Última edición por nikitto; 03/06/2017 a las 15:11
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  16. #16
    el_cobarde Invitado

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Cita Iniciado por nikitto Ver mensaje
    Estos son los avances: ... Ahora tenemos i[0], i[1], i[2], ... i[n] con cada valor
    Genial! Enhorabuena a los dos! ...

  17. #17
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Cita Iniciado por el_cobarde Ver mensaje
    Genial! Enhorabuena a los dos! ...
    Sobre esto, ha habido algún cambio. Ya lo explicaré en breve.

    Ahora quiero comentar otra forma, aunque parecida, para obtener los datos:

    $ sudo python

    Código PHP:
    fd open('/dev/hidraw0''r+')
    fd.write('QPI\xbe\xac\r')
    fd.read(8)    # bytes a leer, también es posible coger 110 bytes
    fd.close() 
    Podemos intercambiar este código con el que usábamos hasta ahora.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  18. #18
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Ejemplo de lo que hace el programa:

    Nombre:  comando.jpg
Visitas: 5335
Tamaño: 20,2 KB

    Código:

    Código PHP:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    import sys
    import crcmod
    import time

    comando 
    'QPIGS'

    xmodem_crc_func crcmod.mkCrcFun(0x11021rev=FalseinitCrc=0x0000xorOut=0x0000)

    def calc_crc(comando):
        global 
    crc
        crc 
    hex(xmodem_crc_func(comando))
        return 
    crc

    # calcular crc
    comando raw_input("Enter command (qflag, qid, qmod, qpi, qpigs): ")
    comando comando.upper()
    if 
    comando == 'QPIGS':
        
    nbytes 110
    elif comando 
    == 'QID':
        
    nbytes 18
    elif comando 
    == 'QFLAG':
        
    nbytes 15
    elif comando 
    == 'QPI':
        
    nbytes 8
    elif comando 
    == 'QMOD':
        
    nbytes 5
    else:
        print 
    'Comando no encontrado'
        
    sys.exit(0)

    calc_crc(comando)
    print(
    'Comando='), comando
    print('CRC='),crc

    crc1
    =crc[0:4]
    crc2=crc[0:2]+crc[4:6]

    crc1=int(crc1base=16)
    crc2=int(crc2base=16)

    fd open('/dev/hidraw0''r+')
    fd.write(comando+chr(crc1)+chr(crc2)+'\r')
    fd.read(nbytes).encode('string-escape')

    r.split("\\")
    print 
    s

    s[0][1:].split(" ")
    print 
    i

    fd
    .close() 
    Con esto tengo más que suficiente para portar datos del híbrido a nuestro sistema de control fotovoltaico. No creo que vaya a desarrollarlo mucho más, ya que mi intención no era crear un programa de monitorización/configuración del híbrido.

    Sois libres de usar el código como mejor os parezca. Cualquier duda o sugerencia será bienvenida.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  19. #19
    Fecha de ingreso
    oct 2014
    Ubicación
    Masquefa
    Mensajes
    351

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Felicidades a los dos..........lástima no te comprases un Schneider en vez de un Axpert .......jeje

    Saludos,
    Francesc.
    Biomasa: GREEN ECOTHERM Mario Long Time 18kW + DI 500l + Retenedor humos + Estabilizador de tiro
    Solar: 10590Wp + 48V 1000Ah C5 + OUTBACK FLEXMAX LCD 80A + Fangpusun 80A + Inversor Schneider
    XW+ 8548 E
    Monitoring Solar con Rpi

  20. #20
    el_cobarde Invitado

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Cita Iniciado por el_cobarde
    Genial! Enhorabuena a los dos!
    Cita Iniciado por nikitto Ver mensaje
    Sobre esto, ha habido algún cambio. Ya lo explicaré en breve.
    Si, por favor, explíca lo del cambio, que no lo entiendo ...

  21. #21
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Cita Iniciado por el_cobarde Ver mensaje
    Si, por favor, explíca lo del cambio, que no lo entiendo ...
    Vale, perdón. Quedo ya realizado el cambio en el post #15 (última parte).

    un ejemplo:

    ['001.0', '00.0', '228.0', '50.0', '0000', '0000', '000', '371', '25.37', '000', '100', '0413', '0000', '000.0', '25.70', '00001', '10010000', '14', '06', '00000', '000r']
    Carga [VA]: 0
    Carga [W]: 0
    Carga [%]: 0
    Vbat: 25.37
    IP2: 0
    VP2: 0.0
    Ibat2: 1

    Y código que añadí al final (antes del fd.close) para elegir que campos mostrar:

    Código PHP:
    if comando == 'QPIGS':
        print(
    'Carga [VA]:'), int(i[4])
        print(
    'Carga [W]:'), int(i[5])
        print(
    'Carga [%]:'), int(i[6])
        print(
    'Vbat:'), float(i[8])
        print(
    'IP2:'), int(i[12])
        print(
    'VP2:'), float(i[13])
        print(
    'Ibat2:'), int(i[15]) 
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  22. #22
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Ya he comenzado a almacenar algunos datos extraidos del híbrido:

    Raspberry e híbrido tipo axpert-datos_hibrido.jpg

    Básicamente la parte software ha quedado reducida a la mínima expresión:

    Código PHP:
            # *** HIBRIDO ***
            
    try:
                
    fd open('/dev/hidraw0''r+')
                
    time.sleep(.5)
                
    fd.write('QPIGS\xB7\xA9\r')
                
    time.sleep(.5)
                
    res fd.read(110).encode('string-escape')

                
    res res.split("\\")
                
    res res[0][1:].split(" ")

            
    except:
                
    log='error de conexion con hibrido'
                
    logBD() 
    Luego guardo los datos extraidos, en una tabla de la BD que he creado para dicho fin.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

  23. #23
    Avatar de Mleon
    Mleon está desconectado Forero
    Fecha de ingreso
    may 2016
    Ubicación
    MADRID
    Mensajes
    991

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Nikitto y yo hemos hecho algunas pruebas con el híbrido, no solo para sacarle información sino para mandarle comandos

    En principio el tema funciona y para los que tienen este tipo de híbrido (no es mi caso) abre algunas posibilidades de controlarlo:

    - Ponerlo en bajo consumo por horario o condiciones FV
    - Cambiar los parámetros de voltaje de flotación y absorción en función de la temperatura ( según creo este híbrido no tiene compensación por temperatura)
    - Pasar de SBU (Solar,Battery, Utility) a Utility o viceversa
    - etc

  24. #24
    adc0891 está desconectado Forero
    Fecha de ingreso
    may 2012
    Ubicación
    lerida
    Mensajes
    79

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Hola Nikitto, he estado siguiendo tus progresos con el Axpert y la verdad es que es cojonudo lo que habeis conseguido!!!

    ¿Seria mucho pedir que me pases el codigo python para leer los valores del Axper por MP?

    Gracias!!

    Cita Iniciado por nikitto Ver mensaje
    Ya he comenzado a almacenar algunos datos extraidos del híbrido:

    Pulsa en la imagen para verla en tamaño completo

Nombre: datos_hibrido.jpg
Visitas: 313
Tamaño: 87,8 KB
ID: 16604

    Básicamente la parte software ha quedado reducida a la mínima expresión:

    Código PHP:
            # *** HIBRIDO ***
            
    try:
                
    fd open('/dev/hidraw0''r+')
                
    time.sleep(.5)
                
    fd.write('QPIGS\xB7\xA9\r')
                
    time.sleep(.5)
                
    res fd.read(110).encode('string-escape')

                
    res res.split("\\")
                
    res res[0][1:].split(" ")

            
    except:
                
    log='error de conexion con hibrido'
                
    logBD() 
    Luego guardo los datos extraidos, en una tabla de la BD que he creado para dicho fin.

  25. #25
    Avatar de nikitto
    nikitto está desconectado Forero
    Fecha de ingreso
    ago 2015
    Ubicación
    Cambrils
    Mensajes
    983

    Predeterminado Re: Raspberry e híbrido tipo axpert

    Tengo 2 códigos.

    1.
    Código PHP:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    import ossys
    import crcmod
    import time

    comando 
    'QPIGS'

    xmodem_crc_func crcmod.mkCrcFun(0x11021rev=FalseinitCrc=0x0000xorOut=0x0000)

    def calc_crc(comando):
        global 
    crc
        crc 
    hex(xmodem_crc_func(comando))
        return 
    crc

    # calcular crc
    comando raw_input("Enter command: ")
    comando comando.upper()

    calc_crc(comando)
    print(
    'Comando='), comando
    print('CRC='),crc

    crc1
    =crc[0:4]
    crc2=crc[0:2]+crc[4:6]

    crc1=int(crc1base=16)
    crc2=int(crc2base=16)

    fd os.open('/dev/hidraw0'os.O_RDWR os.O_NONBLOCK)
    os.write(fdcomando+chr(crc1)+chr(crc2)+'\r')
    time.sleep(2)

    os.read(fd8).encode('string-escape')

    while 
    r.find('r') == -:
        
    time.sleep(.2)
        
    os.read(fd8).encode('string-escape')

    r.split("\\")
    print 
    s

    s[0][1:].split(" ")
    print 
    i

    os
    .close(fd
    2.
    Código PHP:
    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    import sys
    import crcmod
    import time

    comando 
    'QPIGS'

    xmodem_crc_func crcmod.mkCrcFun(0x11021rev=FalseinitCrc=0x0000xorOut=0x0000)

    def calc_crc(comando):
        global 
    crc
        crc 
    hex(xmodem_crc_func(comando))
        return 
    crc

    # calcular crc
    comando raw_input("Enter command (qflag, qid, qmod, qpi, qpigs): ")
    comando comando.upper()
    if 
    comando == 'QPIGS':
        
    nbytes 110
    elif comando 
    == 'QID':
        
    nbytes 18
    elif comando 
    == 'QFLAG':
        
    nbytes 15
    elif comando 
    == 'QPI':
        
    nbytes 8
    elif comando 
    == 'QMOD':
        
    nbytes 5
    else:
        print 
    'Comando no encontrado'
        
    sys.exit(0)
    while 
    True:

        
    calc_crc(comando)
        print(
    'Comando='), comando
        
    print('CRC='),crc

        crc1
    =crc[0:4]
        
    crc2=crc[0:2]+crc[4:6]

        
    crc1=int(crc1base=16)
        
    crc2=int(crc2base=16)

        try:
            
    fd open('/dev/hidraw0''r+')
            
    time.sleep(.5)
            
    fd.write(comando+chr(crc1)+chr(crc2)+'\r')
            
    time.sleep(.5)
            
    fd.read(nbytes).encode('string-escape')

            
    r.split("\\")
            print 
    s

            i 
    s[0][1:].split(" ")
            print 
    i

            fd
    .close()

        
    except:
            print(
    'Error de conexion')

        if 
    comando == 'QPIGS':
            print(
    'Carga [VA]:'), int(i[4])
            print(
    'Carga [W]:'), int(i[5])
            print(
    'Carga [%]:'), int(i[6])
            print(
    'Vbat:'), float(i[8])
            print(
    'Carga bat: +'), int(i[9])
            print(
    'IP2:'), int(i[12])
            print(
    'VP2:'), float(i[13])
            print(
    'Descarga bat: -'), int(i[15])

        
    time.sleep(5
    En el primero puedes enviar el comando que quieras, incluidos comandos de configuración.
    En el segundo los comandos que se pueden mandar están preestablecidos.
    PvControl+: Control sistema fotovoltaico
    Si te gusta la web, aquí el proyecto. El manual está aquí
    ¿Cómo conectar un Axpert a una Raspberry? Aquí
    ¿Cómo conectar un InfiniSolar a una Raspberry? Aquí

Página 1 de 11 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