Definir o modelo de dispositivo de cafeteira
Um modelo de dispositivo no Azure IoT Central é um blueprint que define as características e os comportamentos de um tipo de dispositivo que se conecta ao seu aplicativo. Por exemplo, o modelo de dispositivo define a telemetria que um dispositivo envia para que o IoT Central crie visualizações que usam as unidades e os tipos de dados corretos.
Um modelo de dispositivo inclui as seguintes seções:
- Um modelo do dispositivo. Os dados que o simulador de cafeteira troca com seu aplicativo são especificados em um modelo de dispositivo.
- Componente raiz. A interface do componente raiz descreve recursos que são específicos do modelo do dispositivo.
- Componentes. Um modelo de dispositivo pode incluir componentes além do componente raiz para descrever os recursos do dispositivo. Neste cenário, você só usará o componente raiz para definir o modelo de Cafeteira Conectada.
- Interface herdada. Um modelo de dispositivo contém uma ou mais interfaces que estendem os recursos do componente padrão. Neste cenário, você só definirá uma interface.
- Exibições. Esta parte do modelo de dispositivo permite que você defina visualizações para exibir dados do dispositivo e formulários para gerenciar e controlar a cafeteira.
Após criar um modelo de dispositivo, você pode conectar um dispositivo simulado. O dispositivo simulado gera telemetria para que você possa testar o comportamento de seu aplicativo antes de conectar um dispositivo real.
Aqui, você verá como as definições de telemetria, propriedades e comandos são especificadas no modelo de dispositivo e as propriedades e exibições de nuvem necessárias para gerenciar e controlar os dispositivos no exemplo de cafeteiras habilitadas para IoT.
Telemetria
Telemetria são os dados que são transmitidos do dispositivo. É possível adicionar vários tipos de telemetria ao modelo do dispositivo de maneira que correspondam aos recursos do seu dispositivo. A cafeteira envia valores de temperatura da água e umidade do ar de seus sensores. Ela também envia informações de estado, indicando se está preparando uma bebida e quando uma xícara é detectada.
Propriedades
Use propriedades para compartilhar dados de configuração entre um dispositivo e seu aplicativo.
Neste cenário, você usa uma propriedade gravável para definir a temperatura ideal da água e a enviá-la para a cafeteira. Quando a propriedade gravável for atualizada no IoT Central, ela será marcada como pendente na interface do usuário até que o dispositivo reconheça que respondeu à atualização.
Você pode usar propriedades somente leitura para habilitar um dispositivo a enviar valores para seu aplicativo. Propriedades somente leitura só podem ser alteradas pelo dispositivo. Neste cenário, você define uma propriedade de dispositivo somente leitura chamada Device Warranty Expired
no modelo do dispositivo. O campo Device Warranty Expired
permanece vazio até a cafeteira ser conectada ao IoT Central. Uma vez conectada, a cafeteira envia o status da garantia para o aplicativo.
Propriedades de nuvem são metadados do dispositivo associados a ele. Use as propriedades de nuvem para registrar informações sobre o dispositivo em seu aplicativo no IoT Central. Neste cenário, você usa as propriedades de nuvem para registrar o intervalo ideal de temperatura da água da cafeteira. As propriedades de nuvem são armazenadas no aplicativo no IoT Central e não são sincronizadas com o dispositivo.
Comandos
Use comandos para gerenciar remotamente seu dispositivo do seu aplicativo. Você pode executar comandos diretamente no dispositivo da nuvem para controlá-lo. Neste cenário, você executa comandos em sua cafeteira para colocá-la no modo de manutenção ou para começar a preparar o café.
Exibições
Você pode personalizar a interface do usuário que o IoT Central exibe para gerenciar e monitorar dispositivos associados ao modelo de dispositivo. Neste cenário, você cria uma exibição para plotar os valores de telemetria enviados pelo dispositivo e cria um formulário para gerenciar as propriedades do dispositivo.
Modelo Cafeteira Conectada
Um modelo de dispositivo é a parte do modelo de dispositivo que define a telemetria, as propriedades e os comandos aos quais um dispositivo dá suporte. Você pode armazenar um modelo de funcionalidade do dispositivo em um arquivo JSON e importá-lo para o IoT Central. O JSON a seguir é o modelo de funcionalidade do dispositivo da cafeteira conectada.
{
"@id": "dtmi:com:example:ConnectedCoffeeMaker;1",
"@type": "Interface",
"contents": [
{
"@type": ["Telemetry", "NumberValue", "Temperature"],
"displayName": {
"en": "Water Temperature"
},
"name": "WaterTemperature",
"schema": "double",
"unit": "degreeCelsius",
"decimalPlaces": 1,
"maxValue": 100,
"minValue": 86
},
{
"@type": ["Telemetry", "NumberValue", "Humidity"],
"displayName": {
"en": "Air Humidity"
},
"name": "AirHumidity",
"schema": "integer",
"unit": "percent",
"maxValue": 100,
"minValue": 20
},
{
"@type": ["Telemetry", "State"],
"displayName": {
"en": "Brewing"
},
"name": "Brewing",
"schema": {
"@type": "Enum",
"enumValues": [
{
"displayName": {
"en": "Brewing"
},
"enumValue": "brewing",
"name": "Brewing"
},
{
"displayName": {
"en": "Not Brewing"
},
"enumValue": "notbrewing",
"name": "NotBrewing"
}
],
"valueSchema": "string"
}
},
{
"@type": ["Telemetry", "State"],
"displayName": {
"en": "Cup Detected"
},
"name": "CupDetected",
"schema": {
"@type": "Enum",
"enumValues": [
{
"displayName": {
"en": "Detected"
},
"enumValue": "detected",
"name": "Detected"
},
{
"displayName": {
"en": "Not Detected"
},
"enumValue": "notdetected",
"name": "NotDetected"
}
],
"valueSchema": "string"
}
},
{
"@type": ["Property", "NumberValue", "Initialized", "Temperature"],
"displayName": {
"en": "Optimal Temperature"
},
"name": "OptimalTemperature",
"schema": "double",
"unit": "degreeCelsius",
"writable": true,
"decimalPlaces": 1,
"initialValue": 98,
"maxValue": 100,
"minValue": 86
},
{
"@type": ["Property", "BooleanValue"],
"displayName": {
"en": "Device Warranty Expired"
},
"name": "DeviceWarrantyExpired",
"schema": "boolean",
"writable": false
},
{
"@type": ["Property", "Cloud", "NumberValue", "Temperature"],
"displayName": {
"en": "Coffee Maker Min Temperature"
},
"name": "CoffeeMakerMinTemperature",
"schema": "double",
"unit": "degreeCelsius",
"decimalPlaces": 1,
"maxValue": 92,
"minValue": 88
},
{
"@type": ["Property", "Cloud", "NumberValue", "Temperature"],
"displayName": {
"en": "Coffee Maker Max Temperature"
},
"name": "CoffeeMakerMaxTemperature",
"schema": "double",
"unit": "degreeCelsius",
"decimalPlaces": 1,
"maxValue": 99,
"minValue": 96
},
{
"@type": "Command",
"commandType": "synchronous",
"displayName": {
"en": "Set Maintenance Mode"
},
"name": "SetMaintenanceMode"
},
{
"@type": "Command",
"commandType": "synchronous",
"displayName": {
"en": "Start Brewing"
},
"name": "StartBrewing"
}
],
"displayName": {
"en": "Connected Coffee Maker"
},
"@context": [
"dtmi:iotcentral:context;2",
"dtmi:dtdl:context;2"
]
}
- O campo
@id
é o DTMI (Identificador de Modelo de Gêmeo Digital) para o modelo, no formatodtmi:<domain>:<unique-model-identifier>;<model-version-number>
. - O
@type
identifica o tipo de informações que estão sendo descritas. Por exemplo,"@type": "Interface"
é usado para indicar o tipo da entidade DTDL (Linguagem de Definição dos Gêmeos Digitais). Neste caso, a entidade é umaInterface
. - O campo
contents
é uma matriz de definições de atributo. Cada atributo precisa fornecer um@type
para identificar o tipo de informações de interface que ele descreve. Nesse caso, os objetosTelemetry
,Property
eCommand
descrevem os recursos da cafeteira conectada. - O campo
displayName
é um objeto que fornece um nome legível para a interface ou entidade em idiomas diferentes. Nesse caso, a interfacedisplayName
éConnected Coffee Maker
em inglês. - O campo
@context
é usado para especificar o contexto DTDL no qual a interface ou a entidade é definida. Nesse caso, ele faz referência aos contextosiotcentral
edtdl
. - O campo
name
é um identificador exclusivo deTelemetry
,Property
ouCommand
. - Cada campo de telemetria representa medições ou eventos, e geralmente esses campos são usados para descrever as leituras do sensor de dispositivo. Por exemplo,
Water Temperature
tem umschema
dedouble
eunit
dedegreeCelsius
. Os camposdecimalPlaces
,maxValue
eminValue
especificam mais detalhes sobre os dados telemétricos. - Cada campo de propriedade representa o estado de uma entidade. Por exemplo,
Device Warranty Expired
é do tipo booliano e pode ter o próprio estado definido pelo dispositivo conectado como true ou false. - O campo
writable
especifica se a propriedade pode ser definida do aplicativo IoT Central. Neste caso,Optimal Temperature
pode ser definido na interface do usuário do aplicativo, ao contrário deDevice Warranty Expired
. - Se uma propriedade tiver
Cloud
na lista de tipos, ela será uma Propriedade de Nuvem. Neste caso,Coffee Maker Min Temperature
eCoffee Maker Max Temperature
são propriedades de nuvem. - Cada campo de comando descreve uma ação que o dispositivo pode executar. Por exemplo,
Start Brewing
é um comando que a nuvem pode enviar para o dispositivo para começar a preparar café. - O campo
commandType
especifica se um comando é síncrono (aguarda uma resposta) ou assíncrono (não aguarda uma resposta).