Flash Técnico: Conexión con sensores Bluetooth Low Energy (BLE) para soluciones IoT

Vivimos en un mundo en continuo cambio en el que cada vez son más los objetos que se pueden interconectar entre sí.

Sin apenas darnos cuenta, somos muchos los que usamos pulseras inteligentes, sensores que miden la frecuencia cardiaca en nuestras actividades deportivas, etc.

Este tipo de sensores están haciendo posible la transformación industrial hacia lo que será la industria 4.0. Utilizando diferentes sensores podremos tener más mediciones, mayor precisión e incluso anticipar problemas mucho antes de que sucedan.

La mayoría de estos sensores se comunican de forma inalámbrica a través de bluetooth.

En esta ocasión vamos a hablar sobre el funcionamiento de sensores sencillos que usan Bluetooth Low Energy (BLE).

Por poner un ejemplo, para poder conectarnos a un monitor de pulsaciones, BLE utiliza algo similar a un sistema de descubrimiento que permite poder establecer una comunicación con el monitor. Una vez conectados, tenemos a nuestra disposición una serie de servicios – que en ocasiones se pueden agrupar en perfiles- y características. Todo ello basado en identificadores de 16bits.

Los servicios se utilizan para agrupar diferentes características relacionadas. Estas características son los contenedores de los datos de los usuarios y, además, pueden llevar una serie de descriptores.

Este es un gráfico de cómo se pueden agrupar los servicios y características:

Por lo tanto, podríamos decir que en el “perfil” del monitor de pulsaciones disponemos de n servicios. Cada uno de estos servicios tiene un numero n de características. A su vez, dichas características pueden contener descriptores.

La forma de comunicarnos con el monitor de pulsaciones es a través de los diferentes ids (UUID) que tienen las características y los servicios.

De esta forma, es posible suscribirnos a un servicio de notificaciones que se encargará de enviar información.

Podemos probar todo esto con dos comandos en Linux.

Con hcitool podemos ver los dispositivos bluetooth que están a nuestro alcance;

userFoo@computerFoo:~/foo$ sudo hcitool lescan
LE Scan …
11:22:33:44:55:66 (unknown)
11:22:33:44:55:66 Polar OH1 555DDD0F

Como se puede ver tenemos una pulsera Polar OH1 (monitor cardiaco) a la que podemos conectarnos.

Con el comando gattool podremos hacer el resto, para ello usamos -I para el modo interactivo y desde aquí poder introducir los comandos necesarios para poder tener una conversación con nuestra pulsera. Esta conversación es posible mediante la inserción de comandos a través de un terminal.

userFoo@computerFoo:~/foo$ gatttool -b 11:22:33:44:55:66 -I
[11:22:33:44:55:66][LE]>

Con el comando connect, establecerá una comunicación y podremos pasar a ver los diferentes servicios disponibles con comando primary.

[11:22:33:44:55:66][LE]> connect
Attempting to connect to 11:22:33:44:55:66
Connection successful[11:22:33:44:55:66][LE]> primary
attr handle: 0x0001, end grp handle: 0x0009 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000a, end grp handle: 0x000d uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x000e, end grp handle: 0x001c uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x001d, end grp handle: 0x0025 uuid: 0000feee-0000-1000-8000-00805f9b34fb
attr handle: 0x0026, end grp handle: 0x0029 uuid: 0000180d-0000-1000-8000-00805f9b34fb
attr handle: 0x002a, end grp handle: 0x002d uuid: 0000180f-0000-1000-8000-00805f9b34fb
attr handle: 0x002e, end grp handle: 0x0036 uuid: fb005c20-02e7-f387-1cad-8acd2d8df0c8
attr handle: 0x0037, end grp handle: 0x003c uuid: 6217ff4b-fb31-1140-ad5a-a45545d7ecf3
attr handle: 0x003d, end grp handle: 0xffff uuid: fb005c80-02e7-f387-1cad-8acd2d8df0c8

En este cuadro de código, vemos el listado de servicios. Como explicaba anteriormente, cada uno de estos servicios se compone de una a n caracteristicas.

Nos interesa el servicio cuyo UUID comienza por 180D, que es el encargado del monitor cardiaco, podemos ver una lista completa de caracteristicas en las especificaciones bluetooth: https://www.bluetooth.com/specifications/gatt/characteristics/

Para poder ver las características de los servicios, debemos fijarnos en los handles attr y end de tal forma que el comando char-desc nos dará información sobre las características que nos interesan.

[11:22:33:44:55:66][LE]> char-desc 0x0026 0x0029
handle: 0x0026, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0027, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0028, uuid: 00002a37-0000-1000-8000-00805f9b34fb
handle: 0x0029, uuid: 00002902-0000-1000-8000-00805f9b34fb

La característica 2a37 es la que nos da la información del monitor. Para poder realizar dichas lecturas, es necesario pasarle los parámetros que indican la forma en la queremos recibir esta información. Es aquí donde entran en juego los descriptores. Necesitamos conocer el handle del descriptor al que le pasaremos los parámetros para que la característica 2a37 sepa como enviar los datos. En la siguiente web: https://www.bluetooth.com/specifications/gatt/descriptors/

Encontramos información sobre los descriptores y donde encontraremos nuestro descriptor que es el 2902. Así que la forma de pasar parámetros y esperar una respuesta es usando el comando char-write-req sobre el descriptor 2902 como vemos a continuación:

[11:22:33:44:55:66][LE]> char-write-req 0x0029 0100
Characteristic value was written successfully
Notification handle = 0x0028 value: 00 00
Notification handle = 0x0028 value: 00 00
Notification handle = 0x0028 value: 00 00

De esta forma, cada segundo nos retorna dos bytes hexadecimales en nuestra notificación, uno con la frecuencia cardiaca y otro que indica el valor del sensor “contacto con la piel”, este sensor no está disponible en nuestro monitor por lo que siempre será 00.

Para dejar de recibir las notificaciones, debemos escribir 0000 en los parámetros de entrada y para salir del terminal usamos el comando quit.

[11:22:33:44:55:66][LE]> char-write-req 0x0029 0000
Notification handle = 0x0028 value: 00 00
Characteristic value was written successfully
[11:22:33:44:55:66][LE]> quit

Por último, es posible escribir todo esto en una sola línea en Linux sin necesidad de programar nada. Sería una forma de hacer pruebas de forma muy rápida y sencilla al que podríamos crear un pequeño script en Phyton u otro lenguaje de programación que nos sirva de frontend para este comando.

userFoo@computerFoo:~/foo$ gatttool -b 11:22:33:44:55:66 –char-write-req -a 0x0029 -n 0100 –listen
Characteristic value was written successfully
Notification handle = 0x0028 value: 00 00
Notification handle = 0x0028 value: 00 00
Notification handle = 0x0028 value: 00 00
Notification handle = 0x0028 value: 00 00

De esta forma ya tendríamos un punto de entrada en el manejo de nuestros sensores BLE.

Jose Navero consultor en ilitia technologies

ilitia colabora en el Hackthon “Azure lets you sleep” con Microsoft y Fundación 29

Como parte de nuestra iniciativa I+D+S,  ilitia ha colaborado con Foundation 29 y Microsoft en el Hackathon “Azure lets you sleep“. El objetivo de este año ha sido conseguir un mínimo producto viable de una solución de bajo coste para la toma de constantes de pacientes con crisis epilépticas.

Esta solución ayudará a que los cuidadores de pacientes puedan dormir mejor, monitorizando el pulso cardíaco y lanzado avisos según determinadas circunstancias.

En el hackaton hemos tomado como punto de partida un desarrollo IoT de ilitia, en el cual desde una Raspberri Pi se recogen datos de una banda cardíaca Polar Heart Rate Band y se envían a Azure vía IoT Hub con Stream Analytics y Azure Anomaly Dectector . Una vez en Azure, se puede analizar el pulso cardíaco del paciente a lo largo del tiempo desde Power BI  y  parametrizar el algoritmo de Anomaly detection tratando de ofrecer avisos a los cuidadores.

En el hackaton hemos integrado la solución de ilitia con la plataforma Health29, para que cualquier familia pueda habilitar una pequeña unidad de seguimiento en su hogar comprando una banda, una rasperry y haciendo uso del código disponible en github y del portal Health29.

 

IoT y conectividad Bluetooth en “IT & Dragons 2019”

El pasado día sabádo 8 de junio tuvo lugar la primera edición de “IT & Dragons” un evento de lo más entretenido para los desarrolladores aficionados a los juegos de rol.

En el Open Space, nuestro compañero Jose Navero fue elegido para dar una charla sobre conectividad Bluetooth entre dispositivos IoT.

 

Charla sobre IoT de ilitia en el Global Azure Bootcamp

El pasado sábado día 27 de abril, Vladlen Silin impartió una charla sobre IoT  “IOT EDGE – INTEGRANDO SERES VIVOS” en el marco del Global Azure Bootcamp en Madrid.

Nuestro compañero Vlad, experto en IoT, ofreció una ponencia sobre algunas posibilidades de las soluciones de Microsoft Azure para IoT.

Por un lado introdujo el nuevo servicio (en preview el próximo mayo) de Azure IoT Hub device streams que posibilita la realización de streaming desde el dispositivo hasta nuestros servicios de control a través de la nube. Vlad nos enseñó una demo de cómo se puede montar el servicio y qué posibidades tiene.

En segundo lugar mostró una demo de telemetría (¡¡¡¿con un gallinero?!!!) basado en IoT Edge y los servicios de Azure.

Todo el código está disponible aquí: https://sivla.visualstudio.com/GlobalAzureBootcamp2019/_git/GlobalAzureBootcamp2019

¡Gracias Vlad!

 

[Post Técnico] Formulación en C#

Francisco Refoyo Andrés, nos habla en este artículo de medium acerca de cómo utilizar la formulación en C#

Toda aplicación que hace uso intensivo de datos numéricos es susceptible de necesitar realizar cálculos configurados por el usuario.

Ante esta situación y, si no es suficiente con operaciones precalculadas, se necesitará de un mecanismo que permita al usuario indicar que operaciones desea que el sistema realice para satisfacer sus necesidades

objetivo y premisas

Definición de una estructura de objetos en C# que establezca un marco de trabajo para calcular el resultado de una fórmula en base a unos parámetros de entrada y las operaciones que se hayan definido

Puedes leer este interesante post aquí.

El código completo que referencia el artículo está disponible en GitHub.

Flash técnico: Cambios del nuevo Microsoft Bot Framework SDK V4

Si estás utilizando servicios de Microsoft Bot Framework con la versión V3 puede que tengas que adaptarte a los nuevos cambios de la versión V4.

Un pequeño vistazo de lo que debemos de tener en cuenta:

  • El nuevo orquestador y middeleware proponen una manera más organizada para gestionar los turnos, estados y contextos de conversación.
  • La versión V4 propone una nueva forma de gestionar los Dialogs para implementar contextos de conversación y prompts a la que es necesario adaptarse, además de conocer los nuevos tipos como Component o Waterfall que estructuran mejor una conversación guiada. Será necesario tener claro el uso de cada Dialog y identificarlos en nuestro contexto para poder usarlos.
  • La implementación de los flujos de conversación se ha reorganizado: con BeginDialog, ReplaceDialog y EndDialog podremos organizar la carga, sustitución o finalización de nuestro contexto conversacional.
  • La gestión e integración de servicios como LUIS o QnA Maker está mejor centralizada y es más flexible que en versiones anteriores, pudiendo usar más fácilmente varias instancias en nuestra lógica.

Si tienes más dudas contacta con nosotros en comercial@ilitia.com o consulta la documentación oficial de Microsoft.

Albert Guerra y Vlad Silin nos hablan de AI e IoT en el Commit 2018

El próximo día 23 a las 18:00 en el track 9, los consultores de ilitia, Alberto Guerra y Vlad Silin ofrecerán en Commit 2018  su charla “Entrenamiento mejorado en la nube. IoT y AI en acción.”

En los últimos años hemos visto como el ya popular Internet de las Cosas y la Inteligencia Artificial han ido ganando presencia en nuestras vidas. Gracias a Microsoft Azure ambas tecnologías se vuelven cada vez más accesibles y fáciles para el desarrollador. Con Azure IoT podemos aprovechar el potencial de monitorizar a un cliente de un gimnasio durante su entrenamiento y con Azure Cognitive Services podemos combinar todos estos datos con las emociones que éste nos pueda otorgar después y ofrecer en base a los resultados un tratamiento personalizado.

 

El código fuente de la demo está publicado aquí: https://github.com/albertbatdeveloper/CloudTraining

Ilitia colabora con Sociescuela para prevenir el acoso escolar

Ilitia Technologies y Buleboo han diseñado y desarrollado la nueva web de formación del programa Sociescuela con la intención de dotar de una serie de recursos y de materiales educativos para utilizar en el aula que permitan fortalecer la convivencia escolar del centro educativo.

El programa Sociescuela, en marcha desde el año 2005 y desarrollado  por la Facultad de Psicología de la Universidad Complutense de Madrid y el departamento de Psiquiatría Infantil del Hospital Gregorio Marañon , ya ha sido utilizado por más de 200 centros en todo el país y los estudios preliminares demuestran su utilidad consiguiendo una reducción significativa del acoso escolar en cada centro.

Qué es Sociescuela

Sociescuela es un proyecto cuyo principal objetivo ha sido la elaboración de una herramienta informática para prevenir el acoso escolar y dinamizar socialmente los grupos de clase en centros de educación primaria y secundaria.

Cómo funciona
La herramienta consiste en un cuestionario online de aplicación colectiva con el que se genera un mapa social del aula, y se indican al centro una serie de pautas de intervención para dinamizar el grupo de clase y modificar la situación de los alumnos con más vulnerabilidad.

Intervención
La herramienta genera un informe en el que se indica una serie de pautas sobre cómo dinamizar las relaciones sociales del aula. Entre las estrategias propuestas destaca cómo realizar un procedimiento de ayuda entre iguales, con la colaboración de amigos y compañeros del alumno excluido. Esta estrategia se plantea como una de las más efectivas para modificar una situación de acoso escolar.

El objetivo principal es que se sienta respaldado y con apoyo dentro del grupo, creando una red social que se mantenga en el tiempo. Para conseguir la colaboración de estos estudiantes elegidos, el tutor y el orientador del centro hablarán con ellos, recalcándoles que un compañero lo está pasando mal y que recurren a ellos porque son alumnos fuertes, respetados y que caen muy bien en clase.

Una buena iniciativa a la que nos hemos querido sumar dentro de nuestro programa I+D+S

ilitia participa en el “Challenge Diagnosis” en el INGEMM – Hospital Universitario La Paz.

El pasado julio ilitia Technologies colaboró con el reto “Objetivo Diagnóstico” desarrollado en el Instituto de Genética Médica y Molecular (INGEMM) del Hospital Universitario La Paz de Madrid.

A lo largo de 30 días un equipo multidisciplinario de voluntarios que incluye a genetistas del Hospital Universitario de la Paz, desarrolladores de Microsoft e ilitia Technologies y miembros de la Fundación 29 – promotores de la iniciativa- llevaron a cabo diferentes iniciativas para trata de alcanzar un gran reto: diagnosticar a 10 pacientes que padecen una enfermedad rara a través de una solución de IA.

En el ámbito tecnológico las iniciativas abarcaron un amplio abanico de servicios de inteligencia artificial de Microsoft Azure: Bot Framework, servicios de traducción y comprensión textual (LUIS), así como otros servicios de almacenamiento de datos estructurados (Azure Sql Server) y no estructurados (Azure Data Factory).

El intenso de mes de trabajo obtuvo resultados limitados en cuanto a obtener diagnósticos completo pero sí abrió nuevos caminos en la normalización de información clínica, en el uso de asistentes para ayudar a recoger síntomas y genes y, sobre todo, para el descubrimiento de nuevas aproximaciones para el diagnóstico basadas en cruce de la información genética del paciente con las bases de datos clínicas existentes.

Alberto Guerra y Jon Burguera fueron los miembros de ilitia que colaboraron en esta bonita iniciativa

[Post MSDN] Gestionando grupos de personas con Azure Face API

Este mes de julio, MSDN España ha publicado un post sobre Azure Face API de Alberto Guerra, consultor IA en Ilitia Technologies.

En este artículo, te explica cómo gestionar los límites que posee Face API a la hora de agregar personas al servicio.

Face Api es un conjunto de herramientas pertenecientes a los servicios cognitivos de Microsoft Azure ideales para poder identificar a las distintas personas dentro de un grupo. Podemos reconocer, a fecha de hoy, hasta un máximo de 1000 personas por grupo para la subscripción gratuita  y hasta 10.000 para la subscripción estándar[i].

Con los límites actuales podremos añadir de manera sencilla a un volumen suficiente de personas como para cubrir la mayoría de casos que se nos presenten, pero… ¿y si necesitamos superar estos límites?

Face API proporciona las herramientas para poder superar los límites actuales del servicio, simplemente necesitaremos un poco más de lógica en nuestra aplicación para distribuir las distintas personas en nuevos grupos. Si antes el límite que teníamos era de 1.000 personas por grupo para la subscripción gratuita (10.000 en el caso de la subscripción estándar), ahora podremos multiplicar ese techo hasta por 1.000.000, 1.000 usuarios en 1.000 grupos disponibles por servicio, si sabemos gestionar adecuadamente ambos recursos. La ganancia es indudable y conseguirlo es una tarea relativamente sencilla.

Puedes leer este interesante post aquí.