PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...

Página creada Fabio Albo
 
SEGUIR LEYENDO
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
PROYECTO
SMART CITY UMA
FIWARE y Plataforma Thinking Cities

Smart Cities
Telefónica España
15.07.2019
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
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 - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
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
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
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
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
FIWARE y
    Plataforma
    Thinking Cities

5
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
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
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
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
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
1. Intro: Interacción con el Context Broker
    CONTEXT PRODUCERS          CONTEXT BROKER           CONTEXT CONSUMERS
                           suscriptions         2026
                                                                query

              update                                   notify
                        2026

              update

              update                                   notify

                                          8
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
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
PROYECTO SMART CITY UMA - FIWARE y Plataforma Thinking Cities - FIWARE y Plataforma ...
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