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.
Tâches
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
- 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
estfalse
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}$" }
-
- 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 fichierdigital-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-uri
ou 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>
{
"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
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étrieraw
à 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
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>';
Le nom du schéma contient deux traits de soulignement : __IOT
<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.