DNS-SD: Discovery dinámico de Servicios IoT con Java

IoT es un campo en el que el escalado es fundamental, y una Plataforma IoT debe poder crecer para comenzar con unos cientos de dispositivos y llegar a un despliegue de cientos de miles o millones de dispositivos.

Y cuando hablamos de esos volúmenes la necesidad de que los dispositivos en lugar de tener una configuración predeterminada de acceso a los servicios y plataformas puedan hacer un discovery de estos se hace fundamental.

Seguro que en este punto alguno habéis rememorado el mundo de los registros UDDI (hasta a los registros UDDI universales me ha recordado a mí :))…

Pues bien, el estándar DNS-SD DNS-Based Service Discovery está pensado justo para simplificar el descubrimiento de servicios, vía el estándar se establece un mecanismo que permite a los clientes descubrir una lista de instancias del servicio buscado a través de queries DNS.

El funcionamiento es este:

iot-discovery-serviceses una librería Java que implementa este estándar DNS-SD y permite buscar PTRS y Servicios dentro de una zona DNS. La forma de usarlo es esta:

Internamente la librería usa Domain Name System Security Extensions (DNSSec) que asegura la autenticidad de los registros DNS.

Además de la librería Java tenemos IoT Discovery Services CLI Application que permite lanzar vía Shell Java este proceso, como se ve en este ejemplo:

En breve noticias sobre DNS-SD y Sofia2….

DNS-SD: Discovery dinámico de Servicios IoT con Java

Interfaz gráfica en la Consola Web para la visualización y gestión de las conexiones

Se ha desarrollado una nueva pantalla que permite la gestión de las conexiones físicas y lógicas con la plataforma Sofia2.

Se podrá acceder a esta pantalla de Administración a través de la opción  de menú Administración -> Gestión de Conexiones, siempre y cuando el usuario tenga rol Administrador.

Las conexiones existentes en la plataforma se podrán consultar en todo momento pulsando sobre la pestaña Conexiones físicas o Conexiones lógicas según el criterio que nos interese:

Pestañas Gestión de Conexiones

En la pestaña de conexiones físicas, si en la parametrización del SIB he indicado que se permitan KPs con autenticación en esta opción se muestra un listado de las conexiones establecidas:

Pestaña Conexiones Fisicas

Las conexiones físicas existentes se podrán mostrar agrupadas por username y por username/token:

Conexiones físicas por username

Conexiones físicas por username y token

También desde aquí podremos autorizar y bloquear las conexiones físicas a determinados usuarios:

Autorizar y Bloquear Conexiones físicas a usuarios

Los usuarios autorizados y/o bloqueados se mostrarán en la tablas para su posterior gestión.

Desde la pestaña de Conexiones lógicas podremos visualizar un listado con las existentes en ese momento:

Pestaña Conexiones Lógicas

Además nos permite cerrar todas las conexiones lógicas o cerrar la conexión para un determinado usuario o session key.

Una vez realizada esta acción se podrá observar que desaparecerá del listado.

Interfaz gráfica en la Consola Web para la visualización y gestión de las conexiones

Disponível a versão 2.21.0 de SOFIA2

Já está disponível a versão 2.21.0 deSofia2, esta versão também foi disponibilizada na Plataforma Experimental Sofia2CloudLab.

Ver versões

Esta nova versão acrescenta à Plataforma as seguintes funcionalidades:

· Novos Gadgets: Nuvem de palavras, Heatmap e imagem Heatmap:

Nesta versão acrescentaram-se novos Gadgets aos já existentes.

A criação de Gadgets de Mapa de Calor é suportada num mapa Google Map:

E numa imagem (por exemplo o plano de uma loja)

Criou-se igualmente um novo Gadget que permite criar nuvens de palavras, a partir de cadeias de texto (obtidas a partir de dados de ontologias)

· Suporte subscrições em ligações REST

Incluiu-se no Gateway REST de Sofia2 a possibilidade de realizar subscrições a queries.

Até agora, esta funcionalidade era exclusiva de protocolos com ligação bidirecional (MQTT, WebSocket, Ajax/Push…), desta forma o SIB de Sofia2 utiliza o canal de retorno do protocolo específico para enviar os dados da notificação.

O novo Gateway REST de Sofia2 resolve o problema da notificação em REST, através do registo por parte da App Sofia2 cliente (KP) de um endpoint Http (Serviço Rest por exemplo), onde Sofia2 deve enviar a mensagem de notificação. Esta notificação é efetuada por Sofia2 utilizando o método HTTP PUT e enviando a mensagem SSAP no formato application/json.

Ao aceder a http://sofia2.com/sib/ e consultar a API ApiRestful Sofia2 podemos consultar a documentação das duas operações, que dão suporte à subscrição via REST:

· Novo Demonstrador API Streaming de Twitter

Através da utilização dos Gadgets da Plataforma, realizou-se um novo demonstrador das capacidades de integração de Sofia2 com as redes sociais, neste caso Twitter.

A demo está disponível em: http://sofia2.com/TwitterStreamingTags/

O demonstrador permite receber em tempo real informação do Twitter e visualizar esta informação de diversas formas: nuvem de palavras e diferentes gráficos:

· Apresentação da Plataforma no Evento IoT Forum IDC Lisboa

Este mês, Sofia2 esteve presente no IoT Forum de Lisboa, organizado pela equipa da Indra Portugal (graças ao António e toda a sua equipa!): http://www.cvent.com/events/idc-internet-of-things-forum/event-summary-21fef86fb19d4b5d9354770940954cef.aspx.

Este evento celebrou-se na Universidade Nova de Lisboa com a assistência de várias empresas vanguardistas no âmbito da Internet of Things (IoT) entre as quais a Indra com a Plataforma IoT Sofia2.

Participaram cerca de 200 pessoas, que visitaram o stand da Indra, onde se encontrava a equipa de Sofia2, explicando os casos de sucesso da Plataforma e vários demonstradores.

· Smart Drone Sofia2

Desenhado e construído como um dispositivo com foco em Open Hardware+ Open Software, um dos nossos especialistas no âmbito de dispositivos (Miguel Garvia) desenvolveu um Drone controlado a partir da Plataforma, denominado Smart Drone Sofia2.

Entre as suas capacidades destacamos:

-Integração das funções do piloto automático com um controlador Raspberry Pi montado no chassi.

-Comunicação com Sofia2 via 3G

-Capaz de publicar sinais de sistemas internos/sensores nas ontologias de Sofia2

-Receção de sinais processados a partir da plataforma, em forma de comandos que permitem deslocar-se para determinados pontos e operar em atuadores externos.

Estas capacidades dotam o Smart Drone Sofia2 de uma completa autonomia do controlo humano e possibilidade de comunicação a qualquer distância graças à 3G.

No IoT Forum de Lisboa, Miguel apresentou o Smart Drone Sofia2 com uma demo de captura de fotos remota e comunicação com o Twitter.

Nos próximos posts explicaremos os passos da construção e de comunicação do Drone com Sofia2.

· Suporte idiomas português e italiano na Consola Web Sofia2:

Nesta versão, incorpora-se a versão da Consola de Configuração da plataforma em português

assim como em italiano:

· Melhoria na gestão de parâmetros de formulários de Dashboards:

Nesta versão, simplifica-se a funcionalidade de preenchimento de parâmetros de Gadgets paramétricos. Anteriormente, para cada Gadget paramétrico era necessário preencher os respetivos campos, embora estes compartilhassem parâmetros.

Agora acrescentou-se a possibilidade de preencher massivamente os parâmetros dos Gadgets, preenchendo um só, com o novo botão disponível “Draw All!”:

Assim, ao clicar em qualquer um dos campos, preencher-se-ão os restantes com os parâmetros especificados:

· Suporte completo à implementação de Sofia2 em Indra iGAS

iGAS (G App Server for Java EE) é um servidor de aplicações Java EE com capacidades multitenant e de auto-aprovisionamento a pedido. Oferece uma gestão centralizada, implementação automática de diferentes instâncias de cada aplicação em tenants,…

A versão 2.21 de Sofia2 adiciona GAppServer à lista de servidores suportados, o que nos permite utilizar a infraestrutura G da Indra para dimensionar automaticamente os nós necessários da plataforma Sofia2 em função da carga de trabalho.

· Condições de acesso e baixa de utilizador na Plataforma CloudLab

Nesta versão acrescentaram-se as condições de acesso ao Ambiente Experimental CloudLab.

Também se incorporou a possibilidade de dar Baixa a partir de qualquer Rol através da ficha do Utilizador com sessão iniciada:

· Tornou-se independente a operação dos módulos Script e Process:

Centralizando no módulo Script a operação associada ao tempo real e, no módulo Process a operação Batch e planificada.

· Resolução de incidências e pequenas melhorias de usabilidade da Plataforma

Disponível a versão 2.21.0 de SOFIA2

Herencia de parámetros en formularios, gadget nube de palabras y heatmap

Herencia de parámetros en formularios:

En la última release de Sofia2, la 2.21, se ha implementado una nueva característica en los Dashboards, con el fin de para facilitar la inserción de parámetros en un Dashboard paramétrico.

Se tiene un nuevo botón para incluir los parámetros en todos los gadgets que compartan formulario. Esto es, todos aquellos que tanto su tipo de parámetros como nomenclatura, sea idéntica.

Ahora, al tener varios Gadgets paramétricos con el mismo formulario de parámetros, no será necesario rellenar uno a uno para conseguir que aparezcan los Gadgets necesarios. Haciendo click en el botón Draw All! se rellenarán masivamente todos con los mismos parámetros.

Haciendo click en cualquiera de los mismos se rellenaran el resto con los parámetros especificados:

Si se necesitara incluir solo los parámetros en un Gadget se podrá utilizar el antiguo botón Draw!

Gadget nube de palabras y heatmap:

Se han incluido nuevos Gadgets en la nueva versión de Sofia2, pudiendo crear ahora tres nuevos tipos de Gadget en la plataforma:

Mapas de calor sobre google maps (Gadget Heatmap)

Con este nuevo Gadget, podremos crear mapas de calor sobre un mapa de Google maps. Para su configuración serán necesarios tres parámetros: Latitud, Longitud (ambas en coordenadas cartesianas) y valor, que será la intensidad del punto insertado. La escala será calculada dinámicamente a partir de los valores de máximo y mínimo encontrados. También se mantendrá tanto la posición, como el zoom y el tipo de mapa al guardar el Gadget.

Mapas de calor sobre imagen (Gadget Imagen Heatmap)

En este caso el fondo utilizado para el mapa de calor será una imagen dibujada sobre el canvas del explorador. Para la configuración se necesitarán varios parámetros:

· Eje X: Corresponderá a la posición X, en píxeles, sobre la imagen en tamaño original

· Eje Y: Corresponderá a la posición Y, en píxeles, sobre la imagen en tamaño original

· Valor: Intensidad del punto (la escala es calculada dinámicamente)

· URL Imagen: dirección de la imagen que se cargará como imagen de fondo

· Mínimo-Máximo radio: parámetros para configurar el tamaño mínimo y máximo del radio del punto (el radio de un punto será aleatorio entre los dos extremos), si se quiere un radio fijo se pondrá el mismo valor en ambos campos.

Gadget nube de palabras

En este caso la configuración será la de un campo string que sobre el que se aplicará la nube de palabras. Este campo puede ser desde una palabra simple hasta un texto completo.

Herencia de parámetros en formularios, gadget nube de palabras y heatmap

MongoDB and the Internet of Things

MongoDB
%7b2e86bb5a-5f5c-45f3-aadf-1a4daf8f35a1%7d_Webinar_header_iot_akzidenz-01.jpg
The Internet of Things (IoT) is one of the most talked about topics in technology today. See what all the buzz is about in our upcoming webinar.

In this presentation, MongoDB solutions architect Chris Biow will discuss the architecture of IoT data management solutions and the challenges that arise. We will also explore how MongoDB features provide solutions to those problems.

If you’re unable to attend, make sure to register so we can send you a recording of the presentation.

We look forward to seeing you there!

Regards,

The MongoDB Team

%7b86e3fee6-614d-4a0a-805d-327f5eb08a7e%7d_0728-01.png
12pm EDT | 9am PDT | 5pm BST
In a different time zone? Attend this webinar on July 29 at 4PM China time.
MongoDB and the Internet of Things

Soporte para suscripciones REST

En la Release 2.21 de Sofia2, se ha añadido al Gateway REST la capacidad de registrar suscripciones a consultas y notificar los resultados de dichas suscripciones cuando se produzcan eventos que cumplan la condición indicada en la consulta.

Hasta ahora, la funcionalidad de suscripción estaba restringida a protocolos de transporte con estado (MQTT, TCP, Ajax-Push, Websockets…).

El nuevo Gateway REST de Sofia2 resuelve el problema de la notificación en REST mediante el registro por parte de la App Sofia2 cliente (KP) de un endpoint Http (Servicio Rest, Servlet…) donde Sofia2 debe enviar los mensajes de notificación con los resultados de la suscripción.

Para dar soporte a esta funcionalidad, se han añadido al API REST de Sofia2 dos nuevas operaciones:

· Subscribe: Para permitir registrar una suscripción a una query, asi como el endpoint de notificación

· Unsubscribe: para dar de baja una suscripción existente.

La documentación asociada a ambas operaciones, junto con un cliente para poderlas utilizar, se puede encontrar en la propia documentación web del API REST, en el CloudLab de sofia2.com, accediendo a http://sofia2.com/sib/ y consultando el API ApiRestful Sofia2:

Si extendemos la operación subscribe, vemos que los argumentos necesarios son los mismos que a través del protocolo SSAP, junto con el endpoint expuesto por la App cliente para recibir las notificaciones.

Asimismo, la operación unsubscribe recibe los mismos parámetros del protocolo SSAP: sessionkey e identificador de suscripción.

Las notificaciones de resultados desde el SIB de Sofia2 se realizan invocando mediante HTTP PUT a la url del endpoint registrado en la suscripción, enviando el mensaje SSAP de tipo INDICATION en formato application/json. Por lo que el servicio REST o Servlet que exponga la App Sofia2 cliente (KP), tiene que ser compatible con el método PUT y el content-type application/json.

Asimismo, hay que garantizar visibilidad del servicio REST de notificación al SIB de Sofia2. Por lo que los Apps cliente que utilicen la instancia de CloudLab (Despliegue en Cloud público) deberán indicar en la suscripción un endpoint con IP o nombre de máquina público, lo que en la mayoría de los casos necesitará de la correspondiente configuración NAT en el router o proxy a través del que acceden a internet, para de este modo indicar en la suscripción al SIB, la IP pública del router, que via NAT, se traducirá cuando se reciba una notificación, en una redirección a la IP privada de la máquina que expone el servicio de notificación.

Soporte para suscripciones REST

¿Cómo hacer búsquedas de elementos en una zona concreta?

Sofia2 ofrece un API) que permite hacer búsquedas de elementos que estén dentro de una zona (circunferencia concreta).

Para esto habilita en el APISofia utilizable a través de los scripts el método findInCircle

Esta operación tiene esta sintaxis:

/**

* Consulta geoespacial

* Wrapper query MongoDB http://docs.mongodb.org/manual/reference/operator/query/nearSphere/

* Example db.MyOntology.find( { location : { $nearSphere : [ 7.0, 45.0 ], $maxDistance: 0.1 } })

* @param ontologyName String

* @param indexName String

* @param longitude double

* @param latitude double

* @param radio in metres int

*/

def findInCircle(ontologyName, indexName, longitude, latitude, radio) throws ScriptException;

y permite buscar los elementos de una ontología que están en un círculo a partir de un centro y un radio especificado en metros.

Como se ve en los comentarios del método realmente es un wrapper de la query geospacial de MongoDB

db.<ontologia>.find( { "<ontologia>.geometry": { $nearSphere : [ <longitud>,<latitude> ], $maxDistance: <radio en metros> } })

que sobre una ontología real podría quedar:

db.pt_bus.find( { "MobileElement.geometry": { $nearSphere : [-8.39,43.37], $maxDistance: 100 } })

Desde un script puedo utilizar el método findInCircle de la siguiente forma:

def api=new APISofia();

def attrib1= api.findInCircle(pt_bus”,”MobileElement.geometry”, 8.39, 43.37,100);

def var1=!(attrib1.size() > 0);

if(var1){
return true;
}else{
return false;
}

¿Cómo hacer búsquedas de elementos en una zona concreta?