Escenario: envío de datos no estructurados mediante HTTP

En este escenario se explica cómo utilizar la plataforma Internet of Things para conectar un dispositivo con el fin de enviar datos de telemetría no estructurados a la nube mediante HTTP y cómo ver los datos en APEX.

  1. Crear un grupo de dominios IoT
  2. Crear un dominio IoT
  3. Crear una instancia de gemelo digital
  4. Enviar datos
  5. Configurar el dominio IoT para acceder a APEX
  6. Acceda a los datos de IoT en APEX

Para cada dispositivo que desee conectar a su Internet of Things, complete los pasos siguientes:

Paso 1: Crear un grupo de dominios IoT

Utilice el comando oci iot domain-group create y los parámetros necesarios <compartment-OCID> y <domain-group-name> para crear un grupo de dominios IoT en un compartimento específico. Sustituya el <compartment-OCID> por el OCID del compartimento en el que desea crear el grupo de dominios. Sustituya <domain-group-name> por el nombre del grupo de dominios y, opcionalmente, sustituya <your-sample-description> por una descripción:

oci iot domain-group create --compartment-id <compartment-OCID> --display-name <domain-group-name> --description <your-sample-description>

La creación de un grupo de dominios IoT puede tardar unos minutos. En este ejemplo de respuesta se muestra que el grupo de dominios está creando y utiliza esta URL de host de datos:

wtmn2xs4ifkba.data.iot.us-phoenix-1.oci.oraclecloud.com

domain group short id: wtmn2xs4ifkba

data-host:<domain-group-short-id>.data.iot.<region>.oci.oraclecloud.com

{
  "data": {
    "compartment-id": "<compartment-OCID>",
    "data-host": "wtmn2xs4ifkba.data.iot.<region>.oci.oraclecloud.com",
    "db-allow-listed-vcn-ids": null,
    "db-connection-string": null,
    "db-token-scope": null,
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user@oracle.com",
        "CreatedOn": "2025-08-14T16:43:02.950Z"
      }
    },
    "description": "<your-domain-group-description>",
    "display-name": "<your-domain-group-name>",
    "freeform-tags": {},
    "id": "<domain-group-OCID>",
    "lifecycle-state": "CREATING",
    "system-tags": {},
    "time-created": "2025-08-14T16:43:03.307000+00:00",
    "time-updated": "2025-08-14T16:43:03.307000+00:00"
  },
  "etag": "<unique-id>",
  "opc-work-request-id": "<work-request-OCID>"
}
        
Paso opcional: obtener actualizaciones de solicitud de trabajo al crear un grupo de dominios IoT
Opcional. Durante el tiempo que se tarda en crear el grupo de dominios, utilice el comando oci iot work-request get y el parámetro necesario para obtener las actualizaciones de la solicitud de trabajo para crear un proceso de grupo de dominios. Sustituya <work-request-id> por el OCID de la solicitud de trabajo desde la creación de una respuesta de grupo de dominios IoT:
oci iot work-request get --work-request-id <work-request-OCID>

En esta respuesta de ejemplo se muestra que la operación de creación de un grupo de dominios está en curso.

{
  "data": {
    "compartment-id": "<compartment-OCID>",
    "id": "<work-request-OCID>",
    "operation-type": "CREATE_IOT_DOMAIN_GROUP",
    "percent-complete": 50.0,
    "resources": [
      {
        "action-type": "IN_PROGRESS",
        "entity-type": "iotDomainGroup",
        "entity-uri": "/20250531/iotDomainGroups/<iot-domain-group-OCID>",
        "identifier": "<work-request-OCID>",
        "metadata": null
      }
    ],
    "status": "ACCEPTED",
    "time-accepted": "2025-08-14T16:43:03.327000+00:00",
    "time-finished": null,
    "time-started": null,
    "time-updated": "2025-08-14T16:43:22.121000+00:00"
  },
  "etag": "<unique-id>"
}
        
Paso Opcional: Mostrar Errores de Solicitud de Trabajo al Crear un Grupo de Dominios IoT
Opcional. Durante el tiempo que se tarda en crear el grupo de dominios, si desea comprobar si hay errores, puede utilizar el comando oci iot work-request list-errors y el parámetro necesario para mostrar los errores de solicitudes de trabajo para el proceso de creación de un grupo de dominios:
oci iot work-request list-errors --work-request-id <work-request-OCID>
Ejemplo de respuesta:
{
  "data": {
    "items": []
  }
}
Paso opcional: Mostrar logs de solicitud de trabajo al crear un grupo de dominios IoT
Opcional. Durante el tiempo que se tarda en crear el grupo de dominios, si desea mostrar las entradas de logs, puede utilizar el comando oci iot work-request list-logs y el parámetro necesario para mostrar las entradas de log para la solicitud de trabajo:
oci iot work-request list-logs --work-request-id <work-request-OCID>

En esta respuesta de ejemplo se muestran los pasos para crear el grupo de dominios IoT y que está terminando:

{
  "data": {
    "items": [
      {
        "message": "Generating database credentials",
        "timestamp": "2025-08-14T16:43:12.150000+00:00"
      },
      {
        "message": "Creating database",
        "timestamp": "2025-08-14T16:43:18.156000+00:00"
      },
      {
        "message": "Provisioning database",
        "timestamp": "2025-08-14T16:43:22.121000+00:00"
      },
      {
        "message": "Enabling data guard",
        "timestamp": "2025-08-14T16:48:25.138000+00:00"
      },
      {
        "message": "Configuring admin secret rotation ",
        "timestamp": "2025-08-14T16:53:59.878000+00:00"
      },
      {
        "message": "Generating DNS record(s)",
        "timestamp": "2025-08-14T16:54:05.318000+00:00"
      },
      {
        "message": "Configuring routing policy",
        "timestamp": "2025-08-14T16:54:06.455000+00:00"
      },
      {
        "message": "Finishing work request",
        "timestamp": "2025-08-14T16:54:58.139000+00:00"
      }
    ]
  }
}
Paso opcional: se ha completado la solicitud de trabajo para confirmar la creación del grupo de dominios IoT
  1. Opcional. Utilice el comando oci iot work-request get y el parámetro necesario para obtener la actualización de la solicitud de trabajo para el grupo de dominios. Sustituya <work-request-id> por el OCID de la solicitud de trabajo:
    oci iot work-request get --work-request-id <work-request-OCID>

    En esta respuesta de ejemplo se muestra que la creación del grupo de dominios IoT se ha realizado correctamente.

    {
      "data": {
        "compartment-id": "<compartment-OCID>",
        "id": "<work-request-OCID>",
        "operation-type": "CREATE_IOT_DOMAIN_GROUP",
        "percent-complete": 100.0,
        "resources": [
          {
            "action-type": "CREATED",
            "entity-type": "iotDomainGroup",
            "entity-uri": "/20250531/iotDomainGroups/<domain-group-OCID>",
            "identifier": "<domain-group-OCID>",
            "metadata": null
          }
        ],
        "status": "SUCCEEDED",
        "time-accepted": "2025-08-14T16:43:03.327000+00:00",
        "time-finished": "2025-08-14T16:54:58.139000+00:00",
        "time-started": "2025-08-14T16:43:12.131000+00:00",
        "time-updated": "2025-08-14T16:54:58.139000+00:00"
      },
      "etag": "<unique-id>"
    }
    

Paso opcional: obtener los detalles del grupo de dominios IoT

Utilice el comando oci iot domain-group get y el parámetro necesario para obtener los detalles del grupo de dominios IoT, incluidos los detalles de conexión a la base de datos del grupo de dominios, si está configurado. Sustituya <iot-domain-group-OCID> por el OCID del grupo de dominios IoT:

oci iot domain-group get --iot-domain-group-id <iot-domain-group-OCID>
En este ejemplo, la respuesta muestra que el grupo de dominios está activo, "lifecycleState": "ACTIVE" y utiliza el siguiente host de datos: wtmn2xs4ifkba.data.iot.us-phoenix-1.oci.oraclecloud.com. En este ejemplo, wtmn2xs4ifkba es el ID corto de grupo de dominios IoT.
{
  "data": {
    "compartment-id": "<compartment-OCID>",
    "data-host": "wtmn2xs4ifkba.data.iot.<region>.oci.oraclecloud.com",
    "db-allow-listed-vcn-ids": null,
    "db-connection-string": null,
    "db-token-scope": null,
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user@oracle.com",
        "CreatedOn": "2025-08-14T16:43:02.950Z"
      }
    },
    "description": "This is a sample domain group",
    "display-name": "Sample Domain Group",
    "freeform-tags": {},
    "id": "<iot-domain-group-OCID>",
    "lifecycle-state": "ACTIVE",
    "system-tags": {},
    "time-created": "2025-08-14T16:43:03.307000+00:00",
    "time-updated": "2025-08-14T16:54:58.187000+00:00"
  },
  "etag": "<unique-id>"
}

Paso 2: Crear un dominio IoT

Utilice el comando oci iot domain create y los parámetros <domain-group-OCID> y <compartment-OCID> necesarios para crear un dominio de Internet of Things. Sustituya <domain-group-OCID> por el OCID del grupo de dominios que desea asociar a este dominio IoT. Sustituya <your-sample-description> por una descripción para el dominio IoT.

oci iot domain create --compartment-id <compartment-OCID> --iot-domain-group-id <domain-group-OCID> --display-name <your-iot-domain-name> --description <your-iot-domain-description>

La creación de un dominio puede tardar unos minutos. En esta respuesta de ejemplo, se muestra la URL del host de dispositivo con el domain short id:

"device-host": "cuay2mrhlgrrg.device.iot.<region>.oci.oraclecloud.com"

ID corto de dominio: cuay2mrhlgrrg

"device-host": "<domain-short-id>.device.iot.<region>.oci.oraclecloud.com"

{
  "data": {
    "compartment-id": "<compartment-OCID>",
    "data-retention-periods-in-days": {
      "historized-data": 30,
      "raw-command-data": 16,
      "raw-data": 16,
      "rejected-data": 16
    },
    "db-allow-listed-identity-group-names": null,
    "db-allowed-identity-domain-host": null,
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user@oracle.com",
        "CreatedOn": "2025-08-14T16:57:03.140Z"
      }
    },
    "description": "<your-iot-domain-description>",
    "device-host": "cuay2mrhlgrrg.device.iot.<region>.oci.oraclecloud.com",
    "display-name": "<your-iot-domain-name>",
    "freeform-tags": {},
    "id": "<iot-domain-OCID>",
    "iot-domain-group-id": "<iot-domain-group-OCID>",
    "lifecycle-state": "CREATING",
    "system-tags": {},
    "time-created": "2025-08-14T16:57:03.384000+00:00",
    "time-updated": "2025-08-14T16:57:03.384000+00:00"
  },
  "etag": "<unique-id>",
  "opc-work-request-id": "<work-request-OCID>"
}
Paso Opcional: Obtener Solicitud de Trabajo al Crear un Dominio IoT

Opcional. Durante el tiempo que se tarda en crear el dominio, utilice el comando oci iot work-request get y el parámetro necesario para obtener la actualización de solicitud de trabajo para crear el dominio. Sustituya <work-request-id> por el ID de solicitud de trabajo de la respuesta anterior:

oci iot work-request get --work-request-id <work-request-OCID>

La respuesta de ejemplo muestra que se acepta y está en curso la creación de un dominio IoT.

{
  "data": {
    "compartment-id": "<iot-domain-OCID>",
    "id": "<work-request-OCID>",
    "operation-type": "CREATE_IOT_DOMAIN",
    "percent-complete": 50.0,
    "resources": [
      {
        "action-type": "IN_PROGRESS",
        "entity-type": "iotDomain",
        "entity-uri": "/20250531/iotDomains/<iot-domain-OCID>",
        "identifier": "<iot-domain-OCID>",
        "metadata": null
      }
    ],
    "status": "ACCEPTED",
    "time-accepted": "2025-08-14T16:57:03.413000+00:00",
    "time-finished": null,
    "time-started": null,
    "time-updated": "2025-08-14T16:57:23.124000+00:00"
  },
  "etag": "<unique-id>"
}
Paso opcional: obtener logs de solicitud de trabajo
Opcional. Durante el tiempo que se tarda en crear el dominio, si desea mostrar las entradas de log para la solicitud de trabajo, puede utilizar el comando oci iot work-request list-logs y el parámetro necesario para mostrar las entradas de log para la creación de una solicitud de trabajo de dominio IoT:
oci iot work-request list-logs --work-request-id <work-request-OCID>

En esta respuesta de ejemplo se muestran los pasos para crear el dominio IoT y que está terminando:

{
  "data": {
    "items": [
      {
        "message": "Generating DNS record(s)",
        "timestamp": "2025-08-14T16:57:22.148000+00:00"
      },
      {
        "message": "Onboarding domain schema(s)",
        "timestamp": "2025-08-14T16:57:23.124000+00:00"
      },
      {
        "message": "Successfully onboarded domain schemas",
        "timestamp": "2025-08-14T16:58:43.508000+00:00"
      },
      {
        "message": "Finishing work request",
        "timestamp": "2025-08-14T16:58:43.771000+00:00"
      }
    ]
  }
}
Paso opcional: obtener la solicitud de trabajo al crear el dominio IoT
Opcional. Utilice el comando oci iot work-request get y los parámetros necesarios para obtener la actualización de la solicitud de trabajo para crear el dominio. Sustituya <work-request-id> por el OCID de la solicitud de trabajo:
oci iot work-request get --work-request-id <work-request-OCID>

En esta respuesta de ejemplo se muestra cómo crear el dominio IoT correctamente.

"status": "SUCCEEDED",

{
  "data": {
    "compartment-id": "<compartment-OCID>",
    "id": "<work-request-OCID>",
    "operation-type": "CREATE_IOT_DOMAIN",
    "percent-complete": 100.0,
    "resources": [
      {
        "action-type": "CREATED",
        "entity-type": "iotDomain",
        "entity-uri": "/20250531/iotDomains/<iot-domain-OCID>",
        "identifier": "<iot-domain-OCID>",
        "metadata": null
      }
    ],
    "status": "SUCCEEDED",
    "time-accepted": "2025-08-14T16:57:03.413000+00:00",
    "time-finished": "2025-08-14T16:58:43.771000+00:00",
    "time-started": "2025-08-14T16:57:22.147000+00:00",
    "time-updated": "2025-08-14T16:58:43.771000+00:00"
  },
  "etag": "<unique-id>"
}

Paso opcional: obtener los detalles del dominio IoT

Para confirmar que el dominio está activo, utilice el comando oci iot domain get y el parámetro necesario para obtener los detalles de un dominio. Sustituya <iot-domain-OCID> por el OCID del dominio IoT.
oci iot domain get --iot-domain-id <iot-domain-OCID>

En esta respuesta de ejemplo, se muestra que el dominio está activo: "lifecycle-state": "ACTIVE" y la URL del host del dispositivo con el domain short id:

<domain-short-id>.device.iot.<region>.oci.oraclecloud.com

{
  "data": {
    "compartment-id": "<compartment-OCID>",
    "data-retention-periods-in-days": {
      "historized-data": 30,
      "raw-command-data": 16,
      "raw-data": 16,
      "rejected-data": 16
    },
    "db-allow-listed-identity-group-names": null,
    "db-allowed-identity-domain-host": null,
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user@oracle.com",
        "CreatedOn": "2025-08-14T16:57:03.140Z"
      }
    },
    "description": "<your-iot-domain-description>",
    "device-host": "<domain-short-id>.device.iot.<region>.oci.oraclecloud.com",
    "display-name": "<your-iot-domain-name>",
    "freeform-tags": {},
    "id": "<iot-domain-OCID>",
    "iot-domain-group-id": "<iot-domain-group-OCID>",
    "lifecycle-state": "ACTIVE",
    "system-tags": {},
    "time-created": "2025-08-14T16:57:03.384000+00:00",
    "time-updated": "2025-08-14T16:58:43.789000+00:00"
  },
  "etag": "<unique-id>"
}

Paso 3: Crear una instancia gemela digital

Utilice el comando oci iot digital-twin-instance create y el parámetro <iot-domain-OCID>necesario para crear una instancia de gemelo digital para un dominio IoT asociado. Al crear una instancia de gemelo digital, necesita un ID de autenticación. Utilice un certificado o secreto. Consulte Creación de un secreto.

Sustituya <iot-domain-OCID> por el OCID del dominio IoT para la instancia de gemelo digital. Este comando de ejemplo incluye el nombre mostrado opcional, sustituya <display-name> por un nombre fácil de recordar para la instancia de gemelo digital:
oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --auth-id <vault-secret-OCID> --display-name <display-name>
Ejemplo de respuesta:
{
  "data": {
    "auth-id": "<vault-secret-OCID>",
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user@oracle.com",
        "CreatedOn": "2025-08-14T06:12:43.393Z"
      }
    },
    "description": null,
    "digital-twin-adapter-id": "<iot-digital-twin-adapter-OCID>",
    "digital-twin-model-id": "<iot-digital-twin-model-OCID>",
    "digital-twin-model-spec-uri": "dtmi:com:oracle:example:core:Space:sp;1",
    "display-name": "device for conference room 103",
    "external-key": "<unique-id>",
    "freeform-tags": {},
    "id": "<iot-digital-twin-instance-OCID>",
    "iot-domain-id": "<iot-domain-OCID>",
    "lifecycle-state": "ACTIVE",
    "system-tags": {},
    "time-created": "2025-09-11T06:12:44.178000+00:00",
    "time-updated": "2025-09-11T06:12:44.178000+00:00"
  },
  "etag": "<unique-id>"
}

Paso 4: Enviar datos

Envíe datos mediante la URL del host de dispositivo del paso anterior.

Puede enviar tantos datos como desee. Este ejemplo muestra el envío de 2 mensajes de datos de texto sin formato. El primer ejemplo muestra el comando utilizando valores de este escenario. El segundo comando muestra los nombres de valores. Para obtener más información, consulte Uso de cURL.

Sustituya <domain-short-id> y <region> por los valores de su entorno:

https://<domain-short-id>.device.iot.<region>.oci.oraclecloud.com/sampletopic

Este comando curl de ejemplo incluye la URL del host del dispositivo y muestra los valores basados en este escenario e incluye un tema de ejemplo:
curl -u '9K7F8Y3HJGX1FA1GFG9QVV9E2C<vault-secret-OCID>' https://<domain-short-id>.device.iot.us-phoenix-1.oci.oraclecloud.com/sampletopic -H 'Content-Type: plain-text' -d "sample data 2"
Este comando curl de ejemplo muestra el nombre de los valores sin los valores de ejemplo de este escenario:
curl -u '<external-key>:<vault-secret-OCID>' https://<domain-short-id>.device.iot.<region>.oci.oraclecloud.com/sampletopic -H 'Content-Type: plain-text' -d "sample data 1"

Paso 5: Configurar el acceso del dominio IoT a APEX

Para ver los datos en APEX, es necesario configurar el acceso para ver los datos de IoT en APEX. En un paso de ese proceso se utiliza el siguiente comando para agregar la contraseña de APEX al dominio IoT para que pueda acceder a APEX.

Utilice el comando oci iot domain configure-apex-data-access y los parámetros necesarios para configurar el acceso de un dominio IoT a APEX. Sustituya <your-initial-apex-password> y <iot-domain-OCID> por los valores de su entorno:
oci iot domain configure-apex-data-access --iot-domain-id <iot-domain-OCID> --db-workspace-admin-initial-password <your-inital-apex-password>

Ejemplo de respuesta:

{
  "opc-work-request-id": "<work-request-OCID>"
}
Paso opcional: Obtener solicitud de trabajo para acceso a datos

Opcional. Durante el tiempo que se tarda en configurar el acceso a APEX, utilice el comando oci iot work-request get y el parámetro necesario para obtener la actualización de la solicitud de trabajo. Sustituya <work-request-id> por el ID de solicitud de trabajo de la respuesta anterior:

oci iot work-request get --work-request-id <work-request-OCID>

Ejemplo de respuesta:

{
  "data": {
    "compartment-id": "<compartment-OCID>",
    "id": "<work-request-OCID>",
    "operation-type": "CONFIGURE_DOMAIN_DATA_ACCESS",
    "percent-complete": 0.0,
    "resources": [
      {
        "action-type": "IN_PROGRESS",
        "entity-type": "iotDomain",
        "entity-uri": "/20250531/iotDomains/<iot-domain-OCID>",
        "identifier": "<iot-domain-OCID>",
        "metadata": null
      }
    ],
    "status": "ACCEPTED",
    "time-accepted": "2025-08-14T17:44:44.716000+00:00",
    "time-finished": null,
    "time-started": null,
    "time-updated": "2025-08-14T17:44:44.716000+00:00"
  },
  "etag": "<unique-id>"
}
Paso opcional: mostrar logs de solicitud de trabajo
Opcional. Durante el tiempo que se tarda en configurar el acceso a APEX para el dominio, si desea mostrar las entradas de log, puede utilizar el comando oci iot work-request list-logs y el parámetro necesario para mostrar las entradas de log para la solicitud de trabajo:
oci iot work-request list-logs --work-request-id <work-request-OCID>

En esta respuesta de ejemplo se muestra que el acceso a APEX para el dominio está en curso y que está terminando:

{
  "data": {
    "items": [
      {
        "message": "Configuring domain data access is in Progress",
        "timestamp": "2025-08-14T17:45:19.708000+00:00"
      },
      {
        "message": "Finishing work request",
        "timestamp": "2025-08-14T17:45:19.978000+00:00"
      }
    ]
  }
}
Paso opcional: mostrar errores de solicitud de trabajo
Opcional. Durante el tiempo que se tarda en configurar el acceso a APEX para el dominio, si desea comprobar si hay errores, puede utilizar el comando oci iot work-request list-errors y el parámetro necesario para mostrar los errores de las solicitudes de trabajo:
oci iot work-request list-errors --work-request-id <work-request-OCID>
Ejemplo de respuesta:
{
  "data": {
    "items": []
  }
}
Paso opcional: obtener solicitud de trabajo
Opcional. Para confirmar que la configuración del acceso a APEX ha finalizado, utilice el comando oci iot work-request get y el parámetro necesario para obtener la solicitud de trabajo. Sustituya <work-request-id> por el ID de la solicitud del trabajo:
oci iot work-request get --work-request-id <work-request-OCID>

En esta respuesta de ejemplo se muestra cómo se actualiza la configuración del acceso a APEX para el dominio IoT:

"status": "SUCCEEDED"

{
  "data": {
    "compartment-id": "<compartment-OCID>",
    "id": "<work-request-OCID>",
    "operation-type": "CONFIGURE_DOMAIN_DATA_ACCESS",
    "percent-complete": 100.0,
    "resources": [
      {
        "action-type": "UPDATED",
        "entity-type": "iotDomain",
        "entity-uri": "/20250531/iotDomains/<iot-domain-OCID>",
        "identifier": "<iot-domain-OCID>",
        "metadata": null
      }
    ],
    "status": "SUCCEEDED",
    "time-accepted": "2025-08-14T17:44:44.716000+00:00",
    "time-finished": "2025-08-14T17:45:19.978000+00:00",
    "time-started": "2025-08-14T17:45:19.708000+00:00",
    "time-updated": "2025-08-14T17:45:19.978000+00:00"
  },
  "etag": "<unique-id>"
}

Paso 6: Acceso a los datos de IoT en APEX

  1. Utilice el domain short id que proviene del host de dispositivo para iniciar sesión en APEX:

    https://<domain-group-short-id-from-data-host>.data.iot.<region>.oci.oraclecloud.com/ords/r/apex

    device-host:<domain-short-id>.device.iot.<region>.oci.oraclecloud.com

    En APEX, conéctese mediante:
    Nota

    Utilice solo mayúsculas para <domain-short-id-from-device-host> y observe los dos caracteres de subrayado: __WKSP
  2. Para consultar los datos IoT, seleccione el esquema <domain-short-id-from-device-host>__IOT. Seleccione SQL Workshop y, a continuación, Object Browser.

    URL del taller SQL:

    https://<domain-group-short-id-from-data-host>.data.iot.<region>.oci.oraclecloud.com/ords/r/apex/sql-workshop
  3. Consulte los datos IoT introduciendo y ejecutando un comando SQL. Confirme que ha seleccionado el esquema correcto para la tabla de base de datos que desea consultar y ejecute el siguiente comando:
    select * from RAW_DATA

    Ahora, puede ver las vistas de base de datos, los esquemas y los datos raw del dispositivo conectado a Internet of Things.

    Para ver una captura de pantalla más grande, haga clic con el botón derecho y abra la imagen en una nueva ventana del explorador.

APEX IoT