Crontab: Tareas programadas en Raspberry Pi

Además del Autorun que permite lanzar una tarea en el arranque de la Raspberry PI, también podemos programar tareas con Crontab, que es la lista o fichero de tareas que debe ejecutar el  cron (daemon o demonio de tareas programadas) en Raspbian (Linux Debian) y que hemos necesitado para la configuración de Weather34 – Weewx sobre Raspberry Pi.

Además de invocarlo con el comando “crontab  -e” también se puede invocar al entorno gráfico o GUI con el comando  “gnome-schedule” si previamente lo hemos instalado con “sudo apt-get install gnome-schedule“.

El formato de las órdenes de crontab es sencillo:

  • minutos (0-59)
  • hora(0-23)
  • día del mes(1-31)
  • mes (1-12)
  • dÍa de la semana (0-7 domingo )
  • comando

Crontab admite varios valores separadas por comas “,” y rangos separados por guion “-“ así como el asterisco “*” para incluir todos los valores, y  etiquetas como  “@reboot “ (cada reinicio) , @annually (cada año), @monthly (cada mes),  @weekly (cada semana), @daily (Cada día), @hourly (Cada hora) y # para los comentarios.

Por ejemplo:

# Ejecuta la tarea de Weather34 cada media hora
0,30 * * * * /var/www/html/weather34/cronfiles/stationcron.php

En el ejemplo se ejecuta en los minutos 0 y 30 de cada hora de cada día “stationcron.php”

@reboot python /home/pi/myscript.py &

En este segundo ejemplo en el arranque se ejecuta el programa “myscript.py”, ¡atención! poner & para se ejecute en segundo plano y no pare el inicio de la Raspberry pi

Con “crontab -l” se pueden listar las ordenes programadas en crobtab.

En el directorio /etc/cron.d están los archivos crontab comunes a la instalación (listelos por curiosidad)

 

 

Weather34 con Weewx en Raspberry Pi

Después de arrancar Weewx en una Raspberry Pi 3 model B con Raspbian, pensamos en publicar los resultados en web mediante Weather34, cuyo diseño nos encanta.

PWS with weeWX and weather34

Personal Weather Station with WU connection working at weeWX & weather34

Puede haber otras muchas soluciones, pero a continuación describimos la que hemos implementado y comprobado su funcionamiento:

  • Instalar PHP en Apache: sudo apt-get install php libapache2-mod-php -y
  • Descargar en la Raspberry Pi la versión de Weather34 para Meteobridge, y descomprimir.
  • Copiar los archivos y directorios descomprimidos en el directorio (Que hemos creado previamente) /var/www/html/weather34 (En /var/www/html/weewx tenemos weewx ).
  • En el directorio /etc/apache2/conf.d/ crear el archivo weather34.conf (p.e. tocuh weather34.conf y después invocar el Text Editor que se encuentra en los accesorios de Raspbian ) con el siguiente contenido (Permite que Apache2 localizar los fuentes php de weather34 para servirlos a las peticiones de un navegador, hicimos algo similar en la instalación de weewx):
Alias /weather34 /home/weather34/public_html
<Directory /home/weather34/public_html>
 Options FollowSymlinks
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>
  • Editar el fichero /etc/weewx/skins/Standar/skin.conf e incluir la entrada:
[[[MBrealtime]]]
 template = MBrealtime.tmpl
  • Editar  /etc/weewx/weewx.conf e incluir al final de la entrada [StdReport] 
[[[MBrealtime]]]
 skin = MBrealtime
  • Para probar el correcto funcionamiento de los informes podemos lanzar el proceso que los genera.
pi@raspberrypi:~ $ wee_reports /etc/weewx/weewx.conf
Using configuration file /etc/weewx/weewx.conf
Generating for all time

Con estas definiciones, cuando se ejecuta periodicamente la generación de informes, StdReport de Weewx, se invoca al skin MBrealtime que usa el template del mismo nombre que encuentra en MBrealtime.tmpl.  Cheetah, incluido en weewx a partir de la definición encontrada en MBrealtime.tmpl (En puede descargar una versión beta de http://software.sonotrigger.com/weather34/MBrealtime.tmpl ) generará un fichero con los datos en formato Meteobridge que servirán de entrada de Weather34, cuando se copien al directorio de weather34.

Para la copia del fichero de entrada y la actualización de weather34 hay que incluir dosentradas en el crontab (Se merece otra entrada):

  • /var/www/html/weather34/cronfiles/weewx.sh (Cada 5′, hay que crearlos).
  • /var/www/html/weather34/cronfiles/stationcron.php (Cada 30′, en mbdbfiles).

El scrip de copiar ficheros puede ser algo así (mbridge/MBrealtimeupload.txt  son los valores por defecto de Weather34 Meteobridge):

#!bin/bash
# /var/www/html/weather34/weewx.sh
sudo touch /var/www/html/weather34/mbridge/MBrealtimeupload.txt
sudo cp -afv /var/www/html/weewx/MBrealtime 
/var/www/html/weather34/mbridge/MBrealtimeupload.txt

Ahora solamente falta parar y arrancar Apache y a continuación weeex y poner en el navegador de la raspberry http//localhost/weather34 o en un dispositivo conectado a la red local sustituyendo localhost por la IP asignada a la Raspberry y debería funcionar.

weeex con weather34

Apache en Rapberry PI

Apache es un software que permite crear un servidor HTTP (Permite publicar páginas en formato HTML sobre protocolo http o https visualizables con un navegador o browser como Crome o Firefox; en red local o Internet). Las versiones de Apache 2.x se denominan Apache2

Además de poderlo instalar de forma aislada, existen paquetes como XAMPP que de una forma muy sencilla permite instalarlo sobre los  Sistemas Operativos más populares (Windows, xOS y LINUX)  junto con otro software que lo completan como es una Base de Datos (Maria DB de los desarrolladores de MySQL) y lenguajes de programación ( Perl y PHP).

Apache está disponible en Raspberry Pi al venir incluida en la distribución del Sistema Operativo LINUX Raspbian lo que le permite disponer de un servidor web en su dispositivo, lo que es aprovechado entre otros por software de control de estaciones meteorológicas Weewx, pero puede instalar por ejemplo WordPress

Algunos comandos de terminal de Raspbian útiles cuando se trabaja con Apache (No son necesarios para que funciones weewx):

  • Instalar Apache2 (no necesario con la versión actual de Raspbian): sudo apt-get install apache2 -y
  • Instalar lenguaje PHP en los servidores web, muy usado:
    • sudo apt-get install php libapache2-mod-php -y
  • Arrancar, parar y rearrancar  Apache:
    • sudo /etc/init.d/apache2 start 
    • sudo /etc/init.d/apache2 stop
    • sudo /etc/init.d/apache2 restart
  • Comprobar el estado de Apache (Arrancado, parado, en error, etc.):
    • sudo /etc/init.d/apache2 status
  • Comprobar versión de Apache: aptitude show apache2
  • Comprobar que está arrancado apache como servicio: systemctl status apache2.service
  • Ver mensajes del log de journal de Apache (errores): /etc/init.d $ journalctl -xe
  • Autorizar en el directorio de Apache para publicar nuevas páginas web: sudo chown -R pi /var/www/html

Para probar el funcionamiento de Apache basta con poner en un navegador de un dispositivo que esté en la misma red local la dirección IP de la Raspberry Pi (En el terminal hostname -I o en el dispositivo con Angry IP Scanner u otro scan de direcciones IP) o si está en la propia Raspberry poner localhost o 127.0.0.1 para ver:

Esta página de inicio que se proporciona por defecto con la instalación de Apache2  puede sustituirse por una nuestra y está localizada en /var/www/html/index.html

Si en su Raspberry Pi tiene problemas de memoria puede usar otros servidores web más ligeros que Apache2 como lighttpd o nginx.

Estaciones WH2950 y WH2650 de FOSHK

FOSHK fabrica, entre otras, las estaciones meteorológicas  WH2950 y WH2650  (FOSHK no vende directamente por lo que se comercializan con esos u otros nombres, por distribuidores como  misol y pueden comprarse en tiendas como amazon , aliexpress,  etc.) para las cuales no hemos desarrollado ninguna app, como lo hicimos con HP1000, WS2600 y Meteobridge. Con todo con mucha  frecuencia nos preguntan sobre ello, y de cómo se puede acceder a los datos que recogen y envían a Weather Underground y por esta razón publicamos este post.

En este momento no tenemos previsto hacer ningún desarrollo para estas dos estaciones de FOSHK, pues pensamos que Weewx cubre con crece las necesidades de los usuarios. Con todo, el protocolo de subida de datos (upload) a la red WU – Weather Underground  es público y por ello es posible desarrollar aplicaciones, pero antes de ponerse a tirar de código siga leyendo.

Weewx es un desarrollod e código abierto y gratuito que hace de puente o bridge entre la estación meteorológica que envía via WiFi datos a WU y WU.  Modificando adecuadamente la  URL/dirección web del servidor  WU por la IP del ordenador donde se ejecuta Weewx, pasamos a disponer del control  y de los datos y por ello podemos:

  • Reenviarlos a los servidores de redes como WeatherUnderground, PWSweather.com, CWOP, WOW, AWEKAS, etc.
  • Enviarlos a un servidor con FTP or rsync para su procesamiento o hacerlos públicos con weather34 o similar.
  • Almacenarlos en una base de datos como sqlite o MySQL .
  • Publicarlos en un servidor web al cual podemos acceder con un navegador desde cualquier dispositivo que esté en la red (Ordenador, teléfono móvil, tableta)

Weewx está escrito en Python para ser ejecutado sobre LINUX por lo que puede ejecutarse en cualquier ordenador que no usemos, aunque parece que Raspberry Pi 3 puede ser el candidato ideal.

La diferencia más importante entre meteobridge y weewx es que meteobridge es trasparente o no invasivo, en otras palabras captura los datos sin necesidad de modificar nada, mientras que para weewx si que es necesario dicha modificación al pasar a ser un elemento intermedio disminuyendo la fiabilidad del sistema en su conjunto.

Nosotros no hemos probado todavía weewx, aunque no lo descartamos, pero pinta bien.