Gemelos digitales y grafo de gemelos

En este artículo se describe qué son los gemelos digitales en el contexto de Azure Digital Twins y cómo las relaciones entre ellos pueden formar un grafo de gemelos. En una solución de Azure Digital Twins, las entidades del entorno se representan mediante gemelos digitales. Un gemelo digital es una instancia de uno de sus modelos definidos de forma personalizada. Se puede conectar a otros gemelos digitales a través de relaciones para formar una grafo de gemelos: este grafo de gemelos es la representación de todo el entorno.

Sugerencia

"Azure Digital Twins" hace referencia a este servicio de Azure en conjunto. "Gemelos digitales" o simplemente "gemelos" hace referencia a nodos gemelos individuales dentro de la instancia del servicio.

Gemelos digitales

Para poder crear un gemelo digital en la instancia de Azure Digital Twins, debe tener un modelo cargado en el servicio. Un modelo describe el conjunto de propiedades y relaciones que puede tener un gemelo determinado, entre otras cosas. Para conocer los tipos de información que se definen en un modelo, vea Modelos personalizados.

Después de crear y cargar un modelo, su aplicación cliente puede crear una instancia del tipo, que es un gemelo digital. Por ejemplo, después de crear un modelo de Floor, puede crear uno o varios gemelos digitales que usen este tipo (como un gemelo de tipo Floor denominado "GroundFloor", otro denominado "Floor2", etc.).

Nota:

Los gemelos digitales de Azure Digital Twins son diferentes de los dispositivos gemelos de IoT Hub. Los dispositivos gemelos de IoT Hub a menudo se centran en describir los aspectos y funcionalidades de un dispositivo, mientras que los gemelos de Azure Digital Twins son representaciones conceptuales que pueden almacenar información definida por el usuario sobre un dispositivo o muchos dispositivos relacionados.

Los dispositivos en IoT Hub se pueden conectar a Azure Digital Twins como parte de una solución global que representa los dispositivos entre los servicios.

Relaciones: un grafo de gemelos digitales

Los gemelos se conectan a un grafo de gemelos a través de sus relaciones. Las relaciones que un gemelo puede tener se definen como parte de su modelo.

Por ejemplo, el modelo Floor podría definir una contains relación destinada a gemelos de tipo Room. Con esta definición, Azure Digital Twins le permitirá crear contains relaciones desde cualquier gemelo floor a cualquier gemelo room (incluidos los gemelos que son de subtipos Room).

El resultado de este proceso es un conjunto de nodos (los gemelos digitales) conectado a través de bordes (sus relaciones) en un grafo.

Visualización

Azure Digital Twins Explorer es una herramienta visual para explorar los datos en el grafo de Azure Digital Twins. Puede usar el explorador para ver, consultar y editar los modelos, los gemelos y las relaciones.

Para obtener información sobre la herramienta Azure Digital Twins Explorer, vea Azure Digital Twins Explorer. Para obtener pasos detallados sobre el uso de sus características, consulte Uso de Azure Digital Twins Explorer.

Este es el aspecto de la visualización:

Screenshot of Azure Digital Twins Explorer showing sample models and twins.

Creación con las API

En esta sección se muestra en qué se basa la creación de gemelos digitales y relaciones desde una aplicación cliente. Contiene ejemplos del SDK de .NET que usan las API de DigitalTwins para proporcionar más contexto sobre lo que sucede dentro de cada uno de estos conceptos.

Creación de gemelos digitales

A continuación se muestra un fragmento de código de cliente que usa las API de DigitalTwins para crear una instancia de un gemelo de tipo Room con un elemento twinId que se define durante dicha creación.

Puede inicializar las propiedades de un gemelo cuando se crea o más adelante. Para crear un gemelo con propiedades inicializadas, cree un documento JSON que proporcione los valores de inicialización necesarios.

// Define a custom model type for the twin to be created

internal class CustomDigitalTwin
{
    [JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinId)]
    public string Id { get; set; }

    [JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinETag)]
    public string ETag { get; set; }

    [JsonPropertyName("temperature")]
    public double Temperature { get; set; }

    [JsonPropertyName("humidity")]
    public double Humidity{ get; set; }
}

// Initialize properties and create the twin
public class TwinOperationsCreateTwin
{
    public async Task CreateTwinAsync(DigitalTwinsClient client)
    {
        // Initialize the twin properties
        var myTwin = new CustomDigitalTwin
        {
            Temperature = 25.0,
            Humidity = 50.0,
        };

        // Create the twin
        const string twinId = "<twin-ID>";
        Response<CustomDigitalTwin> response = await client.CreateOrReplaceDigitalTwinAsync(twinId, myTwin);
        Console.WriteLine($"Temperature value: {response.Value.Temperature}");
    }
}

También puede usar una clase auxiliar denominada BasicDigitalTwin para almacenar campos de propiedades en un objeto "gemelo" más directamente, como alternativa al uso de un diccionario. Para obtener más información sobre la clase auxiliar y observar ejemplos de su uso, consulte Creación de un gemelo digital.

Nota:

Aunque las propiedades del gemelo se tratan como opcionales y, por lo tanto, no tienen que inicializarse, los componentes del gemelo deben establecerse cuando este se crea. Aunque pueden ser objetos vacíos, los componentes en sí deben existir.

Crear relaciones

A continuación figura un ejemplo de código de cliente que usa las API de DigitalTwins para crear una relación entre dos gemelos digitales (el gemelo de "origen" y el de "destino").

public async Task CreateRelationship(DigitalTwinsClient client)
{
    var rel = new BasicRelationship
    {
        TargetId = "myTargetTwin",
        Name = "contains", // a relationship with this name must be defined in the model
        // Initialize properties
        Properties =
        {
            { "active", true },
        },
    };
    await client.CreateOrReplaceRelationshipAsync("mySourceTwin", "rel001", rel);
}

Creación de gemelos y relaciones de forma masiva con la API de importación de trabajos

Puede cargar muchos gemelos y relaciones en una sola llamada API mediante import Jobs API. Los gemelos y las relaciones creados con esta API pueden incluir opcionalmente la inicialización de sus propiedades. Para obtener instrucciones detalladas y ejemplos que usan esta API, consulte instrucciones de importación masiva para gemelos y relaciones.

Eliminar elementos de grafo

Para eliminar gemelos y relaciones específicos, use las API DigitalTwins Delete y DigitalTwins DeleteRelationship (también disponibles en como comandos de la CLI y llamadas del SDK).

Para eliminar todos los modelos, gemelos y relaciones de una instancia a la vez, use la API Eliminar trabajos.

Representaciones JSON de elementos de grafo

Los datos de gemelos digitales y los de relaciones se almacenan en formato JSON, es decir, cuando consulte el grafo de gemelos en la instancia de Azure Digital Twins, el resultado será una representación JSON de los gemelos digitales y las relaciones que ha creado.

Formato JSON de gemelo digital

Si se representa como un objeto JSON, un gemelo digital mostrará los campos siguientes:

Nombre del campo Descripción
$dtId Cadena proporcionada por el usuario que representa el identificador del gemelo digital.
$etag Campo HTTP estándar asignado por el servidor web.
$metadata.$model Identificador de la interfaz del modelo que caracteriza al gemelo digital.
$metadata.<property-name> Otra información de metadatos sobre las propiedades del gemelo digital.
$metadata.<property-name>.lastUpdateTime Fecha y hora en que Azure Digital Twins procesó el mensaje de actualización de la propiedad.
$metadata.<property-name>.sourceTime Propiedad opcional que se puede escribir que representa la marca de tiempo cuando se observó la actualización de la propiedad en un entorno real. Esta propiedad solo se puede escribir con la versión 31-05-2022 de los SDK o las API de Azure Digital Twins, y el valor debe cumplir el formato de fecha y hora de la normativa ISO 8601. Para obtener más información sobre cómo actualizar esta propiedad, vea Actualizar el valor sourceTime de una propiedad.
<property-name> Valor de una propiedad en formato JSON (string, tipo de número u objeto).
$relationships Dirección URL de la ruta de acceso a la colección de relaciones. Este campo no está presente si el gemelo digital no tiene bordes de relación salientes.
<component-name> Objeto JSON que contiene los valores de propiedad y los metadatos del componente, similares a los del objeto raíz. Este objeto existe aunque el componente no tenga propiedades.
<component-name>.$metadata Información de metadatos del componente, similar al nivel de raíz $metadata.
<component-name>.<property-name> Valor de la propiedad del componente en formato JSON (string, tipo de número u objeto).

A continuación se muestra un ejemplo de gemelo digital con formato como objeto JSON. Este gemelo tiene dos propiedades, Humidity y Temperature, y un componente denominado Thermostat.

{
    "$dtId": "myRoomID",
    "$etag": "W/\"8e6d3e89-1166-4a1d-9a99-8accd8fef43f\"",
    "$metadata": {
        "$model": "dtmi:example:Room23;1",
        "Humidity": {
          "lastUpdateTime": "2021-11-30T18:47:53.7648958Z"
        },
        "Temperature": {
          "lastUpdateTime": "2021-11-30T18:47:53.7648958Z"
        }
    },
    "Humidity": 55,
    "Temperature": 35,
    "Thermostat": {
        "$metadata": {}
    }

Formato JSON de relación

Si se representa como un objeto JSON, una relación de un gemelo digital mostrará los campos siguientes:

Nombre del campo Descripción
$relationshipId Cadena proporcionada por el usuario que representa el identificador de esta relación. Esta cadena es única en el contexto del gemelo digital de origen, lo que también significa que sourceId + relationshipId es único en el contexto de la instancia de Azure Digital Twins.
$etag Campo HTTP estándar asignado por el servidor web.
$sourceId Identificador del gemelo digital de origen.
$targetId Identificador del gemelo digital de destino.
$relationshipName El nombre de la relación
<property-name> [Opcional] Valor de una propiedad de esta relación en formato JSON (string, tipo de número u objeto).

A continuación se muestra un ejemplo de relación formateada como objeto JSON:

{
  "$relationshipId": "relationship-01",
  "$etag": "W/\"506e8391-2b21-4ac9-bca3-53e6620f6a90\"",
  "$sourceId": "GroundFloor",
  "$targetId": "Cafe",
  "$relationshipName": "contains",
  "startDate": "2020-02-04"
}

Pasos siguientes

Consulte cómo administrar elementos de grafo con las API de Azure Digital Twins:

O bien, consulte el grafo de gemelos de Azure Digital Twins para obtener información: