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 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, 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.json
digital-twin-model.json
de 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 mappage de jumeaux numériques,
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 de pouvoir vous connecter pour afficher 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 indiquer comment extraire les métadonnées de la charge utile de l'appareil. Pour extraire la valeur dans$.time
du JSON entrant et la mettre en correspondance avec le champtimeObserved
dans 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": { "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 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\"}", "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 à 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 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-envelope
et--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 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 associées.
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": "<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>"
}
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.
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
}
}
}'
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 = '<iot-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>__IOT.DIGITAL_TWIN_HISTORIZED_DATA where digital_twin_id = '<digital-twin-OCID>';