Scénario : envoi de données structurées dans un format par défaut à l'aide de HTTP

Utilisez ce scénario pour un périphérique IoT qui envoie des données structurées au format par défaut à la plate-forme Internet of Things (IoT).

Ce scénario s'applique à un périphérique qui peut être programmé pour envoyer des données dans un format attendu par la plate-forme IoT. Ce scénario nécessite la création d'un modèle de jumeau numérique, d'un adaptateur de jumeau numérique, d'une instance de jumeau numérique et la configuration de l'appareil physique pour envoyer des données de télémétrie au format défini par la plate-forme IoT.

Un administrateur doit ajouter une stratégie à votre location et aux compartiments à utiliser. Pour obtenir des exemples de stratégie et des prérequis, reportez-vous à Détails de stratégie pour la plate-forme Internet of Things (IoT) et à Prérequis IoT.

Etape 1 : création d'un groupe de domaines IoT et d'un domaine IoT

Utilisez un groupe de domaines IoT et un domaine IoT existants ou créez un groupe de domaines IoT et créez un domaine IoT à utiliser pour ce scénario.

Une fois que vous avez le groupe de domaines IoT et le domaine IoT à utiliser, procédez comme suit pour configurer des ressources de jumeaux numériques afin de recevoir des données structurées au format par défaut à partir d'un périphérique. Toutes les ressources IoT doivent se trouver dans la même région.

Étape 2 : Créer un modèle de jumeau numérique

Utilisation de l'interface de ligne de commande

  1. Enregistrez un fragment de code en tant que fichier digital-twin-model.json. Référencez ce fichier à l'étape suivante lorsque vous créez un modèle de jumeau numérique. Pour plus d'informations sur le référencement des fichiers, reportez-vous à la section Using a JSON File for Complex Input.

    Pour créer ce fichier, utilisez le langage DTDL (Digital Twins Definition Language) afin de définir la sémantique du modèle de jumeau numérique. Un modèle de jumeau numérique utilise un identificateur de modèle de jumeau numérique (DTMI) comme identificateur unique.

    Par exemple :

    {
      "@context": [
        "dtmi:dtdl:context;3",
        "dtmi:dtdl:extension:historization;1",
        "dtmi:dtdl:extension:quantitativeTypes;1",
        "dtmi:com:oracle:dtdl:extension:validation;1"
      ],
      "@id": "dtmi:com:oracle:example:hvac;1",
      "@type": "Interface",
      "displayName": "HVAC",
      "description": "A digital twin model for HVAC",
      "contents": [
        {
          "@type": [
            "Telemetry",
            "Temperature"
          ],
          "name": "temperature",
          "schema": "integer",
          "unit": "degreeFahrenheit"
        },
        {
          "@type": [
            "Telemetry",
            "Historized",
            "Validated"
          ],
          "name": "humidity",
          "schema": "integer",
          "minimum": 0,
          "maximum": 100
        },
        {
          "@type": [
            "Property",
            "Historized"
          ],
          "name": "location",
          "schema": "point",
          "writable": false
        },
        {
          "@type": [
            "Property",
            "Validated"
          ],
          "name": "serialNumber",
          "schema": "string",
          "pattern": "^([0-9]){2}([0-9]){5}([0-9]){6}$"
        }
      ]
    }

    Le fragment de code ci-dessus présente une interface de modèle DTDL HVAC avec un contexte et des extensions spécifiques qui décrit les éléments suivants :

    • dtmi:dtdl:context;3 indique que ce modèle utilise la version 3 de DTDL.
    • dtmi:dtdl:extension:historization;1 : indique que ce modèle utilise les données d'historique, en suivant la façon dont les propriétés et les données de télémétrie changent au fil du temps.
    • dtmi:dtdl:extension:quantitativeTypes;1 : indique que ce modèle utilise des types quantitatifs avancés.
    • dtmi:com:oracle:dtdl:extension:validation;1 : indique que ce modèle utilise la validation des données.
    • dtmi:com:oracle:example:hvac;1 est l'identificateur unique de l'unité HVAC.
    • "@type": "Interface" : indique que ce modèle utilise une interface unique.
    • contents : décrit la télémétrie et les propriétés de cette unité HVAC.
    • Ce tableau décrit les données de télémétrie de température de série temporelle envoyées au fil du temps. Entier est le type de données et est mesuré en degrés Fahrenheit.
      {
        "@type": ["Telemetry", "Temperature"],
        "name": "temperature",
        "schema": "integer",
        "unit": "degreeFahrenheit"
      }
    • Ce tableau décrit les données de télémétrie d'humidité historiques et le système valide et applique la plage de valeurs minimale et maximale.
      {
        "@type": [
          "Telemetry",
          "Historized",
          "Validated"
        ],
        "name": "humidity",
        "schema": "integer",
        "minimum": 0,
        "maximum": 100
      }
    • Ce tableau décrit la propriété d'emplacement qui est statique ou qui change lentement au fil du temps et qui est des données historiques. Le point de type de schéma indique un emplacement géographique. La propriété writable est false et n'est pas prise en charge dans cette version :
      {
        "@type": [
          "Property",
          "Historized"
        ],
        "name": "location",
        "schema": "point",
        "writable": false
      }
    • Cette baie décrit la propriété de numéro de série de l'unité HVAC. Si la valeur du numéro de série ne correspond pas au modèle défini, le système rejette le numéro de série.
      {
        "@type": [
          "Property",
          "Validated"
        ],
        "name": "serialNumber",
        "schema": "string",
        "pattern": "^([0-9]){2}([0-9]){5}([0-9]){6}$"
      }
  2. Utilisez la commande oci iot digital-twin-model create avec le paramètre requis pour créer un modèle de jumeau numérique. Remplacez <iot-domain-OCID> par l'OCID du domaine IoT avec lequel vous voulez travailler, référencez le fichier digital-twin-model.json avec vos spécifications :
    oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.json
    Cet exemple de réponse contient <iot-digital-twin-model-OCID>, avec le domaine IoT associé, l'URI DTMI de l'unité HVAC, et indique qu'il est actif :
    {
      "data": {
        "defined-tags": {
          "Oracle-Tags": {
            "CreatedBy": "default/user@oracle.com",
            "CreatedOn": "2025-08-05T17:43:00.438Z"
          }
        },
        "description": "Digital-twin-model-for-HVAC",
        "display-name": "HVAC",
        "freeform-tags": {},
        "id": "<iot-digital-twin-model-OCID>",
        "iot-domain-id": "<iot-domain-OCID>",
        "lifecycle-state": "ACTIVE",
        "spec-uri": "dtmi:com:oracle:example:hvac;1",
        "system-tags": {},
        "time-created": "2025-09-10T17:43:00.508000+00:00",
        "time-updated": "2025-09-10T17:43:00.508000+00:00"
      },
      "etag": "<unique-id>"
    }
    

Etape 3 : création d'un adaptateur jumeau numérique

Lorsque vous créez un adaptateur jumeau numérique, vous pouvez forcer le système à créer une charge utile et un mapping par défaut en ne spécifiant pas les options inbound-envelope ou inbound-routes. Par conséquent, la réponse contiendra la charge utile du périphérique.

Si le mapping d'enveloppe n'est pas spécifié et contient une valeur timeObserved, receivedTime est utilisé comme valeur timeObserved.

Utilisation de l'interface de ligne de commande

Utilisez la commande oci iot digital-twin-adapter create pour créer un adaptateur jumeau numérique. Remplacez <iot-domain-OCID> par l'OCID de domaine IoT. Pour associer le modèle de jumeau numérique, utilisez le paramètre d'URI DTMI --digital-twin-model-spec-uriou le paramètre d'OCID de jumeau numérique --digital-twin-model-id pour associer le modèle de jumeau numérique à cet adaptateur de jumeau numérique.

Cet exemple utilise la commande avec le paramètre --digital-twin-model-spec-uri. Remplacez dtmi:com:oracle:example:hvac;1 par l'URI DTMI du modèle de jumeau numérique à associer à cet adaptateur de jumeau numérique :

oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-spec-uri "dtmi:com:oracle:example:hvac;1"
Ou cet exemple montre l'utilisation de la commande avec le paramètre --digital-twin-model-id. Remplacez <digital-twin-model-OCID> par l'OCID de jumeau numérique du modèle de jumeau numérique à associer à cet adaptateur de jumeau numérique :
oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-id <digital-twin-model-OCID>
Lorsque vous utilisez des données structurées au format par défaut à partir du périphérique, vous n'indiquez pas les paramètres --inbound-envelope <file://inbound-enevelop.json> ou --inbound-routes <file://inbound-routes.json>. Par conséquent, cet exemple de réponse génère la charge utile et le mappage pour l'adaptateur jumeau numérique :
{
  "data": {
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user",
        "CreatedOn": "2025-09-10T17:45:41.318Z"
      }
    },
    "description": null,
    "digital-twin-model-id": "<digital-twin-model-OCID>",
    "digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1",
    "display-name": "<your-digital-twin-adapter-name>",
    "freeform-tags": {},
    "id": "<digital-twin-adapter-OCID>",
    "inbound-envelope": {
      "envelope-mapping": {
        "time-observed": "$.time"
      },
      "reference-endpoint": "/",
      "reference-payload": {
        "data": {
          "humidity": 0,
          "location": {
            "coordinates": [0.0, 0.0],
            "type": "Point"
          },
          "temperature": 0,
          "time": "2025-09-10T17:45:41.387069258Z"
        },
        "data-format": "JSON"
      }
    },
    "inbound-routes": [
      {
        "condition": "*",
        "description": "Default condition",
        "payload-mapping": {
          "$.humidity": "$.humidity",
          "$.location": "$.location",
          "$.temperature": "$.temperature"
        },
        "reference-payload": null
      }
    ],
    "iot-domain-id": "<iot-domain-OCID>",
    "lifecycle-state": "ACTIVE",
    "system-tags": {},
    "time-created": "2025-09-10T17:45:41.389000+00:00",
    "time-updated": "2025-09-10T17:45:41.389000+00:00"
  },
  "etag": "<unique-id>"
}

Etape 4 : création d'une instance de jumeau numérique avec un adaptateur de jumeau numérique

Utilisation de l'interface de ligne de commande

Utilisez les paramètres requis oci iot digital-twin-instance create et <iot-domain-OCID>, <vault-secret-OCID> et <digital-twin--adapter-OCID> pour créer une instance de jumeau numérique pour les données structurées.

Remplacez <iot-domain-OCID> par l'OCID du domaine IoT à mettre à jour. Vous pouvez éventuellement inclure le paramètre d'affichage et remplacer <display-name> par un nom convivial pour l'instance de jumeau numérique.

Remplacez <digital-twin--adapter-OCID> par l'OCID de jumeau numérique créé à l'étape précédente. Remplacez <vault-secret-OCID> par une clé secrète située dans la même région que vos autres ressources de jumeau numérique. Oracle recommande d'utiliser une clé secrète unique pour chaque instance de jumeau numérique. Pour plus d'informations, reportez-vous à la rubrique Création d'une clé secrète.

oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --display-name <display_name> --auth-id <vault-secret-OCID> --digital-twin-adapter-id <digital-twin-adapter-OCID>

Cet exemple de réponse montre le modèle de jumeau numérique, l'adaptateur, les OCID d'instance et l'ID de clé externe de l'instance de jumeau numérique :
{
  "data": {
    "auth-id": "<vault-secret-OCID>",
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/user@oracle.com",
        "CreatedOn": "2025-09-11T06: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:hvac;1",
    "display-name": "your display name",
    "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>"
}

Etape 5 : Envoyer les données de télémétrie

Cet exemple utilise HTTP pour publier des données. Vous pouvez également utiliser MQTT et MQTT sur WebSockets. Pour obtenir des exemples spécifiques, reportez-vous à Scénarios.

HTTP POST data
curl -i -X POST -u '<digital-twin-external-key>:<vault-secret>' -H "Content-Type:application/json" 'https://<domain-short-id-from-device-host>.device-iot.<region>.oci.oraclecloud.com/telemetry' -d '{
            "temperature": 72,
            "humidity": 60,
            "location": {
                "type": "point",
                "coordinates": [40.759010, -73.984474]
            },
            "serialNumber": "5099627036043"
        }'

Etape 6 : Afficher les données de télémétrie

En fonction de l'endroit où vous souhaitez afficher vos données IoT, chaque système nécessite une configuration spécifique pour connecter vos données IoT et les visualiser.

Utilisation de l'API de données IoT pour visualiser les données

Pour visualiser vos données IoT, utilisez l'API de données Internet of Things (IoT), vous devez effectuer les étapes de configuration de l'accès à vos données dans ORDS. Une fois la configuration terminée, vous pouvez utiliser l'API de données pour obtenir les données à surveiller. Les types de données pris en charge sont les suivants : raw, rejected ou historized.

Pour plus d'informations, reportez-vous à la documentation de l'API de données Internet of Things (IoT).

Cet exemple de demande montre comment obtenir des données de télémétrie raw à partir de l'hôte de données du groupe de domaines.
curl -H "Authorization: Bearer <token>" \
              -X GET "https://<domain-group-short-id>.data.iot.<region>.oci.oraclecloud.com/ords/<domain-short-id>/20250531/rawData?q={\"$and\":[{\"digital_twin_instance_id\":\"<iot-digital-twin-OCID>\"}]}"

Cet exemple utilise HTTPs. Vous pouvez également utiliser MQTT et MQTT sur WebSockets. Pour obtenir des exemples spécifiques, reportez-vous à Scénarios.

Utilisation d'instructions SQL pour afficher les données dans APEX ou la base de données

Si vous avez configuré l'accès à votre vue directement dans la base de données ou si vous avez configuré l'accès à votre vue dans APEX, vous pouvez utiliser ces instructions SQL directement dans la base de données ou dans APEX pour visualiser vos données.

Utilisez cette instruction SQL pour visualiser les données de télémétrie rejected. Remplacez <domain-short-id-from-device-host> par l'ID abrégé de domaine de l'hôte de l'appareil et remplacez <digital-twin-OCID> par l'OCID du jumeau numérique à partir duquel vous voulez visualiser les données rejetées :

select * from <domain-short-id-from-device-host>__IOT.REJECTED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';
Remarque

Le nom du schéma contient deux traits de soulignement : __IOT
Vous pouvez également utiliser cette instruction SQL pour afficher les données de télémétrie historiques. Remplacez <domain-short-id-from-device-host> par l'ID abrégé du domaine et remplacez <digital-twin-instance-OCID> par l'OCID de l'instance de jumeau numérique pour laquelle vous voulez visualiser les données rejetées :
select * from <domain-short-id-from-device-host>__IOT.DIGITAL_TWIN_HISTORIZED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';

Utilisez l'instruction SQL suivante pour utiliser les données de télémétrie raw :
select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';

Afin d'obtenir <domain-short-id-from-device-host> pour le domaine IoT, obtenez les détails du domaine IoT avec lequel vous voulez travailler.