Scénario : envoi de données structurées dans un format personnalisé à l'aide de HTTP
Utilisez ce scénario pour envoyer et surveiller des données structurées à partir d'un appareil dans un format personnalisé. Si un périphérique envoie des données dans un format personnalisé, cela signifie que le périphérique ne peut pas être programmé pour modifier sa sortie.
Dans ce cas, définissez le mapping de jumeaux numériques personnalisé pour convertir les données entrantes dans un format reconnu 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 dans un format personnalisé à partir d'un périphérique. Toutes les ressources IoT doivent se trouver dans la même région.
Afin d'obtenir le fichier <domain-short-id-from-device-host> pour le domaine IoT ou l'OCID de domaine IoT, vous pouvez obtenir les détails du domaine IoT à utiliser.
Étape 2 : Créer un modèle de jumeau numérique
- Créez des spécifications à l'aide du langage DTDL (Digital Twins Definition Language) pour votre modèle de jumeau numérique, comme dans cet exemple, avec les données à collecter.
Pour utiliser cet exemple, enregistrez ce fragment de code en tant que fichier
digital-twin-model.json, puis référencez ce fichier à l'étape suivante lorsque vous créez un modèle de jumeau numérique.Un modèle de jumeau numérique requiert un identificateur de modèle de jumeau numérique (DTMI) comme identificateur unique. Par exemple :
dtmi:com:oracle:example:hvac;1{ "@context": [ "dtmi:dtdl:context;3" ], "@id": "dtmi:com:oracle:example:hvac;1", "@type": "Interface", "displayName": "HVAC", "description": "A digital twin model for HVAC", "contents": [ { "@type": "Telemetry", "name": "temperature", "schema": "integer" }, { "@type": "Telemetry", "name": "humidity", "schema": "integer" }, { "@type": "Property", "name": "power", "schema": "boolean" }, { "@type": "Property", "name": "batteryLevel", "schema": "integer" } ] } - Utilisez la commande
oci iot digital-twin-model createavec le paramètre requis pour créer un modèle de jumeau numérique. Remplacez<iot-domain-OCID>par l'OCID du domaine IoT à associer à ce modèle de jumeau numérique. Référencez le fichierdigital-twin-model.jsoncréé à l'étape précédente ou un fichier de spécifications pour votre scénario spécifique. Pour plus d'informations sur le référencement de fichiers, reportez-vous à la section Using a JSON File for Complex Input :
Exemple de réponse à l'aide du fichieroci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.jsondigital-twin-model.jsonde l'étape précédente. Cet exemple de réponse montre l'URI DTMI et l'OCID de modèle de jumeau numérique IoT :{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-09-11T05:56:50.514Z" } }, "description": "A 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-11T05:56:50.587000+00:00", "time-updated": "2025-09-11T05:56:50.587000+00:00" }, "etag": "<unique-id>" }
Etape 3 : création d'un adaptateur jumeau numérique pour un format personnalisé
Si un périphérique envoie des données dans un format personnalisé, cela signifie que le périphérique ne peut pas être programmé pour modifier sa sortie. Dans ce cas, définissez le format personnalisé dans le mapping de jumeaux numériques.
Pour ce faire, vous pouvez définir inbound-envelope et inbound-routes dans un fichier JSON afin de convertir les données dans un format que vous souhaitez utiliser dans les services et applications Oracle. Si l'authentification et la connexion sont configurées, vous pouvez afficher vos données IoT dans différents systèmes.
Si vous indiquez les options
inbound-envelope et inbound-routes pour obtenir la charge utile personnalisée à partir du périphérique, vous devez utiliser les paramètres inbound-envelope et inbound-routes. Vous ne pouvez pas spécifier un seul de ces paramètres facultatifs. Utilisation de l'interface de ligne de commande
- Définissez une enveloppe entrante
file://inbound-envelope.jsonpour indiquer comment extraire les métadonnées de la charge utile de l'appareil. Pour extraire la valeur dans$.timedu JSON entrant et la mettre en correspondance avec le champtimeObserveddans le modèle de jumeau numérique. Ces mappings vous permettent d'extraire des métadonnées spécifiques telles que les horodatages à l'aide d'expressions JQ.Cet exemple illustre l'adresse de périphérique, un exemple de charge utile et un mapping d'enveloppes entrantes qui applique des expressions JQ pour extraire ou remodeler les données.
{ "reference-endpoint": "telemetry/health", "reference-payload": { "data-format": "JSON", "data": { "time": "<timestamp>", "data": { "temp": 0, "hum": 0, "power": false, "batteryLevel": 0 } } }, "envelope-mapping": { "time-observed": "$.time" } } - Créez un fichier
file://inbound-routes.jsonpour définir la façon dont les données de charge utile spécifiques des messages d'appareil sont mises en correspondance et acheminées vers votre instance de jumeau numérique.Chaque route inclut une condition correspondant à l'adresse, une structure de charge utile de référence et des instructions de mise en correspondance pour le transfert ou la transformation de valeurs.
Cet exemple présente 2 conditions de charge utile définies.Remarque
Le nombre maximal d'itinéraires entrants autorisé est de 128.[ { "condition": "${endpoint(2) == \"heartbeat\"}", "description": "heartbeat", "payload-mapping": { "$.humidity": "${.hum-1}", "$.temperature": "$.temp" }, "reference-payload": { "data": { "hum": 62, "temp": 75 }, "data-format": "JSON" } }, { "condition": "${endpoint(2) == \"health\"}", "description": "health", "payload-mapping": { "$.humidity": "${.hum-1}", "$.temperature": "$.temp" }, "reference-payload": { "data": { "batteryPercentage": 60, "on": false }, "data-format": "JSON" } } ] - Utilisez la commande
oci iot digital-twin-adapter createpour créer un adaptateur jumeau numérique. Remplacez<iot-domain-OCID>par l'OCID de votre domaine IoT et remplacez<dtmi:com:oracle:example:hvac>par l'URI DTMI par l'URI DTMI du modèle de jumeau numérique à associer à cet adaptateur de jumeau numérique.L'exemple suivant utilise le paramètre URI DTMI pour associer le modèle de jumeau numérique. Vous pouvez également utiliser le paramètre
Référencez les fichiers--digital-twin-model-idavec<digital-twin-model-OCID>pour le modèle de jumeau numérique à associer à cet adaptateur de jumeau numérique.file://inbound-enevelop.jsonetfile://inbound-enevelop.jsoncréés à l'étape précédente.
Cet exemple de réponse présente un mapping de charge utile personnalisé défini dans les optionsoci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-spec-uri 'dtmi:com:oracle:example:hvac;1' --inbound-envelope <file://inbound-enevelop.json> --inbound-routes <file://inbound-routes.json>--inbound-envelopeet--inbound-routes, en référençant les fichiersjson, ainsi qu'un OCID d'adaptateur de jumeau numérique spécifique associé à un modèle de jumeau numérique spécifique avec un URI DTMI unique et un OCID de modèle de jumeau numérique :dtmi:com:oracle:example:core:hvac:sp;1{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-09-11T06:09:27.323Z" } }, "description": null, "digital-twin-model-id": "<iot-digital-twin-model-OCID>", "digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1", "display-name": "<digital-twin-adapter-display-name>", "freeform-tags": {}, "id": "<iot-digital-twin-adapter-OCID>", "inbound-envelope": { "envelope-mapping": { "time-observed": "$.time" }, "reference-endpoint": "telemetry/health", "reference-payload": { "data": { "time": "2025-09-11T06:09:27.878106Z" }, "data-format": "JSON" } }, "inbound-routes": [ { "condition": "${endpoint(2) == \"heartbeat\"}", "description": null, "payload-mapping": { "$.humidity": "${.hum-1}", "$.temperature": "$.temp" }, "reference-payload": { "data": { "hum": 62, "temp": 75 }, "data-format": "JSON" } }, { "condition": "${endpoint(2) == \"health\"}", "description": null, "payload-mapping": {}, "reference-payload": { "data": { "batteryPercentage": 60, "on": false }, "data-format": "JSON" } } ], "iot-domain-id": "<iot-domain-OCID>", "lifecycle-state": "ACTIVE", "system-tags": {}, "time-created": "2025-09-30T19:55:36.293000+00:00", "time-updated": "2025-09-30T19:55:36.293000+00:00" }, "etag": "<unique-id>" }
Etape 4 : création d'une instance de jumeau numérique avec l'adaptateur
Utilisation de l'interface de ligne de commande
Utilisez les paramètres oci iot digital-twin-instance create, <iot-domain-OCID> et <certificate-or-secret-OCID> requis pour créer une instance de jumeau numérique. Remplacez <certificate-or-secret-OCID> par l'OCID de clé secrète de coffre à utiliser et remplacez <iot-domain-OCID> par l'OCID du domaine IoT de votre environnement.
Si l'instance de jumeau numérique est configurée pour recevoir des données de périphérique, vous devez utiliser le paramètre d'ID d'authentification avec une clé secrète de coffre ou un OCID de certificat, afin que le jumeau numérique puisse s'authentifier. Pour cela, créez une clé secrète. Pour la production, l'instance de jumeau numérique doit utiliser un certificat mTLS pour l'authentification.
Cet exemple utilise l'option --display-name. Remplacez <your-digital-twin-instance-name> par un nom convivial pour votre instance de jumeau numérique.
<digital-twin-adapter-OCID> par l'adaptateur jumeau numérique créé à l'étape précédente. oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --display-name <your-digital-twin-instance-name> --auth-id <certificate-or-secret-OCID> --digital-twin-adapter-id <digital-twin-adapter-OCID>Cet exemple de réponse montre l'adaptateur de jumeau numérique et l'URI DTMI définis pour le modèle de jumeau numérique associé à cette instance de jumeau numérique.dtmi:com:oracle:example:hvac;1
{
"data": {
"auth-id": "<secret-or-certificate-OCID>",
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-08-14T17:41:11.973Z"
}
},
"description": null,
"digital-twin-adapter-id": "<iot-digital-twin-adapter-OCID>",
"digital-twin-model-id": "<digital-twin-model-OCID>",
"digital-twin-model-spec-uri": "dtmi:com:oracle:example:hvac;1",
"display-name": "<your-digital-twin-instance-name>",
"external-key": "<digital-twin-instance-external-key>",
"freeform-tags": {},
"id": "<digital-twin-instance-OCID>",
"iot-domain-id": "<iot-domain-OCID>",
"lifecycle-state": "ACTIVE",
"system-tags": {},
"time-created": "2025-08-14T17:41:13.638000+00:00",
"time-updated": "2025-08-14T17:41:13.638000+00:00"
},
"etag": "<unique-id>"
}
Etape 5 : Envoyer les données de télémétrie
Utilisez la commande curl suivante et la commande <digital-twin-instance-external-key> pour envoyer ou publier des données. Pour plus d'informations, reportez-vous à Utilisation de cURL. La clé externe et l'ID d'authentification proviennent de l'étape précédente lors de la création d'une instance de jumeau numérique.
- Nom utilisateur de l'appareil : utilisez l'option
external keyde l'instance de jumeau numérique comme nom utilisateur de l'appareil. - Mot de passe de l'appareil : est associé à l'ID d'authentification
--auth-idpour l'instance de jumeau numérique. Si l'instance de jumeau numérique utilise un OCID de clé secrète de coffre pour l'authentification, utilisez le contenu de clé secrète en texte brut comme mot de passe d'appareil. Reportez-vous à Création d'une clé secrète et à Obtention du contenu d'une clé secrète. L'utilisation d'une clé secrète de coffre en tant que mot de passe de périphérique est recommandée uniquement pour les tests et non pour la production.
L'exemple suivant utilise une clé secrète pour l'authentification. Pour la production, l'instance de jumeau numérique doit également utiliser un certificat mTLS pour l'authentification.
curl -i -X POST \
-u "<digital-twin-instance-external-key>:<secret-contents>" \
-H "Content-Type: application/json" \
"https://<domain-short-id-from-device-host>.device.iot.<region>.oci.oraclecloud.com/telemetry/heartbeat" \
-d '{
"time": "2025-09-05T18:36:55.213861Z",
"data": {
"temp": 70,
"hum": 55
}
}'curl -i -X POST \
-u "<digital-twin-instance-external-key>:<secret-contents>" \
-H "Content-Type: application/json" \
"https://<domain-short-id-from-device-host>.device.iot.<region>.oci.oraclecloud.com/telemetry/heartbeat" \
-d '{
"time": "<time>",
"data": {
"temp": 70,
"hum": 65
}
}'Etape 6 : Afficher les données de télémétrie
Utiliser l'API de données de l'Internet of Things pour obtenir les données
Cet exemple utilise HTTPs. Vous pouvez également utiliser MQTT et MQTT sur WebSockets. Pour obtenir des exemples spécifiques, reportez-vous à Scénarios.
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>\"}]}"Utiliser des instructions SQL pour visualiser les données
raw :select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<iot-digital-twin-OCID>';Le nom du schéma contient deux traits de soulignement : __IOT
Vous pouvez également utiliser 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 votre domaine IoT et <iot-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-OCID>';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é de domaine de votre domaine IoT et <iot-digital-twin-OCID> par l'OCID du jumeau numérique à partir duquel visualiser les données rejetées :select * from <domain-short-id-from-device-host>__IOT.HISTORIZED_DATA where digital_twin_id = '<digital-twin-OCID>';