Sofia2 Functional Modules

As depicted in the picture, FEEP Enablement IoT Platform Sofia2 (aka Sofia2) is supporting different flows of information (Social Media Flow, ioT Flow and Big Data Flow) by use of the modules included in the platform. These different information flows are described in the diagram, showing:

· From the data sources of information (left side of the diagram).

· To the visualization and publication of data (right side of the diagram).

· Going through different stages such as ingestion, process, storage and analysis.

 

Seguir leyendo “Sofia2 Functional Modules”

Sofia2 Functional Modules

Componentes AWS IoT

AWS IoT es una Plataforma IoT Cloud, donde los dispositivos (redes de sensores, motores, coche conectado, planta, wearables, …) pueden conectarse fácilmente a la nube y a otros dispositivos.

La conexión a los dispositivos IoT se puede hacer vía MQTT y REST.

Los componentes de AWS IoT son:

Things:

Las Things en AWS IoT representan un Virtual Device, y pueden ser dispositivos de cualquier tipo, incluyendo objetos físicos, dispositivos conectados, aplicaciones,…

Las Things se representan por:

· Thing Name: nombre único para identificarl

· Thing Attributes: características de la thing

· Thin Shadows: representa el estado actual del dispositivo.

Rules Engine

Recolecta los datos enviados a la Cloud y realiza acciones en base a los datos recolectados, permite rutear la información a endpoints AWS como Amazon DynamoDB, AWS Lambda, Amazon S3, Amazon SNS,…

Las acciones se expresan en un lenguaje estilo SQL y el ruteado se hace en función del contexto y del contenido del mensaje.

Message Broker

El Message Broker implementa el protocol MQT, puede escalar para soportar billones de conexiones long-lived entre las cosas y las aplicaciones Cloud.

Las Things usan un modelo de tópicos Publish-Subscribe para comunicar con el Broker, pueden publicar su estado y pueden suscribirse a mensajes.

Authentication and Authorization

AWS IoT soporta autenticación y encriptado a nivel de conexión y a nivel de dato.

Soporta autenticación AWS (SigV4) y X.509.

Thing Registry

El Thing Registry asigna las tareas y da una identidad única a cada cosa, además permite traquear los atributos y capacidades de cada cosa.

Componentes AWS IoT

El concepto de EaaS (Enterprise as a Service)

Enterprise as a Service (EaaS) representa la evolución de la empresa, de modo que esta se convierta en un servicio a disposición del usuario, ofreciendo a este algo más de lo que espera de ella y sorprendiéndolo.

Este nuevo modelo de empresa se apoya en una serie de tecnologías como la movilidad, dispositivos inteligentes, Internet of Things, Machine Learning, Big Data, la tecnología de desintermediación Blockchain y el modelo Cloud de prestación de servicios desde la nube y en modo pago por uso.

La siguiente EaaS Wheel resalta las características fundamentales de estos negocios a la vez que muestra una distribución por sectores industriales de los principales paradigmas.

EaaS FACTORS

· Pay per use: según el típico modelo cloud donde no se adquieren licencias sino que se paga por usar servicios TI.

· Smart appliances: es decir dispositivos inteligentes, incluyendo sensores, dispositivos en el hogar o wearables dotados de inteligencia.

· Blockchain smart contracts: es decir, el uso de la tecnología de desintermediación que habilita la moneda virtual bitcoin, pero que tiene muchos más usos permitiendo la interacción entre agentes software de forma confiable.

· Mobile payments: los pagos mediante móvil que ya conocemos pero que pueden reforzarse, por ejemplo, mediante tecnologías biometricas.

· Machine learning: es decir, el aprendizaje, basado en el análisis de datos (Big data) y/o mediante técnicas de inteligencia artificial.

· Real time: es decir, con interacciones instantáneas.

· Microservices: descomponiendo las tradicionales aplicaciones en pequeños servicios reutilizables.

 

EaaS PARADIGMS:

· Smart Home: nuevas posibilidades de servicios en un hogar dotado de dispositivos inteligentes, conectados entre sí y a la nube según las técnicas de Internet de las Cosas, permitiendo la gestión de clima, energía, domótica, seguridad, etc

· Assisted living: soluciones fundamentalmente orientadas a la ayuda a personas mayores y supongo que discapacitados.

· Pattern of Life: Potenciación de estilos de vida saludables, con todo lo que tiene que ver con el deporte, la nutrición y la salud, muy apoyado en wearables y aplicaciones que explotan la información de las personas que aportan estos dispositivos.

· Logistics as a service: Nuevos modelos tecnológicos, operativos y de negocio en la cadena de suministro, desde la aplicación de fundamentos de economía colaborativa hasta la optimización de rutas basado en Big Data.

· Usage based insurance: Nuevos modelos de servicio de aseguramiento, especialmente en lo relativo a los seguros de coche, basados en información inmediata de los patrones de uso del conductor y adaptando tarifas y cobros.

· Embedded banking: con soluciones originales de banking como el pago desde el coche o simplemente la operación de todos los servicios bancarios desde el móvil.

· Connectivity as a Service: ofreciendo por ejemplo servicios de conectividad via WiFi

· Car infotaintment: el coche como catalizador tecnológico donde confluyen tecnologías de información e interacción.

· ‘Car sharing’: Un nuevo modelo de negocio para el desplazamiento basado en el concepto de economía colaborativa o compartida y habilitado por la tecnología.

· ‘Energy as a service’: soluciones tecnológicas avanzadas especialmente en lo relativo a la explotación de las energías renovables y la aplicación del concepto de Smart Grid.

· ‘Demand forecasting’: es decir, predicción de la demanda con base fundamentalmente en técnicas de Big Data.

· ‘Predictive maintenance’: De forma similar a la anterior, utilizar Big Data y Machine Learning para predecir situaciones adversas y realizar un mantenimiento predictivo.

Leer más

El concepto de EaaS (Enterprise as a Service)

¿Cómo subir un fichero a HDFS, crear una tabla HIVE y convertirlo a Ontología?

En este post vamos a explicar los pasos a seguir para a partir de un fichero que tenga en local podré crear una Ontología en la BDH (Base Datos Histórica) de Sofia2.

IMPORTANTE.: la Plataforma ofrece un mecanismo alternativo para la subida de ficheros Excel/CSV a la BDTR (Base Datos Tiempo Real): https://about.sofia2.com/2015/02/16/generando-y-cargando-ontologias-desde-excel/

Subir fichero al área de Staging (HDFS) de la Plataforma

Para el ejemplo usaremos este fichero health_australia.csv en http://sofia2.org/owncloud/public.php?service=files&t=080ef9344fe62e27e9b5ce8b033956dd que contiene datos públicos de la sanidad en Australia.

Comenzaremos subiendo un fichero al HDFS de la plataforma, para eso iré al Panel de Control de Sofia2 y desde la opción Analytics > subir ficheros a Hadoop

Primero lo bajaré a local y lo arrrastraré al área para subir ficheros:

La Consola me dirá la ruta HDFS del fichero (de esta forma podría acceder a él desde los Notebooks por ejemplo):

Tras acabar lo puedo ver:

Convertir fichero en Staging HDFS a Tabla HIVE

El siguiente paso es convertir este fichero en una tabla HIVE, esto puedo hacerlo desde el Notebook Sofia2, pero es más sencillo utilizar el asistente Sofia2 que encontramos en Analytics > Crear Tabla HIVE desde ficher HDFS

En la pantalla puedo ver todos los ficheros que he cargado al área de Staging con mi usuario:

Iré completando la información que me solicitan:

A la tabla la llamaré health_australia

En la primera fila del CSV tengo los nombres de los atributos:

Indico que el delimitador de campos es un ,

Tras esto pincho en que me permite ver los atributos que componen el fichero, un valor, y el tipo de dato.

Desde aquí puedo seleccionar los atributos que quiero incluir en mi tabla HIVE y los tipos de datos.

Para que sea más sencillo cambiaré los nombres de los campos y seleccionaré que el campo real_expenditure_millions es Int dejándolo así:

Ya puedo seleccionar

Que genera esta sentencia CREATE TABLE para HIVE:

Selecciono

Crear Ontología desde Tabla HIVE

Una vez creada la tabla con el botón Crear tabla esta pantalla me lleva a la U de Creación de Ontologías desde Tabla HIVE, también puedo ir desde la opción de menú Analytics>Crear ontología desde tabla HIVE

Seleccionaré la tabla health_australia

Y seleccionando me generará el JSON-Schema de la ontología que representa esta tabla HIVE:

Tras esto iré a la pestaña Parametrización donde podrá configurar parámetros como estos, debo marcar al menos Activa:

Finalmente selecciono el botón que me ha creado la ontología que representa el fichero inicial health_australia.csv que cargamos.

Explotando la Ontología

Y una vez tengo la ontología creada ya podré consultarla desde la Consola BDTR y BDH (herramientas > Consola BDTR y BDH):

Por Ejemplo puedo sacar los Gastos por estado:

select state, sum(spending)/1000 SpendinginBillions from health_autralia group by state

order by SpendinginBillions desc

Que da:

O por categoría:

select category, sum(spending)/1000 SpendinginBillions from health_autralia

group by category

order by SpendinginBillions desc

¿Cómo subir un fichero a HDFS, crear una tabla HIVE y convertirlo a Ontología?

¿Cómo hacer un análisis del sentimiento de Twitter con Sofia2?

En este post vamos a explicar cómo hacer un análisis básico del sentimiento de Twitter.

Para eso usaremos estos 2 componentes de la Plataforma

  • El componente de escucha de Twitter
  • El módulo Notebook

Planificar una escucha en Twitter:

Para hacer esto desde el Panel de Control Sofia2 iré a la opción social media > Búsqueda programada

En mi caso tengo planificada la escucha sobre el hashtag #hadoop durante 2 días.

Los datos se estarán almacenando en una ontología nueva llamada twitter_streaming_find_hadoop

Desde herramientas > Consola BDTR y BDH puedo consultar estos datos:

Que me devuelve datos como estos:

Si hago un puedo ver el número de registros que tengo en la ontología:

Crear un Notebook para explotar la información de la ontología:

A continuación crearé un Notebook que convierta los datos de la ontología a un DataFrame de Spark y accederá a él vía Spark SQL.

1.Primero registro el JAR de Sofia2 que permite acceder al API de Sofia2 desde los Notebooks (ver post) con esta sentencia

NOTA: En el entorno CloudLab puede ser necesario contactar con soporte para registrar este JAR.

2.Tras esto crearé una conexión con la Plataforma con este código (en breve una versión Scala):

En <mi_kp> debo colocar el identificador de un KP, si no tengo ninguno puedo crearlos en la opción de menú kps/apps sofia2 > Mis KPs/APPs

En <mi_token> debo colocar el token asociado a ese KP, puedo obtenerlo desde kps/apps sofia2 > Mis Tokens

Seleccionaré el KP creado y pincharé en

Una vez creado podré verlo en Listado de Tokens (así como la última conexión):

import com.indra.sofia2.ssap.kp.config.MQTTConnectionConfig

import org.fusesource.mqtt.client.QoS

import com.indra.sofia2.ssap.kp.Kp

import com.indra.sofia2.ssap.kp.implementations.KpMQTTClient

import com.indra.sofia2.ssap.kp.SSAPMessageGenerator

import java.util.UUID

import com.indra.sofia2.ssap.ssap.SSAPMessage

import com.indra.sofia2.ssap.ssap.SSAPQueryType

import com.indra.sofia2.ssap.ssap.body.SSAPBodyReturnMessage

//conexion

val config = new MQTTConnectionConfig();

config.setHostSIB("localhost");

config.setPortSIB(1883);

config.setKeepAliveInSeconds(5);

config.setQualityOfService(QoS.AT_LEAST_ONCE);

config.setTimeOutConnectionSIB(5000);

val kpClient = new KpMQTTClient(config);

kpClient.connect();

//JOIN

val msgJoin = SSAPMessageGenerator.getInstance().generateJoinByTokenMessage("<mi_token>",

"KP_lmgracia" + ":" + UUID.randomUUID().toString());

val response = kpClient.send(msgJoin);

val sessionKey = response.getSessionKey();


3.Tras la conexión con la plataforma ya podré hacer una query sobre la ontología en la que estoy almacenando los tuits y convertirla a DataFrame, para eso:

Como veis primero estoy haciendo una query (select * from twitter_streaming_find_hadoop) sobre la ontología twitter_streaming_find_hadoop

Esto me devuelve un mensaje JSON con las instancias de la ontología, y desde ahí creo un SQLContext de Spark SQL y lo registro como una tabla temporal con el mismo nombre que la ontología.

//query

val msgQuery = SSAPMessageGenerator.getInstance().generateQueryMessage(sessionKey, "twitter_streaming_find_hadoop", "select * from twitter_streaming_find_hadoop", SSAPQueryType.valueOf("SQLLIKE"))

val response = kpClient.send(msgQuery)

val responseBody = SSAPBodyReturnMessage.fromJsonToSSAPBodyReturnMessage(response.getBody())

val events = sc.parallelize(responseBody.getData() :: Nil)

val df = sqlContext.read.json(events)

//df.printSchema()

df.registerTempTable("twitter_streaming_find_hadoop")

Puedo también sacar por pantalla el esquema del DataFrame creado con:

Que me da:

4.Ya puedo empezar a hacer las queries con Spark SQL,

desde las más sencillas:

Agrupando:

5.El paso final será hacer un análisis del sentimiento, para eso crearé una función en Spark a la que llamaré desde la sentencia Spark SQL:

Registro la función (como podéis ver es una versión muy básica):

def sentiment(s:String) : String = {

val positive = Array("like", "love", "good", "great", "happy", "cool", "the", "one", "launched", "new", "super", "fast", "the")

val negative = Array("hate", "bad", "stupid", "shit", "awful", "old", "slow", "broken", "stolen", "work", "annoy")

var st = 0;

val words = s.split(" ")

positive.foreach(p =>

words.foreach(w =>

if(p==w) st = st+1

)

)

negative.foreach(p=>

words.foreach(w=>

if(p==w) st = st-1

)

)

if(st>0)

"positive"

else if(st<0)

"negative"

else

"neutral"

}

sqlc.udf.register("sentiment", sentiment _)

6.Finalmente lanzo la query que hace el análisis del sentimiento sobre l texto del tuit:

%sql

SELECT sentiment(Tweet.tweet_text), count(1) FROM twitter_streaming_find_hadoop GROUP BY sentiment(Tweet.tweet_text)
¿Cómo hacer un análisis del sentimiento de Twitter con Sofia2?

Un poco de Beacons: iBeacon vs Eddystone

Los Beacons permiten hacer localización en escenarios donde GPS, WiFi o celdas no lo permiten.

Los Beacons se basan en la tecnología BLE (Bluetooth Low Energy) que sobre Bluetooth ofrece ventajas como:

· No requiere emparejamiento

· Consumo de un 50% a un 99% menos de energía que Bluetooth

· Tiene un coste mucho menor (70%)

· Funciona en un rango de sobre los 50 m, aunque algunos pueden funcionar en rangos mucho mayores (cientos de metros)

La tecnología de Beacons se usa mucho en el ámbito Retail (podéis ver este link: Over 100 use cases and examples for iBeacon technology) donde los beacons entregan contenido en base a la proximidad, para por ejemplo marketing georreferenciado.

Existen numerosos fabricantes (ver link), un fabricante interesante es Estimote, que además de un producto muy interesante con un SDK potente explican de forma sencilla diversos casos de uso:

La tecnología Beacon más implantada y estándar en la actualidad es la de iBeacon creada por Apple,aunque Google introdujo en 2015 otro estándar abierto y multiplataforma: Eddystone.

Eddystone permite comunicar datos sin necesidad de tener una App y además puede transportar información del sensor (temperatura, humedad,…) lo que la hace muy interesante para Internet of Things:

IBeacon Eddystone
-Funciona con iOS y Android

-Transmite un UUID (16 dígitos), Major (4) y Minor (4), y Tx Power (con 3 rangos), nada más

-Apps hacen el tracking de los iBeacons en base a este identificador

-Requieren una App para recibir el UUID y “procesarlo”

-3 tipos de frames: Eddystone-URL, Eddystone-UID y Eddystone-TLM. Un beacon puede transmitir uno o todos los tipos

-Eddystone-URL (Browser Beacon): hace broadcast de una URL, se pone contenido al que todo el mundo puede acceder, por tanto no se necesita una APP pero sí un Beacon Broser

-Eddystone-UID (App Beacon): require una App para recibir el UUID, es similar al iBeacon pero sólo hace broadcast de 16 díitos (10 para NameSpace y 6 para Instance). 2 beacons no pueden tener el mismo UUID

-Eddystone-TLM: hace un bridge entre ambos usos, se usa para transmitir información del sensor desde el beacon, como el estado de la batería, temperatura,…

Un poco de Beacons: iBeacon vs Eddystone