Autor Tema: Recuperado: Tutorial: Notificaciones de alarmas mediante SMS [Urko]  (Leído 9011 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado astromet

  • Newbie
  • *
  • Mensajes: 44
  • Tienda online de Meteorología y Astronomía
    • Ver Perfil
    • AstroMet.es
  • Estación: ESCAT0800000008350D
Recuperado: Tutorial: Notificaciones de alarmas mediante SMS [Urko]
« en: 19 de Febrero del 2016, 10:39:22 am »
Objetivo: El objetivo de este tutorial es que el sistema Wview nos advierta mediante un SMS de variables meteorológicas predefinidas por el usuario.

Ha sido pensado para ser aplicado ha modo de alerta cuando la situación meteorológica sea de interés para el usuario. Específicamente mi aplicación es que me advierta cuando quepa la posibilidad de hielo en la carretera. De cualquier manera, las alarmas pueden ser definidas para cualquiera de las variables en las que Wview permite.

Características: Se trata de un simple Script de Python, que siendo invocado por la alarma de Wview,  interactúa con un servicio de envio masivos de SMS. Estos servicios de envio de SMS ofrecen APIs como las que se utilizan en esta aplicación, por lo que, puedes elegir cualquiera de estos servicios.

Coste: 6 céntimos de euro por SMS. El servicio es de prepago, de tal manera que deberemos de cargar dinero en nuestra cuenta.

Limites, fiabilidad y necesidad de redundancia: Sin duda se trata de un sistema débil, sin puntos de redundancia y, desde mi punto de vista, conlleva cierto riesgo si es ofrecido a terceros como "sistema de notificación". Además confía en servicio externos como el servicio de en envio de SMS.

Por lo tanto, NUNCA uses este servicio como única fuente de información. Ten en cuenta que la ausencia de información podría no significar la ausencia de condiciones meteorológicas adversas (Un fallo de comunicación, algún tipo de error de lectura, falta de suministro electrico, etc.). Extrema en todo momento las precauciones. Haz saber esto a todos los que ofrezcas el servicio, y ten en cuenta  que ofrecer este servicio puede resultar legalmente vinculante.

Advertencia Legal: No me hago cargo de ninguno de los usos que hagas de esta información, ni de las consecuencias que esto pueda tener ni para ti ni para terceros. El código aquí mostrado es propiedad de los respectivos autores.

Pasos:

1.- Instaurar un alarma en Wview:

En la pestaña de "Alarms" rellenamos una alarma:

---Type: Pondremos la varible que queremos analizar:
Código:
InsideTemp               
            InsideHumidity                       
            OutsideTemp               
            WindSpeed                 
            TenMinuteAvgWindSpeed     
            WindDirection             
            OutsideHumidity           
            RainRate                 
            StormRain                 
            DayRain                   
            MonthRain                 
            YearRain                 
            TxBatteryStatus           
            ConsoleBatteryVoltage     
            DewPoint                 
            WindChill                 
            HeatIndex                 
            Radiation                 
            UV                       
            ET                       
            ExtraTemp1               
            ExtraTemp2               
            ExtraTemp3               
            SoilTemp1               
            SoilTemp2               
            SoilTemp3               
            SoilTemp4                 
            LeafTemp1               
            LeafTemp2                 
            ExtraHumid1       
            ExtraHumid2               

---Is This an Upper Bound Alarm? Deberemos de marcar esta casilla si nuestra alarma debe de saltar con "valores por encima" de nuestro limite. Por ejemplo, cuando queremos que nos advierta de que la humedad es "mayor que" el 80%

Deberemos dejarla desmarcada si queremos que nos avise con valores por debajo de nuestro límite. Por ejemplo, temperatura menor de 0 grados

---Threshold: Valor límite o valor "gatillo".
   
---Abatement (seconds): Tiempo, expresado en segundos, en los que, tras "saltar" por primera vez la alarma no volverá a saltar. Es decir el tiempo refractario o abatimiento. Evita que la alarma salte consecutivamente en un tiempo.

---Alarm Execution Target: Ruta del código que se ejecutará cuando "salte" la alarma. Este código ha de ser un shell script, que en nuestro caso ejecutará el código Python que la API nos ha suministrado.

2.- Nos registramos en www.clockworksms.com y obtenemos nuestra clave o key. Esta clave nos permite identificarnos en la API.

3.- Modificamos el shell script que se ejecuta cada vez que una alarma se dispara para que ejecute el código en python de la API. No se puede realizar en un solo paso, puesto que la API esta en Python y Wview solo ejecuta shell scripts. De tal manera que el esquema es: Wview—(ejecuta)—>Alarma.sh—(ejecuta)—>Alarma.py

Para ello crearemos un archivo .sh que contenga el siguiente código:
Código:
#!/bin/bash
/ruta/a/mi/lugar/Alarma.py

Para crear un archivo .sh teclearemos lo siguente en el terminal:
Código:
sudo nano
Entraremos en el editor nano, copiamos el código arriba expuesto y salimos guardando con Ctr+x y aunque podéis ponerle el nombre que queráis, deberá de terminar en .sh. Importante recordar donde lo hemos guardado puesto que habrá que escribirlo en la caja "Alarm execution target" de wview. En mi caso por ejemplo, lo guarde en la carpeta "wview" que abrí en el escritorio, de tal manera que en mi "Alarm execution target" pone: /home/pi/wview/alarma.sh

4.- Instalamos las librerías python necesarias:

Código:
sudo apt-get install python-lxml

Código:
sudo apt-get install python-pip

Código:
sudo pip install clockwork


5.- Modificamos el código python de la API a nuestras necesidades. Poco más que sustituir la información de este codigo por la nuestra:

Código:
#!/usr/bin/env python
from clockwork import clockwork
api = clockwork.API('API_KEY_GOES_HERE')
message = clockwork.SMS(to = '441234123456', message = 'This is a test message.')
response = api.send(message)

if response.success:
    print (response.id)
else:
    print (response.error_code)
    print (response.error_description)

Varios SMSs:

Código:
#!/usr/bin/env python
from clockwork import clockwork
api = clockwork.API('API_KEY_GOES_HERE')
message1 = clockwork.SMS(to = '441234123456', message = 'This is a test message 1.')
message2 = clockwork.SMS(to = '441234123457', message = 'This is a test message 2.')
message3 = clockwork.SMS(to = '441234123458', message = 'This is a test message 3.')
response = api.send([message1,message2,message3])

for sms_response in response:
    if sms_response.success:
        print (sms_response.id)
    else:
        print (sms_response.error_code)
        print (sms_response.error_description)

Abrimos un editor nano (sudo nano) y copiamos el código, guardandolo en un lugar conocido como loquesea.py (Importante una vez más el que termine en .py)

7- Damos derechos de ejecución a ambos scripts, en terminal:

Código:
sudo chmod ugo+rwx /ruta/a/mi/lugar/Alarma.sh
sudo chmod ugo+rwx /ruta/a/mi/lugar/Alarma.py

8.- Finalmente activamos la casilla enable alarms de Wview.

9.-Reiniciamos wview

Notas:
—El número de telefono va sin "+" ni 00, solo 34 por delante: 34*********
--Disponeis de 0,50€ de credito gratuito en www.clockworksms.com si registrais vuestro número de teléfono .
« Última modificación: 19 de Febrero del 2016, 11:09:26 am por astromet »
Tienda online de Meteorología y Astronomía: www.astromet.es

Instala la APP para ANDROID de AstroMet: Calucladora Meteorológica y podrás usar el widget con datos de meteoclimátic en tu pantalla de inicio! https://play.google.com/store/apps/details?id=com.meteo.astromet.calculadora