Telemetria, propriedade e payloads de comando

Um modelo de dispositivo define:

  • Telemetria que um dispositivo envia para um serviço.
  • Propriedades que um dispositivo sincroniza com um serviço.
  • Comandos que o serviço chama em um dispositivo.

Dica

O Azure IoT Central é um serviço que segue as convenções de Plug and Play. No IoT Central, o modelo de dispositivo faz parte de um modelo de dispositivo. Atualmente, o IoT Central dá suporte ao DTDL v2 com uma extensão do IoT Central. Um aplicativo IoT Central espera receber dados JSON codificados em UTF-8.

Este artigo descreve os conteúdos JSON que os dispositivos enviam e recebem para telemetria, propriedades e comandos definidos em um modelo de dispositivo DTDL.

O artigo não descreve todos os tipos possíveis de telemetria, propriedade e carga de comando, mas os exemplos ilustram os principais tipos.

Cada exemplo mostra um snippet do modelo de dispositivo que define o tipo e os exemplos de conteúdo JSON para ilustrar como o dispositivo deve interagir com um serviço com reconhecimento de Plug and Play, como o IoT Central.

Os snippets JSON de exemplo neste artigo usam a Linguagem de Definição de Gêmeo Digital (DTDL) v2. Há também algumas extensões DTDL que o IoT Central usa.

Para obter um código de dispositivo de exemplo que mostra alguns desses conteúdos em uso, confira o tutorial Conectar um aplicativo de dispositivo IoT Plug and Play em execução no Linux ou Windows ao Hub IoT ou o tutorial Criar e conectar um aplicativo cliente ao seu aplicativo do Azure IoT Central.

Exibir dados brutos

Se você estiver usando o IoT Central, poderá exibir os dados brutos que um dispositivo envia a um aplicativo. Essa exibição é útil para solucionar problemas com o conteúdo enviado de um dispositivo. Para exibir os dados brutos que um dispositivo está enviando:

  1. Na página Dispositivos, navegue até o dispositivo desejado.

  2. Selecione a guia Dados brutos :

    Captura de tela que mostra a exibição de dados brutos.

    Nessa exibição, você pode selecionar as colunas a serem exibidas e definir um intervalo de tempo para exibição. A coluna Dados não modelados mostra dados do dispositivo que não correspondem a nenhuma propriedade ou definição de telemetria no modelo de dispositivo.

Para obter mais dicas de solução de problemas, confira Solucionar problemas relacionados a por que os dados de seus dispositivos não estão aparecendo no Azure IoT Central.

Telemetria

Para saber mais sobre as regras de nomenclatura de telemetria da DTDL, consulte Telemetria > da DTDL. Não é possível iniciar um nome de telemetria usando o caractere _.

Não crie tipos de telemetria com os nomes a seguir. O IoT Central usa esses nomes reservados internamente. Se você tentar usar esses nomes, o IoT Central ignorará seus dados:

  • EventEnqueuedUtcTime
  • EventProcessedUtcTime
  • PartitionId
  • EventHub
  • User
  • $metadata
  • $version

Telemetria em componentes

Se a telemetria for definida em um componente, adicione uma propriedade de mensagem personalizada chamada $.sub com o nome do componente, conforme definido no modelo do dispositivo. Para saber mais, confira Tutorial: conectar aplicativos de dispositivos de vários componentes IoT Plug and Play. Este tutorial mostra como usar diferentes linguagens de programação para enviar dados telemétricos de um componente.

Importante

Para exibir a telemetria de componentes hospedados em módulos do IoT Edge corretamente, use o IoT Edge versão 1.2.4 ou posterior. Se usar uma versão anterior, a telemetria dos componentes nos módulos do IoT Edge será exibida como _unmodeleddata.

Telemetria em interfaces herdadas

Se a telemetria for definida em uma interface herdada, seu dispositivo enviará a telemetria como se estivesse definida na interface raiz. Considerando o seguinte modelo de dispositivo:

[
    {
        "@id": "dtmi:contoso:device;1",
        "@type": "Interface",
        "contents": [
            {
                "@type": [
                    "Property",
                    "Cloud",
                    "StringValue"
                ],
                "displayName": {
                    "en": "Device Name"
                },
                "name": "DeviceName",
                "schema": "string"
            }
        ],
        "displayName": {
            "en": "Contoso Device"
        },
        "extends": [
            "dtmi:contoso:sensor;1"
        ],
        "@context": [
            "dtmi:iotcentral:context;2",
            "dtmi:dtdl:context;2"
        ]
    },
    {
        "@context": [
            "dtmi:iotcentral:context;2",
            "dtmi:dtdl:context;2"
        ],
        "@id": "dtmi:contoso:sensor;1",
        "@type": [
            "Interface",
            "NamedInterface"
        ],
        "contents": [
            {
                "@type": [
                    "Telemetry",
                    "NumberValue"
                ],
                "displayName": {
                    "en": "Meter Voltage"
                },
                "name": "MeterVoltage",
                "schema": "double"
            }
        ],
        "displayName": {
            "en": "Contoso Sensor"
        },
        "name": "ContosoSensor"
    }
]

O dispositivo envia telemetria de tensão do medidor usando o conteúdo a seguir. O dispositivo não inclui o nome da interface no conteúdo:

{
    "MeterVoltage": 5.07
}

Tipos primitivos

Esta seção mostra exemplos de tipos primitivos de telemetria que um dispositivo pode transmitir.

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria boolean:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "BooleanTelemetry"
  },
  "name": "BooleanTelemetry",
  "schema": "boolean"
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir:

{ "BooleanTelemetry": true }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria string:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "StringTelemetry"
  },
  "name": "StringTelemetry",
  "schema": "string"
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir:

{ "StringTelemetry": "A string value - could be a URL" }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria integer:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "IntegerTelemetry"
  },
  "name": "IntegerTelemetry",
  "schema": "integer"
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir:

{ "IntegerTelemetry": 23 }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria double:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "DoubleTelemetry"
  },
  "name": "DoubleTelemetry",
  "schema": "double"
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir:

{ "DoubleTelemetry": 56.78 }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria dateTime:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "DateTimeTelemetry"
  },
  "name": "DateTimeTelemetry",
  "schema": "dateTime"
}

Um cliente de dispositivo deve enviar a telemetria como JSON que se parece com o exemplo a seguir – os tipos de DateTime devem estar no formato ISO 8061:

{ "DateTimeTelemetry": "2020-08-30T19:16:13.853Z" }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria duration:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "DurationTelemetry"
  },
  "name": "DurationTelemetry",
  "schema": "duration"
}

Um cliente de dispositivo deve enviar a telemetria como JSON que se parece com o exemplo a seguir – as durações devem estar no formato ISO 8601:

{ "DurationTelemetry": "PT10H24M6.169083011336625S" }

Tipos complexos

Esta seção mostra exemplos de tipos de telemetria complexos que um dispositivo pode transmitir.

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria Enum:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "EnumTelemetry"
  },
  "name": "EnumTelemetry",
  "schema": {
    "@type": "Enum",
    "displayName": {
      "en": "Enum"
    },
    "valueSchema": "integer",
    "enumValues": [
      {
        "displayName": {
          "en": "Item1"
        },
        "enumValue": 0,
        "name": "Item1"
      },
      {
        "displayName": {
          "en": "Item2"
        },
        "enumValue": 1,
        "name": "Item2"
      },
      {
        "displayName": {
          "en": "Item3"
        },
        "enumValue": 2,
        "name": "Item3"
      }
    ]
  }
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir. Os valores possíveis são 0, 1 e 2 exibidos no IoT Central como Item1, Item2 e Item3:

{ "EnumTelemetry": 1 }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria Object: Esse objeto tem três campos com tipos dateTime, integer e Enum:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "ObjectTelemetry"
  },
  "name": "ObjectTelemetry",
  "schema": {
    "@type": "Object",
    "displayName": {
      "en": "Object"
    },
    "fields": [
      {
        "displayName": {
          "en": "Property1"
        },
        "name": "Property1",
        "schema": "dateTime"
      },
      {
        "displayName": {
          "en": "Property2"
        },
        "name": "Property2",
        "schema": "integer"
      },
      {
        "displayName": {
          "en": "Property3"
        },
        "name": "Property3",
        "schema": {
          "@type": "Enum",
          "displayName": {
            "en": "Enum"
          },
          "valueSchema": "integer",
          "enumValues": [
            {
              "displayName": {
                "en": "Item1"
              },
              "enumValue": 0,
              "name": "Item1"
            },
            {
              "displayName": {
                "en": "Item2"
              },
              "enumValue": 1,
              "name": "Item2"
            },
            {
              "displayName": {
                "en": "Item3"
              },
              "enumValue": 2,
              "name": "Item3"
            }
          ]
        }
      }
    ]
  }
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir. Os tipos DateTime devem ser compatíveis com ISO 8061. Os valores possíveis para Property3 são 0 e 1, e são exibidos no IoT Central como Item1, Item2 e Item3:

{
  "ObjectTelemetry": {
      "Property1": "2020-09-09T03:36:46.195Z",
      "Property2": 37,
      "Property3": 2
  }
}

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria vector:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "VectorTelemetry"
  },
  "name": "VectorTelemetry",
  "schema": "vector"
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir:

{
  "VectorTelemetry": {
    "x": 74.72395045538597,
    "y": 74.72395045538597,
    "z": 74.72395045538597
  }
}

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de telemetria geopoint:

{
  "@type": "Telemetry",
  "displayName": {
    "en": "GeopointTelemetry"
  },
  "name": "GeopointTelemetry",
  "schema": "geopoint"
}

Observação

O tipo de esquema de ponto geográfico faz parte da extensão do IoT Central para DTDL. O IoT Central atualmente oferece suporte ao tipo de esquema geoponto e ao tipo semântico localização para compatibilidade com versões anteriores.

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir. O IoT Central exibe o valor como um marcador em um mapa:

{
  "GeopointTelemetry": {
    "lat": 47.64263,
    "lon": -122.13035,
    "alt": 0
  }
}

Tipos de evento e de estado

Esta seção mostra exemplos de eventos e estados de telemetria que um dispositivo envia para um aplicativo do IoT Central.

Observação

Os tipos de esquema de evento e de estado fazem parte da extensão do IoT Central para DTDL.

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de evento integer:

{
  "@type": [
    "Telemetry",
    "Event"
  ],
  "displayName": {
    "en": "IntegerEvent"
  },
  "name": "IntegerEvent",
  "schema": "integer"
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir:

{ "IntegerEvent": 74 }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de estado integer:

{
  "@type": [
    "Telemetry",
    "State"
  ],
  "displayName": {
    "en": "IntegerState"
  },
  "name": "IntegerState",
  "schema": {
    "@type": "Enum",
    "valueSchema": "integer",
    "enumValues": [
      {
        "displayName": {
          "en": "Level1"
        },
        "enumValue": 1,
        "name": "Level1"
      },
      {
        "displayName": {
          "en": "Level2"
        },
        "enumValue": 2,
        "name": "Level2"
      },
      {
        "displayName": {
          "en": "Level3"
        },
        "enumValue": 3,
        "name": "Level3"
      }
    ]
  }
}

Um cliente de dispositivo deve enviar a telemetria como JSON semelhante ao exemplo a seguir: Os valores inteiros de estado possíveis são 1, 2 ou 3:

{ "IntegerState": 2 }

Propriedades

Para saber mais sobre as regras de nomenclatura da propriedade da DTDL, consulte a Propriedade > da DTDL. Não é possível iniciar um nome de propriedade usando o caractere _.

Propriedades em componentes

Se a propriedade for definida em um componente, empacote a propriedade no nome do componente. O exemplo a seguir define o maxTempSinceLastReboot no componente thermostat2. O marcador __t indica que esta seção define um componente:

{
  "thermostat2" : {  
    "__t" : "c",  
    "maxTempSinceLastReboot" : 38.7
    } 
}

Para mais informações, consulte Tutorial: Criar e conectar um aplicativo cliente ao seu aplicativo do Azure IoT Central.

Tipos primitivos

Esta seção mostra exemplos de tipos de propriedade primitiva que um dispositivo envia para um serviço.

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade boolean:

{
  "@type": "Property",
  "displayName": {
    "en": "BooleanProperty"
  },
  "name": "BooleanProperty",
  "schema": "boolean",
  "writable": false
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo:

{ "BooleanProperty": false }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade long:

{
  "@type": "Property",
  "displayName": {
    "en": "LongProperty"
  },
  "name": "LongProperty",
  "schema": "long",
  "writable": false
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo:

{ "LongProperty": 439 }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade date:

{
  "@type": "Property",
  "displayName": {
    "en": "DateProperty"
  },
  "name": "DateProperty",
  "schema": "date",
  "writable": false
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo. Os tipos Date devem ser compatíveis com ISO 8061:

{ "DateProperty": "2020-05-17" }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade duration:

{
  "@type": "Property",
  "displayName": {
    "en": "DurationProperty"
  },
  "name": "DurationProperty",
  "schema": "duration",
  "writable": false
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo – as durações devem ser compatíveis com o formato ISO 8601:

{ "DurationProperty": "PT10H24M6.169083011336625S" }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade float:

{
  "@type": "Property",
  "displayName": {
    "en": "FloatProperty"
  },
  "name": "FloatProperty",
  "schema": "float",
  "writable": false
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo:

{ "FloatProperty": 1.9 }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade string:

{
  "@type": "Property",
  "displayName": {
    "en": "StringProperty"
  },
  "name": "StringProperty",
  "schema": "string",
  "writable": false
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo:

{ "StringProperty": "A string value - could be a URL" }

Tipos complexos

Esta seção mostra exemplos de tipos de propriedade complexos que um dispositivo envia para um serviço.

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade Enum:

{
  "@type": "Property",
  "displayName": {
    "en": "EnumProperty"
  },
  "name": "EnumProperty",
  "writable": false,
  "schema": {
    "@type": "Enum",
    "displayName": {
      "en": "Enum"
    },
    "valueSchema": "integer",
    "enumValues": [
      {
        "displayName": {
          "en": "Item1"
        },
        "enumValue": 0,
        "name": "Item1"
      },
      {
        "displayName": {
          "en": "Item2"
        },
        "enumValue": 1,
        "name": "Item2"
      },
      {
        "displayName": {
          "en": "Item3"
        },
        "enumValue": 2,
        "name": "Item3"
      }
    ]
  }
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo. Os valores possíveis são 0, 1, exibidos no IoT Central como Item1, Item2e Item3:

{ "EnumProperty": 1 }

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade Object. Esse objeto tem dois campos com tipos string e integer:

{
  "@type": "Property",
  "displayName": {
    "en": "ObjectProperty"
  },
  "name": "ObjectProperty",
  "writable": false,
  "schema": {
    "@type": "Object",
    "displayName": {
      "en": "Object"
    },
    "fields": [
      {
        "displayName": {
          "en": "Field1"
        },
        "name": "Field1",
        "schema": "integer"
      },
      {
        "displayName": {
          "en": "Field2"
        },
        "name": "Field2",
        "schema": "string"
      }
    ]
  }
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo:

{
  "ObjectProperty": {
    "Field1": 37,
    "Field2": "A string value"
  }
}

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade vector:

{
  "@type": "Property",
  "displayName": {
    "en": "VectorProperty"
  },
  "name": "VectorProperty",
  "schema": "vector",
  "writable": false
}

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo:

{
  "VectorProperty": {
    "x": 74.72395045538597,
    "y": 74.72395045538597,
    "z": 74.72395045538597
  }
}

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade geopoint:

{
  "@type": "Property",
  "displayName": {
    "en": "GeopointProperty"
  },
  "name": "GeopointProperty",
  "schema": "geopoint",
  "writable": false
}

Observação

O tipo de esquema de ponto geográfico faz parte da extensão do IoT Central para DTDL. O IoT Central atualmente oferece suporte ao tipo de esquema geoponto e ao tipo semântico localização para compatibilidade com versões anteriores.

Um dispositivo cliente deve enviar um conteúdo JSON similar ao exemplo a seguir como uma propriedade relatada no dispositivo gêmeo:

{
  "GeopointProperty": {
    "lat": 47.64263,
    "lon": -122.13035,
    "alt": 0
  }
}

Tipos de propriedade graváveis

Esta seção mostra exemplos de tipos de propriedade graváveis que um dispositivo recebe de um serviço.

Se a propriedade gravável for definida em um componente, a mensagem de propriedade desejada incluirá o nome do componente. O exemplo a seguir mostra a mensagem solicitando que o dispositivo atualize o targetTemperature no componente thermostat2. O marcador __t indica que esta seção define um componente:

{
  "thermostat2": {
    "targetTemperature": {
      "value": 57
    },
    "__t": "c"
  },
  "$version": 3
}

Para saber mais, confira Conectar aplicativos de dispositivos de vários componentes IoT Plug and Play.

O dispositivo ou módulo deve confirmar que recebeu a propriedade enviada a uma propriedade relatada. A propriedade reportada deve incluir:

  • value-o valor efetivo da propriedade (normalmente o valor recebido, mas o dispositivo pode decidir o relatório de um valor diferente).
  • ac-um código de confirmação que usa um código de estado HTTP.
  • av-uma versão da confirmação que se refere à$versionpropriedade desejada. Você pode encontrar este valor no payload JSON da propriedade desejada.
  • ad-uma descrição de confirmação opcional.

Para saber mais sobre esses campos, confira Respostas de confirmação > convenções do IoT Plug and Play

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade string gravável:

{
  "@type": "Property",
  "displayName": {
    "en": "StringPropertyWritable"
  },
  "name": "StringPropertyWritable",
  "writable": true,
  "schema": "string"
}

O dispositivo recebe o seguinte conteúdo do serviço:

{  
  "StringPropertyWritable": "A string from IoT Central", "$version": 7
}

O dispositivo deve enviar o seguinte conteúdo JSON para o serviço depois de processar a atualização. Esta mensagem inclui o número de versão da atualização original recebida do serviço.

Dica

Se o serviço for IoT Central, ele marcará a propriedade como sincronizada na interface do usuário quando receber esta mensagem:

{
  "StringPropertyWritable": {
    "value": "A string from IoT Central",
    "ac": 200,
    "ad": "completed",
    "av": 7
  }
}

O snippet de um modelo de dispositivo abaixo mostra a definição de um tipo de propriedade Enum gravável:

{
  "@type": "Property",
  "displayName": {
    "en": "EnumPropertyWritable"
  },
  "name": "EnumPropertyWritable",
  "writable": true,
  "schema": {
    "@type": "Enum",
    "displayName": {
      "en": "Enum"
    },
    "valueSchema": "integer",
    "enumValues": [
      {
        "displayName": {
          "en": "Item1"
        },
        "enumValue": 0,
        "name": "Item1"
      },
      {
        "displayName": {
          "en": "Item2"
        },
        "enumValue": 1,
        "name": "Item2"
      },
      {
        "displayName": {
          "en": "Item3"
        },
        "enumValue": 2,
        "name": "Item3"
      }
    ]
  }
}

O dispositivo recebe o seguinte conteúdo do serviço:

{  
  "EnumPropertyWritable":  1 , "$version": 10
}

O dispositivo deve enviar o seguinte conteúdo JSON para o serviço depois de processar a atualização. Esta mensagem inclui o número de versão da atualização original recebida do serviço.

Dica

Se o serviço for IoT Central, ele marcará a propriedade como sincronizada na interface do usuário quando receber esta mensagem:

{
  "EnumPropertyWritable": {
    "value": 1,
    "ac": 200,
    "ad": "completed",
    "av": 10
  }
}

Comandos

Para saber mais sobre as regras de nomenclatura de comando da DTDL, consulte Comando > da DTDL. Não é possível iniciar um nome de comando usando o caractere _.

Se o comando for definido em um componente, o nome do comando que o dispositivo recebe incluirá o nome do componente. Por exemplo, se o comando for chamado getMaxMinReport e o componente for chamado thermostat2, o dispositivo receberá uma solicitação para executar um comando chamado thermostat2*getMaxMinReport.

O snippet de um modelo de dispositivo abaixo mostra a definição de um comando que não tem parâmetros e que não espera que o dispositivo retorne algo:

{
  "@type": "Command",
  "displayName": {
    "en": "CommandBasic"
  },
  "name": "CommandBasic"
}

O dispositivo recebe um conteúdo vazio na solicitação e deve retornar um conteúdo vazio na resposta com um código de resposta HTTP 200 para indicar êxito.

O snippet de um modelo de dispositivo abaixo mostra a definição de um comando que tem um parâmetro inteiro e que espera que o dispositivo retorne um valor inteiro:

{
  "@type": "Command",
  "request": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "RequestParam"
    },
    "name": "RequestParam",
    "schema": "integer"
  },
  "response": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "ResponseParam"
    },
    "name": "ResponseParam",
    "schema": "integer"
  },
  "displayName": {
    "en": "CommandSimple"
  },
  "name": "CommandSimple"
}

O dispositivo recebe um valor inteiro como o conteúdo da solicitação. O dispositivo deve retornar um valor inteiro como o conteúdo de resposta com um código de resposta HTTP 200 para indicar êxito.

O snippet de um modelo de dispositivo abaixo mostra a definição de um comando que tem um parâmetro de objeto e que espera que o dispositivo retorne um objeto: Neste exemplo, os dois objetos têm campos inteiros e de cadeia de caracteres:

{
  "@type": "Command",
  "request": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "RequestParam"
    },
    "name": "RequestParam",
    "schema": {
      "@type": "Object",
      "displayName": {
        "en": "Object"
      },
      "fields": [
        {
          "displayName": {
            "en": "Field1"
          },
          "name": "Field1",
          "schema": "integer"
        },
        {
          "displayName": {
            "en": "Field2"
          },
          "name": "Field2",
          "schema": "string"
        }
      ]
    }
  },
  "response": {
    "@type": "CommandPayload",
    "displayName": {
      "en": "ResponseParam"
    },
    "name": "ResponseParam",
    "schema": {
      "@type": "Object",
      "displayName": {
        "en": "Object"
      },
      "fields": [
        {
          "displayName": {
            "en": "Field1"
          },
          "name": "Field1",
          "schema": "integer"
        },
        {
          "displayName": {
            "en": "Field2"
          },
          "name": "Field2",
          "schema": "string"
        }
      ]
    }
  },
  "displayName": {
    "en": "CommandComplex"
  },
  "name": "CommandComplex"
}

O snippet abaixo mostra um exemplo de conteúdo de solicitação enviado para o dispositivo:

{ "Field1": 56, "Field2": "A string value" }

O snippet abaixo mostra um exemplo de conteúdo de resposta enviado pelo dispositivo: Use um código de resposta HTTP 200 para indicar êxito:

{ "Field1": 87, "Field2": "Another string value" }

Dica

O IoT Central tem suas próprias convenções para implementar Comandos de execução longa e Comandos offline.

Próximas etapas

Agora que você aprendeu sobre cargas de dispositivo, uma próxima etapa sugerida é ler o Guia do desenvolvedor de dispositivos.