Caso ejemplo Sofia2 IoT con Android : ¡Tú la llevas!

En este post se presentará un sencillo ejemplo de integración IoT sobre la plataforma Sofia2. Este ejemplo fue presentado el día 17 de Febrero en una charla de presentación y de formación de conceptos básicos de la plataforma IoT Sofia2 a los alumnos del Máster en Software de Sistemas Distribuidos y Empotrados, en el grupo de investigación SYST de la Universidad Politécnica de Madrid (UPM).

El escenario simulará un escenario típico de IoT con un par de elementos sencillos:

  • Smartphone Android (versión igual o superior a 4.4)
  • Dispositivo beacon con BLE (Bluetooth Low Energy)
  • Usuario en plataforma Sofia2.com, con nivel de ROL_COLABORADOR

 

example-overview.png

 

Para el demostrador se obtendrán datos periódicamente de los sensores de acelerómetro del terminal móvil y de la geo-posición del mismo. Además se realizará un escaneo sobre Bluetooth Low Energy (BLE) que cuando detecte la cercanía del Beacon seleccionado, dispare un evento asíncrono. En Sofia2, se recogerán los datos en una Ontología, representando acto seguido los valores periódicos en un Dashboard, y evaluando la ocurrencia del evento asíncrono en un Script que notificará de manera instantánea la detección del evento en el e-mail del usuario: ¡Tú la llevas!

Creación de usuario, ontología y ThinKp

 

Se necesitará un usuario con rol colaborador en sofia2.com. Una vez que se disponga de un usuario con ROL_COLABORADOR se deberá definir un modelo de datos, en nuestro ejemplo lo realizaremos creando una Ontología. En este post del taller sobre los dispositivos IOT en Sofia2 le guiará a través de estos pasos.

A continuación mostramos un ejemplo de la instancia de la Ontologia que deberemos crear, donde se muestran los parámetros que debemos crear (se ha de modificar “youtOntoloy” por el nombre de la Ontología que se ha creado anteriormente).

{“yourOntology”:{ “geometry”:{“type”:”Point”, “coordinates”:[9,19.3]},”email”:”string”,”accelX”:28.6,”accelY”:28.6,”accelZ”:28.6,”event”:true}}

Una vez que el modelo de datos está configurado, es hora de configurar el ThinKP para poder insertar datos desde el dispositivo. Este post explica cómo crear un ThinKP y cómo obtener su token para usarlo en tu aplicación móvil.

Creación Script

 

Mediante un script de Groovy generaremos la regla de detección del beacon con una acción asociada. Este post le guiará en el proceso del desarrollo de un script en Groovy basado en ontología en Sofia2.

La regla que utilizamos para el ejemplo solo necesita que se codifique la sección IF y THEN. Estos son los fragmentos de código que debe introducir.

 

IF:

def apiutils = new APIUtils();

def event=apiutils.getValueJson(ontology, “yourOntology.event”);

if (event==”true”) {
return true;
} else {
return false;
}

El apartado de IF es el primer punto de ejecución de nuestra regla, que se ejecutará siempre que se realiza una inserción de una instancia en nuestra Ontlogía creada anteriormente y asociada a la regla script. En el ejemplo se muestra la recuperación  del campo ‘event’ de la instancia de la ontología  que se acaba de insertar, la cual lanza la regla asociada. Una vez evaluado, si es verdadera,  la sección THEN será ejecutada. De lo contrario, se ejecutará la sección ELSE (esta vez está vacía, por lo que no se producirá ninguna acción adicional).

THEN:

def apiutils = new APIUtils();
def apimail = new APIMail();
String [] to = [apiutils.getValueJson(ontology,”yourOntology.email”)];
def subject=”Sofia2 Message”;
def msg=”¡Tú la llevas!”;

apimail.sendMail(to, subject, msg);

La parte de código en la sección del THEN, (que se ejecutará si el parámetro ‘event’ procesado en el IF es ‘true’), recuperamos el campo ‘email’ de nuestra instancia y posteriormente se realiza un envío de correo utilizando el APIMail con un mensaje  no tan agradable…¡Tú la llevas!

Creación de Gadgets y dashboard

 

Para la visualización de datos, vamos a componer dos gadgets e integrarlos en un panel de control. Una vez más es recomendable revisar el post que nos explica como crear gadgets y dashboard en Sofia2. El caso propuesto en este post es bastante similar al caso del post en el enlace, por lo que será bastante sencillo reproducirlo. El enfoque para el ejemplo es componer dos gadgets con datos en tiempo real, uno para el acelerómetro (‘accelX’, ‘accelY’ y ‘accelZ’ campos de yourOntology) y otro para la ubicación (campo ‘geometry’ de yourOntology).

El dashboard a crear debería ser parecido al siguiente resultado.

dashboard

API manager – creación API

Por último, vamos a crear una API REST para interactuar con los datos que vamos insertando en la Ontología creada anteriormente. Esto puede resultar útil al desarrollar un cliente web que consuma esos datos. En este post podrás seguir una guía sobre cómo implementar una llamada GET mediante el API Manager de Sofia2.
Como ejemplo, puede crear una operación de consulta GET. A continuación, puede probar su API haciendo clic en la pestaña “Mis suscripciones”, buscando y encontrando su API, haciendo clic en Test & Doc y editando los campos. Se debería terminar con una configuración como la mostrada en la siguiente imagen:

getquery

El encabezado API-Key se puede encontrar en la pestaña ‘Mi APIKey’. Posteriormente lanzando esta petición GET, nos devolvería una instancia insertada en nuestra Ontología.

get-return

¡Comprobemos nuestra configuración!

Se puede ir realizando estas comprobaciones mientras se realiza cada paso de los anteriores definidos. Dentro del menú de Ontologías, hay una sección llamada “Gestión Crud de instancias”. Allí puede encontrar su Ontología y posteriormente editar una instancia “ficticia” personalizada de la misma. Esta instancia se insertará en Sofia2 como una real y activará todos los eventos.
Siempre que te sientas cómodo con tu configuración de Sofia2, pasa a la sección de Android.

Información general sobre la aplicación para Android

El código de la aplicación de Android se encuentra en la cuenta Github de Sofia2 en este repositorio. Siéntase con toda la libertad de descargar, modificar o sugerir mejoras!.

La aplicación convierte su smartphone en una puerta de enlace IoT. Aprovechando los sensores incorporados del smartphone, el GPS y la conectividad inalámbrica (tanto para escaneo BLE como conexión a Internet), y la configuración realiza sirve como un estupendo  ejemplo  integrado para muchas aplicaciones IoT.
Al alejarnos del código específico de Android, nos centraremos en cómo conectar e interactuar con Sofia2 desde el nuestro smartphone. Para simplificar, este ejemplo utiliza REST para conectarse a Sofia2. Todos los métodos de conexión se encuentran en la clase SIBProxy.java, aunque usaremos principalmente el método send (usando la popular y fácil clase HttpURLConnection) en este ejemplo:

send-method

TrackingService.java Es un servicio de Android el cual lleva la carga relacionada con la búsqueda de sensores, el encuadre y la conexión con Sofia2. Una vez más, optamos por construir el marco de una manera muy sencilla usando una concatenación de String:

ontology-frame

Para la parte de conexión, simplemente llamamos al método send, pasando los argumentos de nuestro ThinKP creado anteriormente:

kp-credentials

Con esta configuración será suficiente para insertar datos en Sofia2. Si todo está correcto podrá observar  el mismo comportamiento realizado anteriormente con el Crud de instancias,  pero ahora con datos reales!

¡Tú la llevas!

En el repositorio de  Github puede encontrar una copia de la .APK. Después de la instalación puede requerir algunos permisos adicionales de su dispositivo ya que estamos utilizando el posicionamiento geográfico + BLE escaneo.
Después de editar los ajustes (no olvides cambiar el correo electrónico al que se estableció en el script), debería funcionar todo de manera correcta, en el siguiente video mostramos el funcionamiento completo, como nuestro Dashboard mostrando datos en tiempo real de los sensores. Al detectar el beacon, se observa como recibimos un correo electrónico y nos aparece una notificación del mismo.

 

Estamos ansiosos por saber que lo hiciste realidad. Por favor, envíanos un comentario si lograste hacerlo. Siéntete libre de contribuir en el repositorio de Github ya que el ejemplo se encuentra en una etapa inicial y será mejorado de manera sustancial. ¿tienes alguna idea o te gustaría como profundizar más? , no dudes en dejar tu comentario 🙂

Caso ejemplo Sofia2 IoT con Android : ¡Tú la llevas!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s