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.

Control de circuitos eléctricos con Raspberry Pi – II : Python

En una entrada anterior hemos visto cómo un programa escrito en Python puede controlar dispositivos conectados a la GPIO de la Raspberry Pi (OUT) como era un  LED, pero que se puede generalizar a otros dispositivos de bajo voltaje como un motor de un juguete o de mayor voltaje mediante un relé. Ahora vamos a ver cómo un dispositivo conectado a la GIO de la Raspberry Pi, como es un pulsador, puede controlar un programa Python (IN).

La entrada es flotante, es decir se detecta una variación relativa del  voltaje de entrada por el conector definido como entrada.

Generación de señal de entrada (Diagrama de eLinux)

En nuestro ejemplo hemos usado como entrada el conector 24 (pin 18) y los +3,3V lo tomamos del pin 1

# led_balancin_2.py 
#
# Cuando se pulsa parpadean las luces hasta que se
# vuelve a pulsar
try:
 import RPi.GPIO as GPIO
 print("GPIO.RPI_INFO = " + str(GPIO.RPI_INFO))
 print("GPIO.VERSION = " + str(GPIO.VERSION))
except RuntimeError:
 print("Error importando RPi.GPIO")
 
try: 
 import time
except RuntimeError:
 print("Error importando RPi.GPIO")
 
# GPIO: Ajuste de los nombres de GPIO: BOARD ó BCM
GPIO.setmode(GPIO.BCM)
# GPIO: Ajuste mensajes de warning a OFF
# (avisos de otros programas trabajando con GPIO)
GPIO.setwarnings(False)

# GPIO: Definicion de canales de IN y OUT
Lista_canales_out = [18,23] 
Lista_canales_in = [24] 
GPIO.setup(Lista_canales_out,GPIO.OUT)
GPIO.setup(Lista_canales_in,GPIO.IN)
GPIO.output(Lista_canales_out,(GPIO.LOW,GPIO.LOW))
pulso = 0 
while pulso < 2:
 if (GPIO.input(24)):
 print("Boton!")
 pulso += 1
 else:
 time.sleep(1)
 if pulso == 1:
 print ("Ni")
 GPIO.output(Lista_canales_out,(GPIO.HIGH,GPIO.LOW))
 time.sleep(1)
 print ("No")
 GPIO.output(Lista_canales_out,(GPIO.LOW,GPIO.HIGH))
 time.sleep(1)
 else:
 time.sleep(1)
GPIO.cleanup()

El siguiente reto, la siguiente entrada, cómo usar un dispositivo con BLE (Bluetooth de baja energia) para controlar un programa Python

Raspberry PI 3 model B y Raspbian: evaluando los lenguajes

Es un buen momento para recapitular el estado en el que nos encontramos.

El sistema con el que contamos lo componen:

  • La Raspberry Pi  cuyo modelo podemos comprobar con el comando de terminal cat /proc/cpuinfo y después buscar el modelo concreto en  esta lista de modelos y fabricantes. (Por ejemplo Hardware : BCM2835 corresponde a la  Pi 3 Model B 1GB a02082 Sony, UK).
  • El Sistema Operativo Raspbian iy para saber la versión con la que contamos podemos usar el comando de terminal uname -a  (Por ejemplo Linux raspberrypi 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux) o el comando cat /etc/os-release (Por ejemplo PRETTY_NAME=”Raspbian GNU/Linux 9 (stretch)” )

Los lenguajes de programación que hasta el momento hemos probado su correcto funcionamiento con el clásico programa “Hola mundo” y después su trabajo con el módulo GPIO para controlar un sencillo LED son los siguientes:

Software Version IDE Version Ejecución GPIO
Java 1.8.0_65 Bluej 3.1.7b Terminal Completo
Python 3.5.3 Integrado 3.5.3 Integrada Completo
Scratch 2 Integrado 2 Integrada Limitado
LUA 5.1.5 No Terminal Incompleta

Para futuros ejemplos en Raspberry Pi  usaré Python y para enseñar y disfrutar con los más pequeños Scratch.