Usar a API REST para criar e gerenciar aplicativos do IoT Central
Você pode usar a API REST do plano de controle para criar e gerenciar aplicativos do IoT Central. Você também pode usar a API REST para:
- Adicione uma identidade gerenciada ao seu aplicativo.
- Gerenciar painéis em seu aplicativo
Para usar essa API, você precisa de um token de portador para o management.azure.com
recurso. Para obter um token de portador, você pode usar a CLI do Azure:
az account get-access-token --resource https://management.azure.com
Para saber como gerenciar o aplicativo IoT Central usando a interface do usuário do IoT Central, consulte Criar um aplicativo do IoT Central.
Liste suas aplicações
Para obter uma lista dos aplicativos do IoT Central em uma assinatura:
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.IoTCentral/iotApps?api-version=2021-06-01
Para obter uma lista dos aplicativos do IoT Central em um grupo de recursos:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.IoTCentral/iotApps?api-version=2021-06-01
Pode obter os detalhes de um pedido individual:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.IoTCentral/iotApps/{applicationName}?api-version=2021-06-01
Criar uma aplicação de IoT Central
Para criar um aplicativo IoT Central com uma identidade gerenciada atribuída ao sistema:
PUT https://management.azure.com/subscriptions/<your subscription id>/resourceGroups/<your resource group name>/providers/Microsoft.IoTCentral/iotApps/<your application name>?api-version=2021-06-01
A carga útil a seguir mostra a configuração para o novo aplicativo, incluindo a identidade gerenciada:
{
"location": "eastus",
"sku": {
"name": "ST2"
},
"properties": {
"displayName": "Contoso IoT Central App",
"subdomain": "my-iot-central-app",
"template": "iotc-pnp-preview@1.0.0"
},
"identity": {
"type": "SystemAssigned"
}
}
Modificar um aplicativo do IoT Central
Você pode modificar um aplicativo existente do IoT Central. O exemplo a seguir mostra como alterar o nome para exibição e habilitar a identidade gerenciada atribuída ao sistema:
PATCH https://management.azure.com/subscriptions/<your subscription id>/resourceGroups/<your resource group name>/providers/Microsoft.IoTCentral/iotApps/<your application name>?api-version=2021-06-01
Use a seguinte carga para alterar o nome de exibição e habilitar a identidade gerenciada atribuída ao sistema:
{
"properties": {
"displayName": "Contoso IoT Central App"
},
"identity": {
"type": "SystemAssigned"
}
}
Nota
Você só pode adicionar uma identidade gerenciada a um aplicativo do IoT Central que foi criado em uma região. Todos os novos aplicativos são criados em uma região.
Excluir um aplicativo do IoT Central
Para excluir um aplicativo do IoT Central, use:
DELETE https://management.azure.com/subscriptions/<your subscription id>/resourceGroups/<your resource group name>/providers/Microsoft.IoTCentral/iotApps/<your application name>?api-version=2021-06-01
Dashboards
Você pode criar painéis associados a uma organização específica. Um painel da organização só é visível para os usuários que têm acesso à organização à qual o painel está associado. Somente os usuários em uma função que tenha permissões de painel da organização podem criar, editar e excluir painéis da organização.
Todos os usuários podem criar painéis pessoais, visíveis apenas para si mesmos. Os usuários podem alternar entre a organização e painéis pessoais.
Nota
No momento, não há suporte para a criação de painéis pessoais usando API.
Para saber como gerenciar painéis usando a interface do usuário do IoT Central, consulte Como gerenciar painéis.
API REST de painéis
A API REST do IoT Central permite:
- Adicionar um painel ao seu aplicativo
- Atualizar um painel em seu aplicativo
- Obter uma lista do painel no aplicativo
- Obter um painel por ID
- Excluir um painel em seu aplicativo
Adicionar um dashboard
Use a solicitação a seguir para criar um painel.
PUT https://{your app subdomain}.azureiotcentral.com/api/dashboards/{dashboardId}?api-version=2022-10-31-preview
dashboardId
- Um identificador DTMI exclusivo para o painel.
O corpo da solicitação tem alguns campos obrigatórios:
@displayName
: Nome para exibição do painel.@favorite
: O painel está na lista de favoritos?group
: ID do grupo de dispositivos.Tile
: Configuração especificando um objeto de bloco, incluindo o layout, nome para exibição e configuração.
O mosaico tem alguns campos obrigatórios:
Nome | Descrição |
---|---|
displayName |
Nome para exibição do bloco |
height |
Altura da telha |
width |
Largura do mosaico |
x |
Posição horizontal da telha |
y |
Posição vertical do mosaico |
As dimensões e a localização de um bloco usam unidades inteiras. A menor telha possível tem uma altura e largura de uma.
Você pode configurar um objeto de bloco para exibir vários tipos de dados. Este artigo inclui exemplos de blocos que mostram gráficos de linhas, markdown e o último valor conhecido. Para saber mais sobre os diferentes tipos de mosaico que pode adicionar a um dashboard, consulte Tipos de mosaico.
Mosaico do gráfico de linhas
Plotar um ou mais valores agregados de telemetria para um ou mais dispositivos durante um período de tempo. Por exemplo, você pode exibir um gráfico de linhas para plotar a temperatura média e a pressão de um ou mais dispositivos durante a última hora.
O bloco de gráfico de linhas tem a seguinte configuração:
Nome | Descrição |
---|---|
capabilities |
Especifica o valor agregado da telemetria a ser exibida. |
devices |
A lista de dispositivos a serem exibidos. |
format |
A configuração de formato do gráfico, como os eixos a serem usados. |
group |
A ID do grupo de dispositivos a ser exibido. |
queryRange |
O intervalo de tempo e a resolução a serem exibidos. |
type |
lineChart |
Mosaico Markdown
Blocos clicáveis que exibem um título e um texto de descrição formatados em Markdown. O URL pode ser um link relativo para outra página no aplicativo ou um link absoluto para um site externo. O bloco de marcação tem a seguinte configuração:
Nome | Descrição |
---|---|
description |
A cadeia de caracteres de markdown a ser renderizada dentro do bloco. |
href |
O link a ser visitado quando o bloco for selecionado. |
image |
Uma imagem codificada em base64 para exibir. |
type |
markdown |
Último bloco de valor conhecido
Exiba os valores de telemetria mais recentes para um ou mais dispositivos. Por exemplo, você pode usar esse bloco para exibir os valores mais recentes de temperatura, pressão e umidade para um ou mais dispositivos.
O último bloco de valor conhecido (LKV) tem a seguinte configuração:
Nome | Descrição |
---|---|
capabilities |
Especifica a telemetria a ser exibida. |
devices |
A lista de dispositivos a serem exibidos. |
format |
A configuração de formato do bloco LKV, como o tamanho do texto da quebra automática de texto. |
group |
A ID do grupo de dispositivos a ser exibido. |
showTrend |
Mostrar a diferença entre o último valor conhecido e o valor anterior. |
type |
lkv |
O exemplo a seguir mostra um corpo de solicitação que adiciona um novo painel com gráfico de linhas, marcação e blocos do último valor conhecido. Os blocos LKV e gráfico de linhas são 2x2
blocos. O bloco de marcação é um 1x1
bloco. Os blocos estão dispostos na linha superior do painel:
{
"displayName": "My Dashboard ",
"tiles": [
{
"displayName": "LKV Temperature",
"configuration": {
"type": "lkv",
"capabilities": [
{
"capability": "temperature",
"aggregateFunction": "avg"
}
],
"group": "0fb6cf08-f03c-4987-93f6-72103e9f6100",
"devices": [
"3xksbkqm8r",
"1ak6jtz2m5q",
"h4ow04mv3d"
],
"format": {
"abbreviateValue": false,
"wordWrap": false,
"textSize": 14
}
},
"x": 0,
"y": 0,
"width": 2,
"height": 2
},
{
"displayName": "Documentation",
"configuration": {
"type": "markdown",
"description": "Comprehensive help articles and links to more support.",
"href": "https://aka.ms/iotcentral-pnp-docs",
"image": "4d6c6373-0220-4191-be2e-d58ca2a289e1"
},
"x": 2,
"y": 0,
"width": 1,
"height": 1
},
{
"displayName": "Average temperature",
"configuration": {
"type": "lineChart",
"capabilities": [
{
"capability": "temperature",
"aggregateFunction": "avg"
}
],
"devices": [
"3xksbkqm8r",
"1ak6jtz2m5q",
"h4ow04mv3d"
],
"group": "0fb6cf08-f03c-4987-93f6-72103e9f6100",
"format": {
"xAxisEnabled": true,
"yAxisEnabled": true,
"legendEnabled": true
},
"queryRange": {
"type": "time",
"duration": "PT30M",
"resolution": "PT1M"
}
},
"x": 3,
"y": 0,
"width": 2,
"height": 2
}
],
"favorite": false
}
A resposta a essa solicitação se parece com o exemplo a seguir:
{
"id": "dtmi:kkfvwa2xi:p7pyt5x38",
"displayName": "My Dashboard",
"personal": false,
"tiles": [
{
"displayName": "lineChart",
"configuration": {
"type": "lineChart",
"capabilities": [
{
"capability": "temperature",
"aggregateFunction": "avg"
}
],
"devices": [
"1cfqhp3tue3",
"mcoi4i2qh3"
],
"group": "da48c8fe-bac7-42bc-81c0-d8158551f066",
"format": {
"xAxisEnabled": true,
"yAxisEnabled": true,
"legendEnabled": true
},
"queryRange": {
"type": "time",
"duration": "PT30M",
"resolution": "PT1M"
}
},
"x": 5,
"y": 0,
"width": 2,
"height": 2
}
],
"favorite": false
}
Adicionar uma configuração de conta de armazenamento de upload de arquivo
Use a seguinte solicitação para criar uma configuração de conta de armazenamento de blob de upload de arquivo em seu aplicativo IoT Central:
PUT https://{your-app-subdomain}.azureiotcentral.com/api/fileUploads?api-version=2022-07-31
O corpo da solicitação tem os seguintes campos:
account
: O nome da conta de armazenamento para onde carregar o arquivo.connectionString
: A cadeia de conexão para se conectar à conta de armazenamento.container
: O nome do contêiner dentro da conta de armazenamento. O exemplo a seguir usa o nomefileuploads
.etag
: ETag para evitar conflitos com vários uploadssasTtl
: ISO 8601 padrão de duração, A quantidade de tempo que a solicitação do dispositivo para carregar um arquivo é válida antes que ele expire.
{
"account": "yourAccountName",
"connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/",
"container": "fileuploads",
"sasTtl": "PT1H"
}
A resposta a essa solicitação se parece com o exemplo a seguir:
{
"account": "yourAccountName",
"connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/",
"container": "fileuploads",
"sasTtl": "PT1H",
"state": "pending",
"etag": "\"7502ac89-0000-0300-0000-627eaf100000\""
}
Obter a configuração da conta de armazenamento de upload de arquivos
Use a seguinte solicitação para recuperar detalhes de uma configuração de conta de armazenamento de blob de upload de arquivo em seu aplicativo IoT Central:
GET https://{your-app-subdomain}.azureiotcentral.com/api/fileUploads?api-version=2022-07-31
A resposta a essa solicitação se parece com o exemplo a seguir:
{
"account": "yourAccountName",
"connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/",
"container": "yourContainerName",
"state": "succeeded",
"etag": "\"7502ac89-0000-0300-0000-627eaf100000\""
}
Atualizar a configuração da conta de armazenamento de upload de arquivo
Use a seguinte solicitação para atualizar uma cadeia de conexão de conta de armazenamento de blob de upload de arquivo em seu aplicativo IoT Central:
PATCH https://{your-app-subdomain}.azureiotcentral.com/api/fileUploads?api-version=2022-07-31
{
"connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/"
}
A resposta a essa solicitação se parece com o exemplo a seguir:
{
"account": "yourAccountName",
"connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/",
"container": "yourContainerName",
"sasTtl": "PT1H",
"state": "succeeded",
"etag": "\"7502ac89-0000-0300-0000-627eaf100000\""
}
Remover a configuração da conta de armazenamento de upload de arquivo
Use a seguinte solicitação para excluir uma configuração de conta de armazenamento:
DELETE https://{your-app-subdomain}.azureiotcentral.com/api/fileUploads?api-version=2022-07-31
Obter um painel
Use a solicitação a seguir para recuperar os detalhes de um painel usando uma ID de painel.
GET https://{your app subdomain}.azureiotcentral.com/api/dashboards/{dashboardId}?api-version=2022-10-31-preview
A resposta a essa solicitação se parece com o exemplo a seguir:
{
"id": "dtmi:kkfvwa2xi:p7pyt5x38",
"displayName": "My Dashboard",
"personal": false,
"tiles": [
{
"displayName": "lineChart",
"configuration": {
"type": "lineChart",
"capabilities": [
{
"capability": "AvailableMemory",
"aggregateFunction": "avg"
}
],
"devices": [
"1cfqhp3tue3",
"mcoi4i2qh3"
],
"group": "da48c8fe-bac7-42bc-81c0-d8158551f066",
"format": {
"xAxisEnabled": true,
"yAxisEnabled": true,
"legendEnabled": true
},
"queryRange": {
"type": "time",
"duration": "PT30M",
"resolution": "PT1M"
}
},
"x": 5,
"y": 0,
"width": 2,
"height": 2
}
],
"favorite": false
}
Atualizar um painel
PATCH https://{your app subdomain}.azureiotcentral.com/api/dashboards/{dashboardId}?api-version=2022-10-31-preview
O exemplo a seguir mostra um corpo de solicitação que atualiza o nome para exibição de um painel e adiciona o painel à lista de favoritos:
{
"displayName": "New Dashboard Name",
"favorite": true
}
A resposta a essa solicitação se parece com o exemplo a seguir:
{
"id": "dtmi:kkfvwa2xi:p7pyt5x38",
"displayName": "New Dashboard Name",
"personal": false,
"tiles": [
{
"displayName": "lineChart",
"configuration": {
"type": "lineChart",
"capabilities": [
{
"capability": "AvailableMemory",
"aggregateFunction": "avg"
}
],
"devices": [
"1cfqhp3tue3",
"mcoi4i2qh3"
],
"group": "da48c8fe-bac7-42bc-81c0-d8158551f066",
"format": {
"xAxisEnabled": true,
"yAxisEnabled": true,
"legendEnabled": true
},
"queryRange": {
"type": "time",
"duration": "PT30M",
"resolution": "PT1M"
}
},
"x": 5,
"y": 0,
"width": 5,
"height": 5
}
],
"favorite": true
}
Eliminar um dashboard
Use a seguinte solicitação para excluir um painel usando a ID do painel:
DELETE https://{your app subdomain}.azureiotcentral.com/api/dashboards/{dashboardId}?api-version=2022-10-31-preview
Listar painéis
Use a seguinte solicitação para recuperar uma lista de painéis do seu aplicativo:
GET https://{your app subdomain}.azureiotcentral.com/api/dashboards?api-version=2022-10-31-preview
A resposta a essa solicitação se parece com o exemplo a seguir:
{
"value": [
{
"id": "dtmi:kkfvwa2xi:p7pyt5x3o",
"displayName": "Dashboard",
"personal": false,
"tiles": [
{
"displayName": "Device templates",
"configuration": {
"type": "markdown",
"description": "Get started by adding your first device.",
"href": "/device-templates/new/devicetemplates",
"image": "f5ba1b00-1d24-4781-869b-6f954df48736"
},
"x": 1,
"y": 0,
"width": 1,
"height": 1
},
{
"displayName": "Quick start demo",
"configuration": {
"type": "markdown",
"description": "Learn how to use Azure IoT Central in minutes.",
"href": "https://aka.ms/iotcentral-pnp-video",
"image": "9eb01d71-491a-44e5-8fac-7af3bc9f9acd"
},
"x": 2,
"y": 0,
"width": 1,
"height": 1
},
{
"displayName": "Tutorials",
"configuration": {
"type": "markdown",
"description": "Step-by-step articles teach you how to create apps and devices.",
"href": "https://aka.ms/iotcentral-pnp-tutorials",
"image": "7d9fc12c-d46e-41c6-885f-0a67c619366e"
},
"x": 3,
"y": 0,
"width": 1,
"height": 1
},
{
"displayName": "Documentation",
"configuration": {
"type": "markdown",
"description": "Comprehensive help articles and links to more support.",
"href": "https://aka.ms/iotcentral-pnp-docs",
"image": "4d6c6373-0220-4191-be2e-d58ca2a289e1"
},
"x": 4,
"y": 0,
"width": 1,
"height": 1
},
{
"displayName": "IoT Central Image",
"configuration": {
"type": "image",
"format": {
"backgroundColor": "#FFFFFF",
"fitImage": true,
"showTitle": false,
"textColor": "#FFFFFF",
"textSize": 0,
"textSizeUnit": "px"
},
"image": ""
},
"x": 0,
"y": 0,
"width": 1,
"height": 1
},
{
"displayName": "Contoso Image",
"configuration": {
"type": "image",
"format": {
"backgroundColor": "#FFFFFF",
"fitImage": true,
"showTitle": false,
"textColor": "#FFFFFF",
"textSize": 0,
"textSizeUnit": "px"
},
"image": "c9ac5af4-f38e-4cd3-886a-e0cb107f391c"
},
"x": 0,
"y": 1,
"width": 5,
"height": 3
},
{
"displayName": "Available Memory",
"configuration": {
"type": "lineChart",
"capabilities": [
{
"capability": "AvailableMemory",
"aggregateFunction": "avg"
}
],
"devices": [
"1cfqhp3tue3",
"mcoi4i2qh3"
],
"group": "da48c8fe-bac7-42bc-81c0-d8158551f066",
"format": {
"xAxisEnabled": true,
"yAxisEnabled": true,
"legendEnabled": true
},
"queryRange": {
"type": "time",
"duration": "PT30M",
"resolution": "PT1M"
}
},
"x": 5,
"y": 0,
"width": 2,
"height": 2
}
],
"favorite": false
}
]
}