PROYECTO SMART CITY UMA€¦ · 1. Intro: Relación con FIWARE Context Broker IoT Agents STH Portal...

Post on 21-Jul-2020

1 views 0 download

Transcript of PROYECTO SMART CITY UMA€¦ · 1. Intro: Relación con FIWARE Context Broker IoT Agents STH Portal...

Smart CitiesTelefónica España15.07.2019

PROYECTO SMART CITY UMAFIWARE y Plataforma Thinking Cities

2

Proyecto Smart City UMA (I)

Red de Pruebas sobre Tecnologías Smart City en el campus de la Universidad de Málaga (UMA)

✓ Prueba de concepto de diferentes soluciones y

tecnologías de comunicaciones.

✓ Combinación hardware-software altamente

configurable, orientada a la investigación.

▪ Plataforma IoT

▪ Red de dispositivos (sensores, actuadores, cámaras)

▪ Firmware y programación específicos

3

Proyecto Smart City UMA (II)✓ Sensores:

▪ Temperatura / Humedad / Presión

▪ Presencia / Proximidad (beacons)

▪ Luz

▪ Radiación ambiental (tubo Geiger)

▪ Gases

▪ Estación meteorológica (lluvia, viento)

▪ Grosor de tronco

▪ Radiación solar (piranómetro)

▪ Ultrasonidos (papeleras residuos)

▪ Cámaras infrarrojas

▪ Parking

✓ Actuadores ON/OFF: ▪ Iluminación

▪ Climatización

4

Agenda Formación (4 días)

DÍA 1 (lun 15/07)

SESIÓN ALCANCE PONENTE

09:00 - 14:00 FIWARE y Plataforma Thinking Cities PLATAFORMA Telefónica

DÍAS 2 y 3 (mar 16/07 y mié 17/07)

SESIÓN ALCANCE PONENTE

09:00 - 14:00 Red de sensores WaspmoteDISPOSITIVOS Libelium14:00 - 15:00 COMIDA

15:00 - 17:00 Red de sensores Waspmote

DÍA 4 (jue 18/07)

SESIÓN ALCANCE PONENTE

09:00 - 14:00 Integración de sensores con la plataforma INTEGRACIÓN EDP

5

FIWARE y Plataforma Thinking Cities

6

Protocolo estándar

1. Intro: Plataforma basada en estándar FIWARE

LTEWiFi LoRaWAN

Sensores Actuadores Equipos Terminales

ZigBee

Thinking Cities

Sigfox

Capa estandarizada de acceso a la información para los diferentes dispositivos y tecnologías

Plataforma IoT

InvestigadoresProyecto 1 Proyecto 2 Proyecto 3 Proyecto n

7

1. Intro: Arquitectura Plataforma FIWARE

CONTEXT BROKER (NGSI)

Short Term Historic (STH)

Complex Event Processing (CEP)

IoT Agents

IDM

& A

uth

Measures / Commands

Other Services

Apps

Legacy Systems

3rd Party

ActuatorsIoT Sensors

Queries / Subscriptions

8

1. Intro: Interacción con el Context Broker

CONTEXT PRODUCERS CONTEXT BROKER CONTEXT CONSUMERS

suscriptions

update

update

update

2026

query

notify

notify

2026

9

1. Intro: Relación con FIWARE

ContextBroker

IoT Agents

STH Portal de Configuración

Modelo multiusuario

CEP

PEP ProxyOAuth Server

IDM Plugins extra de seguridad

Entorno y equipode soporte dedicado

Módulos adicionales de Telefónica

Thinking Cities Platform

10

1. Intro: Portal de configuración

Telefónica IoT Platform REST API Client

Facilita la gestión de:▪ Reglas del CEP▪ Subscripciones

▪ Servicios & Subservicios▪ Usuarios

▪ Entidades & Atributos▪ Dispositivos IoT

vs

11

1. Intro: Gestión multiusuario

Service

(Fiware-Service)

Subservice

(Fiware-ServicePath)

Role User

1 N

N1

admin

ServiceCustomer SubServiceCustomer

SubServiceAdmin

12

1. Intro: Servicios / Subservicios en la UMA

smart_campus_umasmart_uma

PLATAFORMA UMA

Servicios:

Subservicios: smart_city

(Red de Pruebas)

https://150.214.58.178/

formacion_uma

(Formación)

apicampusbiblio_smart

cai_umaciesc

conmetdias2p_streetqr

fraterni_labgreen_senti

hort_sostmahduma

microsolsmart_secure_ev_urban_lab

smart_treese4

usmartdrivetfg_visor_iot

13

2. API NGSI: Información de contextoCity Governance System

City Services

3rd Party apps

Attributes

• Name• Type• Value

Entity

• EntityId• EntityType

1 n

“has”

NGSI API

APPLICATION / SERVICE

Bus- Location- Nº Passengers- Driver- License Plate

Shop- Location- Business Name- Franchise- Offerings

Citizen- Name - Surname- Birthday- Preferences- Location- ToDo list

CONTEXT BROKER

14

2. API NGSI: Ejemplo de uso

GET /v2/entities/plant/attrs/humidity

Cambiando el valor del atributo

“status” a “watering” disparamos la

ejecución del proceso que inicia el

riego en el dispositivo IoT

Permite leer la humedad para

decidir cuándo regar la planta

PUT /v2/entities/plant/attrs/status/value“watering”

API NGSIAPI estándar para el manejo de información de contexto

API Restful, simplifica y acelera el desarrollo

Orion Context Broker

NGSI APINGSI API

ID de la entidadNombre del atributoValor del atributo

15

2. API NGSI: CRUD de entidadesGET /v2/entitiesObtiene todas las entidades que se hayan creado

POST /v2/entitiesCrea una entidad

GET /v2/entities/{entityID}Obtiene una entidad dado su ID

[POST|PATCH|PUT] /v2/entities/{entityID}/attrsActualiza los atributos de una entidad

DELETE /v2/entities/{entityID}Borra una entidad

POST: Actualiza y si el atributo no existe lo crea.

PATCH: Actualiza y si el atributo no existe no lo crea.

PUT: Reemplaza todos los atributos de la entidad por

los nuevos que pongamos.

16

2. API NGSI: CRUD de atributosGET /v2/entities/{entityID}/attrs/{attrName}Obtiene el dato (tipo y valor) de un atributo concreto

PUT /v2/entities/{entityID}/attrs/{attrName}Actualiza el dato (tipo y valor) de un atributo concreto

DELETE /v2/entities/{entityID}/attrs/{attrName}Borra un atributo concreto

GET /v2/entities/{entityID}/attrs/{attrName}/valueObtiene el valor de un atributo concreto

PUT /v2/entities/{entityID}/attrs/{attrName}/valueActualiza el valor de un atributo concreto

17

2. API NGSI: Envío de datos al Context Broker

Creando entidad “car” Actualizando atributo “speed”

POST {{host}}:2026/v2/entities

Content-Type: application/json

{

"id": "Car1",

"type": "Car",

"speed": {

"type": "Number",

"value": 98

}

}

201 Created

PUT {{host}}:2026/v2/entities/Car1/attrs/speed

Content-Type: application/json

{

"type": "Number",

"value": 110

}

18

2. API NGSI: Consulta de datos del Context BrokerConsultando atributo “speed”

GET {{host}}:2026/v2/entities/Car1/attrs/speed

200 OK

Content-Type: application/json

{

"type": "Number",

"value": 110,

"metadata": {}

}

19

2. API NGSI: Modelo de datos completo

Attributes

• Name• Type• Value

Entity

• EntityId• EntityType

1 n

“has”

Metadata

• Name• Type• Value1 n

“has”

Uso de metadatos:

Amplían y/o particularizan la información de cada atributo

"id": "Car1",

"type": "Car",

"speed": {

"type": "Number",

"value": 110,

"metadata": {

"unit": {

"type": "Text",

"value": "km/h"

}

}

}

20

3. Modelo de datos armonizados

En todos los sectores

Propuestas a través de GitHub

Superconjunto de los modelos de la GSMA

Enlaces con los modelos de datos

https://www.fiware.org/developers/data-models

https://fiware-datamodels.readthedocs.io/

https://github.com/Fiware/dataModels

https://www.gsma.com/iot/wp-content/uploads/2016/11/CLP.26-v1.0.pdf

Alertas Transporte

Parking Residuos

AlumbradoPúblico

MedioAmbiente

21

Elementos involucrados● IDM: Provee la identificación del usuario● PEP: Proxy que deja pasar las peticiones● PDP: Contiene los roles y permisos de los

distintos usuarios

Pasos:

1. Login en IDM con usuario y contraseñapara obtener un token (válido por 1 hora).

2. Hacer la petición al Context Broker a travésdel PEP facilitando el token.

4. Seguridad: Arquitectura

IDM

PEP

Proxy

App

1

2

Similar al modelo Oauth (utilizado por Google, Facebook, etc)

22

4. Seguridad: Obtener token del IDM (I)POST /v3/auth/tokens

Host: {{host}}:{{idm_port}}

Content-Type: application/json

{ “auth": {

"identity": {

"methods": [

"password"

],

"password": {

"user": {

"domain": {

"name": "{{service}}"

},

"name": "{{user}}",

"password": "{{password}}"

}

}

},

"scope": {

"project": {

"domain": {

"name": "{{service}}"

},

"name": "{{subservice}}"

}

}}}

HTTP/1.1 201 Created

Server :nginx

Date :Wed, 03 Apr 2019 11:24:30 GMT

Content-Type :application/json

Content-Length :840

Connection :keep-alive

X-Subject-Token :b2a955dbb2c74caca59bf0bbdf1a44df

Vary :X-Auth-Token

X-Openstack-Request-Id :req-a662643f-72d3-4325-832e-b88cdfe51f08

X-Frame-Options :SAMEORIGIN

Strict-Transport-Security :max-age=31536000; includeSubdomains;

X-Content-Type-Options :nosniff

Cache-Control :no-cache, no-store, max-age=0, must-revalidate

Pragma :no-cache

Expires :0

X-XSS-Protection :1; mode=block

Referrer-Policy :same-origin

...

23

4. Seguridad: Obtener token del IDM (II)

24

5. Subscripciones: Flujo

Context BrokerUpdate Entity Notification

Registro de subscripción

POST /v2/subscriptions

POST /v2/entities POST myHTTPServerwww.putsreq.com

Webhook (Callback HTTP)

http://telefonicaid.github.io/fiware-orion/api/v2/stable/ (Apartado Subscriptions)

25

5. Subscripciones: CRUD

Operaciones sobre la lista de subscripciones:

● Obtener subscripciones: GET /v2/subscriptions

● Crear nueva subscripción: POST /v2/subscriptions

Operaciones sobre una subscripción concreta (ID de susbcripción):

● Leer: GET /v2/subscriptions/subscriptionId

● Modificar: PATCH /v2/subscriptions/subscriptionId

● Borrar: DELETE /v2/subscriptions/subscriptionId

26

5. Subscripciones: Herramientas de depuración

Permiten ver el contenido enviado por las notificaciones.

Algunas utilidades web gratuitas:

● webhook.site

● requestbin.net

● putsreq.com

27

5. Subscripciones: Registro y envío de notificaciónPOST /v2/subscriptions HTTP/1.1

Host: {{host}}:{{cb_port}}

Fiware-Service: {{service}}

Fiware-ServicePath: {{subservice}}

X-Auth-Token: {{token}}

Content-Type: application/json

{

"description": "A subscription to get info about myEntity",

"subject": {

"entities": [

{

"id": "myEntity",

"type": "myType"

}

],

"condition": {

"attrs": [ ]

}

},

"notification": {

"http": {

"url": "https://webhook.site/6a29954a-1a55-43c2-8dd0-3a9c7f4d23b5"

},

"attrs": ["temperature"],

"attrsFormat": "normalized"

}

}

POST /aGSZ2hnoTXRaO4JHZNY1 HTTP/1.1

Host: putsreq.com

Fiware-Service: smart_uma

Fiware-ServicePath: /formacion_uma

X-Auth-Token: 077ceb500f34419e87c5776e17f86605

Content-Type: application/json

NGSIV2-ATTRSFORMAT: normalized

CONTENT-LENGTH: 146

{

"subscriptionId": "5c90d94515853173859be497",

"data": [

{

"id": "myEntity",

"type": "myType",

"temperature": {

"type": "Number",

"value": 26,

"metadata": {}

}

}

]

}

Ejemplo de subscripción

Ejemplo de notificación

"legacy"→ NGSIv1"normalized"→ NGSIv2

Para obtener todos los ids de un determinado tipo habría que poner: "id" : ".*"

La notificación puede configurarse en

NGSIv1 o NGSIv2 dependiendo del

valor establecido en "attrsFormat".

Actualmente, si la subscripción se

crea o edita desde el portal web, se

establece por defecto en formato

NGSIv1 aunque es posible modificarlo

con POSTMAN.

28

5. Subscripciones: Condiciones

POST /v2/subscriptions HTTP/1.1

Host: {{host}}:{{cb_port}}

Fiware-Service: {{service}}

Fiware-ServicePath: {{subservice}}

X-Auth-Token: {{token}}

Content-Type: application/json

{

"description": "A subscription to get info about myEntity",

"subject": {

"entities": [{

"id": "myEntity",

"type": "myType"

}],

"condition": {

"attrs": ["temperature"],

"expression": {"q": "temperature<10;temperature>0"}

}

},

"notification": {

"http": {"url": "https://webhook.site/6a29954a-1a55-43c2-8dd0-3a9c7f4d23b5"},

"attrs": ["temperature"]

}

}

Permiten enviar la notificación sólo

cuando se cumple una determinada

condición:

● attrs: cuando se actualiza alguno de los

atributos especificados en el campo attrs.

● expression: cuando se cumple la

expresión especificada. Tipos de

expresiones: q, mq, georel, geometry y

coords

29

5. Subscripciones: Custom Notificacions

Permiten modificar el contenido

de los headers y payload de la

notificación

● Uso del patrón ${..} para sustituir por

los datos de la entidad

● Uso del campo httpCustom en vez del

campo http en la creación de la

subscripción. Permite modificar

método, cabeceras y contenido de la

petición (no tiene por qué ser JSON).

POST /v2/subscriptions HTTP/1.1

Host: {{host}}:{{cb_port}}

Fiware-Service: {{service}}

Fiware-ServicePath: {{subservice}}

X-Auth-Token: {{token}}

Content-Type: application/json

{

"description": "Custom payload example",

"subject": {

"entities": [ {"id": "myEntity", "type": "myType"} ],

"condition": {"attrs": [ ]}

},

"notification": {

"httpCustom": {

"url": "https://webhook.site/6a29954a-1a55-43c2-8dd0-3a9c7f4d23b5",

"headers": {"MyHeader": "MyValue“},

"method": "POST",

"payload": "La temperatura de la entidad %22${id}%22 es: ${temperature} grados C"

},

"attrs": ["temperature"]

}

}

30

5. Subscripciones: Custom NotificacionsEjemplo:

"httpCustom": {

"url": "http://foo.com/entity/${id}",

"headers": {

"Content-Type": "text/plain"

},

"method": "PUT",

"qs": {

"type": "${type}"

},

"payload": "The temperature is ${temp} degrees"

}

PUT http://foo.com/entity/DC_S1-D41?type=Room

Content-Type: text/plain

Content-Length: 31

The temperature is 23.4 degrees

PUT /v2/entities/DC_S1-D41/attrs/temp/value?type=Room

23.4

Creación de la Custom Notification

update

notification

31

5. Subscripciones: Estado de las notificaciones

La información detallada está en el elemento notification con los siguientes campos:

● timesSent: número total de intentos (fallidos y satisfactorios)

● lastSuccess: última vez que se notificó con éxito

● lastFailure: última vez que hubo un fallo en la notificación

● lastNotification: última vez que se envió una notificación (con o sin éxito)

200 OK

Content-Type: application/json

[{

"id": " 51c0ac9ed714fb3b37d7d5a8 ",

"expires": "2026-04-05T14:00:00.00Z",

"status": "failed",

"subject": { … },

"notification": {

"timesSent": 3,

"lastNotification": "2016-05-31T11:19:32.00Z",

"lastSuccess": "2016-05-31T10:07:32.00Z",

"lastFailure": "2016-05-31T11:19:32.00Z",

}

}]

Status failed significa que el último intento de notificación ha fallado.

32

6. IoT Agent: Arquitectura

Ventajas

● No necesitan ir securizados (o puedenusar otro tipo de securización)

● Emplean protocolos IoT

● Proveen una capa de abstracción (mapeode parámetro con atributo)

● Permite gestionar grupos de dispositivoscomunes (grupos de provisionamiento) Grupo de prov 1

DEV

Grupo de prov 2

DEV

Grupo de prov 3

DEV...

Ultralight 2.0 JSON Sigfox

Los IoT Agents traducen el protocolo que hablan los dispositivos a NGSI

33

6. IoT Agent: Protocolos disponibles en la UMA

● Ultralight 2.0 (transporte HTTP o MQTT)https://fiware-iotagent-ul.readthedocs.io/

● JSON (transporte HTTP o MQTT)https://fiware-iotagent-json.readthedocs.io/

● SigFoxhttps://github.com/telefonicaid/sigfox-iotagent

34

6. IoT Agent: Tipos de Mensajes

Active Attributes Lazy Attributes

Commands

35

6. IoT Agent: Grupos de provisionamiento

Al crear un grupo de provisionamiento se

especifica:

● Protocolo

● Apikey

● Mapeo de atributos

● Autoprovisionamiento de entidades

POST /iot/services HTTP/1.1

Host: {{host_iota}}:{{iota_port}}

Fiware-Service: {{service}}

Fiware-ServicePath: {{subservice}}

X-Auth-Token: {{token}}

Content-Type: application/json

{

"services": [

{

"attributes": [],

"static_attributes": [],

"apikey": "AAFF9977",

"protocol": [

"IoTA-UL"

],

"entity_type": "lamp"

}

]

}

36

6. IoT Agent: Provisión de dispositivosPOST /iot/devices HTTP/1.1

Host: {{host_iota}}:{{iota_port}}

Fiware-Service: {{service}}

Fiware-ServicePath: {{subservice}}

X-Auth-Token: {{token}}

Content-Type: application/json

{"devices": [

{ "device_id": "id_sen1",

"entity_name": "myEntity",

"entity_type": "myType",

"attributes": [

{ "object_id": "t", "name": "temperature", "type": "Number" },

{ "object_id": "h", "name": "humidity", "type": "Number" }

],

"lazy":[{ "object_id": "l", "name": "luminosity", "type": "Number" }

],

"commands": [{ "object_id": "c", "name": "cmd", "type": "command" }

],

"static_attributes": [{ "name": "serialID", "type": "Text", "value":"02598347" }

],

"protocol": "IoTA-UL",

"transport": "HTTP"

}]}

37

6. IoT Agent: Transformación de medidasOperaciones numéricas: multiplicar (‘*’), dividir (‘/’),

sumar (‘+’), restar (‘-’), negar (‘-’), potencia (‘^’)

Operaciones de cadena:

● Concatenar ('#'):

● Localización de substrings (indexOf(<variable>,

<substring>)): devuelve el índice de la 1º

coincidencia de <substring> en la cadena

<variable>.

● substring (substr(<variable>, <start> <end>)):

● Eliminar espacios en blanco (trim(<string>)):

https://iotagent-node-

lib.readthedocs.io/en/latest/expressionLanguage/index.html

POST /iot/devices HTTP/1.1

Host: {{host_iota}}:{{iota_port}}

Fiware-Service: {{service}}

Fiware-ServicePath: {{subservice}}

X-Auth-Token: {{token}}

Content-Type: application/json

{"devices": [

{"device_id": "id_sen1",

"entity_name": "myEntity",

"entity_type": "myType",

"attributes": [

{ "object_id": "t",

"name": "temperature",

"type": "Number"

},

{ "name": "humidity",

"type": "Number",

"expression":"${@h*100}"

},

{ "name": "location",

"type": "geo:point",

"expression":"${@latitude}, ${@longitude}"

}

],

"protocol": "IoTA-UL",

"transport": "HTTP"

}]}

38

6. IoT Agent: Envío de datos con Ultralight 2.0HTTP POST:

http://{{host_iota}}:{{ul_port}}/iot/d?k={{UL_apikey}}&i=id_dev1

Headers:

{Content-Type: text/plain; Fiware-Service: {{service}}; Fiware-ServicePath: {{subservice}} }

Payload:

2019-07-01T15:15Z|t|25#h|80

Payload

▪ Si las medidas tienen diferente TimeInstant (formato ISO 8601), usar como separador la “#”:

<fecha_medida1>|<param1>|<valor>#<fecha_medida2>|<param2>|<valor> …

▪ Si las medidas comparten el mismo TimeInstant, usar como separador la “|”:

<fecha_medida>|<param1>|<valor>|<param2>|<valor> …

▪ Si no se especifica el TimeInstant de la medida se coge la fecha y hora del sistema. En este caso, se puede

usar como separador tanto la “|” como la “#”:

<param1>|<valor>|<param2>|<valor> … ò <param1>|<valor>#<param2>|<valor> …

39

6. IoT Agent: Envío de comandos con Ultralight 2.0

{

"devices": [ {

"device_id": “id_sen",

"entity_name": “myEntity",

"entity_type": “myType",

"protocol":"IoTA-UL",

"transport": "HTTP“,

...

"commands": [{

"name": “cmd",

"type": "command"

}]

...

} ]

}

PUT /v1/contextEntities/type/myType/id/myEntity/attributes/cmd

Fiware-Service:{{service}}

Fiware-ServicePath:{{subservice}}

X-Auth-Token:{{token}}

Content-Type:application/json

{

"value":{

"sleep": "10min“

},

"type": "command“

}

Provisionamiento (IOTA) Escritura comando (Context Broker)POST /iot/d?k={{UL_apikey}}&i=id_sen&getCmd=1

HTTP/1.1

Host: {{host_iota}}:{{UL_port}}

Content-Type: text/plain

2019-07-12T00:35:30Z|h|60|t|31.5

200 OK

id_sen@cmd|sleep=10min

Lectura (Dispositivo)

● El dato se envía al dispositivo cuando éste manda un nuevo update a la plataforma.

● Si el dispositivo tuviera un servidor de peticiones se podría configurar una URL de envío (no es común en IoT)

40

7. Uso Avanzado del Context Broker

• Operaciones batch• Filtrado de entidades• Geo-localización• Soporte de fechas• Paginación

• Federación & proveedores de contexto

41

7. Uso Avanzado: Operaciones batch

Posibles operaciones:

● Update: Crea, actualiza o borra una lista de entidades en

una sola petición.

● Query: Permite hacer una búsqueda avanzada.

● Notify: Envía o consume el payload de notificaciones

ENTRANTES y lo persiste. Sirve para sincronizar los datos

entre distintos Context Brokers (Federación)

POST /v2/op/updateConten-Type: application/json... {

"actionType": "APPEND","entities": [

{"id": "Room1","type": "Room","temperature": {"value": 21.2,"type": "Number" }},

{ "id": "Room2","type": "Room","temperature": { "value": 31.8, "type": "Number"}}

]}

http://fiware.github.io/specifications/ngsiv2/stable/ ( Apartado Batch Operations)

42

7. Uso Avanzado: Filtrado de entidades (I)Tipos de filtros

Para la operación GET /v2/entities:

● Por tipo de entidad: GET <cb_host>:<cb_port>/v2/entities?type=Room

● Por ID: GET <cb_host>:<cb_port>/v2/entities?id=Room1,Room2

● Por patrón de ID (regex): GET <cb_host>:<cb_port>/v2/entities?idPattern=^Room[2-5]

● Por patrón de tipo (regex): GET <cb_host>:<cb_port>/v2/entities?typePattern=T[ABC]

● Por valor de atributo (q): GET <cb_host>:<cb_port>/v2/entities?q=temperature>25

● Por valor de metadata (mq): GET <cb_host>:<cb_port>/v2/entities?mq=temperature.avg>25

● Por ubicación geográfica

● Se pueden anidar varios filtros (como una condición AND)

43

7. Uso Avanzado: Filtrado de entidades (II)Operadores

● Equal (==) Busca la coincidencia exacta. Se puede usar en combinación con:

○ Un sólo elemento: ?q=temperature==40

○ Valores separados por comas: ?q=color==black,red

○ Rangos: ?q=temperature==10..20

● Unequal (!=) Se pueden hacer búsquedas por elemento, valores separados o rango.

● Greater than (>)

● Less than (<)

● Greater or equal than (>=)

● Less or equal than (<=)

● Match pattern: (~=) Patron regex para string.

○ Ej: ?q=color~=ow. Encontraría los colores brown and yellow

http://fiware.github.io/specifications/ngsiv2/stable/ (Apartado Simple Query Language)

44

7. Uso Avanzado: Datos geoespaciales

Tipos de atributos geospaciales

● geo:point

● geo:line

● geo:box

● geo:polygon

● geo:json

http://fiware.github.io/specifications/ngsiv2/stable/

(Apartado Geospatial properties of entities)

POST /v2/entities

{

"type": "City",

"id": "Madrid",

"position": {

"type": "geo:point",

"value": "40.418889, -3.691944"

}

}

POST /v2/entities

{

"type": "City",

"id": "Barcelona",

"position": {

"value": {

"type": "Point",

"coordinates": [2.186447514, 41.3763726]

},

"type": "geo:json"

}

}

45

7. Uso Avanzado: Geoqueries● Georel: Identifica la relación espacial entre la referencia (geometry) y las entidades sobre las que se

va a hacer la búsqueda. Puede ser del tipo:

○ georel=near: Busca entidades a una determinada distancia. Soporta los modificadores:

■ maxDistance: Dentro del círculo

■ minDistance: Fuera del círculo

○ georel=coveredBy: Puntos dentro de un polígono

○ georel=intersects: Dos polígonos intersectan

○ georel=equals: Dos polígonos son idénticos

○ georel=disjoint: No intersectan

● Geometry: Es la referencia a la figura sobre la que se resuelve la query. Puede ser de tipo:

○ geometry=point: define un punto (posición geográfica)

○ geometry=line: define una línea

○ geometry=polygon: define un polígono

○ geometry=box: define un cuadrado delimitador

Ejemplo: &georel=coveredBy&geometry=polygon&coords=25.774,-80.190;18.466,-66.118;32.321,-64.757;25.774,-80.190

46

7. Uso Avanzado: Geoqueries

47

7. Uso Avanzado: Geoqueries

GET /v2/entities?georel=near;maxDistance:13500&geometry=point&coords=40.418889,-3691944

48

7. Uso Avanzado: Geoqueries

GET /v2/entities?georel=near;minDistance:13500&geometry=point&coords=40.418889,-3691944

49

7. Uso Avanzado: Soporte de fechas

Basado en ISO8601 y con un tipo de atributo reservado: DateTime

Permite hacer búsquedas por fechas:

GET /v2/entities?q=birthDate<1985-01-01T00:00:00

Las entidades y los atributos tienen fecha de modificación y

de creación. Se pueden consultar con las siguientes queries:

GET /v2/entities/myEntity?options=dateModified,dateCreated

GET /v2/entities/myEntity?attrs=dateModified,dateCreated

GET /v2/entities/myEntity?metadata=dateModified,dateCreated

Más detalles en: https://fiware-orion.readthedocs.io/en/master/user/ngsiv2_implementation_notes/index.html#datetime-support

POST /v2/entities…{"id": "John","birthDate": {"type": "DateTime","value": "1979-10-14T07:21:24.238Z"

}}

Ejemplo: entidad John, con atributo birthDate usando el tipo DateTime

50

7. Uso Avanzado: Paginación

Cuando se tienen grandes conjuntos de datos, ayuda a dividir y obtener la información en diferentes

bloques/peticiones.

Cuatro parámetros:

● limit: Números de elementos por página (por defecto 20, máximo 1000)

● offset: Números de elementos a saltar (desde el principio)

● count (opcional): Devuelve sólo el número total de elementos de la petición

● orderBy (opcional): Atributos por los que se puede ordenar los resultados

○ Por defecto se ordenan por fecha de creación

○ Se pueden usar los atributos especiales dateCreated y dateModified

GET /v2/entities?limit=20&offset=0&orderBy=temp,!humidity

51

7. Uso Avanzado: Proveedores de contextoApplication

Context Broker

Context Provider

1. registerContext(provider= )

db

2. query 3. query

4. data5. dataContext

Consumer

http://fiware.github.io/specifications/ngsiv2/stable/ (Apartado Registrations)

52

Referencias

✓ Documentación de la plataforma Thinking Cities:

▪ https://thinking-cities.readthedocs.io/

✓ Modelos normalizados FIWARE

▪ https://fiware-datamodels.readthedocs.io/

✓ Especificación FIWARE NGSIv2

▪ http://fiware.github.io/specifications/ngsiv2/stable/

✓ Orion Context Broker

▪ https://fiware-orion.readthedocs.io/

✓ IoT Agent UL2.0

▪ https://fiware-iotagent-ul.readthedocs.io/

53

ANEXOS

54

HTTP

Códigos de respuesta1xx: Respuestas informativas. Indica que la petición ha sido recibida y se está procesando.2xx: Respuestas correctas. Indica que la petición ha sido procesada correctamente.3xx: Respuestas de redirección. Indica que el cliente necesita realizar más acciones para finalizar la petición.4xx: Errores causados por el cliente. Indica que ha habido un error en el procesado de la petición a causa de que el cliente ha hecho algo mal.5xx: Errores causados por el servidor. Indica que ha habido un error en el procesado de la petición a causa de un fallo en el servidor.

Método Acción

GET Obtiene un recurso

POST Envía datos por el cuerpo

PUT Sube un recurso o fichero (más eficiente

que post)

DELETE Elimina un recurso

55

HTTP

56

CONTEXT BROKER (NGSI)

IoT Agent Manager

IoT Agent UL 2.0

…IoT Agent JSON

• Crear nuevo IoT Agent (con otro protocolo)• Provisionar configuración dispositivo lógico• Consultar dispositivos provisionados

Puerto 8088

device_ID: sensor1

Protocolo: UL 2.0

Transporte: HTTP

Entidad: entity1

Parámetros → atributos:

t → temperature

h→ humidity

…Puerto 8085

UL_apikey

Payload:

t|25#h|80

device_ID: sensor2

Protocolo: JSON

Transporte: HTTP

Entidad: entity2

Parámetros → atributos:

temp → temperature

humid → humidity

sensor1 sensor2

Puerto 8185JSON_apikey

Payload:

{

"temp": 4,

"humid": 31.5

}

{

"id": "entity1",

"type": "myType",

"temperature": {

"type": "Number",

"value": 25

},

"humidity": {

"type": "Number",

"value": 80

}

}

{

"id": "entity2",

"type": "myType",

"temperature": {

"type": "Number",

"value": 4

},

"humidity": {

"type": "Number",

"value": 31.5

}

}

HTTP / MQTT

IDAS

57

Plataforma UMA: Datos de acceso

Servicio Host Puerto

Identity Manager (IDM) https://150.214.58.178/ 6001

Context Broker* (API NGSI) https://150.214.58.178/ 2026

IoT Agent Manager https://150.214.58.178/ 9082

IoT Agent Ultralight 2.0 https://150.214.58.178/ 7896

* Realmente lo que atacamos en el puerto 2026 es el PEP Proxy