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 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 à associer à ce modèle de jumeau numérique. Référencez le fichierdigital-twin-model.json
créé à 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.json
digital-twin-model.json
de 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 mappage d'adaptateur jumeau numérique,
Pour ce faire, définissez inbound-envelope
et inbound-routes
au format JSON
afin de convertir les données dans un format que vous souhaitez utiliser dans les services et applications Oracle afin que vous puissiez vous connecter pour voir vos données IoT dans différents systèmes.
Utilisation de l'interface de ligne de commande
- Définissez une enveloppe entrante
file://inbound-envelope.json
pour spécifier comment extraire les métadonnées des données utiles de l'appareil. Pour extraire la valeur à$.time
du JSON entrant et la mapper au champtimeObserved
dans 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": { "dataFormat": "JSON", "data": { "time": "<timestamp>", "data": { "temp": 0, "hum": 0, "power": false, "batteryLevel": 0 } } }, "envelope-mapping": { "timeObserved": "$.time" } }
- Créez un fichier
file://inbound-routes.json
pour 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\"}", "reference-payload": { "data": { "temp": 75, "hum": 62 } }, "payload-mapping": { "$.temperature": "$.data.temp", "$.humidity": "${.data.hum - 5}" } }, { "condition": "${endpoint(2) == \"health\"}", "reference-payload": { "data": { "power": false, "batteryLevel": 60 } }, "payload-mapping": { "$.power": "$.data.power", "$.batteryLevel": "${.data.batteryLevel - 5}" } } ]
- 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 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-id
avec<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.json
etfile://inbound-enevelop.json
créé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-envelope
et--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 ou créez un certificat dans la même région et la même location que toutes les autres ressources IoT connexes.
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": "<vault-secret-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.
curl -u 'digital-twin-instance-external-key:device-password' -H "content-type: application/json" https://<domain-short-id-from-device-host>.device.iot.<region>.oci.oraclecloud.com/telemetry/heartbeat -d '{"temp": 70, "hum": 55}'
Accepted%
curl -i -X POST \
-u "<digital-twin-instance-external-key>:<device-password>" \
-H "Content-Type: application/json" \
"https://<domain-short-id-from-device-host>.device.iot.<region>.oci.oraclecloud.com/telemetry/heartbeat" \
-d '{
"digital_twin_instance_id": "<iot-digital-twin-instance-OCID>",
"received_at": "2024-08-14T06:01:30.432829Z",
"endpoint": "telemetry/heartbeat",
"content_type": "application/json",
"content": {
"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 = '<iot-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>__IOT.DIGITAL_TWIN_HISTORIZED_DATA where digital_twin_id = '<digital-twin-OCID>';