Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A ponte de dispositivo do IoT Central é uma solução de software livre que conecta outras nuvens de IoT, como Sigfox, Nuvem de Dispositivo de Partículas e A Rede de Coisas ao seu aplicativo do IoT Central. A ponte de dispositivo funciona encaminhando dados de dispositivos conectados a outras nuvens de IoT até o aplicativo IoT Central. A ponte de dispositivo apenas encaminha dados para o IoT Central, não envia comandos ou atualizações de propriedade do IoT Central de volta para os dispositivos.
A ponte do dispositivo permite combinar a potência do IoT Central com dispositivos como:
- Dispositivos de rastreamento de ativos conectados à rede de área de baixa potência do Sigfox.
- Dispositivos de monitoramento de qualidade do ar na nuvem do dispositivo de partículas.
- Dispositivos de monitoramento de umidade do solo no The Things Network.
Você pode usar recursos de aplicativo do IoT Central, como regras e análises nos dados, criar fluxos de trabalho no Power Automate e aplicativos lógicos do Azure ou exportar os dados.
A solução de ponte de dispositivo provisiona vários recursos do Azure em sua assinatura do Azure que funcionam juntos para transformar e encaminhar mensagens de dispositivo para o IoT Central.
Pré-requisitos
Para concluir as etapas neste guia de instruções, você precisa:
Uma assinatura ativa do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Um aplicativo do IoT Central criado com base no modelo de aplicativo personalizado . Para saber mais, confira Criar um aplicativo do IoT Central e como obter informações sobre meu aplicativo?.
Visão geral
A ponte de dispositivo do IoT Central é uma solução de software livre no GitHub. Ele usa um modelo personalizado do Azure Resource Manager para implantar vários recursos em sua assinatura do Azure, incluindo um aplicativo de funções no Azure Functions.
O aplicativo de funções é a peça central da ponte do dispositivo. Ele recebe solicitações HTTP POST de outras plataformas IoT por meio de um webhook simples. O repositório do Azure IoT Central Device Bridge inclui exemplos que mostram como conectar nuvens Sigfox, Particle e The Things Network. Você pode estender essa solução para se conectar à nuvem IoT personalizada se sua plataforma puder enviar solicitações HTTP POST para seu aplicativo de funções.
O aplicativo de funções transforma os dados em um formato aceito pelo IoT Central e encaminha-os usando as APIs de serviço de provisionamento de dispositivo e cliente de dispositivo.
Se o aplicativo IoT Central reconhecer a ID do dispositivo na mensagem encaminhada, a telemetria do dispositivo será exibida no IoT Central. Se o aplicativo IoT Central não reconhecer a ID do dispositivo, o aplicativo de funções tentará registrar um novo dispositivo com a ID do dispositivo. O novo dispositivo aparece como um dispositivo não atribuído na página Dispositivos em seu aplicativo IoT Central. Na página Dispositivos , você pode atribuir o novo dispositivo a um modelo de dispositivo e exibir a telemetria.
Implantar a ponte de dispositivo
Para implantar a ponte do dispositivo em sua assinatura:
No aplicativo IoT Central, navegue até a página Permissões > Grupos de conexão de dispositivos>.
Anote a ID do Escopo. Você utiliza esse valor ao alocar a ponte de dispositivo.
Na mesma página, abra o grupo de registro SAS-IoT-Devices. Na página do grupo SAS-IoT-Devices , copie a chave Primária. Você utiliza esse valor ao alocar a ponte de dispositivo.
Use o botão Implantar no Azure a seguir para abrir o modelo personalizado do Gerenciador de Recursos que implanta o aplicativo de função em sua assinatura. Use o Escopo da ID e a Chave primária da etapa anterior:
Depois que a implantação for concluída, você precisará instalar os pacotes npm necessários para a função:
No portal do Azure, abra o aplicativo de funções que foi implantado em sua assinatura. Em seguida, acesse Ferramentas de Desenvolvimento>Console. No console, execute os seguintes comandos para instalar os pacotes:
cd IoTCIntegration npm installEsses comandos podem levar vários minutos para serem executados. Você pode ignorar com segurança todas as mensagens de aviso.
Após a conclusão da instalação do pacote, selecione Reiniciar na página Visão geral do aplicativo de funções:
A função agora está pronta para uso. Sistemas externos podem usar solicitações HTTP POST para enviar dados do dispositivo por meio da ponte do dispositivo para seu aplicativo IoT Central. Para obter a URL da função, navegue até Functions > IoTCIntegration > Code + Test > Get function URL:
Os corpos das mensagens enviadas para a ponte do dispositivo devem ter o seguinte formato:
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
Cada chave no measurements objeto deve corresponder ao nome de um tipo de telemetria no modelo de dispositivo no aplicativo IoT Central. Essa solução não dá suporte à especificação da ID da interface no corpo da mensagem. Portanto, se duas interfaces diferentes tiverem um tipo de telemetria com o mesmo nome, a medida será exibida em ambos os fluxos de telemetria em seu aplicativo IoT Central.
Você pode incluir um timestamp campo no corpo para especificar a data e a hora UTC da mensagem. Esse campo deve estar no formato ISO 8601. Por exemplo, 2020-06-08T20:16:54.602Z. Caso você não inclua um carimbo de data/hora, serão utilizadas a data e a hora atuais.
Você pode incluir um campo modelId no corpo. Use esse campo para atribuir o dispositivo a um modelo de dispositivo durante o provisionamento.
O deviceId deve ser alfanumérico, minúsculo e pode conter hifens.
Se você não incluir o modelId campo ou se o IoT Central não reconhecer a ID do modelo, uma mensagem com um dispositivo não reconhecido deviceId criará um novo dispositivo não atribuído no IoT Central. Um operador pode migrar manualmente o dispositivo para o modelo de dispositivo correto. Para saber mais, confira Gerenciar dispositivos em seu aplicativo > do Azure IoT Central migrando dispositivos para um modelo.
Observação
Até que o dispositivo seja atribuído a um modelo, todas as chamadas HTTP para a função retornarão um status de erro 403.
Para mudar o registro em log para o aplicativo de funções com o Application Insights, navegue até Monitoramento > Logs no aplicativo de funções no portal do Azure. Selecione Ativar Application Insights.
Recursos provisionados
O modelo do Resource Manager provisiona os seguintes recursos em sua assinatura do Azure:
- Aplicativo de funções
- Plano do Serviço de Aplicativo
- Conta de armazenamento
- Cofre de chaves criptográficas
O cofre de chaves armazena a chave de grupo SAS para seu aplicativo IoT Central.
O aplicativo de funções é executado em um plano de consumo. Embora essa opção não ofereça recursos de computação dedicados, ela permite que a ponte do dispositivo manipule centenas de mensagens de dispositivo por minuto, adequadas para frotas menores de dispositivos ou dispositivos que enviam mensagens com menos frequência. Se o aplicativo depender do streaming de um grande número de mensagens de dispositivo, substitua o plano de consumo por um plano de serviço de aplicativo dedicado. Esse plano oferece recursos de computação dedicados, que oferecem tempos de resposta de servidor mais rápidos. Com um Plano do Serviço de Aplicativo padrão, o desempenho máximo observado da função do Azure neste repositório era de cerca de 1.500 mensagens de dispositivo por minuto. Para saber mais, confira as opções de hospedagem do Azure Functions.
Para usar um plano dedicado do Serviço de Aplicativo em vez de um plano de consumo, edite o modelo personalizado antes de implantar. Selecione Editar modelo.
Substitua o seguinte segmento:
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2015-04-01",
"name": "[variables('planName')]",
"location": "[resourceGroup().location]",
"properties": {
"name": "[variables('planName')]",
"computeMode": "Dynamic",
"sku": "Dynamic"
}
},
Com:
{
"type": "Microsoft.Web/serverfarms",
"sku": {
"name": "S1",
"tier": "Standard",
"size": "S1",
"family": "S",
"capacity": 1
},
"kind": "app",
"name": "[variables('planName')]",
"apiVersion": "2016-09-01",
"location": "[resourceGroup().location]",
"tags": {
"iotCentral": "device-bridge",
"iotCentralDeviceBridge": "app-service-plan"
},
"properties": {
"name": "[variables('planName')]"
}
},
Em seguida, edite o modelo para incluir "alwaysOn": true na configuração do recurso functionapp sob "properties": {"SiteConfig": {...}} A configuração alwaysOn garante que o aplicativo de funções esteja sempre em execução.
Exemplos
Os exemplos a seguir descrevem como configurar a ponte do dispositivo para várias nuvens de IoT:
Exemplo 1: Conectando dispositivos Particle por meio da Device Bridge
Para conectar um dispositivo de partículas por meio da ponte do dispositivo para IoT Central, vá para Console de partículas e crie uma nova integração de webhook. Defina o formato de solicitação como JSON. Em Configurações Avançadas, use o seguinte formato de corpo personalizado:
{
"device": {
"deviceId": "{{{PARTICLE_DEVICE_ID}}}"
},
"measurements": {
"{{{PARTICLE_EVENT_NAME}}}": "{{{PARTICLE_EVENT_VALUE}}}"
}
}
Cole a URL da função no aplicativo de funções e você verá que os dispositivos Particle aparecem como dispositivos não atribuídos no IoT Central. Para saber mais, consulte Veja como integrar seus projetos baseados em partículas com a postagem do blog Azure IoT Central.
Exemplo 2: Conectar dispositivos Sigfox por meio da ponte de dispositivos
Algumas plataformas podem não permitir que você especifique o formato das mensagens de dispositivo enviadas por meio de um webhook. Para tais sistemas, você deve converter a carga útil da mensagem para o formato do corpo esperado antes que a ponte de dispositivo a processe. Você pode fazer a conversão na mesma função que executa o bridge do dispositivo.
Esta seção mostra como converter a carga útil de uma integração de webhook Sigfox para o formato do corpo esperado pela ponte do dispositivo. A nuvem do Sigfox transmite dados do dispositivo em um formato de cadeia de caracteres hexadecimal. Para conveniência, a ponte de dispositivo inclui uma função de conversão para esse formato, que aceita um subconjunto dos tipos de campo possíveis em uma carga de dispositivo Sigfox: int e uint de 8, 16, 32 ou 64 bits; float de 32 bits ou 64 bits; little-endian e big-endian. Para processar mensagens de uma integração de webhook do Sigfox, faça as seguintes alterações no arquivo IoTCIntegration/index.js no aplicativo de funções.
Para converter o conteúdo da mensagem, adicione o seguinte código antes da chamada na handleMessage linha 21, substituindo payloadDefinition pela definição de conteúdo do Sigfox:
const payloadDefinition = 'gforce::uint:8 lat::uint:8 lon::uint:16'; // Replace this with your payload definition
req.body = {
device: {
deviceId: req.body.device
},
measurements: require('./converters/sigfox')(payloadDefinition, req.body.data)
};
Os dispositivos Sigfox esperam um 204 código de resposta. Adicione o seguinte código após a chamada de handleMessage na linha 21.
context.res = {
status: 204
};
Exemplo 3: Conectando dispositivos do The Things Network através da ponte de dispositivos
Para conectar os dispositivos da Things Network ao IoT Central:
- Adicione uma nova integração de HTTP ao aplicativo na The Things Network: Aplicativos > Integrações > adicionar integração > Integração de HTTP.
- Certifique-se de que seu aplicativo contenha uma função decodificadora que converta automaticamente o conteúdo das mensagens do dispositivo em JSON antes de enviá-lo para a função: Application > Payload Functions > decoder.
O exemplo a seguir mostra uma função de decodificador JavaScript que você pode usar para decodificar tipos numéricos comuns de dados binários:
function Decoder(bytes, port) {
function bytesToFloat(bytes, decimalPlaces) {
var bits = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
var sign = (bits >>> 31 === 0) ? 1.0 : -1.0;
var e = bits >>> 23 & 0xff;
var m = (e === 0) ? (bits & 0x7fffff) << 1 : (bits & 0x7fffff) | 0x800000;
var f = Math.round((sign * m * Math.pow(2, e - 150)) * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
return f;
}
function bytesToInt32(bytes, signed) {
var bits = bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24);
var sign = 1;
if (signed && bits >>> 31 === 1) {
sign = -1;
bits = bits & 0x7FFFFFFF;
}
return bits * sign;
}
function bytesToShort(bytes, signed) {
var bits = bytes[0] | (bytes[1] << 8);
var sign = 1;
if (signed && bits >>> 15 === 1) {
sign = -1;
bits = bits & 0x7FFF;
}
return bits * sign;
}
return {
temperature: bytesToFloat(bytes.slice(0, 4), 2),
presscounter: bytesToInt32(bytes.slice(4, 8), true),
blueLux: bytesToShort(bytes.slice(8, 10), false)
};
}
Depois de definir a integração, adicione o código a seguir antes da chamada na handleMessage linha 21 do arquivo IoTCIntegration/index.js do seu aplicativo de funções. Esse código converte o corpo da integração HTTP para o formato esperado.
req.body = {
device: {
deviceId: req.body.end_device_ids.device_id.toLowerCase()
},
measurements: req.body.uplink_message.decoded_payload
};
Observação
O snippet anterior usa a ID do dispositivo amigável. A mensagem Da Rede de Coisas também inclui uma ID técnica que você pode acessar usando req.body.dev_eui.toLowerCase(). Para saber mais, consulte The Things Network – Formatos de dados.
Limitações
A ponte do dispositivo só encaminha mensagens para o IoT Central e não envia mensagens de volta para dispositivos. Essa limitação é a razão pela qual as propriedades e os comandos não funcionam para dispositivos que se conectam ao IoT Central por meio dessa ponte de dispositivo. Como as operações de dispositivo duplo não são suportadas, não é possível atualizar as propriedades do dispositivo por meio da ponte de dispositivo. Para usar esses recursos, um dispositivo deve se conectar diretamente ao IoT Central usando um dos SDKs do dispositivo IoT do Azure.