Réglage du thermostat virtuel d’une pièce avec des jumeaux d’appareil Azure IoT Hub

Effectué

Dans cette unité, vous allez découvrir comment contrôler une unité HVAC (Heating, Ventilation, and Air Conditioning) connectée à Azure Sphere à partir d’Azure IoT Hub.

Présentation des jumeaux d’appareil IoT Hub

Azure IoT Hub utilise les jumeaux d’appareil pour représenter des valeurs à un instant donné. L’objectif peut être de définir l’état d’un appareil, par exemple régler la température souhaitée pour une pièce. Un appareil peut également utiliser des jumeaux d’appareil pour signaler son état actuel, par exemple signaler le mode de fonctionnement d’une unité HVAC : en chauffage, en refroidissement ou à l’arrêt.

Les jumeaux d’appareil sont des documents JSON conservés par Azure IoT Hub dans le cloud pour tous les appareils : ils sont utilisés pour stocker les informations de l’appareil, notamment les métadonnées, les configurations et les conditions. Les jumeaux d’appareil IoT Hub sont souvent utilisées pour les commandes à exécution longue destinées à placer l’appareil dans un certain état et à le ramener à cet état après le redémarrage de l’appareil. Par exemple, définir la température souhaitée de la pièce.

Les propriétés peuvent être utilisés comme suit :

  • Mises à jour cloud-à-appareil
  • Mises à jour appareil-à-cloud
  • Interrogation des propriétés signalées

Contrôle de l’unité HVAC avec des jumeaux d’appareil Azure IoT Hub

Dans Azure IoT Explorer, vous pouvez définir la représentation de température souhaitée. L’appareil traite la demande et en accuse réception. Azure IoT Hub met à jour la propriété rapportée du jumeau d’appareil. Ensuite, IoT Explorer interroge et affiche cette propriété.

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

Procédure de contrôle de l’unité HVAC à partir d’IoT Explorer

La procédure suivante montre comment Azure IoT Explorer utilise des jumeaux d’appareil pour définir des propriétés sur un appareil :

  1. Vous pouvez définir la température souhaitée pour la pièce dans Azure IoT Explorer.
  2. Azure IoT Hub met à jour la propriété souhaitée du jumeau d’appareil et envoie un message de jumeau d’appareil à l’appareil.
  3. La fonction du gestionnaire de jumeau d’appareil correspondante est appelée.
  4. L’appareil implémente la propriété désirée ; dans ce cas, il met en marche le chauffage ou le système de refroidissement pour amener la pièce à la température désirée.
  5. L’appareil accuse réception de la configuration mise à jour à Azure IoT Hub. Azure IoT Hub met à jour la propriété concernée du jumeau d’appareil.
  6. IoT Explorer interroge et affiche les données de la propriété rapportée du jumeau d’appareil.

Bien démarrer avec les liaisons de jumeau d’appareil

Une liaison de jumeau d’appareil mappe un nom de propriété de jumeau d’appareil à une fonction de gestionnaire qui sera appelée pour implémenter l’action.

L’exemple suivant déclare une liaison de jumeau d’appareil pour définir la température souhaitée pour la pièce. Cette déclaration fait correspondre le jumeau d’appareil Azure IoT Hub DesiredTemperature à une fonction de gestionnaire nommée DeviceTwinSetTemperatureHandler.

static LP_DEVICE_TWIN_BINDING dt_desiredTemperature = {
    .twinProperty = "DesiredTemperature",
    .twinType = LP_TYPE_FLOAT,
    .handler = DeviceTwinSetTemperatureHandler };

Définition de la température souhaitée

Voici l’implémentation de la fonction de gestionnaire DeviceTwinSetTemperatureHandler. La fonction de gestionnaire est appelée quand l’appareil reçoit un message sur la propriété désirée DesiredTemperature à partir d’Azure IoT Hub.

Notes

Dans le cadre des conventions IoT Plug-and-Play, l’appareil doit accuser réception de la mise à jour du jumeau d’appareil avec un appel à 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);
    }
}

Indication du mode de fonctionnement actuel de l’unité HVAC

Le mode de fonctionnement de l’unité HVAC dépend de la température de la pièce : il peut chauffer, refroidir ou être à l’arrêt. Nous pouvons utiliser une mise à jour du jumeau d’appareil appareil-à-cloud pour indiquer le mode de fonctionnement actuel de l’unité HVAC.

Mises à jour appareil-à-cloud

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

  1. L’appareil Azure Sphere détecte que le mode de fonctionnement de l’unité HVAC a changé.
  2. L’appareil Azure Sphere envoie un message de jumeau d’appareil pour indiquer le nouveau mode de fonctionnement de l’unité HVAC à Azure IoT Hub.
  3. IoT Explorer interroge et affiche le mode de fonctionnement mis à jour de l’unité HVAC.

L’exemple suivant déclare une propriété de jumeau d’appareil ReportedHvacState de type string. Une fonction de gestionnaire n’est pas nécessaire, car il s’agit d’une liaison unidirectionnelle appareil-à-cloud.

static LP_DEVICE_TWIN_BINDING dt_reportedHvacState = {
    .twinProperty = "ReportedHvacState",
    .twinType = LP_TYPE_STRING };

L’appareil met à jour la propriété ReportedHvacState en appelant la fonction lp_deviceTwinReportState. Le type de la propriété que vous passez doit être correct.

lp_deviceTwinReportState(&dt_reportedHvacState, (void*)hvacState[(int)current_led]);

Comment les messages de jumeau d’appareil sont mappés aux gestionnaires

Toutes les liaisons de jumeau d’appareil déclarées doivent être ajoutées par référence au tableau deviceTwinBindingSet. Quand l’appareil reçoit un message de jumeau d’appareil, un nom twinProperty correspondant dans le tableau deviceTwinBindingSet est recherché dans le message. Si une correspondance est trouvée, la fonction de gestionnaire correspondante est appelée.

LP_DEVICE_TWIN_BINDING* deviceTwinBindingSet[] = { &dt_desiredTemperature, &dt_reportedTemperature, &dt_reportedHvacState };

Ouverture de l’ensemble de liaisons de jumeau d’appareil

L’ensemble de liaisons de jumeau d’appareil est initialisé dans la fonction InitPeripheralsAndHandlers de main.c.

lp_deviceTwinSetOpen(deviceTwinBindingSet, NELEMS(deviceTwinBindingSet));

Fermeture de l’ensemble de liaisons de jumeau d’appareil

L’ensemble de liaisons de jumeau d’appareil est fermé dans la fonction ClosePeripheralsAndHandlers de main.c.

lp_deviceTwinSetClose();