Resultados 1 al 25 de 257
- 30/05/2017, 19:01 #1
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
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:
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:
Le hice algún retoque y ahora también me permite visualizar de forma clara el voltaje e intensidad de paneles.
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í
-
- 30/05/2017, 22:41 #2
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.
- 30/05/2017, 23:26 #3Forero
- Fecha de ingreso
- ene 2013
- Ubicación
- Leon
- Mensajes
- 1.522
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.
- 31/05/2017, 02:10 #4
Re: Raspberry e híbrido tipo axpert
Claro que se puede, mira mi firma.
Gracias Pidjey. Te he mandado un privado.
- - - - - - - - - - - - - - - - - - -
Por ahora ya tengo claro como mandar los comandos:
Código PHP:import os, sys
fd = os.open('/dev/hidraw0', os.O_RDWR | os.O_NONBLOCK)
os.write(fd, "QPI\xBE\xAC\r")
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:
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í
- 31/05/2017, 09:14 #5Forero
- Fecha de ingreso
- ene 2010
- Ubicación
- manresa
- Mensajes
- 149
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
- 31/05/2017, 09:21 #6
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:
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í
- 31/05/2017, 19:13 #7
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 AxpertPVControl+ (web espejo a la real cada 5'...se puede trastear)
Manual Instalación desde Imagen SD
Manual Instalación Reles Wifi
Algo de Funcionalidad (ya tiene control excedentes via wifi, etc...)#743
- 31/05/2017, 20:04 #8Forero
- Fecha de ingreso
- ene 2013
- Ubicación
- Leon
- Mensajes
- 1.522
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.
- 01/06/2017, 14:51 #9Forero
- Fecha de ingreso
- may 2016
- Ubicación
- barcelona
- Mensajes
- 28
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.
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";
- 01/06/2017, 18:10 #10
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 os, sys
import crcmod
import time
comando = 'QPI'
xmodem_crc_func = crcmod.mkCrcFun(0x11021, rev=False, initCrc=0x0000, xorOut=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(crc1, base=16)
crc2=int(crc2, base=16)
fd = os.open('/dev/hidraw0', os.O_RDWR | os.O_NONBLOCK)
os.write(fd, comando+chr(crc1)+chr(crc2)+'\r')
time.sleep(1)
res = os.read(fd, 5)
print res
os.close(fd)
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í
- 01/06/2017, 20:10 #11
Re: Raspberry e híbrido tipo axpert
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 PythonPVControl+ (web espejo a la real cada 5'...se puede trastear)
Manual Instalación desde Imagen SD
Manual Instalación Reles Wifi
Algo de Funcionalidad (ya tiene control excedentes via wifi, etc...)#743
- 01/06/2017, 21:44 #12Forero
- Fecha de ingreso
- may 2016
- Ubicación
- barcelona
- Mensajes
- 28
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!')
})
- 02/06/2017, 14:08 #13
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 16:44
- 02/06/2017, 16:40 #14
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í
- 03/06/2017, 20:30 #15
Re: Raspberry e híbrido tipo axpert
Ayer estaba cansado. Estos son los avances:
Código PHP:#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys
import crcmod
import time
comando = 'QPIGS'
xmodem_crc_func = crcmod.mkCrcFun(0x11021, rev=False, initCrc=0x0000, xorOut=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(crc1, base=16)
crc2=int(crc2, base=16)
fd = os.open('/dev/hidraw0', os.O_RDWR | os.O_NONBLOCK)
os.write(fd, comando+chr(crc1)+chr(crc2)+'\r')
time.sleep(1)
r = os.read(fd, 8).encode('string-escape')
while r.find('r') == -1 :
time.sleep(1)
r = r + os.read(fd, 8).encode('string-escape')
s = r.split("\\")
print s
os.close(fd)
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.
- - - - - - - - - - - - - - - - - - -
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:i = s[0][1:].split(" ")
print i
['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 16: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í
- 04/06/2017, 10:54 #16el_cobarde Invitado
- 04/06/2017, 13:56 #17
Re: Raspberry e híbrido tipo axpert
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()
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í
- 04/06/2017, 22:15 #18
Re: Raspberry e híbrido tipo axpert
Ejemplo de lo que hace el programa:
Código:
Código PHP:#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import crcmod
import time
comando = 'QPIGS'
xmodem_crc_func = crcmod.mkCrcFun(0x11021, rev=False, initCrc=0x0000, xorOut=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(crc1, base=16)
crc2=int(crc2, base=16)
fd = open('/dev/hidraw0', 'r+')
fd.write(comando+chr(crc1)+chr(crc2)+'\r')
r = fd.read(nbytes).encode('string-escape')
s = r.split("\\")
print s
i = s[0][1:].split(" ")
print i
fd.close()
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í
- 04/06/2017, 22:30 #19Forero
- Fecha de ingreso
- oct 2014
- Ubicación
- Masquefa
- Mensajes
- 351
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
- 05/06/2017, 08:15 #20el_cobarde Invitado
- 05/06/2017, 09:36 #21
Re: Raspberry e híbrido tipo axpert
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í
- 05/06/2017, 20:16 #22
Re: Raspberry e híbrido tipo axpert
Ya he comenzado a almacenar algunos datos extraidos del híbrido:
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()
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í
- 10/06/2017, 15:51 #23
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
- 28/06/2017, 15:14 #24Forero
- Fecha de ingreso
- may 2012
- Ubicación
- lerida
- Mensajes
- 79
- 28/06/2017, 16:54 #25
Re: Raspberry e híbrido tipo axpert
Tengo 2 códigos.
1.
Código PHP:#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys
import crcmod
import time
comando = 'QPIGS'
xmodem_crc_func = crcmod.mkCrcFun(0x11021, rev=False, initCrc=0x0000, xorOut=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(crc1, base=16)
crc2=int(crc2, base=16)
fd = os.open('/dev/hidraw0', os.O_RDWR | os.O_NONBLOCK)
os.write(fd, comando+chr(crc1)+chr(crc2)+'\r')
time.sleep(2)
r = os.read(fd, 8).encode('string-escape')
while r.find('r') == -1 :
time.sleep(.2)
r = r + os.read(fd, 8).encode('string-escape')
s = r.split("\\")
print s
i = s[0][1:].split(" ")
print i
os.close(fd)
Código PHP:#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import crcmod
import time
comando = 'QPIGS'
xmodem_crc_func = crcmod.mkCrcFun(0x11021, rev=False, initCrc=0x0000, xorOut=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(crc1, base=16)
crc2=int(crc2, base=16)
try:
fd = open('/dev/hidraw0', 'r+')
time.sleep(.5)
fd.write(comando+chr(crc1)+chr(crc2)+'\r')
time.sleep(.5)
r = fd.read(nbytes).encode('string-escape')
s = 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 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í