lunes, 8 de febrero de 2021

Peleándome con un microinverter wvc-1400 wifi de kaidengdg.

 Buenas.
Hace poco he comprado un micro inversor a red para poder inyectar la producción solar en mi red eléctrica.

Desgraciadamente, el fabricante no da soporte aduciendo que es un modelo antiguo.
Los primeros modelos de este fabricante se comunicaban por radiofrecuencia con un modem con puerto serie que se conectaba al ordenador y ofrecían una aplicación para el control del estado y la producción solar.
Mas tarde apareció otro "modem" que conectaba los inversores por RF (radiofrecuencia) a la red WIFI doméstica y una aplicación a la que accedía vía web. De esta manera, el modem informaba a los servidores web de los datos que recogía de los inversores.
Con los últimos avances, se incluyó en los micro inversores, en vez del chip de radiofrecuencia, otro chip que supuestamente unificaba las funciones del anterior y del modem wifi. Ahora no era necesario tener otro aparato. Se configuraban los micro inversores para conectarse a nuestra WIFI y ellos mismo enviaban los datos a la web.
Según el fabricante, cambiaron de modelo de chip WIFI y dejaron de dar soporte a los anteriores basados en el popular ESP8266.

Así que aquí me hayo, con un ladrillo huérfano al que me empeño de exprimir, cueste lo que cueste.
Afortunadamente, otros ya se pelearon con las versiones antiguas de este aparato. Hacker que fueron siguiendo la pista de los datos que se emitían por RF, datos que se enviaban a la red, modelos de chips, placas alternativas e incluso hacerse pasar por uno de estos aparatos para inyectar datos en la web y ver como aparecían reflejados en esta para poder comprender bien todo el protocolo.


https://community.openenergymonitor.org/t/wvc-inverter-mqtt-data-logging-for-all-versions-of-inverters

Pongamos el caso que mi aparato tiene dos números en una etiqueta pegada: uno tal que 6000bbbb y otro tal que 20131111. El primero sería el identificador del módem y el segundo el del inversor.

Trasteando con el único botón que tiene el aparato y dejándole pulsado, consigo que me aparezca una red WIFI con SSID: 6000bbbb  y probando contraseñas triviales (12345678), resulta que logro conectarme a esa wifi. Viendo las propiedades de esa conexión, encuentro que me asigna una dirección 10.10.10.3 y que el inversor aparece con la dirección 10.10.10.1.
Rápidamente echo mano a NMAP y escaneo sus puertos por ver si hay alguno abierto, bingo, puerto TCP 1234. 

Pues nada, a lanzar el RealTerm contra ese puerto. Antes de que llegue a enviar ningún paquete, me aparecen unos caracteres extraños en el terminal y al verlos en formato hexadecimal, me encuentro que dicen:

E6    20 13 11 11   FF 00 00   60 00 BB BB   26

Más claro agua, son los números de la etiqueta. Se está presentando y diciendo "hola, soy Pepe Pérez".

Y cada cierto tiempo envía otra cadena:

F5 00 00 00 00 00 00 00 00 00 00 00 00 00 11 9C 58 7D 00 32 00 46 00 00 00 BE 0B B8 

Como ya me he empapado un poco en el foro de la comunidad openenergymonitor, le lanzo esto:

F2   20 13 11 11   FF 00 00   60 00 BB BB    65

y recibo respuesta:

F2  20 13 11 11   FF 00 00   60 00 BB BB   65    10 D5 5A 1C 00 32 00 43 00 00 00 C6 0B B8

Pues nada, a descifrarlo. Por lo visto se envía la tensión (amperios o micro amperios), la corriente de la red (pongo el polímetro y veo que en los enchufes tengo unos 223 voltios de corriente alterna), la frecuencia de la red (50 hz),  el voltaje de los paneles (voltios en corriente continua), la intensidad de la corriente que sale de los paneles ( Amperios o miliamperios), la temperatura ambiente (en ese momento unos 7 grados) y no sé si algo más. Todo eso tiene que estar aquí: 

10 D5 5A 1C 00 32 00 43 00 00 00 C6 0B B8

hexadecimal  = decimal
10d5 = 4309
5a1c = 23068
0032 = 50
0043 = 67
0000 = 0
00c6= 198
0bb8 = 3000


Buenos pues hay que dividir algunos valores entre 100, y así el voltaje de salida de los paneles sería 43,09 voltios DC, el de la red alterna 230,68 voltios AC, 0,5 amperios DC, 0,67 Kilowatios producidos en total por el inversor, 19 vatios se están produciendo (dividido por 10) y el final parece ser la temperatura pero no sé si esta aplicando un complemento a 2 para las temperaturas negativas.