Solarinv es un Proyecto que surge de la necesidad de poder monitorear los datos de un inversor solar híbrido en una instalación aislada de las siguientes marcas:
- Deye
- Turbo Energy
- sunsynk
De manera sencilla y accesible para usuarios que no tienen experiencia en home automation o no quieren lidiar con la tarea de extraer los datos y enviarlos a servicios como home assistant o apple home kit.
El proyecto surge de la necesidad de encontrar un reemplazo sencillo para las apps de Turbo Energy que hasta ahora tradicionalmente servían para monitorear estos inversores, debido a que la app original y su reemplazo se volvieron End of Life (EOL) muy prematuro perdí la incapacidad de monitorear mi planta.
Aunque el Pincho de solarman que trae incluido el inversor tiene compatibilidad con su propia aplicación según han reportado usuarios tiene comportamientos no ideales para mi uso.
Si bien podría haberlo intentado decidí que no era buena opción, prefería una solución hosteada en local donde no perdiera el control de mis datos y no exponer esencialmente mi casa a las decisiones unilaterales de una empresa.
La pregunta es... ¿Por que no Home Assistant? ¡buena pregunta! home assistant funciona muy bien pero yo necesito una solución pequeña que pueda exponer a Internet para monitorear en remoto con mi set up starlink donde no tengo una ip publica fija (se puede solicitar pero se sale de precio para mi uso).
Otro motivo es el usuario principal de la app, mis padres, ellos son los que mas uso hacen de la instalación solar y necesitan una manera sencilla de poder ver el estado de la planta y planear acorde sobre todo siendo una instalación aislada, home assistant era sobredimensionado y no tan amigable para lo que esencialmente va a ser una vista rápida.
Por ultimo lo que yo buscaba con este proyecto es no solo aprender mas sobre el IOT aplicado en NodeJS si no establecer una base solida que luego pueda escalar o moldear a mis necesidades completas.
El sistema emplea el protocolo Solarman V5 que viene incluido con los pinchos data logger de SolarMan que adaptan el puerto RS-232 para enviar datos al servidor SolarMan.
Este protocolo es un wrapper que expone sobre TCP/IP la interfaz RTU del protocolo Modbus, para el funcionamiento del protocolo es necesario el código serial que esta referenciado en la etiqueta junto con la contraseña de gestión.
Para que el proyecto funcione es necesario que el OS que tenga la app de nodejs ejecutándose este en la misma red que este pincho y que se le haya asignado desde la configuración del mismo una IP estática.
NodeJS leerá los datos mediante sockets y los recopilara en su BD de sqlite3.
La aplicación solo ha implementado el funcionamiento de lectura de Holding Registers, para mas información sobre el resto del protocolo recomiendo revisar la excelente explicación hecha por el equipo de pysolarmanv5 y a la excelente explicación del protocolo modbus realizada por domótica solar a los que les doy mil gracias.
El sistema esta preparado para operar al 100% en local sin necesidad de exponer a internet el inversor pero a menudo se desea exponer estos datos al internet y no es posible realizar port forwarding ni obtener una IP estática (por ejemplo mi caso empleando starlink).
Para solucionar todos estos problemas Solarinv esta preparado para dos tipos de servidor de datos:
Este es el modo de funcionamiento por defecto tras la primera instalación del sistema.
El servidor de tipo 01 actúa como lector principal del inversor. Su función es:
- Configurar la conexión directa con el inversor
- Recopilar datos automáticamente cada 2 minutos y 30 segundos
- Procesar la información localmente
Opcionalmente, este servidor puede configurarse para enviar los datos a un servidor remoto de tipo 02. La comunicación se realiza mediante:
- Protocolo HTTPS
- Autenticación mediante JSON Web Token (JWT)
- Identificación del servidor remoto por dominio público
Su principal función es copiar y enviar datos a un servidor que puede ser accesible fácilmente desde internet.
El servidor de tipo 02 funciona exclusivamente como receptor de datos.
Su única función es recibir información proveniente de un único servidor de tipo 01. La vinculación entre ambos servidores se realiza mediante:
- IP pública o dominio expuesto a internet
- Autenticación JWT
- Uso de una clave secreta compartida
Durante la instalación de ambos servidores se generan automáticamente claves secretas. Para enlazarlos:
- Se selecciona una de las claves generadas
- Esa clave se configura en ambos servidores
- En el servidor tipo 01 se especifica el dominio del servidor tipo 02
Esto garantiza una comunicación cifrada y autenticada entre ambos extremos.
La interfaz está diseñada para siempre mostrar datos recibidos ya sea del inversor o del servidor tipo 01 para que el usuario pueda conocer el estado de la planta solar ademas de los datos del sistema
El despliegue es relativamente simple, para poder utilizar la aplicación es necesario que el servidor posea una versión de NodeJS igual o superior a la 24.11.0.
-
Copia el repositorio en la carpeta que deseas que viva el servidor.
-
Situándote en la carpeta del proyecto instala las librerías necesarias para el funcionamiento del proyecto ejecutando el comando
npm i. -
Inicia el servidor con el comando
node index.js -
Accede a la app desde un navegador con http://localhost:5000 (en caso de estar accediendo desde un dispositivo distinto al conectado (por ejemplo una raspberry pi) cambia localhost por la ip de la maquina).
-
Te pedirá usuario y contraseña, por defecto sera admin y contraseña solarinv.
- Una vez dentro de la app veremos la pantalla principal, de momento no tendremos datos por lo que nos iremos a la opción de ajustes en el menu izquierdo.
- En esta pantalla podremos configurar todo lo necesario para el servidor, Procederé a describir que hace cada opción:
-
Puerto Express: Puerto en el que la aplicación web de nodejs (Express) esta desplegada, si desea cambiarlo deberá reiniciar la app para que surja efecto.
-
Tipo de Servidor: El tipo de servidor que operara, referirse al punto 2 del readme para mas información.
-
Clave Secreta: Clave secreta que se genera por defecto al instalar el Servidor, esta se puede editar y deberá de ser replicada en el servidor de tipo 02 en caso de que nos interese enviar datos a este (tranquilos esta clave no se repite nunca y no se usa en ningún entorno de producción).
-
Ruta del servidor remoto, en esta deberemos indicar o la ip remota o el dominio del servidor de tipo 02 que va a recibir nuestros datos (por ejemplo 216.58.209.78 o solarinv.alvsorca.cloud), este campo solo funcionara en el modo 01.
-
Ip Solarman: esta es la Ip del pincho que he mencionado en el punto 1, esta deberá de ser estática, este campo solo funcionara en el modo 01.
-
Puerto Solarman: Puerto que expone el pincho de solarman por defecto, si no lo hemos cambiado en su configuración no deberemos tocarlo, este campo solo funcionara en el modo 01.
-
Slave ID Solarman: Id del esclavo Modbus expone el pincho de solarman por defecto, si no lo hemos cambiado en su configuración no deberemos tocarlo, este campo solo funcionara en el modo 01.
-
Serial Pincho: Serial especificado en la etiqueta del pincho de solarman, lo podrás encontrar en la etiqueta pegada en el pincho.
-
Latitud y Longitud Meteo: El sistema posee una pantalla para ver el clima de los próximos 7 dias, puedes dejarlo por defecto indicar las coordenadas donde tu planta esta instalada para obtener datos cada 10 minutos (los datos provienen de open meteo por lo que no tienen por que ser 100% exactos).
-
Un vez ajustado todo podemos darle a guardar.
El sistema siempre obligara a tener un usuario llamado admin pero podemos crear tantos usuarios como queramos, para ello tenemos a nuestra disposición el botón de +
El usuario podrá ser configurado con el Rol normal que solo le mostrara las tres pantallas de estadísticas o super rol que les permitirá ver estadísticas del sistema y la pantalla de ajustes.
Adicionalmente recomiendo altamente cambiar la contraseña del usuario admin si planeas exponerlo a internet ya sea el servidor 01 o el servidor 02.
Actualmente el sistema posee cuatro pantallas de visualización de datos (5 si contamos Ajustes) que permiten monitorear el estado de la planta.
En esta pantalla podremos monitorear los datos del dia y el estado actual de la planta, entre la información disponible se encuentra cuando se tomo la ultima lectura y un overall de lo producido hoy.
DISCLAIMER: El sensor de temperatura ambiente si bien se encuentra documentado en los manuales oficiales de Deye algunos modelos derivados dejaron de incorporarlo por lo que es posible que marque un valor a 0, en un futuro TODO sera reemplazado por la temperatura obtenida geográficamente con las coordenadas explicadas en el punto 3.
Similar a la pantalla actual esta nos permitirá monitorear la planta pero dando mas detalles técnicos sobre el funcionamiento de la planta incluido la opción de visualizar volares como voltajes, amperaje y temperaturas
Podremos filtrar rangos de tiempo y exportarlos en formato JSON para un analisis exhaustivo si asi lo deseas.
la pantalla esta preparada para operar con una batería auxiliar con un modulo JKBMS sin embargo esta parte sigue en desarrollo por lo que es un placeHolder actualmente, ¡pronto habrá mas detalles de esto!.
Pantalla que permitirá visualizar el estado del servidor que hostea solarinv, pantalla solo disponible para usuarios administradores.
Pantalla que nos permitirá visualizar los datos del clima de los próximos 7 Dias mediante las coordenadas explicadas en el punto 3, la pantalla se ha centrado en poder visualizar los datos de nubosidad y las horas de sol diarias, la sección de temperatura es especialmente importante para la vida de las baterías y del inversor.







