Scenario: invio di dati strutturati in un formato personalizzato mediante HTTP
Utilizzare questo scenario per inviare e monitorare i dati strutturati da un dispositivo in un formato personalizzato. Se un dispositivo invia dati in un formato personalizzato, significa che il dispositivo non può essere programmato per modificarne l'output.
In questo caso, definire il mapping dell'adattatore digital twin personalizzato, per tradurre i dati in entrata in un formato riconosciuto dalla piattaforma IoT.
Un amministratore deve aggiungere un criterio alla tenancy e ai compartimenti che si desidera utilizzare. Per esempi di criteri e prerequisiti, vedere Dettagli criteri per la piattaforma Internet of Things (IoT) e IoT Prerequisiti.
Passo 1: creare un gruppo di domini IoT e un dominio IoT
Utilizzare un gruppo di domini IoT e un dominio IoT esistenti oppure creare un gruppo di domini IoT e creare un dominio IoT da utilizzare per questo scenario.
Dopo aver ottenuto il gruppo di domini IoT e il dominio IoT che si desidera utilizzare, attenersi alla procedura riportata di seguito per impostare le risorse digital twin per ricevere dati strutturati in un formato personalizzato da un dispositivo. Tutte le risorse IoT devono trovarsi nella stessa area.
Per ottenere il <domain-short-id-from-device-host> per il dominio IoT o per ottenere l'OCID del dominio IoT, è possibile ottenere i dettagli per il dominio IoT con cui si desidera lavorare.
Passo 2: Creare un modello Digital Twin
- Creare specifiche utilizzando il Digital Twins Definition Language (DTDL) per il modello di gemello digitale simile a questo esempio con i dati che si desidera raccogliere.
Per utilizzare questo esempio, salvare questo snippet di codice come file
digital-twin-model.jsone quindi fare riferimento a questo file nel passo successivo quando si crea un modello gemello digitale.Un modello di gemello digitale richiede un Digital Twin Model Identifier (DTMI) come identificativo univoco. Ad esempio:
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" } ] } - Utilizzare il comando
oci iot digital-twin-model createcon il parametro richiesto per creare un modello gemello digitale. Sostituire<iot-domain-OCID>con l'OCID per il dominio IoT che si desidera associare a questo modello di gemello digitale. Fare riferimento al filedigital-twin-model.jsoncreato nel passo precedente o a un file di specifiche per lo scenario specifico. Per ulteriori informazioni sui file di riferimento, vedere Uso di un file JSON per l'input complesso:
Risposta di esempio utilizzando il fileoci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://digital-twin-model.jsondigital-twin-model.jsondel passo precedente. Questa risposta di esempio mostra l'URI DTMI e l'OCID del modello digital twin 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>" }
Passo 3: Creare un adattatore Digital Twin per un formato personalizzato
Se un dispositivo invia dati in un formato personalizzato, significa che il dispositivo non può essere programmato per modificarne l'output. In questo caso, definire il formato personalizzato nel mapping dell'adattatore gemello digitale.
A tale scopo, è possibile definire inbound-envelope e inbound-routes in un file JSON per convertire i dati in un formato che si desidera utilizzare nei servizi e nelle applicazioni Oracle. Se l'autenticazione e la connessione sono configurate, è possibile visualizzare i dati IoT in sistemi diversi.
Se si specificano le opzioni
inbound-envelope e inbound-routes per ottenere un payload personalizzato dal dispositivo, è necessario utilizzare sia il parametro inbound-envelope che il parametro inbound-routes. Non è possibile specificare solo uno di questi parametri facoltativi. Uso dell'interfaccia CLI
- Definire un envelope in entrata
file://inbound-envelope.jsonper specificare come estrarre i metadati dal payload del dispositivo. Per estrarre il valore in$.timedal file JSON in entrata e mapparlo al campotimeObservednel modello gemello digitale. Questi mapping consentono di estrarre metadati specifici, ad esempio indicatori orari, utilizzando le espressioni JQ.Questo esempio mostra l'endpoint del dispositivo, un payload di esempio e un mapping dell'envelope in entrata che applica espressioni JQ per estrarre o rimodellare i dati.
{ "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" } } - Creare un file
file://inbound-routes.jsonper definire il modo in cui i dati del payload specifici dei messaggi dispositivo vengono mappati e instradati all'istanza digital twin.Ogni instradamento include una condizione che corrisponde all'endpoint, una struttura di payload di riferimento e istruzioni di mapping per il trasferimento o la trasformazione dei valori.
Questo esempio mostra 2 condizioni di payload definite.Nota
Il numero massimo di instradamenti in entrata consentiti è 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" } } ] - Utilizzare il comando
oci iot digital-twin-adapter createper creare un adattatore digital twin. Sostituire<iot-domain-OCID>con l'OCID per il dominio IoT e sostituire<dtmi:com:oracle:example:hvac>con l'URI DTMI con l'URI DTMI per il modello gemello digitale che si desidera associare a questo adattatore gemello digitale.Nell'esempio seguente viene utilizzato il parametro URI DTMI per associare il modello gemello digitale. In alternativa, è possibile utilizzare il parametro
Fare riferimento ai file--digital-twin-model-idcon<digital-twin-model-OCID>per il modello gemello digitale che si desidera associare a questo adattatore gemello digitale.file://inbound-enevelop.jsonefile://inbound-enevelop.jsoncreati nel passo precedente.
Questa risposta di esempio mostra un mapping di payload personalizzato definito nelle opzionioci 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-envelopee--inbound-routes, facendo riferimento ai filejsone a un OCID adattatore digital twin specifico associato a un modello digital twin specifico con un URI DTMI univoco e OCID modello digital twin: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>" }
Passo 4: Creare un'istanza Digital Twin con l'adattatore
Uso dell'interfaccia CLI
Utilizzare i parametri richiesti oci iot digital-twin-instance create e <iot-domain-OCID> e <certificate-or-secret-OCID> per creare un'istanza gemella digitale. Sostituire <certificate-or-secret-OCID> con l'OCID segreto del vault che si desidera utilizzare e sostituire <iot-domain-OCID> con l'OCID per il dominio IoT per l'ambiente in uso.
Se l'istanza digital twin è impostata per ricevere i dati del dispositivo, è necessario utilizzare il parametro ID autenticazione con un segreto vault o un OCID certificato, in modo che il digital twin possa eseguire l'autenticazione. A tale scopo creare un segreto. Per la produzione, l'istanza digital twin deve utilizzare un certificato mTLS per l'autenticazione.
In questo esempio viene utilizzata l'opzione --display-name, sostituire <your-digital-twin-instance-name> con un nome riconoscibile dall'utente per l'istanza digital twin.
<digital-twin-adapter-OCID> con l'adattatore gemello digitale creato nel passo precedente. 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>Questa risposta di esempio mostra l'adattatore digital twin e l'URI DTMI definiti per il modello digital twin associato a questa istanza digital twin.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>"
}
Passo 5: Invia dati telemetria
Utilizzare il seguente comando curl e il comando <digital-twin-instance-external-key> per inviare o inviare dati. Per ulteriori informazioni, vedere Uso di cURL: la chiave esterna e l'ID di autenticazione provengono dal passo precedente in cui si crea un'istanza gemella digitale.
- Nome utente dispositivo: utilizzare
external keydell'istanza gemella digitale come nome utente del dispositivo. - Password dispositivo: è associata all'ID di autenticazione
--auth-idper l'istanza gemello digitale. Se l'istanza digital twin utilizza un OCID segreto vault per l'autenticazione, utilizzare il contenuto dei segreti testo semplice come password del dispositivo, vedere Creazione di un segreto e Ottenuto dei segreti. L'uso di un segreto del vault come password è consigliato solo per i test e non per la produzione.
Nell'esempio seguente viene utilizzato un segreto per l'autenticazione. In alternativa, per la produzione l'istanza digital twin deve utilizzare un certificato mTLS per l'autenticazione.
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
}
}'Passo 6: visualizzazione dei dati di telemetria
Utilizza l'API di dati Internet of Things per ottenere i dati
In questo esempio vengono utilizzati i protocolli HTTP. In alternativa, è possibile utilizzare MQTT e MQTT su WebSockets. Per esempi specifici, vedere Scenari.
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>\"}]}"Utilizzare istruzioni SQL per visualizzare i dati
raw:select * from <domain-short-id-from-device-host>__IOT.RAW_DATA where digital_twin_instance_id = '<iot-digital-twin-OCID>';Si noti che il nome dello schema contiene due caratteri di sottolineatura: __IOT
Oppure utilizzare questa istruzione SQL per visualizzare i dati di telemetria rejected. Sostituire <domain-short-id-from-device-host> con l'ID breve del dominio per il dominio IoT e <iot-digital-twin-OCID> con l'OCID del gemello digitale da cui si desidera visualizzare i dati rifiutati:
select * from <domain-short-id-from-device-host>__IOT.REJECTED_DATA where digital_twin_instance_id = '<digital-twin-OCID>';In alternativa, utilizzare questa istruzione SQL per visualizzare i dati di telemetria storicizzati. Sostituire <domain-short-id-from-device-host> con l'ID breve del dominio per il dominio IoT e <iot-digital-twin-OCID> con l'OCID per il gemello digitale da cui si desidera visualizzare i dati rifiutati:select * from <domain-short-id-from-device-host>__IOT.HISTORIZED_DATA where digital_twin_id = '<digital-twin-OCID>';