Home Assistant 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:
- 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.
- 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.
- Consulta directa en local al Pocket Wifi/LAN Dongle mediante REST/API.
- 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.
- Puedes consultar a SolaX Cloud a través de REST/API y bajarte a local los datos.
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:
- Proyecto en GitHUb para hacer la SolaxCloud integration for Home Assistant.
- Un buen hilo de discusión aquí, encontrarás muchos comentarios sobre esta y otras opciones…
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.
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.
- 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
- 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
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,
- Publicó en este hilo su trabajo, merece la pena recorrerlo.
- Tiene otro repositorio, Home Assistant Configuration muy interesante.
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”
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…
Aparece ya en Configuration > Devices & Services > Integrations. Entro en el device la añado a Lovelace UI.
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 llamoSolaXM
- 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) |
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.
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
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 |
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
Comparación con lo que vemos en un Dashboard Grafana personalizado…