IoT Data Models: Iniciativas y Sofia2 Data Model

¿Qué es un Data Model?

Un Data Model representa la estructura de tus datos y relaciones, por tanto organiza los elementos y estandariza como se relacionan unos con otros.

¿Por qué utilizar un Data Model en el ámbito IoT?

Los Data Models son fundamentales en el ámbito IoT donde tratamos con assets físicos, medidas, dispositivos, procesos, personas,… y el nuestro IoT Data Model debe ser capaz de modelar todos estos conceptos.

Un Data Model nos da una representación uniforme de todos los elementos de nuestro sistema, esto tienen numerosos beneficios:

  • Reuso: la capacidad de modelar componentes que luego podré reusar es una práctica estándar que permite ahorrar en costes
  • Flexibilidad: una vez creado el modelo, este permite que sea fácil actualizar, modificar o eliminar elementos del modelo sin necesidad de rehacer el sistema
  • Escalabilidad: simplifica el clonado y modificación de dispositivos que son similares o se comportan de la misma forma que otros ya testados.
  • Interoperabilidad: usar un Data Model que se base en estándares (JSON, XML,…) simplifica que este Data Model pueda usarse en aplicaciones futuras de forma sencilla
  • Colaboración: Un Data Model nos permite predefinir links, relaciones, acciones entre componentes, permitiendo que esto se defina cuando se está creando el modelo de modo que diferentes equipos puedan trabajar en partes
  • Independencia de la Plataforma: un Data Model permite una integración transparente con otros sistemas. Un modelo correctamente formado hará más sencillo crear aplicaciones como analítica sobre los datos

Iniciativas de estandarización de un Data Model en IoT

NOTA: No hemos considerado los protocolos de comunicación como MQTT-SN, LWM2M o CoAP, aunque en algunos casos hay ciertos solapes puestos estos protocolos pueden llevar embebido un Data Model.

 

En el mundo IoT existen varias propuestas para intentar estandarizar un Data Model único, aunque la realidad es que ninguna de ellas tiene una penetración en el mercado suficiente como para decantarse de forma unívoca por ella.

A continuación se incluye una tabla con información relevante sobre algunas de estas iniciativas:

  Descripción Organiz Formato Versión
SensorML http://www.opengeospatial.org/standards/sensorml

Sensor Model Language pretende definir semánticamente prceoss y componentes relacionados con las medidas, con el objetivo de conseguir interoperabilidad

OGC XML +XSD 2.0

2014

AMON https://amee.github.io/AMON/

Formato para definir datos de dispositivos

AMEE JSON 3.1

2012

SensorThings http://www.opengeospatial.org/standards/sensorthings

Forma abierta y unificada de conectar dispositivos, datos y aplicaciones.

OGC JSON +

OData

1.0

2016

GSMA IoT Big Data Armonized Data Model https://www.gsma.com/iot/wp-content/uploads/2016/11/CLP.26-v1.0.pdf

Definición de entidades de uso común en IoT y Big Data creando modelos harmonizados en ámbitos Agricultura, Automoción, Environment, Industria, Smart City y Smart Home

GSMA JSON +schema.org 1.0

2016

FIWARE Data Model https://www.fiware.org/data-models/

Adaptación de GSMA Data Model sustituyendo schema.org para definición de Data Modelo por JSON-Schema para simplificar su uso

FIWARE JSON +

JSON-Schema

1.0

2017

¿Qué tienen en común estas iniciativas?

El grueso de estas iniciativas (sobre todo las más actuales) usan JSON como formato de intercambio.

Respecto a JSON podemos decir:

  • Es un formato de intercambio ligero, en la actualidad se ha convertido en el estándar de intercambio sustituyendo a XML en la mayoría de los escenarios

a2.jpg

  • Es el formato usado “para todo” por los grandes en el mundo Web: Google, Amazon,…
  • Es el formato por defecto de la “API Economy” con la que por ejemplo los bancos y organizaciones ofrecen sus datos
  • Es un formato que se usa en las modernas aplicaciones Web y móviles por ser mucho más ligero que XML
  • Es un formato ligero, adecuado para dispositivos IoT

Para definir la estructura de un JSON (por ejemplo que atributos son obligatorios o el tipo de datos) existe JSON-Schema (el equivalente a XML-Schema), aunque en la actualidad no es de uso obligatorio ni está ampliamente estandarizado y existen otras iniciativas.

Sobre JSON y JSON-Schema y por debajo de estándares como los que mencionábamos tenemos otros formatos y definiciones como OData o schema.org, pero tampoco tienen una penetración masiva.

Sofia2 Data Model

Ontologías Sofia2

En Sofia2 a la Entidad del Data Model usado (Sofia2 Data Model) la denominamos Ontologías.

Las Ontologías Sofia2 permiten modelar desde conceptos sencillos como una medida a conceptos complejos como una organización.

Las Ontologías en Sofia2 se definen en JSON+JSON Schema.

Origen de las Ontologías Sofia2

El concepto de Ontología viene del proyecto europeo I+D SOFIA del que se origina Sofia2, que usaba como Data Model Ontologías RDF/OWL conforme los principios de la Web semántica.

Cuando en 2013 Indra considera evolucionar SOFIA para crear una plataforma empresarial (Sofia2) que pueda usarse en proyectos productivos y complejos se realiza un análisis y pruebas empíricas y se concluye que la tecnología subyacente a las ontologías tradicionales modeladas en OWL no escala conforme a las necesidades de los proyectos IoT y Big Data.

Tras considerar diversas opciones se considera que JSON+JSON Schema es la mejor propuesta de presente y futuro.

Conceptos del Sofia2 Data Model

El concepto clave del Sofia2 Data Model es la Ontología, como ya hemos dicho, pero existen otros conceptos importantes, como el Template y la Instancia de la Ontología.

  Template Ontología Instancia Ontología
Representa Plantilla, bien creada por un administrador, bien creada conforme a un estándar concreto (AMON, FIWARE Data Model) que permite que las Ontologías se creen de Entidad que representa un concepto sobre el que trabaja la Plataforma. Es un registro concreto de la Entidad que define la Ontología
Ejemplos Plantilla definiendo los atributos de Calidad medioambiental conforme el FIWARE Data Model

-Pla

Calidad Medioambiental (obtenida de un dispositivo)

-Previsión metereológica (obtenida por un algoritmo)

-Calidad medioambiental obtenida en una hora concreta en un punto concreto

-Previsión para una región y mes concreto

Formato JSON-Schema JSON-Schema

(soporta GeoJSON, OData)

JSON

(GeoJSON)

Dónde están -No se almacenan, son una definición Independiente del motor de persistencia elegido: en un modelo relacional representan una tabla, en una BD NoSQL tipo documental una colección de documentos,,… Independiente del motor de persistencia elegido: en un modelo relacional representan un registro, en una BD NoSQL tipo documental un documento concreto,….
Más info Soportado por completo estándares AMON y FIWARE Data Model Soportan versionado

Soportan consultas geográficas

 

 Sofia2 Data Model en el Control Panel de Sofia2

Template

El concepto de Template representa una Plantilla sobre la que luego podrán crearse las Entidades.

Por tanto sólo se permite a los usuarios con rol ADMINISTRADOR crear estas Plantillas:

a1

En la Plataforma sólo tienen permiso para crear Templates o Plantillas, como puede verse en la imagen:

Las Plantillas tienen asociadas una o varias categorías que me permiten categorizarlas y buscar por estas.

Una Plantilla se representa por un JSON-Schema:

a3.jpg

Ontología

La Ontología es el concepto clave del Sofia2 Data Model y también del funcionamiento completo de la plataforma, ya que sobre estas se desencadenan el resto de procesos:

  • Reglas: se aplican ante la llegada de una instancia de ontología (o bien planificadas) y permite acceder a los atributos de las ontologías para accionar en base a esta
  • Dashboards: se construyen bien representando en tiempo real las instancias que van llegando a la plataforma bien a través de una consulta a estas
  • Analítica: los modelos ML típicamente se realizan sobre las ontologías almacenadas en la infraestructura Big Data de la plataforma (BDH)

Los usuarios Sofia2 con rol COLABORADOR pueden crear Ontologías, existen diversos mecanismos de crear Ontologías, los principales son:

  • Creación Paso a Paso: me permite crear Ontologías indicándole los atributos que componen la ontología, el tipo de datos de cada uno y si son obligatorios. Es la opción ideal para ontologías sencillas (equivalentes a una Tabla)
  • Creación mediante JSON-Schema: en este caso crearemos la Ontología bien definiendo el JSON-Schema que representa mi entidad, bien partiendo de un template ya creado.

Si seleccionamos la creación vía Ontología entonces me pedirá que seleccione una de las categorías:

a4.jpg

Y una vez seleccionada una de ellas (por ejemplo GSMA) me dará la opción de seleccionar una de las Plantillas:

a5

Soporta además:

La creación de la Ontología a partir de un Schema XML (XSD).

La creación de la Ontología a través de un diagrama UML que se crea en el propio Panel de Control

  • Creación desde CSV o Excel: esta opción es muy útil cuando tenemos un fichero con datos con los que quiero hacer una carga inicial en la plataforma. La Plataforma me irá guiando y solicitando la información que necesita hasta generar de forma automática el JSON-Schema que representa los datos pasados:

q1

  • Creación desde JSON/XML: equivalente a la creación desde Excel en este caso podré subir una JSON o XML para que la Plataforma cree la Ontología correspondiente.
  • Creación Ontología Tipo KPI: en este caso lo que estamos haciendo es crear una Ontología que se calcula en base a cálculos sobre otras ontologías
  • Creación Ontología Tipo TimeSeries: el concepto de Time Series se refiere a datos de tipo Serie Temporal, la plataforma soporta la creación de estos modelos de forma sencilla: 

    Instancia de Ontología

    Representa una instanciación de una ontología, típicamente en un momento concreto y posición concreta.

    La Plataforma ofrece diversas herramientas para acceder a las instancias, la más usadas por el desarrollador será la Consola BDTR y BDH que permite a través de un wizard generar consultas sobre las ontologías:

q3.jpg

 

 

 

Desde la herramienta puedo visualizar los datos de la Ontología (instancias) en formato nativo de la Plataforma, esto es en JSON:

q3.jpg

Pero también puedo representar los datos en formato TABLA e incluso exportarlos a formato CSV, Excel o XML.

 

 

IoT Data Models: Iniciativas y Sofia2 Data Model

Adquisición, transformación y consumo de datos GSMA/FIWARE Data Model

flujoDeconexion

En el post Cómo trabajar con Data Model FIWARE/GSMA en Sofia2 vimos cómo la plataforma Sofia2 soporta los Data Models GSMA y FIWARE. Aprendimos cómo crear Ontologías conforme a estos modelos y cómo insertar datos y consultarlos mediante la herramienta disponible en la plataforma Consola BDTR y BDH. También vimos cómo publicar esta Ontología como un API RESTFul y cómo consumir el API.

 

Además, disponemos del documento Uso de FIWARE Data Model y publicación API NGSI9donde se explica cómo consumir APIS modeladas conforme semántica FIWARE Data Model y publicadas en la Plataforma siguiendo el protocolo NGSI-9.

 

Para el ejemplo se utilizan las Ontologías:

  • GSMA_OffStreetParking_Destino
  • GSMA_PointOfInterest_Beach
  • GSMA_PointOfInterest_Museum

 

Paso a paso se explica cómo suscribirnos a éstas Ontologías, cómo consultar sus Datos mediante la Consola BDTR y BDH, cómo suscribirse a APIs NGSI-9 y consumirlas mediante el portal del desarrollador del API Manager y cómo acceder a estas APIs vía Curl.

 

consumoDatos

 

Con toda esta información, y conociendo que Sofia2 permite crear Reglas Scripts (se aconseja leer el documento Guía de Uso Motor Scripting Sofia2) que se ejecutarán ante la llegada de instancias de Ontologías o cada cierto tiempo, es fácil entender cómo podemos recibir datos con una estructura determinada y transformarlos para cumplir con estos Data Models. 

 

Lo comprobaremos mediante el siguiente flujo:

flujoDeconexion

 

En este ejemplo, se recogen datos de parkings de Smart Coruña, se ingestan en la plataforma Sofia2 a una Ontología, cada vez que se recibe una instancia de esta ontología se lanza un Script que transforma estos datos adaptándolos a los Data Model y consultándolos, vemos como efectivamente, se cumple con los Data Models GSMA y FIWARE.

 

ejemploparking

Adquisición, transformación y consumo de datos GSMA/FIWARE Data Model

Data Model GSMA en Sofia2

1

Se ha disponibilizado en Sofia2 la documentación que define el soporte y funcionamiento de los Data Model GSMA en la plataforma Sofia2.

La asociación GSMA (asociación de operadores móviles) está trabajando en un IoT Big Data Harmonised Data Model. Por otro lado en la iniciativa FIWARE se han inspirado en el Data Model GSMA para crear los FIWARE Data Models.

Los Data Models GSMA (también llamados FIWARE DataModel) se definen en JSON, por lo que su representación como Ontología Sofia2 es inmediata. Para ello, haremos uso de las plantillas predefinidas en Sofia2 que soportan los anteriores modelos:

plantillas

En la documentación, que te puedes descargar aquí, o puedes consultar en versión web aquí, encontrarás cómo se definen los modelos de datos en Sofia2 para soportar los Data Models GSMA, ejemplos de uso, y un completo “Hands On” que abarca la creación de Ontologías, carga de datos mediante CRUD de Instancias, consulta de datos con la Consola BDTR y BDH, y cómo publicar Ontologías como API RESTFUL.

Data Model GSMA en Sofia2

Cómo trabajar con Data Model FIWARE/GSMA en Sofia2

La asociación GSMA (asociación de operadores móviles está trabajando en un IoT Big Data Harmonised Data Model

Que define estas entidades: AgriCrop, AgriGreenHouse, AgriParcel, AgriParcelOperation, AgriParcelRecord, AgriPest, AgriProduct, AgriProductType, AgriSoil, AirQualityObserved, Building, BuildingOperation, BuildingType, Device, DeviceModel, DeviceOperation, EnvironmentObserved, Machine, MachineModel, MachineOperation, PointOfInterest, Road, RoadSegment, Subscriber, SubscriptionService,Vehicle, VehicleFault, VehicleType, WaterQualityObserved, WeatherForecast y WeatherObserved.

Por otro lado en la iniciativa FIWAREse han inspirado en el Data Model GSMA para crear los FIWARE Data Models, donde además se han seleccionado un conjunto de Entidades sobre estas de GSMA:

  • Alarms Events related to risk or warning conditions which require action taking.
  • Parks & Gardens Data models intended to make an efficient, effective and sustainable management of green areas.
  • Environment Enable to monitor air quality and other environmental conditions for a healthier living.
  • Point of Interest Specific point locations that someone may find useful or interesting. For instance, weather stations, touristic landmarks, etc.
  • Civic Issue tracking Data models for civic issue tracking interoperable with the de-facto standard Open311.
  • Street Lighting Modeling street lights and all their controlling equipment towards energy-efficient and effective urban illuminance.
  • Device IoT devices (sensors, actuators, wearables, etc.) with their characteristics and dynamic status.
  • Transportation Transportation data models for smart mobility and efficient management of municipal services.
  • Indicators Key performance indicators intended to measure the success of an organization or of a particular activity in which it engages.
  • Waste Management Enable efficient, recycling friendly, municipal or industrial waste management using containers, litters, etc.
  • Parking Real time and static parking data (on street and off street) interoperable with the EU standard DATEX II.
  • Weather Weather observed, weather forecasted or warnings about potential extreme weather conditions.

Los Data Models GSMA y FIWARE se definen en JSON por lo que su representación como Ontología Sofia2 es inmediata (recomendamos al respecto leer el documento Gobierno de Ontologías o el conjunto de posts al respecto).

En Sofia2 se soportan ya estas entidades vía Plantillas (una plantilla sirve para crear ontologías partiendo de una definición):

A continuación veremos cómo Sofia2 permite trabajar con estas entidades, pongamos el ejemplo de la entidad WeatherObserved (This entity contains a harmonised description of the weather at a particular location and time. This entity is primarily associated with the vertical segments of the environment and agriculture but is applicable to many different applications):

Seguir leyendo “Cómo trabajar con Data Model FIWARE/GSMA en Sofia2”

Cómo trabajar con Data Model FIWARE/GSMA en Sofia2

Comparando sintaxis de consultas de FIWARE Orion Context Broker y SOFIA2 SIB

En este post vamos a ver cómo el SIB de SOFIA2 y el GE FIWARE Orion Context Broker permiten hacer consultas, empecemos:

Conforme a la documentación de FIWARE Orion Context Broker las consultas en el Orion Context Broker se realizan con el mensaje NGSI-10 queryContext que tiene esta sintaxis:

En XML:

REQUEST XML queryContext RESPONSE XML queryContext
<queryContextRequest><entityIdList>

<entityId type=”Room” isPattern=”false”>

<id>Room1</id>

</entityId>

</entityIdList>

<attributeList/>

</queryContextRequest>

<?xml version=”1.0″?><queryContextResponse>

<contextResponseList>

<contextElementResponse>

<contextElement>

<entityId type=”Room” isPattern=”false”>

<id>Room1</id>

</entityId>

<contextAttributeList>

<contextAttribute>

<name>temperature</name>

<type>centigrade</type>

<contextValue>23</contextValue>

</contextAttribute>

<contextAttribute>

<name>pressure</name>

<type>mmHg</type>

<contextValue>720</contextValue>

</contextAttribute>

</contextAttributeList>

</contextElement>

<statusCode>

<code>200</code>

<reasonPhrase>OK</reasonPhrase>

</statusCode>

</contextElementResponse>

</contextResponseList>

</queryContextResponse>

Y en JSON:

REQUEST JSON queryContext RESPONSE JSON queryContext
{“entities”: [

{

“type”: “Room”,

“isPattern”: “false”,

“id”: “Room1”

}

]

}

{“contextResponses”: [

{

“contextElement”: {

“attributes”: [

{

“name”: “temperature”,

“type”: “centigrade”,

“value”: “23”

},

{

“name”: “pressure”,

“type”: “mmHg”,

“value”: “720”

}

],

“id”: “Room1”,

“isPattern”: “false”,

“type”: “Room”

},

“statusCode”: {

“code”: “200”,

“reasonPhrase”: “OK”

}

}

]

}

En el caso de SOFIA2 se soportan mensajes SSAP de Query bien en el lenguaje nativo de la BDTR o bien en lenguaje SQL para la BDTR o la BDH, para eso SOFIA2 incorpora parsers SQL para MongoDB (BDTR) y Hadoop (BDH).

Más detalle sobre el protocolo SSAP aquí.

Request SSAP QUERY Response SSAP QUERY
{“body”:{

“query”:”select * from feedAutobus where Feed.assetId=’316′ limit 1“,

“queryType”:”SQLLIKE

},

“direction”:”REQUEST”,

“ontology”:”feedAutobus”,

“messageType”:”QUERY”,

“messageId”:null,

“sessionKey”: “480e20eb-9100-4c6d-af6f-da688095311b”

}

{“body”: {

“data”: [

{

“_id”: {

“$oid”: “533bff5f50ae67a5ab0c433c”

},

“Feed”: {

“assetId”: “316”,

“assetName”: ” Autobús nº 316 “,

“assetSource”: “guiaLocal”,

“assetType”: “Autobus”,

“attribs”: [

{

“name”: “linea”,

“value”: “1”

},

{

“name”: “nombreLinea”,

“value”: “Abente y Lago – Os Castros”

},

{

“name”: “estado”,

“value”: “Tipo de Autobús: Normal piso bajo . Última parada por la que ha pasado Plaza de Mina, 26 Hora de paso 14:15 Proxima parada: Plaza de Orense\\n”

}

],

“feedId”: “1:316:2014-04-02T12:15:28.706266”,

“feedSource”: “guiaLocal”,

“geometry”: {

“coordinates”: [

-8.403705353600992,

43.36721562022267

],

“type”: “Point”

},

“measures”: [ ],

“measuresTimestamp”: {

“$date”: “2014-04-02T12:15:28.706Z”

},

“measuresType”: “INSTANT”,

“timestamp”: {

“$date”: “2014-04-02T12:15:28.706Z”

},

“type”: “MOBILE”

}

}

],

“error”: null,

“errorCode”: null,

“ok”: true

},

“direction”: “RESPONSE”,

“messageId”: null,

“messageType”: “QUERY”,

“ontology”: “feedAutobus”,

“sessionKey”: “480e20eb-9100-4c6d-af6f-da688095311b”

}

Que expresado en lenguaje MongoDB quedaría:

{

“body”:{

“query”:”db.feedAutobus.find({assetId:’316’}).limit(1)“,

“queryType”:”NATIVE

},

“direction”:”REQUEST”,

“ontology”:”feedAutobus”,

“messageType”:”QUERY”,

“messageId”:null,

“sessionKey”: “480e20eb-9100-4c6d-af6f-da688095311b”

}

Además de las diferencias en el lenguaje de consultas puede apreciarse las diferencias en el modelado de la información, en FIWARE se manejan estructuras genéricas NGSI (contextElement,…) mientras que en SOFIA2 se consultan y se devuelve instancias de las ontologías definidas en SOFIA2.

Por otro lado en SOFIA2 se comprueban los permisos en la ejecución de la consulta, de modo que un usuario sólo pueda consultar (o insertar,…) sobre ontologías de las que tiene permiso.

Comparando sintaxis de consultas de FIWARE Orion Context Broker y SOFIA2 SIB