Homo_non_sapiens escribió: ↑07 Nov 2020, 13:28
Gabriel_2018 escribió: ↑07 Nov 2020, 13:20Hay que leer entre líneas: ... La cadena 0 64 1 4 0 0 18 24 es: ... 00 64 01 04 00 00 18 24 00 00
00 64 Es el SOC
01 04 00 00 Es la temperatura. Los dos primeros bytes van a la izquierda cuando es positivo y a la derecha cuando es negativo como complemento a 65536.
18 24 00 00 Es la tensión, con cuatro bytes también...
Gracias, ahora parece que lo entiendo ...
Pero cómo se sabe, que el SoC son solo 2 bytes y la temperatura y la tensión son 4 bytes ?
- - - - - - - - - - - - - - - -
A ver si sé interpretar una cadena completa:
Coulometer.JPG
.
La cadena sería: 00 64 01 04 00 00 18 24 00 00 00 01 01 00 02 49 F0 00 00 00 00 00 00 02 6A 03 49 00
00 64 = (6*16 + 4*1) = 100 --> es el SoC (100%)
01 04 00 00 = (1*256 + 0*16 + 4*1) = 300 --> es la temperatura (30.0°C)
18 24 00 00 = (1*4096 + 8*256 + 2*16 + 4*1) = 6180 --> es la tensión (61.80V)
00 01 01 00 = (0*4096 + 0*256 + 0*16 + 1*1) : (0*4096 + 1*256 + 0*16 + 0*1) = 1 : 256 --> es la intensidad (-0.01mA) ?
02 49 F0 00 = (0*4096 + 2*256 + 4*16 + 9*1) : (15*4096 + 0*256 + 0*16 + 0*1) = 586 : 61440 --> es la capacidad (189.28mAh) ??
00 00 00 00 = (0*4096 + 0*256 + 0*16 + 0*1) = 0.0 --> es el tiempo (0.0 minutos)
00 02 6A 03 = (0*4096 + 0*256 + 0*16 + 2*1) : (6*4096 + 10*256 + 0*16 + 3*1) = 2 : 27139 --> es la energía (0.62Wh) ??
49 00 = (4*4096 + 9*256 + 0*16 + 0*1) = 18688 ??
Parece que no consigo interpretar la cadena ...
La cadena es:FE FE FE FE 00 64 01 04 00 00 18 24 00 00 00 01 01 00 02 49 F0 00 00 00 00 00 00 02 6A 03 49 00
Los datos siempre vienen en BigEndian es decir de MSB a LSB
Byte 0-3: FE FE FE FE preambulo (Siempre el mismo, indica inicio de paquete de datos)
Byte 4: Unsigned int 8b. Id unidad 0 a 127
0x00 = 0
Byte 5: Unsigned int 8b. SoC en %
0x64 = 100%
Byte 6-7: signed int 16b. Temperatura en unidades de 0.1ºC
0x01 0x04 = 260 > 26.0ºC
Byte 8-11: Unsigned int 32b. Tension de bateria en unidades de 0.01V
0x00 0x00 0x18 0x24 = 6180 > 61.80v
Byte 12-15: Unsigned int 32b. Corriente de bateria en unidades de 0.01A
0x00 0x00 0x00 0x01 = 1 > 0.01A
Byte 16: Int 8b. Signo de la corriente. 0 positivo, 1 negativo
0x01 = Negativo por tanto -0.01A
Byte 17-20: Unsigned int 32b. Capacidad restante de bateria en mAh unidades 0.001A
0x00 0x02 0x49 0xF0 = 150000 = 150.000Ah
Byte 21-24: Unsigned int 32b. Tiempo en minutos des de la ultima carga.
0x00 0x00 0x00 0x00 = 0 > 0minutos
Byte 25-28: Unsigned int 32b. Potencia entraga puntual en W
0x00 0x00 0x02 0x6A = 618 > 618w
Byte 29: Int 8b: Coma flotante de la potencia puntal.
Es decir si el valor es 2, dividir por 100 la unidad de potencia puntual bytes26-29.
0x03 = 3 > 618w/1000 = 0.618w
Byte30-31: Podria ser una suma de comprobacion XOR, no lo he calculado. Tampoco esta documentado claramente.
Existen pocos comandos de configuracion por serie:
- Reset de contadores.
- Activar el volcado continou de datos para una unidad. Volcado de datos puntual y parada de volcado de datos continuo (el volcado es cada segundo)
- Canbiar el ID de la unidad, muy utill si tienes varias, tods en paralelo en el puerto serie.
- Consulta "broadcast" a todas las unidades, responden todas con una rafaga de datos, util para saber cuantas tienes y los id que tiene cada una.
Que no se puede hacer:
- Programar las alarmas, los Ah de cada unidad, solo posible por el LCD, auqnue estoy en conversacion con el chino para ver si puede dar soporte.
- Calibrar la shunt.
- Resetear a valores de fabrica.
Evidentement antes de poner mas de 1 unidad en paralelo se debe programar el ID de cada una para diferenciarlas. La unidad por defecto tiene el ID 0.
Miro de colgar 2 codigos pyton uno para enviar comando momentanemament y otro que hace un poll constante en bucle para hacer post a EmonCMS.