Logo Solax

Describo cómo he integrado en Home Assistant mi instalación Fotovoltaica con paneles Axitec, un Inversor SolaX y un par de baterías Triple Power. Tras probar varias opciones me he decantado por la integración MODBUS/TCP que trabaja en local, vía LAN y saca más datos que el resto de opciones.


Instalación

Mi instalación fotovoltaica consta de los siguientes componentes:

Arquitectura de Monitorización
  - 1 x Inversor SolaX Híbrido X1-HYBRID-5.0T Gen-3
  - 23 x Módulos solar Axitec 280W 60 células policristalino
  - 1 x SolaX EPS Box
  - 1 x BMS para baterías Triple Power de SolaX T- BAT MC0500
  - 2 x Batería Triple Power T63 v2.0 SolaX 6,3kWh
  - 1 x Meter Chint DDSU 666
  - 1 x SolaX Pocket WiFi Dongle

Tenemos tres opciones de monitorización.

  1. SolaX Cloud (se actualiza automáticamente vía Dongle) y puede ser consultada a través de la App oficial de SolaX o a través de REST/API.
  2. Consulta directa en local al Pocket Wifi/LAN Dongle mediante REST/API.
  3. Consulta directa a través de la LAN (puerto Ethernet) mediante MODBUS/TCP


1. Monitorizar vía SolaX Cloud

Cuando terminan la instalación deben dejarte configurado el Dongle de modo que vaya guardando en la Cloud SolaX para que puedas consultarlas desde un navegador o una aplicación móvil. Las actualizaciones las hace cada 5 minutos.

  • Podemos usar un navegador o el App de SolaX para conectar con SolaX Cloud. En ambos casos estás accediendo a un servicio online con una ventana de 5-min, que aunque no es tiempo real, funciona bastante bien.
Opciones vía SolaxCloud
  • Puedes consultar a SolaX Cloud a través de REST/API y bajarte a local los datos.
Integración REST/API vía SolaxCloud

Integración con Home Assistant

Nunca he integrado vía el REST/API de SolaxCloud, de hecho no lo recomiendo, es mucho mejor la opción de MODBUS que describo más adelante. No obstante, aquí tienes un par de enlaces:


2. Monitorizar vía red local (WiFi/LAN Dongle)

En mi caso tengo el Dongle WiFi (de hecho intenté comprar el LAN sin éxito). La monitorización se consigue mediante consultas REST API directas al dongle.


Integración con Home Assistant

La integración con Home Assistant la tienes disponible en: // SolaX Power, implementa el 🌞 Solax Inverter API Wrapper del mismo autor.

Integración Solax Power con Wifi Dongle

Mis observaciones y algunos retos:

  • Lo he usado durante más de un año y funciona relativamente bien, sin demasiados problemas. Expone las métricas más habituales, aunque no todas.
  • El Dongle WiFi se conecta como cliente a tu red WiFi para llegar a SolaxCloud pero también expone una nueva red Wifi.
  • Mi primera sorpresa fue este nuevo SSID (WiFi_SWXXXXXXXX) sin clave donde usa una IP fija (5.8.8.8) y descubrir que solo escucha a las peticiones API REST por esta IP.
    • Eso supone, en la mayoría de los casos, tener que montar un proxy en tu casa. Por ejemplo una raspberry conectada a tu LAN y a esta WiFi. Montar un nginx que haga de proxy.
    • Por suerto encontré este proyecto donde puedes bajarte Firmwares modificados para Solax Pocket WIFI V2, que básicamente habilita el escuchar por la IP que recibe en tu casa.
  • Otro reto es su estabilidad, “a veces” dejaba de actualizar, sin motivo aparente.
    • Se solucionaba desenchufando/enchufando el dongle (USB).
  • El tercer reto es que la integración Solax Power solo funciona con la versión de firmware V2.033.20, por lo que no podía actualizar a su última versión V2.034.06
Integración REST API vía red local


3. Monitorizar vía red local (MODBUS/TCP)

Consultar al Inversor mediante el protocolo MODBUS/TCP es la mejor opción. Por suerte mi inversor X1-HYBRID-G3 soporta recibir consultas por el puerto 502 (puerto de por defecto para el protocolo modbus/tcp). Necesitas poner un cable Ethernet en el puerto LAN de tu inversor conectado a la red local de tu casa. En mi caso le asigno una dirección IP fija desde mi DHCP server a través de su MAC.


Integración con Home Assistant

Existe una Integración muy buena, lee muchos más datos y con más frecuencia que el resto de opciones que he probado, homsassistant-solax-modbus. El autor,

Nota: En mi caso empecé con una versión antigua (instalación manual). Antes de instalar la última eliminé el directorio /config/custom_components/solax_modbus y borré la integración desde Configuration > Integrations, Tras el reboot de rigor pude seguir con el siguiente punto.


Instalación con HACS (0.4.5)

Desde la versión 0.4.5 ya es posible hacer la instalación desde HACS, el Community Store de Home Assistant.

  • HACS > Integrations > Explore & Download Repositories > busco por “modbus”
Instalo Homsassistant Solax Modbus

Selecciono la última versión

Selecciono la última versión

Rearranco Home Assistant desde Configuration > Settings > Restart

Entro en Configuration > Device & Services > Add Integration > Setup a new Integration, busco por solax y selecciono SolaX Inverter Modbus. La llamo SolaXM(la M la pongo por Modbus), pongo su IP, selecciono MI MODELO y establezco la frecuencia en 15s, más que suficiente…

Doy de alta la nueva integración

Aparece ya en Configuration > Devices & Services > Integrations. Entro en el device la añado a Lovelace UI.

A partir de ahora ya podemos verlo en Lovelace


Migración de 0.4.x a 0.5.3a

Cuando se liberó la versión 0.5.x el autor recomendaba (discusión #26) eliminar la integración (0.4.x) y volver a crearla con la nueva (0.5.x) manteniendo el mismo nombre del dispositivo, para que todo el resto de tu configuración se mantenga al instalar la nueva versión.

  • Confirmo el nombre de mi dispositivo, en mi caso le había puesto SolaXM
    • Configuration > Devices & Services > SolaXM (SolaX Inverter Modbus) > “…” > Rename
  • Elimino el dispositivo Solax modbus
    • Configuration > Devices & Services > SolaXM (SolaX Inverter Modbus) > “…” > Delete
  • Rearranco HA
    • Configuration > Settings > Server Control > Home Assistant > Restart
  • Elimino la integración Solax modbus en HACS
    • HACS > Integrations > SolaX Inverter Modbus > “…” > Remove
  • Reinstalo la nueva versión 0.5.3a
    • HACS > Integrations > Explore & Download Repositories > busco por “modbus”
    • SolaX Inverter Modbus > Download this repository > Selecciono la última (0.5.3a) > Download
  • Rearranco Home Assistant
    • Configuration > Settings > Server Control > Home Assistant > Restart
  • Doy de alta de nuevo el dispositivo
    • Configuration > Device & Services > Add Integration > Setup a new Integration
    • Busco por solax > SolaX Inverter Modbus > lo llamo SolaXM
    • Pongo su IP y resto de parámetros.
Nota: En esta ocasión no necesito definir el modelo de mi inversor, lo detectó por el inicio de su número de serie. Lo compartí con el Autor (discusión #26)
Nueva versión 0.5.3a


Exportar los datos a InfluxDB

Para exportar los datos voy a usar mi Servidor Externo con InfluxDB 2.x y Grafana (un apunte sobre eso). Por cierto, lo migré de InfluxDB 1.x (embebido en HASS) a esta versión externa (aquí los pasos).

Configuro /config/configuration.yaml para mandar la información de mi Inversor al servidor InfluxDB. Si tu inversor es distinto tendrás datos parecidos pero no iguales.

:
influxdb:
  # New InfluxDB 2.x
  api_version: 2
  ssl: false
  host: 192.168.X.Y
  port: 8086
  token: EL-TOKEN-DE-MI-USUARIO (influxdb>LoadData>API Token)
  bucket: home_assistant
  organization: MI-ORGANIZATION-ID (influxdb>Icono Usuario>About)
  max_retries: 3
  default_measurement: state
  include:
    entities:
     :
      # Poner aquí los sensor.solaxm
      - sensor.solaxm_bms_connect_state
      - sensor.solaxm_backup_charge_end
      - sensor.solaxm_backup_charge_start
      - sensor.solaxm_backup_gridcharge
      - sensor.solaxm_battery_capacity
      - sensor.solaxm_battery_current_charge
      - sensor.solaxm_battery_input_energy_today
      - sensor.solaxm_battery_output_energy_today
      - sensor.solaxm_battery_power_charge
      - sensor.solaxm_battery_temperature
      - sensor.solaxm_battery_voltage_charge
      - sensor.solaxm_charger_end_time_1
      - sensor.solaxm_charger_end_time_2
      - sensor.solaxm_charger_start_time_1
      - sensor.solaxm_charger_start_time_2
      - sensor.solaxm_grid_export
      - sensor.solaxm_grid_import
      - sensor.solaxm_house_load
      - sensor.solaxm_inverter_current
      - sensor.solaxm_inverter_frequency
      - sensor.solaxm_inverter_power
      - sensor.solaxm_inverter_temperature
      - sensor.solaxm_inverter_voltage
      - sensor.solaxm_measured_power
      - sensor.solaxm_pv_current_1
      - sensor.solaxm_pv_current_2
      - sensor.solaxm_pv_power_1
      - sensor.solaxm_pv_power_2
      - sensor.solaxm_pv_total_power
      - sensor.solaxm_pv_voltage_1
      - sensor.solaxm_pv_voltage_2
      - sensor.solaxm_run_mode
      - sensor.solaxm_today_s_export_energy
      - sensor.solaxm_today_s_import_energy
      - sensor.solaxm_today_s_solar_energy
      - sensor.solaxm_today_s_yield 


Configuración de Grafana para visualizar los consumos

El siguiente paso es configurar un Dashboard en Grafana para representar algunos de esos datos.

Ejemplo de configuración en Grafana

Te dejo aquí las Query’s con el nuevo Flux Script…

// 🏠 Consumo total casa 
// vía Solax Modbus 
//
from(bucket: "home_assistant")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "W")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "solaxm_house_load")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")

// 🔌 Consumo Iberdrola
// vía Solax Modbus 
//
from(bucket: "home_assistant")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "W")
|> filter(fn: (r) => r["_field"] == "value")
|> filter(fn: (r) => r["domain"] == "sensor")
|> filter(fn: (r) => r["entity_id"] == "solaxm_grid_import")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> map(fn: (r) => ({ r with _value: (r._value * -1.0) }))
|> yield(name: "mean")

// 🌞 Prod. Fotovoltaica 1&2
// Potencia (W) total generada por los Paneles:
// vía SolaX Modbus
//
from(bucket: "home_assistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "W")
  |> filter(fn: (r) => r["_field"] == "value")
  |> filter(fn: (r) => r["domain"] == "sensor")
  |> filter(fn: (r) => r["entity_id"] == "solaxm_pv_power_1" or r["entity_id"] == "solaxm_pv_power_2")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

// Baterías: ➕⚡️Carga   /  ➖🔋 Descarga
// Carga y Consumo de las baterías
// vía SolaX Modbus
//
from(bucket: "home_assistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "W")
  |> filter(fn: (r) => r["_field"] == "value")
  |> filter(fn: (r) => r["domain"] == "sensor")
  |> filter(fn: (r) => r["entity_id"] == "solaxm_battery_power_charge")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

// 🔩 Prod. hacia Casa/Red
// Inversor: Potencia en Watios AC que entrega el Inversor 
// desde los paneles FV hacia la casa (para cubrir la demanda solicitada)
// vía SolaX Modbus
//
from(bucket: "home_assistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "W")
  |> filter(fn: (r) => r["_field"] == "value")
  |> filter(fn: (r) => r["domain"] == "sensor")
  |> filter(fn: (r) => r["entity_id"] == "solaxm_inverter_power")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")


Temas Pendientes

  • Tengo pendiente de estudio la configuración que utiliza el autor de la Integración.

  • Tengo pendiente ver qué otras opciones son interesantes para monitorizar, además de investigar la posibilidad de programar el Inversor desde Home Assistant, aunque eso me da bastante respeto de momento…


Integración con Energy Dashboard

Con la versión 2021.8 Home Assistant liberó el Tablero de control de la energía

Ejemplo de configuración en Grafana

Su objetivo es facilitar a los usuarios el conocimiento de su consumo energético, permite ver de un vistazo rápido cómo lo estás haciendo hoy, con la opción de desglosar también por horas para ver qué ha pasado . También incluye indicadores que ayudan a identificar tu dependencia de la red y si añadir almacenamiento de energía ayudaría.

Existe una forma de compatibilizar los datos de esta integración para que me aparezcan en dicho Dashboard…


Configuración inicial.

En este enlace está la documentación para configurar la pantalla de Energía.

Nota: Si ya has hecho una configuración y no consigues editarla desde el Dashboard Energy es porque solo puedes editarla desde Configuration > Dashboard > Energy. Por cierto, a nivel informativo, la configuración se guarda en el fichero: config/.storage/energy
Configuration > Dashboard > Energy
Detalle de los datos configurados, click para ampliar
Nota1: Para el CO2 Signal basta con visitar el sitio y darse de alta, te envía tu token
Nota2: En la ventana donde defino el grid consumption (SolaXM Today’s Import Energy) he añadido un entity que hace el tracking the los costes totales, pero es una prueba, no hace falta ponerlo

El resultado final es el Dashboard de Energía

Dashboard de Energía integrado en HA

Comparación con lo que vemos en un Dashboard Grafana personalizado…

Detalle de consumos en un Dashboard Grafana