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;3
indique 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;1
est 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é
writable
estfalse
et 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 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 avec lequel vous voulez travailler, référencez le fichierdigital-twin-model.json
avec vos spécifications :oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.json
Cet 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
ou inbound-routes
. Par conséquent, la réponse contiendra les données utiles du périphérique.
Si le mappage d'enveloppe n'est pas spécifié et contient un 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.
oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --display-name <display_name> --auth-id <vault-secret-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 HTTP pour publier des données. Vous pouvez également utiliser MQTT et MQTT sur WebSockets. Pour des exemples spécifiques, voir Scénarios.
HTTP POST data
curl -i -X POST -u '<digital-twin-external-key>:<vault-secret>' -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 vous 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>\"}]}"
Cet exemple utilise des HTTP. Vous pouvez également utiliser MQTT et MQTT sur WebSockets. Pour des exemples spécifiques, voir Scénarios.
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.DIGITAL_TWIN_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.