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 mappage d'adaptateur jumeau numérique personnalisé pour traduire les données entrantes dans un format reconnu 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 personnalisé à partir d'un appareil. Toutes les ressources IoT doivent se trouver dans la même région.
Pour obtenir <domain-short-id-from-device-host> pour le domaine IoT ou pour obtenir l'OCID du domaine IoT, vous pouvez obtenir les détails du domaine IoT avec lequel vous voulez travailler.
Étape 2 : Créer un modèle de jumeau numérique
- Créez des spécifications à l'aide du langage de définition des jumeaux numériques (DTDL) pour votre modèle de jumeau numérique, comme dans cet exemple, avec les données à collecter.
Pour utiliser cet exemple, enregistrez cet extrait 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 nécessite 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, voir Utilisation d'un fichier JSON pour les entrées complexes :
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 présente l'URI DTMI et l'OCID du 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>" }
Étape 3 : Créer un adaptateur de 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 l'adaptateur jumeau numérique.
Pour ce faire, vous pouvez définir les fichiers inbound-envelope et inbound-routes dans un fichier JSON pour convertir les données dans le format que vous voulez utiliser dans les services et applications Oracle. Si l'authentification et la connexion sont configurées, vous pouvez voir vos données IoT dans différents systèmes.
Si vous spécifiez les options
inbound-envelope et inbound-routes pour obtenir les données utiles personnalisées à partir de l'appareil, 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 spécifier comment extraire les métadonnées des données utiles de l'appareil. Pour extraire la valeur à$.timedu JSON entrant et la mapper au champtimeObserveddans le modèle de jumeau numérique. Ces mappages vous permettent d'extraire des métadonnées spécifiques telles que des horodatages à l'aide d'expressions JQ.Cet exemple présente le point d'extrémité du périphérique, un exemple de données utiles et un mappage d'enveloppe entrante 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 comment des données utiles spécifiques à partir de messages d'appareil sont mappées et acheminées vers votre instance de jumeau numérique.Chaque route comprend une condition correspondant au point d'extrémité, une structure de données utiles de référence et des instructions de mappage pour le transfert ou la transformation de valeurs.
Cet exemple montre 2 conditions de données utiles définies.Note
Le nombre maximal de routes entrantes autorisées 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 que vous souhaitez 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 mappage de données utiles 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, et un OCID d'adaptateur jumeau numérique spécifique associé à un modèle jumeau numérique spécifique avec un URI DTMI unique et un OCID de modèle 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>" }
Étape 4 : Créer 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 et <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 la clé secrète de la chambre forte à utiliser et remplacez <iot-domain-OCID> par l'OCID du domaine IoT pour votre environnement.
Si l'instance de jumeau numérique est configurée pour recevoir des données d'appareil, vous devez utiliser le paramètre d'ID authentification avec une clé secrète de chambre forte ou un OCID de certificat, afin que le jumeau numérique puisse s'authentifier. Pour ce faire, 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 jumeau numérique et l'URI DTMI définis pour le modèle 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>"
}
Étape 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, voir Utilisation de cURL, la clé externe et l'ID authentification proviennent de l'étape précédente où vous créez une instance jumeau numérique.
- Nom d'utilisateur de l'appareil : Utilisez
external keyde l'instance de jumeau numérique comme nom d'utilisateur de l'appareil. - Mot de passe de l'appareil : Est associé à l'ID authentification
--auth-idpour l'instance de jumeau numérique. Si l'instance de jumeau numérique utilise un OCID de clé secrète de chambre forte pour l'authentification, utilisez le contenu de clé secrète en texte brut comme mot de passe de l'appareil, voir Création d'une clé secrète et Obtention du contenu d'une clé secrète. L'utilisation d'une clé secrète de chambre forte comme 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. Sinon, pour la production, l'instance de jumeau numérique doit 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
}
}'Étape 6 : Voir les données de télémétrie
Utiliser l'API de données Internet of Things pour obtenir les données
Cet exemple utilise des HTTP. Vous pouvez également utiliser MQTT et MQTT sur WebSockets. Pour des exemples spécifiques, voir 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 afficher vos données
raw :select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<iot-digital-twin-OCID>';Notez que le nom du schéma contient deux traits de soulignement : __IOT
Ou 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 pour votre domaine IoT et <iot-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-OCID>';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é de domaine de votre domaine IoT et <iot-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.HISTORIZED_DATA where digital_twin_id = '<digital-twin-OCID>';