Como definir o termostato virtual do recinto com os dispositivos gêmeos do Hub IoT do Azure

Concluído

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.

The illustration shows a cloud to device device twin configuration pattern.

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:

  1. Você pode definir a temperatura ambiente desejada no Azure IoT Explorer.
  2. O Hub IoT do Azure atualiza a propriedade desejada do dispositivo gêmeo e envia uma mensagem do dispositivo gêmeo para o dispositivo.
  3. A função de manipulador do dispositivo gêmeo correspondente é chamada.
  4. O dispositivo implementa a propriedade desejada. Nesse caso, ative o aquecedor ou o refrigerador para fazer com que a sala fique na temperatura desejada.
  5. 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.
  6. 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

The illustration shows a device to cloud device twin configuration pattern.

  1. O Azure Sphere detecta que o modo de operação do HVAC foi alterado.
  2. 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.
  3. 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();