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/mpptmbs
 chmod +x /usr/bin/enviajson
 
Ahora a reiniciamos el router y si tenemos configurado todo bien debe de empezar a enviar datos a la web.
 
Nota: Si usas Windows como sistema operativo puedes descargar PuTTY para conectarte mediante SSH y WinSCP para poder copiar los ficheros al router.

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

  1. Descargamos este fichero y lo descomprimimos
  2. Copiamos el directorio "monitorsolar" a nuestro servidor web
  3. Editamos el fichero de  configuración monitorsolarcfg.php
  4. Creamos las tablas necesarias con el fichero monitorsolar.sql
  5. Actualizamos Wget en el router OpenWRT (opkg update && opkg install wget)
  6. Configuramos el fichero "enviajson" y lo enviamos junto a mpptmbtcp (o mpptmbs) al  directorio "/usr/bin" de nuestro router
  7. Configuramos cron para que ejecute cada minuto /usr/bin/enviajson log y cada quince minutos /usr/bin/enviajson db 
  8. 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
  9. 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
Este método solo sirve para el TSMPPT-60A

     

Tags

comments powered by Disqus