Jak nastavit virtuální termostat místnosti pomocí dvojčat zařízení Azure IoT

Dokončeno

V této lekci se naučíte ovládat jednotku topení, ventilace a klimatizace (TVK) připojenou k Azure Sphere ze služby Azure IoT Central.

Vysvětlení vlastností IoT Central

Azure IoT Central používá vlastnosti k vyjádření hodnot k bodu v čase. Služba IoT Central může použít vlastnosti k nastavení stavu na zařízení. Může například nastavit požadovanou teplotu místnosti. Zařízení může také pomocí vlastností nahlásit svůj aktuální stav, například ohlásit režim provozu jednotky TVK (topení, ventilace a klimatizace) – zda aktuálně probíhá topení, chlazení nebo je jednotka vypnutá.

Řešení IoT Central je postavené na službě Azure IoT Hub a nastavuje vlastnosti zařízení pomocí dvojčat zařízení IoT Hubu. Dvojčata zařízení jsou dokumenty JSON, které Azure IoT Hub udržuje v cloudu pro všechna zařízení a slouží k ukládání informací o zařízení, včetně metadat, konfigurací a podmínek. Dvojčata zařízení IoT Hubu se často používají v případě dlouhotrvajících příkazů, které jsou určeny k tomu, aby dostaly zařízení do určitého stavu a po restartu zařízení do tohoto stavu vrátily. Například je to nastavení požadované teploty v místnosti.

Vlastnosti můžete používat následujícími způsoby:

  • Aktualizace cloud-zařízení
  • Aktualizace zařízení-cloud
  • Dotazování na hlášené vlastnosti

Řízení jednotky topení, ventilace a klimatizace (TVK) pomocí vlastností Azure IoT Central

Na kartě vlastností zařízení IoT Central můžete nastavit požadovanou vlastnost teploty. Azure IoT Central požádá Azure IoT Hub o poslání zprávy dvojčete zařízení do příslušného zařízení. Zařízení požadavek provede a potvrdí. Azure IoT Hub aktualizuje hlášenou vlastnost dvojčete zařízení a IoT Central pak zadá dotaz na tuto hlášenou vlastnost a zobrazí ji.

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

Postup řízení jednotky TVK ze služby IoT Central

Následující postup popisuje, jak Azure IoT Central používá dvojčata zařízení k nastavování vlastností na zařízení:

  1. Uživatel nastaví požadovanou vlastnost teploty v místnosti ve službě Azure IoT Central. IoT Central pak požádá IoT Hub, aby vlastnost aktualizoval.
  2. Azure IoT Hub aktualizuje požadovanou vlastnost dvojčete zařízení a pošle do zařízení zprávu dvojčete zařízení.
  3. Zavolá se odpovídající funkce obslužné rutiny dvojčete zařízení.
  4. Zařízení implementuje požadovanou vlastnost (v tomto případě zapne topení nebo chlazení, aby se dosáhlo požadované teploty v místnosti).
  5. Zařízení potvrdí aktualizovanou konfiguraci do Azure IoT Hubu. Azure IoT Hub aktualizuje hlášenou vlastnost dvojčete zařízení.
  6. IoT Central zadá dotaz a zobrazí hlášenou vlastnost dvojčete zařízení uživateli.

Začínáme s vazbami dvojčat zařízení

Připomeňme si, že vlastnosti služby Azure IoT Central se implementují pomocí dvojčat zařízení v Azure IoT Hubu. Vazba dvojčete zařízení namapuje název vlastnosti dvojčete zařízení na funkci obslužné rutiny, která se zavolá, aby implementovala příslušnou akci.

Následující příklad deklaruje vazbu dvojčete zařízení, aby nastavila požadovanou teplotu v místnosti. Tato deklarace namapuje vlastnost Azure IoT Central DesiredTemperature na funkci obslužné rutiny s názvem DeviceTwinSetTemperatureHandler.

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

Nastavení požadované teploty

Následuje implementace funkce obslužné rutiny DeviceTwinSetTemperatureHandler. Funkce obslužné rutiny DesiredTemperature se volá, když zařízení obdrží zprávu o požadované vlastnosti z Azure IoT Hubu.

Poznámka:

V rámci konvencí technologie IoT Plug and Play by zařízení by mělo potvrdit aktualizaci dvojčete zařízení zavoláním 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);
    }
}

Hlášení aktuálního režimu provozu TVK

Režim provozu TVK závisí na teplotě místnosti. Může jít o topení, chlazení nebo stav vypnutí. K nahlášení aktuálního režimu provozu jednotky TVK můžeme použít aktualizaci dvojčete zařízení typu zařízení-cloud.

Aktualizace zařízení-cloud

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

  1. Azure Sphere zjistí, že se změnil režim provozu TVK.
  2. Azure Sphere pošle zprávu dvojčeti zařízení, aby nahlásilo nový režim provozu TVK do Azure IoT Hubu.
  3. IoT Central zadá dotaz a zobrazí aktualizovaný režim provozu jednotky TVK.

V následujícím příkladu je deklarována vlastnost ReportedHvacState dvojčete zařízení typu řetězec. Funkce obslužné rutiny není potřeba, protože jde o jednosměrnou vazbu zařízení-cloud.

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

Zařízení aktualizuje vlastnost ReportedHvacState zavoláním funkce lp_deviceTwinReportState. Musíte předat vlastnost správného typu.

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

Postup mapování zprávy dvojčat zařízení na obslužné rutiny

Všechny deklarované vazby dvojčat zařízení musí být přidány s odkazem na pole deviceTwinBindingSet. Když zařízení přijme zprávu dvojčete zařízení z Azure IoT Hubu, hledá se v poli deviceTwinBindingSet odpovídající název twinProperty. Když je nalezena shoda, je volána odpovídající funkce obslužné rutiny.

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

Otevření sady vazeb dvojčat zařízení

Sada vazeb dvojčat zařízení se inicializuje ve funkci InitPeripheralsAndHandlers v souboru main.c.

lp_deviceTwinSetOpen(deviceTwinBindingSet, NELEMS(deviceTwinBindingSet));

Zavření sady vazeb dvojčat zařízení

Sada vazeb dvojčat zařízení se zavírá ve funkci ClosePeripheralsAndHandlers v souboru main.c.

lp_deviceTwinSetClose();
```eviceTwinSetClose();

Vlastnosti zařízení Azure IoT Central

Vlastnosti služby IoT Central se definují v rozhraní šablon zařízení. V tomto příkladu má schéma vlastnosti DesiredTemperature typ float a vlastnost je Zapisovatelné. Zapisovatelné znamená, že u této vlastnosti jsou povoleny aktualizace typu cloud-zařízení. Název vlastnosti se musí shodovat s deklarací vazby dvojčat zařízení DesiredTemperature v Azure Sphere.

The illustration shows device properties.