El otro día presentábamos SOFIA2 (y aún quedan muchas novedades que seguiremos contando…) y nos quedábamos en una visión modular de SOFIA2.
En este post describiremos la funcionalidad de cada uno de estos módulos:
![]()
Se encarga de:
- Publicar información al Bus de Interoperabilidad (la de un sensor, smarphone,aplicación,…)
- Consumir información del Bus de Interoperabilidad bien a través de consultas concretas (último valor de los sensores que se encuentren cerca de mi ubicación) o bien a través de suscripciones (notificación cuando un sensor de Temperatura de la ciudad marca menos de 0º C)
En detalle:
- Este concepto se denomina KP (Knowledge Processor)
- Comunica con Bus (SIB) a través de lenguaje SSAP (Smart Space Access Protocol)
- Se aplica en comunicación mecanismos de seguridad configurados
- Se ofrecen APIs para varios lenguajes/plataformas: Java, Javascript, iOS, Android, Arduino,…
![]()
Se encarga de:
- Establecer mecanismos de autenticación/autorización entre Bus de Interoperabilidad y Consumer/Publisher
- Ofrecer Seguridad a nivel de protocolo y de aplicación
En detalle:
- 2 Implementaciones out-of-the-box:
Basada en usuario/password
Basada en Token
- Mecanismos de extensión a través de plugins para crear/adaptar Seguridad a requisitos identificados: Token Oauth, certificados,…
- Seguridad aplica a todos los conceptos de la Plataforma (ontologías, KPs,…) tanto a nivel de escritura como de lectura

Se encarga de:
- Ofrecer conectores para comunicación desde diversos clientes:
REST: para clientes Javascript, smartphones,..
MQTT para comunicaciones bidireccionales y dispositivos limitados
Web Services/JMS para aplicaciones empresariales
- Comprobar permisos de cliente para consumir o publicar datos
- Almacenar datos en Módulo de Persistencia (BDTR + BDH)
- Rutear petición a Motor adecuado en base a la petición realizada
En detalle:
- Este concepto de denomina SIB (Semantic Information Broker)
- Los clientes (KPs) pueden
JOIN: registrarse para usar SIB y LEAVE (finalizar sesión)
INSERT, UPDATE y REMOVE: para almacenar información en el SIB
QUERY, SUBSCRIBE para consultar y suscribirse a cierta información
Se encargan de:
- Procesar las peticiones que llegan al Bus
En detalle:
• Motor Consultas: permite realizar consultas sobre la BDTR y la BDH en lenguaje SQL independiente del motor subyacente, ofrece capacidad para consultas geográficas
• Motor Suscripciones permite suscribirse a una Query cada X tiempo y cuando se cumpla condición
• Motor Reglas: permite definir de forma sencilla a través de la UI Reglas que se ejecutarán cuando se cumplan ciertas condiciones (llegada de un datos de cierto tipo o que cumpla cierta regla) y ejecutar un conjunto de acciones preconfiguradas y ampliables
• Motor CEP: Permite definir Reglas CEP que aplican a los datos que llegan y que desencadenan notificaciones (pj media de medidas de Temperatura mayor de 50, o no se ha recibido cierto dato en 1 día)
![]()
Se encarga de:
- Ofrecer mecanismos de extensión sobre la Plataforma
- Con los plugins se pueden crear nuevos conectores, cambiar autenticación, auditar información, persistir en otros repositorios, generar KPIs, monitorizar,…
En detalle:
- Permite pre y postprocesar cualquier acción realizada dentro del SIB.
- Plugin de Seguridad: permite ampliar o cambiar modelo de autenticación y autorización
- Plugin de Ciclo de Vida del SIB realizar acciones al parar o arrancar
- Plugin de Procesado de Mensajes SSAP: permite preprocesar y postprocesar cualquier
- Plugin de Motores: permite interceptar las acciones que realizan los diversos motores
![]()
Se encarga de:
- La BDC (Base de Datos de Configuración) almacena todos los datos de configuración de la Plataforma.
En detalle:
- Entre los datos configurables se encuentran Ontologías, Plantillas de Ontologías, Reglas CEP, Reglas Script, Consultas Predefinidas, KPs, Inventario de Dispositivos,…
- La BDC puede ser cualquier base de datos relacional con driver JDBC. Versiones montadas sobre MySQL y Oracle.
![]()
Se encarga de:
- La BDTR (Base de Datos de Tiempo Real) almacena todos los datos recibidos por el Bus que se consideran de Tiempo Real
En detalle:
- Para cada Ontología se puede configurar que representa el Tiempo Real y que representa el Histórico (por ejemplo para un Sensor de Temperatura podría sólo interesarme la última medida y para un Sensor georreferenciado las del último día).
- Se soporta sobre base de datos MongoDB que ofrece características muy interesantes como:
Almacenamiento documental (JSON)
Alto rendimiento
Consultas complejas incluyendo consultas geoespaciales
Escalabilidad horizontal incluyendo Sharding
![]()
Se encarga de:
- La BDH (Base de Datos Histórica) almacena todos los datos que ya no forman el tiempo real y han pasado a ser históricos
En detalle:
- La BDH está implementada sobre Hadoop en el datawarehouse HIVE lo que permite:
- Capacidades para almacenamiento prácticamente ilimitado
- Capacidades de procesamiento de toda esta información cuando se necesite
- Lenguaje de consultas SQL
- Posibilidad uso Impala para consultas online
- Los datos del tiempo real se pasan automáticamente a datos históricos.
- Los datos históricos pueden consultarse a través el SIB con mensaje SSAP Query
![]()
Se encarga de:
- Ofrecer mecanismos para que la gestión de los conceptos de la Plataforma sea sencilla
En detalle:
- UI Web con tecnología HTML5 y Spring
- API REST para poder interactuar con la configuración de la Plataforma o crear nuevas UIs
- Control a nivel de UI y API de acciones que puede realizar cada rol y cada usuario
- UI Extensible en proyectos
![]()
Se encarga de:
- Ofrecer APIs en diversos lenguajes para el desarrollo de clientes
- Ofrecer Herramientas de Productividad para el desarrollo rápido de clientes de la Plataforma
- Ofrecer APIs para el desarrollo de plugins que extiendan el Bus
- Ofrecer Guías, Ejemplos y Documentación para agilizar el desarrollo sobre la Plataforma
En detalle:
- API multilenguaje KPs: Java, Javascript, Arduino, Android,…
- API para extender el Broker con plugins
- Entorno de Simulación de la Plataforma (SIB+KPs) para pruebas locales
- Entorno disponibilizado en Cloud para pruebas de integración
- Plugin Eclipse para desarrollo de KPs
- Guías de uso + ejemplos de todo el Kit de Desarrollo
![]()
Se encarga de:
- Garantizar la compatibilidad de la Plataforma con las principales Plataformas Cloud
- Dotar a la Plataforma de capacidades de autodimensionamiento en función de necesidades no fácilmente estimables
En detalle:
- Despliegue en varios IassS/PaaS: Amazon, Azure, Jelastic ,…
- Despliegue en Plataforma PaaS de Indra: G@PASS
- Despliegue en Cloud Privado y Público



Replica a ¿Qué es Sentilo? | Un poco de Java Cancelar la respuesta