Acceso a la API de inversores Solax

Hoy voy a hablar de algo que aun no he tocado directamente y es el tema de inversores solares. Como ya adelanté en mi Twitter, estoy instalando en casa Energía Solar Fotovoltaica, y para ello he usado un inversor Solax X1 Boost de 5kw. Obtendremos los datos a través de la API.

Vamos a ver sin entrar en detalle que son y como funcionan los inversores en general.

¿Qué es un Inversor Fotovoltáico?

Las placas colares fotovoltaicas generan electricidad en corriente continua en corriente alterna para ser consumida por los electrodomésticos de casa.

Inversores de conexión a red

Son aquellos inversores que son capaces de funcionar conectados a la red eléctrica de la compañía. Es el caso de mi Solax X1 Boost, pero también hay otros como Fronius, Sofar Solar, …

Inversores con baterías

Estos inversores son aquellos que tienen capacidad de funcionar con baterías. Estos inversores son conocidos normalmente con hybrid o híbridos. Estas baterías ayudan a almacenar la electricidad no consumida para ser consumida cuando no tengamos aporte solar o cuando necesitemos más de lo que las placas sean capaz de darnos.

Existen inversores que tienen que funcionar obligatoriamente con estas baterías conectadas, aunque ya son los menos, y otros, la mayoría de actuales, que pueden funcionar perfectamente sin estas baterías.

Estos inversores son los que se usan en conexiones aisladas, aquellos que no están conectados a una red de compañía, y por lo tanto no tienen electricidad más que las que ellos mismos generan.

En este tipo de inversores, podemos encontrar Solax Hybrid, Victron, Voltronic Axpert, MPP Solar, Huawei Sun, Goodwe, …

Monitorización de Inversores Solax

La mayoría de inversores tienen un sistema de monitorización. Solax no iba a ser menos y también tiene su plataforma de monitorización: https://www.solaxcloud.com/ y también tiene una app tanto para Android como para Iphone.

Desde la web podremos ver los datos del inversor y sus gráficas, al igual que desde la app.

En nuestro caso, lo que nos gustaría es obtener los datos para poder procesarlos con Grafana como ya vimos en otro post.

Acceso a la API de Solax

Lo primero es solicitar el acceso a la API. Para ello, desde la propia web, podemos solicitarlo.

Solax Cloud API Menu

Aunque el menú está en Español, el área de servicio está en Checo.

Desde ese menú nos da el acceso a la API y nos enlaza al manual.

API Solax Cloud
Menu API Solax

Aquí nos da el acceso con nuestro TokenID y la URL que necesitaremos para hacer las peticiones. Como vemos, hay un apartado SN que está en blanco después del = . Ahí es donde tenemos que poner el número de serie del interface de red del inversor, no del propio inversor.

Inversor Solar Solax

Estos datos, si no los conocemos, podemos obtenerlo dentro del menú de Inversores. Ahí obtenemos tanto el número de serie del inversor, como del módulo de comunicación que es el que nos interesa.

Petición de datos a la API

Con los datos anteriores, ya podemos realizar llamadas a la API y obtener los datos de nuestro Solax.

Para ello vamos a hacer una llamada con curl y obtendremos un json que procesaremos con jq. En mi caso, esto es lo que recibí:

curl -s 'https://www.eu.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?tokenId=XXXXXXTOKENIDXXXXXXXXX&sn=XXXXXXSNXXXXXXX' | jq
Curl solax api

Interpretación de datos

Como hemos visto en la imagen anterior obtenemos 3 grupos:

  • exception: Respuesta del server.
  • result: Datos.
  • sucess: Estado de la solicitud.

A nosotros lógicamente lo que nos interesa es el apartado de result.

ITEMDESCRIPCIÓNVALORUNIDAD
inverterSNNúmero Serie del Inversor--
snNúmero Serie de la interface WiFi / Lan--
acpowerTotal de potencia del Inversor1W
yieldtodayEnergía AC generada hoy1KWh
yieldtotalEnergía AC generada en total1KWh
feedinpowerEnergía consumida de Red1W
feedinenergyEnergía de entrada total0.01KWh
consumeenergyConsumo total de energía0.01KWh
feedinpowerM2Potencia de red1W
socSOC de la batería1%
peps1Potencia EPS en R (Trifasica)1W
peps2Potencia EPS en S (Trifasica)1W
peps3Potencia EPS en T (Trifasica)1W
inverterTypeTipo de Inversor-
inverterStatusEstado del Inversor-
uploadTimeTiempo encendido-

Código de estado del inversor

Como hemos visto, el estado del inversor nos lo devuelve con un código. En esta tabla podemos ver que código pertenece a cada uno de los estados del inverso Solax:

CódigoEstado
100Es espera
101Comprobando
102Normal
103Fallo
104Fallo Permanente
105Actualización
106Comprobando EPS
107EPS
108Autocomprobación
109Esperando
110Apagado
111Batería
112Comprobando Gen
113Gen

Código de tipo de inversor

Al igual que nos pasaba con el estado, Solax nos vuelve el tipo de inversor con un código. No es necesario una revisión, ya que nosotros sabemos que tipo de inversor tenemos, de todas formas esta tabla corresponde a los modelos de inversores Solax.

CódigoModelo
1X1-LX
2X-Hybrid
3X1-Hybiyd/Fit
4X1-Boost/Air/Mini
5X3-Hybiyd/Fit
6X3-20K/30K
7X3-MIC/PRO
8X1-Smart
9X1-AC
10A1-Hybrid
11A1-Fit
12A1-Grid
13J1-ESS

Uso en la monitorización con Grafana

Una vez tenemos los datos y que valor es cada cosa, vamos a ver como integrar la API con Grafana para usarlo en el ejemplo del post anterior.

He adaptado el script para introducir los datos en Influx:

#!/bin/bash

IP=192.168.1.100
PUERTO=8086
BBDD=meter

API="NUMEROAPI"
SN="MISERIAL"

URL="https://www.eu.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?tokenId=${API}&sn=${SN}"

DATOS=$(curl -s $URL)

LOG=/tmp/meter.log

if [ "$(echo $DATOS | jq .success)" == "true" ]
then
        /usr/bin/curl -s -i -XPOST "http://${IP}:${PUERTO}/write?db=${BBDD}" --data-binary "power,meter=solar value=$(echo $DATOS|jq .result.acpower)"
	/usr/bin/curl -s -i -XPOST "http://${IP}:${PUERTO}/write?db=${BBDD}" --data-binary "power,meter=general value=$(echo $DATOS|jq .result.feedinpower)"

fi

El único problema que tenemos frente al Shelly es aquí tenemos menos datos y en una actualización de 5 minutos frente al minuto que teníamos antes.

Aquí lo único que hemos usado es la potencia que genera el Solax y la potencia que consumimos o inyectamos a la red.

Podríamos tomar un valor fijo para los Voltios y así obtener los Amperios consumidos.