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

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

Ce scénario s'applique à un appareil qui peut être programmé pour envoyer des données dans le 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 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 dans le format défini par la plate-forme IoT.

Un administrateur doit ajouter une politique à votre location et aux compartiments à utiliser. Pour obtenir des exemples de politique et des préalables, voir Informations détaillées sur les politiques pour la plate-forme Internet of Things (IoT) et IoT Prerequisites.

Étape 1 : Créer un groupe de domaines IoT et 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 que vous voulez utiliser, suivez ces étapes pour configurer les ressources de jumeau numérique afin de recevoir des données structurées dans un format par défaut à partir d'un appareil. 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 extrait 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 de fichiers, voir Utilisation d'un fichier JSON pour les entrées complexes.

    Pour créer ce fichier, utilisez le langage de définition des jumeaux numériques (DTDL) pour définir la sémantique du modèle de jumeau numérique. Un modèle jumeau numérique utilise un identificateur de modèle jumeau numérique (DTMI) comme identificateur unique.

    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}$"
        }
      ]
    }

    L'extrait de code ci-dessus présente une interface de modèle HVAC DTDL avec un contexte et des extensions spécifiques qui décrit ce qui suit :

    • dtmi:dtdl:context;3 indique que ce modèle utilise DTDL version 3.
    • dtmi:dtdl:extension:historization;1 : Indique que ce modèle utilise des données d'historisation, pour suivre l'évolution des propriétés et des données de télémétrie 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é CVC.
    • 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. L'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 historisée. 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
      }
    • Ce tableau 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 rejettera 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 le <iot-digital-twin-model-OCID>, avec le domaine IoT associé, l'URI DTMI de l'unité HVAC, et montre 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>"
    }
    

Étape 3 : Créer un adaptateur jumeau numérique

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

Si le mappage d'enveloppe n'est pas spécifié et contient un timeObserved, receivedTime est utilisé en tant que 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 votre domaine IoT. Pour associer le modèle jumeau numérique, utilisez le paramètre URI DTMI --digital-twin-model-spec-uri ou le paramètre OCID du jumeau numérique --digital-twin-model-id pour associer le modèle jumeau numérique à cet adaptateur 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 que vous souhaitez 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 comment utiliser la commande avec le paramètre --digital-twin-model-id. Remplacez <digital-twin-model-OCID> par l'OCID du jumeau numérique du modèle de jumeau numérique que vous souhaitez 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 dans le format par défaut de l'appareil, vous ne spécifiez 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 mapping 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>"
}

Étape 4 : Créer 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 oci iot digital-twin-instance create et <iot-domain-OCID>, <vault-secret-OCID> et <digital-twin--adapter-OCID> requis 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. Facultativement, vous pouvez 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 l'adaptateur jumeau numérique créé à l'étape précédente. Remplacez <vault-secret-OCID> par une clé secrète qui se trouve 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, voir 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 présente le modèle de jumeau numérique, l'adaptateur, les OCID d'instance et l'ID de clé externe pour 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>"
}

Étape 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 des exemples spécifiques, voir 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"
        }'

Étape 6 : Voir les données de télémétrie

Selon l'endroit où vous voulez voir vos données IoT, chaque système nécessite une configuration spécifique pour vous connecter et voir vos données IoT.

Utiliser l'API de données IoT pour voir vos données

Pour voir vos données IoT à l'aide de l'API de données Internet of Things (IoT), vous devez effectuer les étapes nécessaires pour configurer 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 : données raw, rejected ou historized.

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

Cet exemple de demande montre comment obtenir les 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 des HTTP. Vous pouvez également utiliser MQTT et MQTT sur WebSockets. Pour des exemples spécifiques, voir Scénarios.

Utiliser des énoncés SQL pour voir vos données dans APEX ou la base de données

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

Utilisez cet énoncé SQL pour voir 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 votre appareil et remplacez <digital-twin-OCID> par l'OCID du jumeau numérique à partir duquel vous voulez voir 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>';
Note

Notez que le nom du schéma contient deux traits de soulignement : __IOT
Ou utilisez 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 voir 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 cet énoncé SQL pour consommer 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>';

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