Monitor solar: Instalación y código fuente
Tras unos meses en funcionamiento finalmente me encuentro en condiciones de publicar el código fuente del monitor solar así como de explicar su puesta en marcha. Si te resulta interesante, tienes alguna sugerencia o tienes problemas con la puesta en marcha deja un comentario e intentaré echarte una mano.
Requisitos mínimos:
- Dispositivo con OpenWRT o un PC con Linux conectado al regulador TriStar MPPT (RS232 o Ethernet)
- Servidor web con PHP y MySQL
Descarga del software
Puedes descargar el software desde aquí: monitorsolar-src-v1.0.tar.gz
Paso a detallar lo que nos encontramos al descomprimir. monitorsolar-src/
mpptmb.c -> Código fuente escrito en C del programa de comunicación con el regulador
enviajson -> Script bash que ejecuta mpptmb*, crea una cadena JSON con la salida de este y la envía mediante POST
openwrt/
mpptmbtcp -> Binario para obtener los datos del regulador mediante ethernet, compilado para MIPS big-endian
mpptmbs-> Binario para obtener los datos del regulador mediante puerto serie, compilado para MIPS big-endian
x86/
mpptmbtcp -> Binario para obtener los datos del regulador mediante ethernet, compilado para x86
mpptmbs-> Binario para obtener los datos del regulador mediante puerto serie, compilado para x86
monitorsolar/
flot/ -> Directorio con la librería que genera las gráficas
css/ -> Hojas de estilo del monitor solar y de JQueryUI
js/ -> Contiene JQuery y JQueryUI
mpptregistro.php -> Script PHP que se encarga de actualizar la base de datos y el fichero de log, recibe los datos mediante POST
monitorjson.php -> Script PHP que se encarga de las consultas a la base de datos y enviarnos la respuesta en el formato adecuado
monitorsolarcfg.php -> Fichero de configuración
monitorsolar.html -> Codigo html y Javascript que se nos muestra los datos en el navegador
monitorsolar.sql -> Consulta de creación de tablas
Preparar el servidor web
Descomprimimos el fichero que hemos descargado y copiamos el directorio "monitorsolar" a nuestro servidor web. Después editamos el fichero "monitorsolarcfg.php" según los parámetros de conexión a la base de datos y elegimos un token. Ahora tenemos que preparar la base de datos. Dentro del directorio que hemos copiado tenemos una fichero con el nombre "monitorsolar.sql" el cual contiene las consultas de creación de las tablas que necesitamos. Podemos cargar el fichero desde la pestaña "Import/Importar" de phpMyAdmin o mediante la linea de comandos:
mysql -u USUARIO -p -h localhost NOMBREDB < monitorsolar.sql
Esto debe crear tres tablas en la base de datos: solar_detalle, solar_resumen y solar_mes. Ahora ya podemos acceder a nuestro monitor aunque lo verás todo vacío ya que no hemos registrado ningún dato. http://tuservidorweb/monitorsolar/monitorsolar.html
Preparar la obtención de datos del regulador
OpenWRT
Considero que la mejor opción es reutilizar un viejo router que permita la carga de OpenWRT como firmware, en mi caso utilizo un router Comtrend del que estoy mas que satisfecho tras nueve meses de funcionamiento ininterrumpido. Además el consumo energético de un router es ridículo si lo comparamos con el de un PC. Para saber como instalar el firmware puedes consultar este articulo. Para conectarte a Internet con el router puedes buscar en Google, existe bastante documentación, yo me conecto vía wifi a otro router que es el que tiene salida a Internet. Primero tenemos que actualizar Wget ya que la versión que se lleva el firmware está limitada y no podemos enviar datos mediante POST. Nos conectamos por ssh como root al router:
ssh root@192.168.1.1 #Cambia la IP por la que tengas configurada opkg update opkg install wget
Si no disponemos conexión a Internet en el router podemos buscar el paquete en cuestión copiarlo e instalarlo con el comando "opkg install paquete.ipk". Una vez hecho esto cargamos el software encargado de comunicarse con el MPPT y de enviar los datos al servidor. Os he preparado dos binarios ya compilados para MIPS(big-endian) uno para comunicarse a traves de Ethernet(TSMPPT-60A y 45A) y otro para comunicarse mediante puerto de serie(TSMPPT-45A). Antes de enviar nada al router aprovechamos y editamos el script bash "enviajson" y lo configuramos según nuestras necesidades, es sencillo, el fichero contiene las indicaciones necesarias. Desde el directorio donde hemos descomprimido el software hacemos lo siguiente:
scp openwrt/mpptmbtcp root@192.168.1.1:/usr/bin #Si vas a usar la comunicación mediante el puerto serie envia el fichero "mpptmbs" scp enviajson root@192.168.1.1:/usr/bin
Si quieres probar que existe comunicación con el regulador puedes ejecutar el comando mpptmbtcp IP PUERTO. Esto debe imprimir en pantalla unos 90 números, si no son todo ceros y en las tres primeras lineas aparecen siempre los mismos números(normalmente 180,0 y 80) cada vez que lo ejecutas, existe comunicación. También puedes comparar la salida con la documentación ModBus de Morningstar y ver si te cuadran los números. Ya tenemos casi todo, ahora solo nos queda configurar cron para que ejecute el script bash que envía todos los datos al servidor para lo que debemos conectarnos por ssh como root y editar la configuración: ssh root@192.168.1.1 crontab -e #Esto abre el editor vi con la configuración de cron Añadimos las dos lineas del final, puedes cambiar cada cuanto quieres que se creen los registros, pregunta por cron a tu buscador favorito.SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/root
# run-parts
#Actualiza cada minuto el fichero mpptlogjson en el servidor
*/1 * * * * /usr/bin/enviajson log
#Cada 15 minutos anyade un registro en la base de datos
0,15,30,45 * * * * /usr/bin/enviajson db
Nos aseguramos de que los ficheros tienen los permisos de ejecución:
chmod +x /usr/bin/mpptmbtcp o chmod +x /usr/bin/mpptmbschmod +x /usr/bin/enviajson
Desde PC con Linux
Básicamente, la configuración es la misma que en el punto anterior salvo que no tenemos que actualizar ningún software. También debemos de compilar nuestro binario según podemos ver aqui para comunicarnos con el router aunque deberemos utilizar el codigo fuente que viene en el fichero que hemos descargado. También he preparado los binarios para x86 que se encuentran en el directorio x86.
Resumen
- Descargamos este fichero y lo descomprimimos
- Copiamos el directorio "monitorsolar" a nuestro servidor web
- Editamos el fichero de configuración monitorsolarcfg.php
- Creamos las tablas necesarias con el fichero monitorsolar.sql
- Actualizamos Wget en el router OpenWRT (opkg update && opkg install wget)
- Configuramos el fichero "enviajson" y lo enviamos junto a mpptmbtcp (o mpptmbs) al directorio "/usr/bin" de nuestro router
- Configuramos cron para que ejecute cada minuto /usr/bin/enviajson log y cada quince minutos /usr/bin/enviajson db
- Por si los hemos perdido por el camino, volvemos a dar permisos de ejecución (chmod +x) a todos los ficheros que hemos copiado a /usr/bin
- Reiniciamos router
Sin router ni PC con Linux
También tenemos la posibilidad de conectar el regulador a Internet y obtener los datos directamente desde el servidor. Los pasos a seguir serian exactamente los mismos que con el router con OpenWRT salvo que tendremos que usar los binarios para x86. Para poder acceder al regulador desde fuera de nuestra red local tenemos que abrir el puerto que corresponda(normalmente 502) en nuestro router ADSL o Cablemodem. No es la combinación que mas me gusta por dos principales motivos:
- Regulador directamente expuesto a Internet
- Tenemos que estar pendientes de si nos cambia la IP de nuestra conexión