Programando BLE en RPi con Python

Es posible escribir programas para RPi (Raspberry Pi) que utilicen BLE, por ejemplo con Python.

Para ello debemos instalar previamente las librerias Bluez (5.48) y Bluepy

Para instalar Bluepy se puede hacer de forma automática

$ sudo apt-get install python3-pip libglib2.0-dev
$ sudo pip3 install bluepy

o de forma manual

$ sudo apt-get install git build-essential libglib2.0-dev
$ git clone https://github.com/IanHarvey/bluepy.git
$ cd bluepy
$ python setup.py build
$ sudo python setup.py install

Se puede probar la correcta instalación mediante el comando python btle.py XX:XX:XX:XX:XX:XX

Para instalar Bluez

sudo apt-get update 
sudo apt-get install libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libical-dev libreadline-dev libudev-dev libusb-dev make
mkdir -p work/bluepy
cd work/bluepy
wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.4.tar.xz
xz -d bluez-5.4.tar.xz
tar xvf bluez-5.4.tar
cd bluez-5.4
./configure --disable-systemd
make
sudo make install

Para probar

pi@raspberrypi:~/bluepy_src/bluepy/bluepy $ lsusb
Bus 001 Device 004: ID 145f:01d3 Trust 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

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.