Scénario : Envoi de données structurées dans un format par défaut à l'aide de HTTP
Utilisez ce scénario pour un appareil IoT qui envoie des données structurées dans un format par défaut à la plate-forme Internet of Things (IoT).
Ce scénario s'applique à un appareil qui peut être programmé pour envoyer des données dans le 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 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 dans le format défini 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.
Tâches
É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 par défaut à partir d'un appareil. 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 extrait 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 de fichiers, voir Utilisation d'un fichier JSON pour les entrées complexes.Pour créer ce fichier, utilisez le langage de définition des jumeaux numériques (DTDL) pour définir la sémantique du modèle de jumeau numérique. Un modèle jumeau numérique utilise un identificateur de modèle jumeau numérique (DTMI) comme identificateur unique.
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}$" } ] }L'extrait de code ci-dessus présente une interface de modèle HVAC DTDL avec un contexte et des extensions spécifiques qui décrit ce qui suit :
-
dtmi:dtdl:context;3indique que ce modèle utilise DTDL version 3. dtmi:dtdl:extension:historization;1: Indique que ce modèle utilise des données d'historisation, pour suivre l'évolution des propriétés et des données de télémétrie 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;1est 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é CVC.- 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. L'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 historisée. Le point de type de schéma indique un emplacement géographique. La propriété
writableestfalseet n'est pas prise en charge dans cette version :{ "@type": [ "Property", "Historized" ], "name": "location", "schema": "point", "writable": false } - Ce tableau 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 rejettera 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 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 avec lequel vous voulez travailler, référencez le fichierdigital-twin-model.jsonavec vos spécifications :oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.jsonCet exemple de réponse contient le<iot-digital-twin-model-OCID>, avec le domaine IoT associé, l'URI DTMI de l'unité HVAC, et montre 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>" }
Étape 3 : Créer un adaptateur jumeau numérique
Lorsque vous créez un adaptateur jumeau numérique, vous pouvez forcer le système à créer des données utiles et un mappage par défaut en ne spécifiant pas les options inbound-envelope et inbound-routes. Par conséquent, la réponse contiendra les données utiles par défaut du périphérique.
Si vous ne spécifiez pas les options
inbound-envelope et inbound-routes pour obtenir les données utiles par défaut à partir de l'appareil, vous devez omettre les paramètres inbound-envelope et inbound-routes. Vous ne pouvez pas spécifier un seul de ces paramètres facultatifs. Si le mappage d'enveloppe est spécifié et contient une valeur timeObserved, receivedTime est utilisé en tant que 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 votre domaine IoT. Pour associer le modèle jumeau numérique, utilisez le paramètre URI DTMI --digital-twin-model-spec-uri ou le paramètre OCID du jumeau numérique --digital-twin-model-id pour associer le modèle jumeau numérique à cet adaptateur 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 que vous souhaitez 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 comment utiliser la commande avec le paramètre --digital-twin-model-id. Remplacez <digital-twin-model-OCID> par l'OCID du jumeau numérique du modèle de jumeau numérique que vous souhaitez 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>"
}Étape 4 : Créer 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 oci iot digital-twin-instance create et <iot-domain-OCID>, <vault-secret-OCID> et <digital-twin--adapter-OCID> requis 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. Facultativement, vous pouvez 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 l'adaptateur jumeau numérique créé à l'étape précédente. Remplacez <vault-secret-OCID> par une clé secrète qui se trouve 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, voir Création d'une clé secrète ou Scénario : Créer une instance de jumeau numérique qui utilise un certificat mTLS.
oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --display-name <display-name> --auth-id <secret-or-certificate-OCID> --digital-twin-adapter-id <digital-twin-adapter-OCID>Cet exemple de réponse présente le modèle de jumeau numérique, l'adaptateur, les OCID d'instance et l'ID de clé externe pour 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>"
}
Étape 5 : Envoyer les données de télémétrie
Cet exemple utilise HTTPS pour publier des données. Vous pouvez également utiliser MQTTS ou MQTT sur WebSockets. Pour des exemples spécifiques, voir Scénarios.
Dans cet exemple, <digital-twin-instance-external-key> est le nom d'utilisateur de l'appareil et <secret-contents> est le mot de passe de l'appareil. Utilisez le contenu de la clé secrète en texte brut pour le mot de passe de l'appareil.
Pour la production, utilisez un certificat mTLS pour l'instance de jumeau numérique --auth-id.
HTTP POST data
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' \
-d '{
"temperature": 72,
"humidity": 60,
"location": {
"type": "point",
"coordinates": [40.759010, -73.984474]
},
"serialNumber": "5099627036043"
}'Étape 6 : Voir les données de télémétrie
Selon l'endroit où vous voulez voir vos données IoT, chaque système nécessite une configuration spécifique pour se connecter et voir vos données IoT.
Utiliser l'API de données IoT pour voir vos données
raw, rejected ou historized.Pour plus d'informations, consultez la documentation relative à l'API de données Internet of Things (IoT).
Cet exemple de demande montre comment obtenir les 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>\"}]}" Utiliser des énoncés SQL pour voir vos données dans APEX ou la base de données
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 de l'hôte de votre appareil et remplacez <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-instance-OCID>';Notez que 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 voir les données rejetées :select * from <domain-short-id-from-device-host>__IOT.HISTORIZED_DATA where digital_twin_instance_id = '<digital-twin-instance-OCID>';Utilisez cet énoncé SQL pour consommer 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>';Pour obtenir <domain-short-id-from-device-host> pour le domaine IoT, obtenez les détails du domaine IoT avec lequel vous voulez travailler.