Skip to content

Latest commit

 

History

79 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

solarinv

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.

Un poco de contexto del Proyecto.

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.

1. Lectura de datos del Inversor

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.

2. Arquitectura del sistema, envió de datos entre servidores.

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:

2.1 Servidor lector del inversor (Tipo 01)

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.

2.2 Servidor remoto receptor de datos (Tipo 02)

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:

  1. Se selecciona una de las claves generadas
  2. Esa clave se configura en ambos servidores
  3. En el servidor tipo 01 se especifica el dominio del servidor tipo 02

Esto garantiza una comunicación cifrada y autenticada entre ambos extremos.

2.3 relación con la Interfaz del sistema

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

3.0 Despliegue.

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.

  1. Copia el repositorio en la carpeta que deseas que viva el servidor.

  2. Situándote en la carpeta del proyecto instala las librerías necesarias para el funcionamiento del proyecto ejecutando el comando npm i.

  3. Inicia el servidor con el comando node index.js

  4. 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).

  5. Te pedirá usuario y contraseña, por defecto sera admin y contraseña solarinv.

pantalla de login mostrando el proceso de login

  1. 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.

pantalla principal señalando el icono del engranaje de ajustes en la barra de la izq

  1. 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).

pantalla de Ajustes Un vez ajustado todo podemos darle a guardar.

3.1 Gestión de usuarios.

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 +

parte usuario

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.

parte usuario

4. Pantallas

Actualmente el sistema posee cuatro pantallas de visualización de datos (5 si contamos Ajustes) que permiten monitorear el estado de la planta.

4.1 Pantalla Principal

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.

pantalla principal

4.2 Estadísticas

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 Estadísticas

4.3 Información del Sistema

Pantalla que permitirá visualizar el estado del servidor que hostea solarinv, pantalla solo disponible para usuarios administradores.

pantalla sistema

4.4 Meteorología.

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.

pantalla meteo

About

solarinv, sistema de lectura sencilla de inversores Deye y derivados mediante solarman

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages