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.

Weewx en una Raspberry Pi

Weewx es un software libre desarrollado por Tom Keffer en 2008-2009 para controlar un gran número de modelos de estación meteorológica personales (PWS) como las 10xx, 20xx, 30xx de FOSHK.

Weewx permite, entre otras funciones,  enviar la información meteorológica a redes como: Weather Underground WUAwekas, CWOP, PWSweather, WOW; almacenarla en una base de datos SQLite o MySQL, publicarla en Intenet de forma gráfica, enviarla a un servidor con FTP o RSYNC.

Además mediante la instalación del driver interceptor de MWALL Weewx puede capturar la información meteorológica de prácticamente cualquier PWS que la reenvie a WU como  hacen, entre otras, las PWS HP1000, WS2600, WH2950 y la WH2650  de FOSHK. La captura de la información la puede hacer:

  • de forma directa o invasiva: configurando en la PWS la dirección IP de Weewx como si fuera la del  servidor de WU y configurando el servidor WU en Weewx para que a continuación la reenvie a WU (invasiva)
  • de forma indirecta o no invasiva: configurando weewx de forma que esnife el tráfico IP dirigido a WU

Lo interesante, en este momento, es que es posible instalar y ejecutar el software Weewx en una Raspberry Pi modelos 2 y 3 con Rasbian (Pequeño tamaño y muy económicas) pues ambos modelos disponen de WIFI y de conexión Ethernet, si bien el modelo 3 posibilita la conexión de un display con lo que se puede convertir a la Raspberry Pi en un monitor de la PSW.

Para instalar Weewx (V 3.8.0) en la Raspberry PI debemos ejecutar en el terminal:

  • sudo apt-get update
  • sudo apt-get install weewx

Para instalar el driver interceptor:

  • sudo wget -O weewx-interceptor.zip https://github.com/matthewwall/weewx-interceptor/archive/master.zip
  • sudo wee_extension –install weewx-interceptor.zip
  • sudo wee_config –reconfigure –driver=user.interceptor –no-prompt

Además hay que editar y modificar weewx

[Interceptor]
 driver = user.interceptor
 device_type = observer

Para el modo sniffer del interceptor hay que instalar suplementariamente:

  • sudo apt-get install python-libpcap

Debiendo editar y modificar weewx

[Interceptor]
 driver = user.interceptor
 device_type = observer
 mode = sniff
 iface = eth0
 pcap_filter = src 192.168.1.100 and dst port 80

Los comandos de terminal para gestionar weewx son:

pi@raspberrypi:~ $ sudo /etc/init.d/weewx
Usage: /etc/init.d/weewx {start|stop|status|restart|reload}

Por lo que para arrancar weewx hay que hacer:

  • sudo /etc/init.d/weewx start

Weewx para publciar la información meteorológica utiliza  Apache que viene preinstalado con Raspbian y para comprobar el funcionamiento correcto de weex podemos::

  • En un navegador poner file:///var/www/html/weewx/index.html
  • Si está arrancado Apache http://localhost/weewx

Desinstalar weeWX pero mantiene ficheros y datos

  • sudo apt-get remove weewx

Desistala weeWX borra configuración pero guarda datos:

  • sudo apt-get purge weewx

Borrar datos

  • sudo rm -r /var/lib/weewx
  • sudo rm -r /var/www/html/weewx

Complementos:

  • Utilidades:  http://www.weewx.com/docs/utilities.htm
  • Consideraciones prácticas:  https://github.com/weewx/weewx/wiki/Raspberry-Pi

Para intalar el software wview (Una alternativa, más limitada y menos usada que weeex) en Raspberry PI, mirar VK3BQ

 

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.

BLE en Raspberry Pi

Como hemos visto en una entrada anterior la Raspberry Pi 3 dispone de BLE.

Para comenzar a trabajar con BLE en Raspberry Pi debemos comprobar que está disponible, mediante el comando hciconfig:

pi@raspberrypi:~ $ hciconfig
hci0: Type: Primary Bus: UART
 BD Address: XX:XX:XX:XX:XX:XX ACL MTU: 1021:8 SCO MTU: 64:1
 UP RUNNING 
 RX bytes:822 acl:0 sco:0 events:57 errors:0
 TX bytes:4231 acl:0 sco:0 commands:57 errors:0

En caso de que no esté arrancado hay que activarlo

sudo hciconfig hci0 up

Una utilidad que proporciona más información es blescan

pi@raspberrypi:~ $ sudo blescan
Scanning for devices...
Device (new): xx:xx:xx:xx:xx:xx (random), -91 dBm (not connectable)
Manufacturer: <060001092000c7ce0663439d1e190d97c0a7827dfe0cb225c5cad35fee>

Después de comprobar que BLE está activado podemos arrancar el modo central u observador que escucha en las direcciones más usuales y nos devuelve las direcciones MAC (Se han cambiado el resultado de las MAC, son identificaciones únicas a nivel globalpor XX:XX:XX:XX:XX:XX):

pi@raspberrypi:~ $ sudo hcitool lescan
LE Scan ...
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX Flex
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX MTLocomotive

Una vez descubiertos los dispositivos BLE que están emitiendo anuncios o “beacons” podemos con la utilidad gatttool establecer una conexión:

pi@raspberrypi:~ $ gatttool -I -b XX:XX:XX:XX:XX:XX
[XX:XX:XX:XX:XX:XX][LE]>
[XX:XX:XX:XX:XX:XX][LE]> connect
Attempting to connect to XX:XX:XX:XX:XX:XX 
Error: connect error: Connection refused (111)

En este caso Flex se rechaza la conexión pues precisa una autentificación, los parámetros completos de gatttool son:

[XX:XX:XX:XX:XX:XX][LE]> help
help Show this help
exit Exit interactive mode
quit Exit interactive mode
connect [address [address type]] Connect to a remote device
disconnect Disconnect from a remote device
primary [UUID] Primary Service Discovery
included [start hnd [end hnd]] Find Included Services
characteristics [start hnd [end hnd [UUID]]] Characteristics Discovery
char-desc [start hnd] [end hnd] Characteristics Descriptor Discovery
char-read-hnd <handle> Characteristics Value/Descriptor Read by handle
char-read-uuid <UUID> [start hnd] [end hnd] Characteristics Value/Descriptor Read by UUID
char-write-req <handle> <new value> Characteristic Value Write (Write Request)
char-write-cmd <handle> <new value> Characteristic Value Write (No response)
sec-level [low | medium | high] Set security level. Default: low
mtu <value> Exchange MTU for GATT/ATT

Otra utilidad es bluetoothctl:

pi@raspberrypi:~ $ bluetoothctl
 [NEW] Controller XX:XX:XX:XX:XX:XX raspberrypi [default]
 [NEW] Device XX:XX:XX:XX:XX:XX Flex
 [NEW] Device XX:XX:XX:XX:XX:XX MTLocomotive

Los comandos de bluetoolhctl los podemos listar con help:

[bluetooth]# help
 Available commands:
 list List available controllers
 show [ctrl] Controller information
 select Select default controller
 devices List available devices
 paired-devices List paired devices
 power <on/off> Set controller power
 pairable <on/off> Set controller pairable mode
 discoverable <on/off> Set controller discoverable mode
 agent <on/off/capability> Enable/disable agent with given capability
 default-agent Set agent as the default one
 advertise <on/off/type> Enable/disable advertising with given type
 set-advertise-uuids [uuid1 uuid2 ...] Set advertise uuids
 set-advertise-service [uuid][data=[xx xx ...] Set advertise service data
 set-advertise-manufacturer [id][data=[xx xx ...] Set advertise manufacturer data
 set-advertise-tx-power <on/off> Enable/disable TX power to be advertised
 set-scan-filter-uuids [uuid1 uuid2 ...] Set scan filter uuids
 set-scan-filter-rssi [rssi] Set scan filter rssi, and clears pathloss
 set-scan-filter-pathloss [pathloss] Set scan filter pathloss, and clears rssi
 set-scan-filter-transport [transport] Set scan filter transport
 set-scan-filter-clear Clears discovery filter.
 scan <on/off> Scan for devices
 info [dev] Device information
 pair [dev] Pair with device
 trust [dev] Trust device
 untrust [dev] Untrust device
 block [dev] Block device
 unblock [dev] Unblock device
 remove Remove device
 connect Connect device
 disconnect [dev] Disconnect device
 list-attributes [dev] List attributes
 set-alias Set device alias
 select-attribute Select attribute
 attribute-info [attribute] Select attribute
 read Read attribute value
 write <data=[xx xx ...]> Write attribute value
 notify <on/off> Notify attribute value
 register-profile Register profile to connect
 unregister-profile Unregister profile
 version Display version
 quit Quit program

Con esta utilidad podemos encender y apagar BLE:

[bluetooth]# power off
 Changing power off succeeded
 [CHG] Controller XX:XX:XX:XX:XX:XX Powered: no
 [CHG] Controller XX:XX:XX:XX:XX:XX Discovering: no
 [CHG] Controller XX:XX:XX:XX:XX:XX Class: 0x000000
 [bluetooth]# power on
 [CHG] Controller XX:XX:XX:XX:XX:XX Class: 0x6c0000
 Changing power on succeeded
 [CHG] Controller XX:XX:XX:XX:XX:XX Powered: yes
 

Como con gatttool se puede arrancar el modo scan con scan on o ver la versión

[bluetooth]# version
 Version 5.43
 info XX:XX:XX:XX:XX:XX

Y obtener información de un dispositivo en concreto

 [bluetooth]# info XX:XX:XX:XX:XX:XX
 Device XX:XX:XX:XX:XX:XX
 Name: MTLocomotive
 Alias: MTLocomotive
 Paired: no
 Trusted: no
 Blocked: no
 Connected: no
 LegacyPairing: no
 UUID: Vendor specific (XXXXXXXX-4a75-4c14-9ede-c8a5fb84f77b)
 
 [bluetooth]# info XX:XX:XX:XX:XX:XX
 Device XX:XX:XX:XX:XX:XX
 Name: Flex
 Alias: Flex
 Paired: no
 Trusted: no
 Blocked: no
 Connected: no
 LegacyPairing: no
 UUID: Vendor specific (XXXXXXXX-6e7d-4601-bda2-bffaa68956ba)
 ServiceData Key: 0000180a-0000-1000-8000-00805f9b34fb
 ServiceData Value: 0x07
 ServiceData Value: 0x04

Parear

[bluetooth]# pair XX:XX:XX:XX:XX:XX
 Attempting to pair with XX:XX:XX:XX:XX:XX
 [CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
 [CHG] Device XX:XX:XX:XX:XX:XX UUIDs: 00001530-1212-efde-1523-785feabcd123
 [CHG] Device XX:XX:XX:XX:XX:XX UUIDs: 00001800-0000-1000-8000-00805f9b34fb
 [CHG] Device XX:XX:XX:XX:XX:XX UUIDs: 00001801-0000-1000-8000-00805f9b34fb
 [CHG] Device XX:XX:XX:XX:XX:XX UUIDs: 98241523-4a75-4c14-9ede-c8a5fb84f77b
 [CHG] Device XX:XX:XX:XX:XX:XX ServicesResolved: yes
 [CHG] Device XX:XX:XX:XX:XX:XX Paired: yes
 [NEW] Primary Service
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service0008
 00001801-0000-1000-8000-00805f9b34fb
 Generic Attribute Profile
 [NEW] Characteristic
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service0008/char0009
 00002a05-0000-1000-8000-00805f9b34fb
 Service Changed
 [NEW] Descriptor
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service0008/char0009/desc000b
 00002902-0000-1000-8000-00805f9b34fb
 Client Characteristic Configuration
 [NEW] Primary Service
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service000c
 98241523-4a75-4c14-9ede-c8a5fb84f77b
 Vendor specific
 [NEW] Characteristic
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service000c/char000d
 98241525-4a75-4c14-9ede-c8a5fb84f77b
 Vendor specific
 [NEW] Characteristic
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service000c/char000f
 98241524-4a75-4c14-9ede-c8a5fb84f77b
 Vendor specific
 [NEW] Descriptor
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service000c/char000f/desc0011
 00002902-0000-1000-8000-00805f9b34fb
 Client Characteristic Configuration
 [NEW] Primary Service
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service0012
 00001530-1212-efde-1523-785feabcd123
 Vendor specific
 [NEW] Characteristic
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service0012/char0013
 00001532-1212-efde-1523-785feabcd123
 Vendor specific
 [NEW] Characteristic
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service0012/char0015
 00001531-1212-efde-1523-785feabcd123
 Vendor specific
 [NEW] Descriptor
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service0012/char0015/desc0017
 00002902-0000-1000-8000-00805f9b34fb
 Client Characteristic Configuration
 [NEW] Characteristic
 /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/service0012/char0018
 00001534-1212-efde-1523-785feabcd123
 Vendor specific
 Pairing successful
 [CHG] Device XX:XX:XX:XX:XX:XX Trusted: yes

En una próxima entrada veremos como programar funciones BLE en Phyton