Como definir o termostato virtual do recinto com os dispositivos gêmeos do Hub IoT do Azure
Nesta unidade, você aprenderá a controlar uma unidade de HVAC (aquecimento, ventilação e ar condicionado) conectada ao Azure Sphere no Hub IoT do Azure.
Noções básicas dos dispositivos gêmeos do Hub IoT
O Hub IoT do Azure usa dispositivos gêmeos para representar valores pontuais. O Hub IoT pode usar dispositivos gêmeos para definir o estado em um dispositivo, por exemplo, definir a temperatura ambiente desejada. Um dispositivo também pode usar dispositivos gêmeos para relatar seu estado atual, por exemplo, relatar o modo de operação de uma unidade de HVAC (aquecimento, ventilação e ar condicionado), ao indicar se ela está aquecendo, resfriando ou desligada.
Dispositivos gêmeos são documentos JSON que o Hub IoT do Azure mantém na nuvem para todos os dispositivos e são usados para armazenar informações do dispositivo, incluindo metadados, configurações e condições. Os dispositivos gêmeos do Hub IoT costumam ser usados para comandos de longa execução destinados a colocar o dispositivo em um determinado estado e retorná-lo a esse estado após uma reinicialização do dispositivo. Por exemplo, definir a temperatura ambiente desejada.
As propriedades podem ser usadas das seguintes maneiras:
- Atualizações de nuvem para dispositivo
- Atualizações de dispositivo para nuvem
- Consultando as propriedades relatadas
Controlar a unidade de HVAC (aquecimento, ventilação e ar condicionado) usando os dispositivos gêmeos do Hub IoT do Azure
No Azure IoT Explorer, você pode definir o gêmeo da temperatura desejada. O dispositivo entra em ação e confirma a solicitação. O Hub IoT do Azure atualiza a propriedade relatada do dispositivo gêmeo, e o IoT Explorer consulta e exibe essa propriedade.
Etapas para controlar a unidade de HVAC no IoT Explorer
As seguintes etapas descrevem como o Azure IoT Explorer usa dispositivos gêmeos para definir propriedades em um dispositivo:
- Você pode definir a temperatura ambiente desejada no Azure IoT Explorer.
- O Hub IoT do Azure atualiza a propriedade desejada do dispositivo gêmeo e envia uma mensagem do dispositivo gêmeo para o dispositivo.
- A função de manipulador do dispositivo gêmeo correspondente é chamada.
- O dispositivo implementa a propriedade desejada. Nesse caso, ative o aquecedor ou o refrigerador para fazer com que a sala fique na temperatura desejada.
- O dispositivo reconhece a configuração atualizada no Hub IoT do Azure. O Hub IoT do Azure atualiza a propriedade relatada do dispositivo gêmeo.
- O IoT Explorer consulta e exibe os dados de propriedade relatada do dispositivo gêmeo.
Introdução às associações de dispositivos gêmeos
Uma associação de dispositivo gêmeo mapeia o nome de uma propriedade do dispositivo gêmeo com uma função de manipulador que será chamada para implementar a ação.
O exemplo a seguir declara uma associação de dispositivo gêmeo para definir a temperatura ambiente desejada. Essa declaração mapeia o dispositivo gêmeo DesiredTemperature
do Hub IoT do Azure com uma função de manipulador chamada DeviceTwinSetTemperatureHandler
.
static LP_DEVICE_TWIN_BINDING dt_desiredTemperature = {
.twinProperty = "DesiredTemperature",
.twinType = LP_TYPE_FLOAT,
.handler = DeviceTwinSetTemperatureHandler };
Definindo a temperatura desejada
A seguir está a implementação da função de manipulador DeviceTwinSetTemperatureHandler
. A função de manipulador é chamada quando o dispositivo recebe uma mensagem da propriedade desejada DesiredTemperature
do Hub IoT do Azure.
Observação
Como parte das convenções de IoT Plug and Play, o dispositivo deve reconhecer a atualização do dispositivo gêmeo com uma chamada para lp_deviceTwinAckDesiredState.
/// <summary>
/// Device Twin Handler to set the desired temperature value
/// </summary>
static void DeviceTwinSetTemperatureHandler(LP_DEVICE_TWIN_BINDING* deviceTwinBinding)
{
// validate data is sensible range before applying
if (deviceTwinBinding->twinType == LP_TYPE_FLOAT && *(float*)deviceTwinBinding->twinState >= -20.0f && *(float*)deviceTwinBinding->twinState <= 80.0f)
{
lp_deviceTwinAckDesiredState(deviceTwinBinding, deviceTwinBinding->twinState, LP_DEVICE_TWIN_COMPLETED);
SetHvacStatusColour((int)previous_temperature);
}
else {
lp_deviceTwinAckDesiredState(deviceTwinBinding, deviceTwinBinding->twinState, LP_DEVICE_TWIN_ERROR);
}
}
Relatando o modo de operação atual do HVAC
O modo de operação do HVAC depende da temperatura ambiente, ele pode estar aquecendo, refrigerando ou desligado. Podemos usar uma atualização de dispositivo gêmeo de dispositivo para nuvem para relatar o modo de operação atual da unidade de HVAC.
Atualizações de dispositivo para nuvem
- O Azure Sphere detecta que o modo de operação do HVAC foi alterado.
- O Azure Sphere envia uma mensagem de dispositivo gêmeo para relatar o novo modo de operação do HVAC para o Hub IoT do Azure.
- O IoT Explorer consulta e exibe o modo de operação atualizado da unidade de HVAC.
O exemplo a seguir declara uma propriedade do dispositivo gêmeo ReportedHvacState do tipo string. Não é necessária uma função de manipulador, pois esta é uma associação unidirecional do dispositivo para nuvem.
static LP_DEVICE_TWIN_BINDING dt_reportedHvacState = {
.twinProperty = "ReportedHvacState",
.twinType = LP_TYPE_STRING };
O dispositivo atualiza a propriedade ReportedHvacState chamando a função lp_deviceTwinReportState. Você precisa passar uma propriedade do tipo correto.
lp_deviceTwinReportState(&dt_reportedHvacState, (void*)hvacState[(int)current_led]);
Como as mensagens do dispositivo gêmeo são mapeadas para os manipuladores
Todas as associações de dispositivos gêmeos declaradas devem ser adicionadas por referência à matriz deviceTwinBindingSet. Quando uma mensagem de dispositivo gêmeo é recebida pelo dispositivo, é verificado um nome de twinProperty correspondente na matriz deviceTwinBindingSet. Quando uma correspondência é encontrada, a função de manipulador correspondente é chamada.
LP_DEVICE_TWIN_BINDING* deviceTwinBindingSet[] = { &dt_desiredTemperature, &dt_reportedTemperature, &dt_reportedHvacState };
Abrindo um conjunto de associação do dispositivo gêmeo
O conjunto de associação do dispositivo gêmeo é inicializado na função InitPeripheralsAndHandlers em main.c.
lp_deviceTwinSetOpen(deviceTwinBindingSet, NELEMS(deviceTwinBindingSet));
Fechando o conjunto de associação do dispositivo gêmeo
O conjunto de associação do dispositivo gêmeo é fechado na função ClosePeripheralsAndHandlers em main.c.
lp_deviceTwinSetClose();