Cenário: Consultar um Relacionamento Digital Twin
Uma instância de gêmeo digital pode usar modelos de gêmeos digitais, adaptadores de gêmeos digitais, hierarquias e relacionamentos para criar um modelo virtual que represente um ambiente real.
servedBy permitem que os aplicativos consultem:- Quais sensores servem um espaço específico?
- Que telemetria é relatada por esses sensores?
- Como os dispositivos são conectados, usando wi-fi?
Tarefas
- Criar um Modelo Digital Twin com um Modelo de Base de Capacidade
- Criar um Modelo Digital Twin para um Sensor
- Crie um Modelo Digital Twin para o Sensor Env-III
- Crie um Modelo Digital Twin para o Espaço
- Crie um adaptador digital duplo para o sensor Env-III
- Criar uma Instância Digital Twin para um Espaço
- Criar uma Instância Digital Twin com um Adaptador para um Sensor Env-III
- Criar um Relacionamento Digital Twin para Conectar as Instâncias Digital Twin
- Consultar o Digital Twin Relationship Graph usando SQL
Antes de Começar
Certifique-se de ter as permissões necessárias. Um administrador concede acesso criando as políticas necessárias. Para obter mais informações, consulte Pré-requisitos e Detalhes da Política da Plataforma Internet of Things (IoT).
Etapa 1: Criar um Modelo Digital Twin com um Modelo de Base de Capacidade
- Salve este trecho de código como um arquivo
model_capability.json. Consulte esse arquivo na próxima etapa ao criar um modelo de gêmeo digital. Esta especificação de modelo define a capacidade e atua como um modelo base.Para obter mais informações sobre como fazer referência a arquivos, consulte Usando um Arquivo JSON para Entrada Complexa e crie um modelo de gêmeo digital.
{ "@context": [ "dtmi:dtdl:context;3" ], "@id": "dtmi:com:oracle:example:core:Capability:cap;1", "@type": "Interface", "displayName": "Capability", "description": "A Capability indicates capacity to produce and ingest data.", "contents": [ { "@type": "Property", "name": "lastValueTime", "schema": "dateTime" } ] } Use o comando e os parâmetros
oci iot digital-twin-model createpara criar um modelo de gêmeo digital com um modelo base de recurso.oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://model_capability.jsonEste exemplo de resposta mostra que o modelo de gêmeo digital está ativo e faz referência ao URI DTMI definido no arquivo
model_capability.json:dtmi:com:oracle:example:core:Capability:cap;1{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-09-11T05:56:50.514Z" } }, "description": "A aapability indicates capacity to produce and ingest data.", "display-name": "Capability", "freeform-tags": {}, "id": "<iot-digital-twin-model-OCID>", "iot-domain-id": "<iot-domain-OCID>", "lifecycle-state": "ACTIVE", "spec-uri": "dtmi:com:oracle:example:core:Capability:cap;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>" }
Etapa 2: Criar um Modelo Digital Twin para um Sensor
- Salve este trecho de código como um arquivo
model_sensor.json. Consulte este arquivo na próxima etapa para criar outro modelo de gêmeo digital. Esta é uma definição de sensor que herda as propriedades e estende o modelo base de capacidade.{ "@context": [ "dtmi:dtdl:context;3" ], "@id": "dtmi:com:oracle:example:core:Sensor:sen;1", "@type": "Interface", "extends": "dtmi:com:oracle:example:core:Capability:cap;1", "displayName": "Sensor", "description": "Capability to detect or measure properties of the physical world.", "contents": [ { "@type": "Relationship", "displayName": "observes", "name": "observes", "target": "dtmi:com:oracle:example:core:Space:ex;1" } ] } - Use este comando e parâmetros para definir as especificações para criar um modelo de gêmeo digital.
oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://model_sensor.jsonEste exemplo de resposta mostra que o modelo de gêmeo digital está ativo e faz referência ao URI DTMI específico definido no arquivo
model_sensor.json:dtmi:com:oracle:example:core:Sensor:sen;1{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-09-11T06:03:25.687Z" } }, "description": "Capability to detect or measure properties of the physical world.", "display-name": "Sensor", "freeform-tags": {}, "id": "<iot-digital-twin-model-OCID>", "iot-domain-id": "<iot-domain-OCID>", "lifecycle-state": "ACTIVE", "spec-uri": "dtmi:com:oracle:example:core:Sensor:sen;1", "system-tags": {}, "time-created": "2025-09-11T06:03:25.753000+00:00", "time-updated": "2025-09-11T06:03:25.753000+00:00" }, "etag": "<unique-id>" }
Etapa 3: Criar um Modelo Digital Twin para o Sensor Env-III
- Salve este trecho de código como um arquivo
model_env.json. Consulte esse arquivo na próxima etapa ao criar outro modelo de gêmeo digital.{ "@context": [ "dtmi:dtdl:context;3", "dtmi:dtdl:extension:quantitativeTypes;1", "dtmi:dtdl:extension:historization;1", "dtmi:com:oracle:dtdl:extension:validation;1" ], "@id": "dtmi:com:oracle:example:stack:enviii:ev;2", "@type": "Interface", "extends": [ "dtmi:com:oracle:example:core:Sensor:sen;1" ], "displayName": "M5 with EnvIII sensors", "description": "Model envIII", "contents": [ { "@type": [ "Telemetry", "Historized", "Temperature" ], "name": "room_temp", "schema": "double", "unit": "degreeCelsius" } ] } - Use este comando e parâmetros para definir as especificações para criar outro modelo de gêmeo digital.
oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://model_env.jsonEste exemplo mostra que o modelo de gêmeo digital está ativo e faz referência ao URI DTMI específico definido no arquivo
model_env.json:dtmi:com:oracle:example:stack:enviii:ev;2{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-09-11T06:07:30.882Z" } }, "description": "Model envIII", "display-name": "M5 with EnvIII sensors", "freeform-tags": {}, "id": "<iot-digital-twin-model-OCID>", "iot-domain-id": "<iot-domain-OCID>", "lifecycle-state": "ACTIVE", "spec-uri": "dtmi:com:oracle:example:stack:enviii:ev;2", "system-tags": {}, "time-created": "2025-09-11T06:07:30.944000+00:00", "time-updated": "2025-09-11T06:07:30.944000+00:00" }, "etag": "<unique-id>" }
Etapa 4: Criar um Modelo Digital Twin para o Espaço
- Salve este trecho de código como um arquivo
model_space.jsone faça referência a ele na próxima etapa ao criar um modelo de gêmeo digital para o espaço. O espaço éservedByo modelo do sensor.{ "@context": [ "dtmi:dtdl:context;3" ], "@id": "dtmi:com:oracle:example:core:Space:sp;1", "@type": "Interface", "displayName": "Space", "description": "Model Space", "contents": [ { "@type": "Relationship", "displayName": "served by", "name": "servedBy", "target": "dtmi:com:oracle:example:core:Sensor:sen;1" } ] } - Use o comando a seguir para criar um modelo de gêmeo digital que faça referência ao
file://model_space.jsonpara aplicar as especificações definidas no arquivo a esse modelo de gêmeo digital.oci iot digital-twin-model create --iot-domain-id <iot-domain-OCID> --spec file://model_space.jsonEste exemplo de resposta mostra que o modelo de gêmeo digital está ativo e faz referência a este URI DTMI específico definido no arquivo
model_space.json:dtmi:com:oracle:example:core:Space:sp;1{ "data": { "defined-tags": { "Oracle-Tags": { "CreatedBy": "default/user@oracle.com", "CreatedOn": "2025-09-11T06:06:45.538Z" } }, "description": "Model Space", "display-name": "Space", "freeform-tags": {}, "id": "<iot-digital-twin-model-OCID>", "iot-domain-id": "<iot-domain-OCID>", "lifecycle-state": "ACTIVE", "spec-uri": "dtmi:com:oracle:example:core:Space:sp;1", "system-tags": {}, "time-created": "2025-09-11T06:06:45.574000+00:00", "time-updated": "2025-09-11T06:06:45.574000+00:00" }, "etag": "<unique-id>" }
Etapa 5: Criar um Adaptador Digital Twin para o Sensor Env-III
oci iot digital-twin-adapter create --iot-domain-id <iot-domain-OCID> --digital-twin-model-spec-uri "dtmi:com:oracle:room:stack:enviii:ev;2"Este exemplo de resposta mostra um OCID de adaptador de gêmeo digital específico e está associado a um modelo de gêmeo digital específico e DTMI.dtmi:com:oracle:example:stack:enviii:ev;2
{
"data": {
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-09-11T06:10:23.303Z"
}
},
"description": null,
"digital-twin-model-id": "<iot-digital-twin-model-OCID>",
"digital-twin-model-spec-uri": "dtmi:com:oracle:example:stack:enviii:ev;2",
"display-name": "<digital-twin-adapter-display-name>",
"freeform-tags": {},
"id": "<iot-digital-twin-adapter-OCID>",
"inbound-envelope": {
"envelope-mapping": {
"time-observed": "$.time"
},
"reference-endpoint": "/",
"reference-payload": {
"data": {
"sht_temp": 0.0,
"time": "2025-09-11T06:10:26.127416Z"
},
"data-format": "JSON"
}
},
"inbound-routes": [
{
"condition": "*",
"description": "Default condition",
"payload-mapping": {
"$.sht_temp": "$.sht_temp"
},
"reference-payload": null
}
],
"iot-domain-id": "<iot-domain-OCID>",
"lifecycle-state": "ACTIVE",
"system-tags": {},
"time-created": "2025-09-11T06:10:27.204000+00:00",
"time-updated": "2025-09-11T06:10:27.204000+00:00"
},
"etag": "<unique-id>"
}
Etapa 6: Criar uma Instância Digital Twin para um Espaço
Use este comando para criar uma instância de gêmeo digital para um espaço. Este exemplo mostra como associar um modelo de gêmeo digital usando o parâmetro --digital-twin-model-spec-uri do URI da especificação DTMI. Como alternativa, você pode usar o parâmetro OCID do modelo gêmeo digital para associar o modelo gêmeo digital especificando o OCID do modelo gêmeo digital.
oci iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --display-name <device-for-conference-room-103> --digital-twin-model-spec-uri <dtmi:com:oracle:example:core:Space:sp;1>Este exemplo de resposta mostra o OCID da instância de gêmeo digital específico, o modelo de gêmeo digital, o ID da chave externa e inclui o URI DTMI específico definido para o espaço: dtmi:com:oracle:example:core:Space:sp;1
{
"data": {
"auth-id": null,
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-09-11T06:12:43.393Z"
}
},
"description": null,
"digital-twin-adapter-id": null,
"digital-twin-model-id": "<iot-digital-twin-model-OCID>",
"digital-twin-model-spec-uri": "dtmi:com:oracle:example:core:Space:sp;1",
"display-name": "device-for-conference-room-103",
"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>"
}Etapa 7: Criar uma Instância Digital Twin com um Adaptador para um Sensor Env-III
Use este comando para criar uma instância de gêmeo digital com um nome para exibição que use um segredo para autenticação e esteja associado a um modelo de gêmeo digital específico, adaptador de gêmeo digital e domínio IoT. Substitua os OCIDs pelos recursos IoT relacionados do seu ambiente.
oci iot digital-twin-instance create --auth-id <vault-secret-or-certificate-OCID> --iot-domain-id <iot-domain-OCID> --digital-twin-adapter-id <iot-digital-twin-adapter-OCID> --display-name "<your-display-name>"{
"data": {
"auth-id": "<vault-secret-OCID>",
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-09-11T06:14:33.493Z"
}
},
"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:stack:enviii:ev;2",
"display-name": "Envii device 2",
"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:14:34.821000+00:00",
"time-updated": "2025-09-11T06:14:34.821000+00:00"
},
"etag": "<unique-id>"
}
Etapa 8: Criar um Relacionamento Digital Twin para Conectar duas Instâncias Digital Twin
servedBy, o tipo de conexão como wi-fi e o nome para exibição desse relacionamento de gêmeo digital.oci iot digital-twin-relationship create --iot-domain-id <iot-domain-OCID> --target-digital-twin-instance-id <iot-digital-twin-instance-OCID> --source-digital-twin-instance-id <iot-digital-twin-instance-OCID> --content-path "servedBy" --display-name "Env and sensor relationship"Este exemplo de resposta mostra o caminho de conteúdo e as instâncias de gêmeos digitais relacionadas para este relacionamento de gêmeos digitais:{
"data": {
"content": {
"connectionType": "wi-fi"
},
"content-path": "servedBy",
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/user@oracle.com",
"CreatedOn": "2025-09-11T07:40:08.926Z"
}
},
"description": null,
"display-name": "Env and sensor relationship",
"freeform-tags": {},
"id": "<iot-digital-twin-relationship-OCID>",
"iot-domain-id": "<iot-domain-OCID>",
"lifecycle-state": "ACTIVE",
"source-digital-twin-instance-id": "<iot-digital-twin-instance-OCID>",
"system-tags": {},
"target-digital-twin-instance-id": "<iot-digital-twin-instance-OCID>",
"time-created": "2025-09-11T07:40:09.755000+00:00",
"time-updated": "2025-09-11T07:40:09.755000+00:00"
},
"etag": "<unique-id>"
}
Etapa 9: Consultar o Gráfico de Relacionamento Digital Twin usando SQL
Se quiser usar consultas SQL para exibir seus dados IoT no APEX ou diretamente no banco de dados que exija configuração de uma conexão com o APEX ou configuração de uma conexão direta com o banco de dados.
No APEX ou diretamente no banco de dados, use as seguintes instruções SQL para localizar os detalhes do relacionamento de gêmeos digitais de uma instância de gêmeos digitais específica. Substitua o <domain-short-id-from-device-host> pelo id curto do domínio do host do dispositivo. Substitua o <digital-twin-instance-OCID> pelo OCID da instância do gêmeo digital com o qual você deseja trabalhar:
Observe dois sublinhados em
__IOT. Somente instâncias de gêmeos digitais e relacionamentos com lifecycle_state = ACTIVE aparecem no gráfico de propriedades.<domain-short-id-from-device-host>__IOT.DIGITAL_TWINSSELECT * FROM GRAPH_TABLE(
<domain-short-id-from-device-host>__IOT.DIGITAL_TWINS
MATCH (a IS digitalTwinInstance) -[e IS digitalTwinRelationship]-> (b IS digitalTwinInstance)
WHERE a.id = '<digital-twin-instance-OCID>'
COLUMNS (a.id as src, e.content_path as rel, b.id as tgt)
);Para localizar os relacionamentos entre duas instâncias de gêmeos digitais, use a consulta a seguir. Substitua o FROM_DIGITAL-TWIN-INSTANCE-OCID pelo OCID da instância do gêmeo digital de origem e o TO_DIGITAL-TWIN-INSTANCE-OCID pelo OCID da instância do gêmeo digital de destino para o qual você deseja encontrar o caminho de conteúdo:
SELECT * FROM GRAPH_TABLE(
<domain-short-id-from-device-host>__IOT.DIGITAL_TWINS
MATCH (a IS digitalTwinInstance) -[e IS digitalTwinRelationship]-> (b IS digitalTwinInstance)
WHERE a.id = 'FROM_DIGITAL-TWIN-INSTANCE-OCID'AND b.id = 'TO_DIGITAL-TWIN-INSTANCE-OCID'
COLUMNS (a.id as src, e.content_path as rel, b.id as tgt)
);