PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
PROYECTO SMART CITY UMA FIWARE y Plataforma Thinking Cities Smart Cities Telefónica España 15.07.2019
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 2
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 3
Agenda Formación (4 días) DÍA 1 SESIÓN ALCANCE PONENTE (lun 15/07) 09:00 - 14:00 FIWARE y Plataforma Thinking Cities PLATAFORMA Telefónica DÍAS 2 y 3 (mar 16/07 y SESIÓN ALCANCE PONENTE mié 17/07) 09:00 - 14:00 Red de sensores Waspmote 14:00 - 15:00 COMIDA DISPOSITIVOS Libelium 15:00 - 17:00 Red de sensores Waspmote DÍA 4 SESIÓN ALCANCE PONENTE (jue 18/07) 09:00 - 14:00 Integración de sensores con la plataforma INTEGRACIÓN EDP 4
1. Intro: Plataforma basada en estándar FIWARE Capa estandarizada de acceso a la información para los diferentes dispositivos y tecnologías Proyecto 1 Proyecto 2 Proyecto 3 … Proyecto n Investigadores Protocolo estándar Thinking Cities Plataforma IoT WiFi ZigBee LoRaWAN Sigfox LTE Sensores Actuadores Equipos Terminales 6
1. Intro: Arquitectura Plataforma FIWARE Short Term Complex Event Historic (STH) Processing (CEP) Other Services Queries / Subscriptions CONTEXT BROKER (NGSI) IDM & Auth Apps Legacy Systems IoT Agents 3rd Party Measures / Commands IoT Sensors Actuators 7
1. Intro: Interacción con el Context Broker CONTEXT PRODUCERS CONTEXT BROKER CONTEXT CONSUMERS suscriptions 2026 query update notify 2026 update update notify 8
1. Intro: Relación con FIWARE Thinking Cities Platform IDM Plugins extra OAuth de seguridad Server PEP Proxy Modelo multiusuario STH Context Portal de Configuración Broker CEP Entorno y equipo IoT Agents de soporte dedicado Módulos adicionales de Telefónica 9
1. Intro: Portal de configuración Facilita la gestión de: ▪ Servicios & Subservicios ▪ Entidades & Atributos ▪ Reglas del CEP ▪ Usuarios ▪ Dispositivos IoT ▪ Subscripciones Telefónica IoT Platform REST API Client vs 10
1. Intro: Gestión multiusuario Service 1 N Subservice (Fiware-Service) (Fiware-ServicePath) admin SubServiceAdmin ServiceCustomer SubServiceCustomer 1 N Role User 11
1. Intro: Servicios / Subservicios en la UMA https://150.214.58.178/ PLATAFORMA UMA Servicios: smart_uma smart_campus_uma … apicampus biblio_smart cai_uma ciesc conmet dias2p_streetqr Subservicios: formacion_uma smart_city fraterni_lab green_senti (Formación) (Red de Pruebas) hort_sost mahduma microsol smart_secure_ev_urban_lab smart_trees e4 usmartdrive tfg_visor_iot … 12
2. API NGSI: Información de contexto APPLICATION / SERVICE City Governance System City Services NGSI API 3rd Party apps Bus CONTEXT BROKER - Location Shop - Nº Passengers Citizen - Location - Driver - Name - Surname - Business Name - License Plate - Birthday - Franchise - Preferences - Offerings - Location - ToDo list Entity Attributes • EntityId “has” • Name • EntityType • Type 1 n • Value 13
2. API NGSI: Ejemplo de uso API NGSI API estándar para el manejo de información de contexto ID de la entidad Nombre del atributo API Restful, simplifica y acelera el desarrollo Valor del atributo GET /v2/entities/plant/attrs/humidity PUT /v2/entities/plant/attrs/status/value “watering” NGSI API NGSI API Orion Context Broker Permite leer la humedad para Cambiando el valor del atributo decidir cuándo regar la planta “status” a “watering” disparamos la ejecución del proceso que inicia el 14 riego en el dispositivo IoT
2. API NGSI: CRUD de entidades GET /v2/entities Obtiene todas las entidades que se hayan creado POST /v2/entities Crea una entidad GET /v2/entities/{entityID} Obtiene una entidad dado su ID POST: Actualiza y si el atributo no existe lo crea. [POST|PATCH|PUT] /v2/entities/{entityID}/attrs PATCH: Actualiza y si el atributo no existe no lo crea. Actualiza los atributos de una entidad PUT: Reemplaza todos los atributos de la entidad por los nuevos que pongamos. DELETE /v2/entities/{entityID} Borra una entidad 15
2. API NGSI: CRUD de atributos GET /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}/value Obtiene el valor de un atributo concreto PUT /v2/entities/{entityID}/attrs/{attrName}/value Actualiza el valor de un atributo concreto 16
2. API NGSI: Envío de datos al Context Broker Creando entidad “car” Actualizando atributo “speed” POST {{host}}:2026/v2/entities PUT {{host}}:2026/v2/entities/Car1/attrs/speed Content-Type: application/json Content-Type: application/json … … { { "id": "Car1", "type": "Number", "type": "Car", "value": 110 "speed": { } "type": "Number", "value": 98 } } 201 Created 17
2. API NGSI: Consulta de datos del Context Broker Consultando atributo “speed” GET {{host}}:2026/v2/entities/Car1/attrs/speed 200 OK Content-Type: application/json … { "type": "Number", "value": 110, "metadata": {} } 18
2. API NGSI: Modelo de datos completo "id": "Car1", "type": "Car", "speed": { Uso de metadatos: "type": "Number", "value": 110, Amplían y/o particularizan la información de cada atributo "metadata": { "unit": { "type": "Text", "value": "km/h" } } } Entity Attributes Metadata “has” • Name “has” • Name • EntityId • Type • Type • EntityType 1 n • Value 1 n • Value 19
3. Modelo de datos armonizados En todos los sectores Alertas Transporte Propuestas a través de GitHub Superconjunto de los modelos de la GSMA Enlaces con los modelos de datos Parking Residuos 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 Alumbrado Medio Público Ambiente 20
4. Seguridad: Arquitectura Similar al modelo Oauth (utilizado por Google, Facebook, etc) 1 Elementos involucrados ● IDM: Provee la identificación del usuario ● PEP: Proxy que deja pasar las peticiones App ● PDP: Contiene los roles y permisos de los distintos usuarios IDM 2 Pasos: 1. Login en IDM con usuario y contraseña PEP para obtener un token (válido por 1 hora). Proxy 2. Hacer la petición al Context Broker a través del PEP facilitando el token. 21
4. Seguridad: Obtener token del IDM (I) POST /v3/auth/tokens HTTP/1.1 201 Created Host: {{host}}:{{idm_port}} Server :nginx Content-Type: application/json Date :Wed, 03 Apr 2019 11:24:30 GMT { “auth": { Content-Type :application/json "identity": { Content-Length :840 "methods": [ Connection :keep-alive "password" X-Subject-Token :b2a955dbb2c74caca59bf0bbdf1a44df ], Vary :X-Auth-Token "password": { X-Openstack-Request-Id :req-a662643f-72d3-4325-832e-b88cdfe51f08 "user": { X-Frame-Options :SAMEORIGIN "domain": { Strict-Transport-Security :max-age=31536000; includeSubdomains; "name": "{{service}}" X-Content-Type-Options :nosniff }, Cache-Control :no-cache, no-store, max-age=0, must-revalidate "name": "{{user}}", Pragma :no-cache "password": "{{password}}" Expires :0 } X-XSS-Protection :1; mode=block } Referrer-Policy :same-origin }, ... "scope": { "project": { "domain": { "name": "{{service}}" }, "name": "{{subservice}}" } }}} 22
4. Seguridad: Obtener token del IDM (II) 23
5. Subscripciones: Flujo Registro de subscripción POST /v2/subscriptions Webhook (Callback HTTP) Update Entity Context Broker Notification POST /v2/entities POST myHTTPServer www.putsreq.com http://telefonicaid.github.io/fiware-orion/api/v2/stable/ (Apartado Subscriptions) 24
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 25
5. Subscripciones: Herramientas de depuración Permiten ver el contenido enviado por las notificaciones. Algunas utilidades web gratuitas: ● webhook.site ● requestbin.net ● putsreq.com 26
5. Subscripciones: Registro y envío de notificación POST /v2/subscriptions HTTP/1.1 POST /aGSZ2hnoTXRaO4JHZNY1 HTTP/1.1 Host: {{host}}:{{cb_port}} Ejemplo de Host: putsreq.com Ejemplo de Fiware-Service: {{service}} Fiware-Service: smart_uma Fiware-ServicePath: {{subservice}} subscripción Fiware-ServicePath: /formacion_uma notificación X-Auth-Token: {{token}} X-Auth-Token: 077ceb500f34419e87c5776e17f86605 Content-Type: application/json Content-Type: application/json { NGSIV2-ATTRSFORMAT: normalized "description": "A subscription to get info about myEntity", CONTENT-LENGTH: 146 "subject": { { "entities": [ "subscriptionId": "5c90d94515853173859be497", { "data": [ Para obtener todos los ids de "id": "myEntity", { "type": "myType" un determinado tipo habría "id": "myEntity", } que poner: "id" : ".*" "type": "myType", ], "temperature": { La notificación puede configurarse en "condition": { "type": "Number", "attrs": [ ] "value": 26, NGSIv1 o NGSIv2 dependiendo del } "metadata": {} valor establecido en "attrsFormat". }, } "notification": { } Actualmente, si la subscripción se "http": { ] crea o edita desde el portal web, se "url": "https://webhook.site/6a29954a-1a55-43c2-8dd0-3a9c7f4d23b5" } }, establece por defecto en formato "attrs": ["temperature"], NGSIv1 aunque es posible modificarlo "attrsFormat": "normalized" "legacy" → NGSIv1 } con POSTMAN. } "normalized" → NGSIv2 27
5. Subscripciones: Condiciones POST /v2/subscriptions HTTP/1.1 Permiten enviar la notificación sólo Host: {{host}}:{{cb_port}} Fiware-Service: {{service}} cuando se cumple una determinada Fiware-ServicePath: {{subservice}} X-Auth-Token: {{token}} condición: Content-Type: application/json { "description": "A subscription to get info about myEntity", ● attrs: cuando se actualiza alguno de los "subject": { "entities": [{ atributos especificados en el campo attrs. "id": "myEntity", ● expression: cuando se cumple la "type": "myType" }], expresión especificada. Tipos de "condition": { "attrs": ["temperature"], expresiones: q, mq, georel, geometry y "expression": {"q": "temperature0"} } coords }, "notification": { "http": {"url": "https://webhook.site/6a29954a-1a55-43c2-8dd0-3a9c7f4d23b5"}, "attrs": ["temperature"] } } 28
5. Subscripciones: Custom Notificacions Permiten modificar el contenido POST /v2/subscriptions HTTP/1.1 Host: {{host}}:{{cb_port}} Fiware-Service: {{service}} de los headers y payload de la Fiware-ServicePath: {{subservice}} X-Auth-Token: {{token}} notificación Content-Type: application/json { ● Uso del patrón ${..} para sustituir por "description": "Custom payload example", "subject": { los datos de la entidad "entities": [ {"id": "myEntity", "type": "myType"} ], "condition": {"attrs": [ ]} ● Uso del campo httpCustom en vez del }, "notification": { campo http en la creación de la "httpCustom": { "url": "https://webhook.site/6a29954a-1a55-43c2-8dd0-3a9c7f4d23b5", subscripción. Permite modificar "headers": {"MyHeader": "MyValue“}, método, cabeceras y contenido de la "method": "POST", "payload": "La temperatura de la entidad %22${id}%22 es: ${temperature} grados C" petición (no tiene por qué ser JSON). }, "attrs": ["temperature"] } } 29
5. Subscripciones: Custom Notificacions Ejemplo: PUT /v2/entities/DC_S1-D41/attrs/temp/value?type=Room Creación de la Custom Notification … 23.4 … "httpCustom": { "url": "http://foo.com/entity/${id}", update "headers": { "Content-Type": "text/plain" }, "method": "PUT", "qs": { "type": "${type}" }, "payload": "The temperature is ${temp} degrees" } notification … PUT http://foo.com/entity/DC_S1-D41?type=Room Content-Type: text/plain Content-Length: 31 The temperature is 23.4 degrees 30
5. Subscripciones: Estado de las notificaciones Status failed significa que el último intento de notificación ha fallado. La información detallada está en el elemento 200 OK Content-Type: application/json notification con los siguientes campos: … [{ ● timesSent: número total de intentos (fallidos y "id": " 51c0ac9ed714fb3b37d7d5a8 ", satisfactorios) "expires": "2026-04-05T14:00:00.00Z", "status": "failed", ● lastSuccess: última vez que se notificó con éxito "subject": { … }, "notification": { ● lastFailure: última vez que hubo un fallo en la "timesSent": 3, "lastNotification": "2016-05-31T11:19:32.00Z", notificación "lastSuccess": "2016-05-31T10:07:32.00Z", ● lastNotification: última vez que se envió una "lastFailure": "2016-05-31T11:19:32.00Z", … notificación (con o sin éxito) } }] 31
6. IoT Agent: Arquitectura Los IoT Agents traducen el protocolo que hablan los dispositivos a NGSI Ventajas ● No necesitan ir securizados (o pueden usar otro tipo de securización) Ultralight 2.0 JSON Sigfox ● Emplean protocolos IoT ● Proveen una capa de abstracción (mapeo de parámetro con atributo) DEV DEV DEV ... ● Permite gestionar grupos de dispositivos comunes (grupos de provisionamiento) Grupo de prov 1 Grupo de prov 2 Grupo de prov 3 32
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/ ● SigFox https://github.com/telefonicaid/sigfox-iotagent 33
6. IoT Agent: Tipos de Mensajes Commands Active Attributes Lazy Attributes 34
6. IoT Agent: Grupos de provisionamiento POST /iot/services HTTP/1.1 Al crear un grupo de provisionamiento se Host: {{host_iota}}:{{iota_port}} Fiware-Service: {{service}} especifica: Fiware-ServicePath: {{subservice}} X-Auth-Token: {{token}} ● Protocolo Content-Type: application/json ● Apikey { "services": [ ● Mapeo de atributos { "attributes": [], ● Autoprovisionamiento de entidades "static_attributes": [], "apikey": "AAFF9977", "protocol": [ "IoTA-UL" ], "entity_type": "lamp" } ] } 35
6. IoT Agent: Provisión de dispositivos 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" }, { "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" }]} 36
6. IoT Agent: Transformación de medidas POST /iot/devices HTTP/1.1 Host: {{host_iota}}:{{iota_port}} Operaciones numéricas: multiplicar (‘*’), dividir (‘/’), Fiware-Service: {{service}} sumar (‘+’), restar (‘-’), negar (‘-’), potencia (‘^’) Fiware-ServicePath: {{subservice}} X-Auth-Token: {{token}} Content-Type: application/json {"devices": [ Operaciones de cadena: {"device_id": "id_sen1", "entity_name": "myEntity", ● Concatenar ('#'): "entity_type": "myType", "attributes": [ ● Localización de substrings (indexOf(, { "object_id": "t", "name": "temperature", )): devuelve el índice de la 1º "type": "Number" }, coincidencia de en la cadena { "name": "humidity", . "type": "Number", "expression":"${@h*100}" }, ● substring (substr(, )): { "name": "location", "type": "geo:point", ● Eliminar espacios en blanco (trim()): "expression":"${@latitude}, ${@longitude}" } ], https://iotagent-node- "protocol": "IoTA-UL", "transport": "HTTP" lib.readthedocs.io/en/latest/expressionLanguage/index.html }]} 37
6. IoT Agent: Envío de datos con Ultralight 2.0 HTTP 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 “#”: ||#|| … ▪ Si las medidas comparten el mismo TimeInstant, usar como separador la “|”: |||| … ▪ 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 “#”: ||| … ò |#| … 38
6. IoT Agent: Envío de comandos con Ultralight 2.0 ● 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) Provisionamiento (IOTA) Escritura comando (Context Broker) Lectura (Dispositivo) { PUT /v1/contextEntities/type/myType/id/myEntity/attributes/cmd POST /iot/d?k={{UL_apikey}}&i=id_sen&getCmd=1 "devices": [ { Fiware-Service:{{service}} HTTP/1.1 "device_id": “id_sen", Fiware-ServicePath:{{subservice}} Host: {{host_iota}}:{{UL_port}} "entity_name": “myEntity", X-Auth-Token:{{token}} Content-Type: text/plain "entity_type": “myType", Content-Type:application/json 2019-07-12T00:35:30Z|h|60|t|31.5 "protocol":"IoTA-UL", "transport": "HTTP“, { 200 OK ... "value":{ "commands": [{ "sleep": "10min“ id_sen@cmd|sleep=10min "name": “cmd", }, "type": "command" "type": "command“ }] } ... }] } 39
7. Uso Avanzado del Context Broker • Operaciones batch • Filtrado de entidades • Geo-localización • Soporte de fechas • Paginación • Federación & proveedores de contexto 40
7. Uso Avanzado: Operaciones batch POST /v2/op/update Posibles operaciones: Conten-Type: application/json ... ● Update: Crea, actualiza o borra una lista de entidades en { una sola petición. "actionType": "APPEND", ● Query: Permite hacer una búsqueda avanzada. "entities": [ ● Notify: Envía o consume el payload de notificaciones { "id": "Room1", ENTRANTES y lo persiste. Sirve para sincronizar los datos "type": "Room", entre distintos Context Brokers (Federación) "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) 41
7. Uso Avanzado: Filtrado de entidades (I) Tipos de filtros Para la operación GET /v2/entities: ● Por tipo de entidad: GET :/v2/entities?type=Room ● Por ID: GET :/v2/entities?id=Room1,Room2 ● Por patrón de ID (regex): GET :/v2/entities?idPattern=^Room[2-5] ● Por patrón de tipo (regex): GET :/v2/entities?typePattern=T[ABC] ● Por valor de atributo (q): GET :/v2/entities?q=temperature>25 ● Por valor de metadata (mq): GET :/v2/entities?mq=temperature.avg>25 ● Por ubicación geográfica ● Se pueden anidar varios filtros (como una condición AND) 42
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 (=) ● Less or equal than (
7. Uso Avanzado: Datos geoespaciales POST /v2/entities Tipos de atributos geospaciales { "type": "City", "id": "Madrid", ● geo:point "position": { "type": "geo:point", ● geo:line "value": "40.418889, -3.691944" ● geo:box } } ● geo:polygon ● geo:json POST /v2/entities { "type": "City", "id": "Barcelona", "position": { "value": { "type": "Point", http://fiware.github.io/specifications/ngsiv2/stable/ "coordinates": [2.186447514, 41.3763726] }, (Apartado Geospatial properties of entities) "type": "geo:json" } } 44
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 45
7. Uso Avanzado: Geoqueries 46
7. Uso Avanzado: Geoqueries GET /v2/entities? georel=near;maxDistance:13500& geometry=point& coords=40.418889,-3691944 47
7. Uso Avanzado: Geoqueries GET /v2/entities? georel=near;minDistance:13500& geometry=point& coords=40.418889,-3691944 48
7. Uso Avanzado: Soporte de fechas Basado en ISO8601 y con un tipo de atributo reservado: DateTime Permite hacer búsquedas por fechas: Ejemplo: entidad John, con GET /v2/entities?q=birthDate
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 50
7. Uso Avanzado: Proveedores de contexto Application 1. registerContext(provider= ) 2. query 3. query 5. data 4. data Context Context Context Consumer Broker Provider db http://fiware.github.io/specifications/ngsiv2/stable/ (Apartado Registrations) 51
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/ 52
ANEXOS 53
HTTP 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 Códigos de respuesta 1xx: 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. 54
HTTP 55
CONTEXT BROKER (NGSI) IDAS { "id": "entity1", { "id": "entity2", "type": "myType", "type": "myType", "temperature": { "temperature": { device_ID: sensor1 "type": "Number", "type": "Number", Protocolo: UL 2.0 "value": 25 "value": 4 }, }, Transporte: HTTP "humidity": { "humidity": { Entidad: entity1 "type": "Number", "type": "Number", "value": 80 "value": 31.5 Parámetros → atributos: } } t → temperature } } h→ humidity IoT Agent device_ID: sensor2 Manager Protocolo: JSON Transporte: HTTP Puerto 8088 Entidad: entity2 Parámetros → atributos: IoT Agent IoT Agent temp → temperature … humid → humidity UL 2.0 JSON Puerto 8185 … Puerto 8085 UL_apikey JSON_apikey HTTP / MQTT Payload: Payload: • Crear nuevo IoT Agent (con otro protocolo) t|25#h|80 { • Provisionar configuración dispositivo lógico "temp": 4, • Consultar dispositivos provisionados "humid": 31.5 } sensor1 sensor2 56
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 57
También puede leer