sistema:estaciones_meteo

Instalación y configuración de las estaciones meteorológicas

Es el manual técnico, vea también el manual para usuarios

La arquitectura del software y hardware sigue la propuesta del proyectoSOSPilot adaptado al caso GeOrellana, vea también los repositorios correspondientes en la página de GeOrellana en Github.

La consola de la estación meteorológica está conectado vía USB con una computadora de sistema operativo Debian Linux, el software weewx recibe los datos meteorológicas de la consola cada minuto y las almacena en una base de datos sqlite.

A partir de esta información se generan informes html adaptados al diseño web del geoportal. Estas se envían al servidor GeOrellana cada minuto, para hacerlas accesible en la web. Al que se sobreescriben los informes en el servidor cada minuto no existe serie tempral de las mismas en el servidor.

A parte de la actualización de los informes html se extrae la información de la base de datos de la información meterológica de weewx (en la computadora conectado con USB con la consola de la estación meteorológica), y se carga al sistema de gestión de base de datos espacial PostgreSQL/PostGIS del servidor GeOrellana, dónde se transforman al estándar ecuatoriano.

Así está permitido la publicación de la información meteorológica mediante estándares abiertos ecuatorianos (Catálogo Nacional de Objetos Geográficos) usando los servidos web WMS y WFS.

En una fase futura está previsto transformar la información al modelo de datos del servicio web de observación de sensores (Sensor Observation Service, SOS) de 52North, con el fin de hacer accesible las series temporales de las diferentes mediciones mediante este estándar.

El sistema se compone de los siguientes componentes hardware:

  • Estación meteorológica
    • Hardware: Davis Vantage Pro2 con Sensores para la radiación y UV, equipado con una consola inalambrica con un DataLogger que permite conexión vía USB/Serial
    • Software: Firmware de Davis
  • Raspberry Pi 3 Model B
    • Está conectado con la estación via USB/Serial y con el internet. MicroSD de 16GB.
    • Software: SO Rasbian, weewx y STETL. Lee y guarda los datos de la estación meteorológica y los sincroniza con la base de datos PostGIS de GeOrellana.
  • Servidor GeOrellana:
    • Servidor GeOrellana conectado a internet de banda ancha (geo.gporellana.gob.ec)
    • Software del servidor GeOrellana Apache2, PostgreSQL/PostGIS y Tomcat8/Geoserver. Se crea un esquema en la base de datos de GeOrellana con las tablas de información meteorológica.

El siguiente gráfico detalla la arquitectura del sistema y el software usado por Raspberry Pi 3B.

Pendiente!

Los Data Logger almacenan la información meteorológica en una memoria interna de la estación. Se descarga regularmente para pasarla a la estación.

El GADPO tiene dos estaciones de este tipo.

Resetear el data logger borrando toda la información con weewx, ubicandose en el directorio /home/weewx/bin usando el comando ./wee_device –set-interval=600 y luego ./wee_device –set-interval=60

A parte de resetear el data logger sería necesario borrar la base de datos sqlite de weewx y reiniciar weewx.

El sistema Vantage Pro2 está calibrada mediante la consola. El número de calibración puede ser configurado directamente por la consola (vea manual de davis páginas 26-29), y muchos de los valores mediante el software weewx.

Los siguientes variables pueden ser calibradas, algunos especificando un offset (diferencia entre valor real y valor medido) y otros especificando el valor actual:

  • Temperatura interior y exterior
  • Humedad interior y exterior
  • Presión barométrica actual y altitud del barómetro
  • Dirección del viento, por ejemplo con software el comando wee_device –set-offset=windDir,180 añade 180° de offset para la dirección de viento (cambia norte-sur)
  • Precipitacion (mediante consola)
    • diaria, se actualizarán las estadísticas mensuales y anuales.
    • mensual, no afectará el total de lluvias anuales
    • anual define las lluvias anuales.
  • Evapotranspiración (mediante consola) → similar a precipitación.

Las variables configurados pueden ser reseteados/limpiados mediante la consola.

  • Descargar el firmware correspondiente de la página de soporte de Davis
  • Instalar el firmware utilizando un portatil windows garantizando la alimentación eléctrica en el caso de que se va la luz.
# crear el clon con debian
sudo dd bs=4M if=/dev/mmcblk0 of=calmituyacu.img
# pasar el clone a una tarjeta SD
sudo dd bs=4M if=calmituyacu.img of=/dev/mmcblk0
  • Actualizar sistema sudo apt-get update, sudo apt-get upgrade
  • Actualizar hostname sudo nano /etc/hosts y sudo nano /etc/hostname
  • Configuración weewx:
    • coordenadas y altitud
    • nombre de la estación
    • rsync carpeta de destino
  • Skin GeOrellana
    • Descripción de la ubicación de la estación
    • Foto de la estación
    • Mapa de la estación
  • Configuración stetl:
    • nombre de workers
    • nombre de la tabla de destino (medidas_calmituyacu)
  • PostGIS: Crear tabla de medidas de la estación, por ejemplo usando psql con usuario postgres. Owner es weather, gadpo tiene permisos lectura
    ALTER TABLE meteo.medidads_calmituyacu OWNER weather;
    GRANT SELECT ON meteo.medidas_calmituyacu TO gadpo;
  • Resetear datos
    • parar servicio weewx /etc/init.d/weewx stop
    • Borrar base de datos /home/weewx/archive/weewx.sdb
    • Resetear datos en consola (vea abajo)
  • iniciar cronjob del stetl / sospilot (descomentarlo) DESPUES DE HABER CALIBRADA LA ESTACIÓN Y AVERIGUADO SI LA TABLA DE MEDIDAS EN POSTGIS ESTÁ VACÍA Y SIN MEDIDAS ERRONEAS.

Se realizan los siguientes pasos para instalar y configurar Rasbian, ayuda de todo tipo se encuentra en la documentación de Rasbian:

weewx se instala en la versión 3.5.0 en el dispositivo con el sistema operativo Debian conectado con la estación meteorológica vía cable USB usando setup.py.

En el proceso de instalación se configura weewx y la estación de manera básica, que posteriormente puede ser reconfigurado mediante la herramienta wee_config. La hardware se configura mediante el la herramienta wee_device.

En el archivo de configuración weewx.conf se configura

  • la estación
  • el controlador vantage
  • la subida a comunidades meteo y páginas web como wunderground
  • la generación de reportes y de skins (página web de la estación) y los parámetros de conexión

weewx puede ser iniciado mediante el comando ./bin/weewxd weewx.conf o ejecutado como servicio al arrancar el sistema

El Skin, los archivos de configuración y la salida del comando están en GitHub.

  1. Documentación de Rasbian
    # Se conecta el raspberry con el cable LAN
    # Averiguar el ip del raspberry con el siguiente comando, adaptando el rango de IP a la red local  
    sudo nmap -sn 192.168.0.0/24
     
    # Conectar con ssh usuario pi y contraseña raspberry y el IP correspondiente
    ssh pi@192.168.XXX.XXX 
     
    # Cambiar contraseña del raspberry
    passwd
     
    # Reconfigurar zona horaria especificando 'Americas' y 'Guayaquil'
    sudo dpkg-reconfigure tzdata
     
    # Cambiar puerto ssh del 22 a 2222 en archivo de configuración, reiniciar ssh y volver a ingresar con ssh en puerto 2222
    sudo nano /etc/ssh/sshd_config
    sudo /etc/init.d/ssh restart
     
    # Instalar cortafuegos, permitir acceso al puerto 2222 (ssh) y habilitar cortafuegos
    sudo apt-get update
    sudo apt-get install ufw
    sudo ufw allow 2222
    sudo ufw enable
  2. Habilitar el login al servidor GeOrellana sin contraseña añadiendo la llave pública al archivo /home/gadpo/.ssh/authorized_keys del servidor georellana.
  3. Según archivos de configuración en github de jekannyty
    1. Seleccionar el skin de informes GeOrellana
    2. Configurar rsync para copiar los informes web al servidor GeOrellana (descomentando 'port' en apartado pdf)
  4. Instalar weewx en raspbian usando setyp.py
    # Prerequisitos:
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install python-configobj python-cheetah python-imaging python-serial python-usb ftp python-dev python-pip
    sudo pip install pyephem
     
    # Descargar versión reciente de http://weewx.com/downloads
    wget http://weewx.com/downloads/weewx-3.5.0.tar.gz
     
    # Instalar weewx
    tar xvfz weewx-X.Y.Z.tar.gz
    cd weewx-X.Y.Z
    ./setup.py build
    sudo ./setup.py install
  5. Adaptar el archivo de configuración weewx (skin, rsync)
  6. Instalación in situ
    # Configurar la conexión wifi 
    # Configurar port forwarding en el router

cambiar hostname actualizando 'raspberry' con el nombre de la estación meteorológica con sudo nano /etc/hosts y sudo nano /etc/hostname

Instalar weewx como daemon del sistema

cd /home/weewx
sudo cp util/init.d/weewx.debian /etc/init.d/weewx
sudo chmod +x /etc/init.d/weewx
sudo update-rc.d weewx defaults 98
sudo /etc/init.d/weewx start

Instalar stetl según el manual

sudo apt-get install python-setuptools python-dev libpq-dev libxml2 libxslt1.1 python-lxml gdal-bin python-gdal
sudo easy_install psycopg2 argparse
sudo pip install stetl

Instalar SOSPilot según el ejemplo descrito en la web de SOSPilot

mkdir /opt/georellana
mkdir /opt/georellana/git
mkdir /var/log/sospilot
cd /opt/georellana/git
sudo apt-get install git
git clone https://github.com/Geonovum/sospilot.git
cd sospilot

Optimizar el uso de la swap Para ello editar el archivo sysctl.conf y añadir al final del archivo lo siguiente vm.swappiness=10

sudo gedit /etc/sysctl.conf
vm.swappiness=10

Las mediciones de las estaciones remotas se envían cada minuto vía internet al servidor de la IDE GeOrellana y se publican en el geoportal. El acceso a la información se realiza mediante servicios web estandarizados.

  • Servidor ssh: Copiar certificado ssh de los Raspberry Pi 3 B a GeOrellana para habilitar la conexión ssl sin contraseña
  • PostgreSQL/PostGIS: Crear esquema y tablas para syncronizar con las bases de datos weewx de las estaciones
  • PostgreSQL/PostGIS: Crear vistas para su publicación vía servicio web con GeoServer
  • GeoServer: Publicar las vistas de las estaciones meteorológicas
  • Visor interactivo (App): Instalar (copiar-pegar) visor html/javascript.

weewx almacena la información meteorológica en una base de datos sqlite en la computadora debian conectado con la console de la estación. Para publicar la información vía servicio web se crea un esquema en la base de datos postgis, cuya información se actualiza automaticamente.

Los datos meteorológicos se almacenan en el esquema “meteo” en la base de datos de GeOrellana.

  • Una tabla almacena las estaciones meteorológicas
  • Las medidas de cada estación se almacenan en una tabla separada
  • Una vista con los resultados más recientes de cada estación
CREATE SCHEMA meteo;

La tabla de las estaciones meteorológicas

La tabla de las estaciones meteorológicas con unos atributos mínimas (si necesario se ampliará en un futuro).

CREATE TABLE meteo.estacion_meteo
(
  gid serial NOT NULL,
  geom geometry(MultiPoint,32718),
  fcode CHARACTER VARYING(5) DEFAULT 'JC000'::CHARACTER VARYING,
  nam CHARACTER VARYING(80),
  rem CHARACTER VARYING(5),
  eme CHARACTER VARYING(50),
  msl NUMERIC,
  fis DATE,
  efu CHARACTER VARYING(10),
  txt DATE,
  web CHARACTER VARYING(20),
  CONSTRAINT estacion_meteo_pkey PRIMARY KEY (gid)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE meteo.estacion_meteo
  OWNER TO gadpo;
GRANT ALL ON TABLE meteo.estacion_meteo TO gadpo;
GRANT SELECT ON TABLE meteo.estacion_meteo TO weather;
 
-- Index: meteo.sidx_estacion_meteo_geom
 
-- DROP INDEX meteo.sidx_estacion_meteo_geom;
 
CREATE INDEX sidx_estacion_meteo_geom
  ON meteo.estacion_meteo
  USING gist
  (geom);

La tabla de las medidas de una estación específica

-- Raw measurements table - data from weewx meteo archive or possibly other source
-- all units in US metrics assumed!
 
CREATE TABLE meteo.medidas_calmituyacu
(
  datetime INTEGER NOT NULL,
  rem CHARACTER VARYING(5),
  usunits INTEGER NOT NULL,
  "interval" INTEGER NOT NULL,
  barometer REAL,
  pressure REAL,
  altimeter REAL,
  intemp REAL,
  outtemp REAL,
  inhumidity REAL,
  outhumidity REAL,
  windspeed REAL,
  winddir REAL,
  windgust REAL,
  windgustdir REAL,
  rainrate REAL,
  rain REAL,
  dewpoint REAL,
  windchill REAL,
  heatindex REAL,
  et REAL,
  radiation REAL,
  uv REAL,
  extratemp1 REAL,
  extratemp2 REAL,
  extratemp3 REAL,
  soiltemp1 REAL,
  soiltemp2 REAL,
  soiltemp3 REAL,
  soiltemp4 REAL,
  leaftemp1 REAL,
  leaftemp2 REAL,
  extrahumid1 REAL,
  extrahumid2 REAL,
  soilmoist1 REAL,
  soilmoist2 REAL,
  soilmoist3 REAL,
  soilmoist4 REAL,
  leafwet1 REAL,
  leafwet2 REAL,
  rxcheckpercent REAL,
  txbatterystatus REAL,
  consbatteryvoltage REAL,
  hail REAL,
  hailrate REAL,
  heatingtemp REAL,
  heatingvoltage REAL,
  supplyvoltage REAL,
  referencevoltage REAL,
  windbatterystatus REAL,
  rainbatterystatus REAL,
  outtempbatterystatus REAL,
  intempbatterystatus REAL,
  CONSTRAINT medidas_calmituyacu_pkey PRIMARY KEY (datetime)
)
WITH (
  OIDS=FALSE
);
 
ALTER TABLE meteo.medidas_calmituyacu ALTER COLUMN rem SET DEFAULT 'MO-2';

Y la vista de las medidas de una estación estandarizada según el catálogo de objetos geográficos del ecuador:

CREATE VIEW meteo.m_calmituyacu SELECT
    'JA000'::CHARACTER VARYING(5) AS fcode,
    m.rem,
    m.rain AS pcp,
    round(((outtemp-32.0)*5.0/9.0)::NUMERIC) AS tse,
    m.outhumidity AS hre,
    round(windDir::NUMERIC) AS dvi,
    round((windSpeed*1.61)/3.6::NUMERIC) AS fvi,
    (to_timestamp(m.datetime) AT TIME ZONE 'UTC-5')::TIME AS hor,
    (to_timestamp(m.datetime) AT TIME ZONE 'UTC-5')::DATE AS fec,
    'Gobierno Descentralizado de la Provincia de Orellana'::CHARACTER VARYING(50) AS ist, 
    'Automática'::CHARACTER VARYING(10) AS tie,
    m.barometer*33.8638866667 AS barometro,
    s.geom AS geom
    FROM meteo.medidas_jekannyty AS m
  INNER JOIN meteo.estacion_meteo AS s
      ON m.rem = s.rem ORDER BY datetime DESC;

Los archivos de configuración de stetl están descritos en manual de SOSPilot. Como la tabla de las medidas en la base de datos PostGIS corresponde a la de weewx no hay transformación de los datos entre las bases de datos.

SOSpilot se instala en /opt/georellana/git/sospilot/src/weather/

En options.sh se configura la base de datos, el schema y la tabla de las medidas de la estación correspondiente.

options.sh
#!/bin/sh
#
# Sets host-specific variables
# To add your localhost add options-<your hostname>.sh in this directory
 
# All file locations are relative to the specific ETL subdirs like weewx2pg
. ../options-calmituyacu.sh
 
export pg_options="host=geo.gporellana.gob.ec port=5432 weewx_db=$WEEWX_DB user=$PGUSER password=$PGPASSWORD database=gadpo schema=meteo table=medidas_calmituyacu"
options-calmituyacu.sh
  GNU nano 2.2.6                                                                    Fichero: src/weather/options-jekannyty.sh                                                                                                                                                  
 
#!/bin/sh
#
export WEEWX_DB=/home/weewx/archive/weewx.sdb
 
export PGUSER=USUARIO
export PGPASSWORD=CONTRASEÑA

stetl config: renombrar worker en prograss_query y progress_update a nombre de la estación y aumentar LIMIT

weewx2pg/weewx2pg.cfg
progress_query = SELECT * from etl_progress WHERE worker = 'calmituyacu'
progress_update = UPDATE etl_progress SET last_id = %d, last_time = '%s', last_update = current_timestamp WHERE worker = 'calmituyacu'
table = archive
query = SELECT * from archive WHERE dateTime > %d ORDER BY dateTime LIMIT 1000
 
table = {table}
weewx2pg/pi_etl.sh
# Kill possible (hanging) background SSH tunnel: CAMBIAR NOMBRE DE USUARIO
function killTunnel() {
    pstree -p gadpo | grep 'ssh(' | cut -d'(' -f2 | cut -d')' -f1|xargs kill -9 > /dev/null 2>&1
}
# Setup SSH tunnel to remote host: CAMBIAR NOMBRE USUARIO Y SERVIDOR
ssh -f -L 5432:geo.gporellana.gob.ec:5432 gadpo@gporellana.gob.ec -4 -g -N
cronfile
# Cronfile for ETL processes on Raspberry Pi
 
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SOSPILOT=/opt/georellana/sospilot/git
 
# Run ETL step 1: Raw weewx data from SQLite to remote Postgres DB on VPN
*/4 * * * * cd $SOSPILOT/src/weather/weewx2pg; ./pi-etl.sh >> /var/log/sospilot/weewx2pg.log 2>&1
    • instalar stetl
    • configurar stetl
    • preparar postgis
    • cronjob para stetl
    • permisos Postgresql user weather
  • weewx como daemon del sistema (calmituyacu ya está)
  • visor web
    • actualizar enlaces paginas wiki
  • Skin GeOrellana
    • actualizar enlaces paginas wiki
    • actualizar información de la estación en el skin georellana
  • Crear imagen para raspberry pi 3 B
  • Habilitar acceso vía web (router calmituya
  • Copias de respaldo y recuperación
  • Actualización raspberry:
sudo apt-get update
sudo apt-get upgrade
# revisar comando: sudo pip upgrade
# Pendiente: Actualizar weewx