Sdílet prostřednictvím


Kurz: Zřízení budovy a monitorování pracovních podmínek ve službě Azure Digital Twins Preview

Důležité

Byla vydána nová verze služby Azure Digital Twins. Vzhledem k rozšířeným možnostem nové služby se původní služba Azure Digital Twins (popsaná v této sadě dokumentace) vyřadila z provozu.

Pokud chcete zobrazit dokumentaci k nové službě, navštivte aktivní dokumentaci ke službě Azure Digital Twins.

V tomto kurzu se dozvíte, jak pomocí služby Azure Digital Twins Preview monitorovat prostory pro požadované podmínky teploty a úroveň pohodlí. Po nakonfigurování ukázkové budovy můžete zřizovat a spouštět vlastní funkce na datech snímačů pomocí kroků v tomto kurzu.

V tomto kurzu se naučíte:

  • Definujte podmínky pro monitorování.
  • Vytvoření uživatelem definované funkce (UDF).
  • Simulace dat senzoru
  • Získejte výsledky uživatelem definované funkce.

Požadavky

V tomto kurzu se předpokládá, že jste dokončili nastavení služby Azure Digital Twins. Než budete pokračovat, ujistěte se, že máte následující:

Tip

Pokud zřizujete novou instanci, použijte jedinečný název instance služby Digital Twins.

Definice podmínek, které se mají monitorovat

Můžete definovat sadu konkrétních podmínek, které se mají monitorovat v datech zařízení nebo snímačů, označované jako shody. Pak můžete definovat funkce označované jako uživatelem definované funkce. Uživatelem definované funkce spouštějí vlastní logiku na datech, která pocházejí z vašich prostorů a zařízení, když dojde k podmínkám zadaným shodami. Další informace najdete v tématu Zpracování dat a uživatelem definované funkce.

Ve Visual Studio Code otevřete soubor src\actions\provisionSample.yaml z ukázkového projektu occupancy-quickstart. Všimněte si části, která začíná typem matchers (Pravidla shody). Každá položka pod tímto typem vytvoří shodu se zadaným názvem. Matcher bude monitorovat senzor typu dataTypeValue. Všimněte si, že souvisí s prostorem s názvem Focus Room A1, který má uzel zařízení , který obsahuje několik senzorů. Pokud chcete zřídit shodu, která bude sledovat jeden z těchto senzorů, ujistěte se, že jeho hodnota dataTypeValue odpovídá datovému typu senzoru.

Pod stávající shody přidejte následující matcher. Ujistěte se, že jsou klávesy zarovnané a mezery se nenahrazovat tabulátory. Tyto řádky jsou také přítomné v souboru provisionSample.yaml jako okomentované řádky. Můžete je odkomentovat odebráním znaku # před každým řádkem.

      - name: Matcher Temperature
        dataTypeValue: Temperature

Tento matcher bude sledovat SAMPLE_SENSOR_TEMPERATURE senzor, který jste přidali v prvním kurzu.

Vytvoření funkce definované uživatelem

Pomocí uživatelem definovaných funkcí můžete přizpůsobit zpracování dat snímačů. Jedná se o vlastní javascriptový kód, který se dá spustit v rámci vaší instance služby Azure Digital Twins, pokud dojde ke konkrétním podmínkám popsaným v nástrojích shody. Pravidla shody a uživatelem definované funkce můžete vytvořit pro všechny senzory, které chcete monitorovat. Další informace najdete v tématu Zpracování dat a uživatelem definované funkce.

V ukázkovém souboru provisionSample.yaml vyhledejte oddíl, který začíná typem userdefinedfunctions. Tato část zřídí uživatelem definovanou funkci s daným názvem. Tento UDF funguje na seznamu shodovačů v části matcherNames. Všimněte si, že pro uživatelem definovanou funkci můžete v elementu script zadat vlastní soubor JavaScriptu.

Všimněte si také části roleassignments. Přiřadí roli Správce prostoru k uživatelem definované funkci. Tato role umožňuje přístup k událostem, které pocházejí z libovolného zřízeného prostoru.

  1. Nakonfigurujte uživatelem definovanou funkci tak, aby zahrnovala pravidlo shody teploty. Provedete to přidáním následujícího řádku do uzlu matcherNames v souboru provisionSample.yaml (případně zrušením komentáře u tohoto řádku):

            - Matcher Temperature
    
  2. V editoru otevřete soubor src\actions\userDefinedFunctions\availability.js. Toto je soubor odkazovaný v elementu skriptuprovisionSample.yaml. Funkce definovaná uživatelem v tomto souboru hledá podmínky, když se v místnosti nezjistí žádný pohyb a úrovně oxidu uhličitého jsou nižší než 1 000 ppm.

    Upravte soubor JavaScriptu tak, aby monitoroval teplotu a další podmínky. Přidejte následující řádky kódu, které hledají podmínky, když se v místnosti nezjistí žádný pohyb, úrovně oxidu uhličitého jsou nižší než 1 000 ppm a teplota je nižší než 78 stupňů Fahrenheita.

    Poznámka

    Tato část upraví soubor src\actions\userDefinedFunctions\availability.js , abyste se mohli podrobně seznámit jedním ze způsobů, jak napsat uživatelem definovanou funkci. Můžete se ale rozhodnout, že v nastavení přímo použijete soubor src\actions\userDefinedFunctions\availabilityForTutorial.js . Tento soubor obsahuje všechny potřebné změny pro tento kurz. Pokud místo toho použijete tento soubor, nezapomeňte použít správný název souboru pro klíč skriptu v souboru src\actions\provisionSample.yaml.

    a. Na začátek souboru přidejte pod komentář // Add your sensor type here následující řádky pro senzor teploty:

        var temperatureType = "Temperature";
        var temperatureThreshold = 78;
    

    b. Za příkaz, který definuje , pod komentář // Add your sensor variable herepřidejte následující řádkyvar motionSensor:

       var temperatureSensor = otherSensors.find(function(element) {
           return element.DataType === temperatureType;
       });
    

    c. Za příkaz, který definuje var carbonDioxideValue, pod komentář // Add your sensor latest value herepřidejte následující řádek:

        var temperatureValue = getFloatValue(temperatureSensor.Value().Value);
    

    d. Odeberte následující řádky kódu pod komentářem // Modify this line to monitor your sensor value:

       if(carbonDioxideValue === null || motionValue === null) {
           sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide or motion are null, returning");
           return;
       }
    

    Nahraďte je následujícími řádky:

        if(carbonDioxideValue === null || motionValue === null || temperatureValue === null){
            sendNotification(telemetry.SensorId, "Sensor", "Error: Carbon dioxide, motion, or temperature are null, returning");
            return;
        }
    

    e. Odeberte následující řádky kódu pod komentářem // Modify these lines as per your sensor:

        var availableFresh = "Room is available and air is fresh";
        var noAvailableOrFresh = "Room is not available or air quality is poor";
    

    Nahraďte je následujícími řádky:

        var alert = "Room with fresh air and comfortable temperature is available.";
        var noAlert = "Either room is occupied, or working conditions are not right.";
    

    f. Odeberte následující blok kódu if-else pod komentářem // Modify this code block for your sensor:

        // If carbonDioxide less than threshold and no presence in the room => log, notify and set parent space computed value
        if(carbonDioxideValue < carbonDioxideThreshold && !presence) {
            log(`${availableFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`);
            setSpaceValue(parentSpace.Id, spaceAvailFresh, availableFresh);
        }
        else {
            log(`${noAvailableOrFresh}. Carbon Dioxide: ${carbonDioxideValue}. Presence: ${presence}.`);
            setSpaceValue(parentSpace.Id, spaceAvailFresh, noAvailableOrFresh);
    
            // Set up custom notification for poor air quality
            parentSpace.Notify(JSON.stringify(noAvailableOrFresh));
        }
    

    A nahraďte ho následujícím blokem if-else:

        // If sensor values are within range and room is available
        if(carbonDioxideValue < carbonDioxideThreshold && temperatureValue < temperatureThreshold && !presence) {
            log(`${alert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`);
    
            // log, notify and set parent space computed value
            setSpaceValue(parentSpace.Id, spaceAvailFresh, alert);
    
            // Set up notification for this alert
            parentSpace.Notify(JSON.stringify(alert));
        }
        else {
            log(`${noAlert}. Carbon Dioxide: ${carbonDioxideValue}. Temperature: ${temperatureValue}. Presence: ${presence}.`);
    
            // log, notify and set parent space computed value
            setSpaceValue(parentSpace.Id, spaceAvailFresh, noAlert);
        }
    

    Upravená uživatelem definovaná funkce bude hledat podmínku, kdy se místnost stane dostupnou a bude mít úroveň oxidu uhličitého a teplotu v rámci přípustných mezí. Když dojde ke splnění této podmínky, pomocí příkazu parentSpace.Notify(JSON.stringify(alert)); vygeneruje oznámení. Bez ohledu na splnění podmínky nastaví hodnotu monitorovaného prostoru s odpovídající zprávou.

    například Soubor uložte.

  3. Otevřete příkazové okno a přejděte do složky occupancy-quickstart\src. Spuštěním následujícího příkazu zřiďte graf prostorové inteligence a uživatelem definovanou funkci:

    dotnet run ProvisionSample
    

    Důležité

    Aby se zabránilo neoprávněnému přístupu k rozhraní API služby Digital Twins Management, aplikace pro rychlé zprovoznění vyžaduje, abyste se přihlásili pomocí přihlašovacích údajů k účtu Azure. Přihlašovací údaje se uloží na krátkou dobu, takže se nemusíte při každém spuštění přihlašovat. Při prvním spuštění tohoto programu a po vypršení platnosti uložených přihlašovacích údajů vás aplikace přesměruje na přihlašovací stránku a poskytne kód specifický pro relaci, který se má na této stránce zadat. Podle pokynů se přihlaste pomocí svého účtu Azure.

  4. Po ověření účtu aplikace začne vytvářet ukázkový prostorový graf nakonfigurovaný v provisionSample.yaml. Počkejte, až se zřizování dokončí. To bude trvat několik minut. Potom sledujte zprávy v příkazovém okně a všimněte si, jak se prostorový graf vytvoří. Všimněte si, jak aplikace vytvoří centrum IoT v kořenovém uzlu nebo rozhraní Venue.

  5. Z výstupu v příkazovém okně zkopírujte hodnotu ConnectionString, pod oddílem Devices , do schránky. Tuto hodnotu budete potřebovat k simulaci připojení zařízení v další části.

    Ukázka zřizování

Tip

Pokud se zobrazí chybová zpráva podobná operaci vstupně-výstupní operace byla přerušena kvůli ukončení vlákna nebo žádosti o aplikaci uprostřed zřizování, zkuste příkaz spustit znovu. K tomu může dojít v případě, že u problému se sítí vypršel časový limit klienta HTTP.

Simulace dat ze senzorů

V této části použijete projekt s názvem device-connectivity v ukázce. Budete simulovat data snímačů pro detekci pohybu, teploty a oxidu uhličitého. Tento projekt generuje náhodné hodnoty senzorů a s použitím připojovacího řetězce zařízení odesílá je do centra IoT.

  1. V samostatném příkazovém okně přejděte do ukázky služby Azure Digital Twins a pak do složky připojení zařízení .

  2. Spuštěním tohoto příkazu se ujistěte, že jsou správně závislosti projektu:

    dotnet restore
    
  3. Otevřete soubor appsettings.json v editoru a upravte následující hodnoty:

    a. DeviceConnectionString: Přiřaďte hodnotu ConnectionString z okna výstupu z předchozí části. Zkopírujte tento řetězec úplně v uvozovkách, aby se simulátor mohl správně připojit k IoT Hubu.

    b. HardwareId v poli Senzory : Protože simulujete události ze senzorů zřízených pro instanci služby Azure Digital Twins, id hardwaru a názvy senzorů v tomto souboru by měly odpovídat sensors uzlu souboru provisionSample.yaml .

    Přidejte novou položku pro senzor teploty. Uzel Sensor v souboru appsettings.json by měl vypadat takto:

    "Sensors": [{
      "DataType": "Motion",
      "HardwareId": "SAMPLE_SENSOR_MOTION"
    },{
      "DataType": "CarbonDioxide",
      "HardwareId": "SAMPLE_SENSOR_CARBONDIOXIDE"
    },{
      "DataType": "Temperature",
      "HardwareId": "SAMPLE_SENSOR_TEMPERATURE"
    }]
    
  4. Spuštěním tohoto příkazu zahajte simulaci událostí zařízení pro teplotu, pohyb a úroveň oxidu uhličitého:

    dotnet run
    

    Poznámka

    Vzhledem k tomu, že ukázka simulace přímo nekomunikuje s vaší instancí služby Digital Twins, nevyžaduje ověření.

Získání výsledků uživatelem definované funkce

Uživatelem definovaná funkce se spustí pokaždé, když vaše instance přijme data ze senzorů a zařízení. Tato část se dotazuje na instanci služby Azure Digital Twins, aby získala výsledky uživatelem definované funkce. Budete upozorněni téměř v reálném čase, když je k dispozici místnost, že vzduch je čerstvý a teplota je správná.

  1. Otevřete příkazové okno, které jste použili ke zřízení ukázky, nebo nové příkazové okno, a znovu přejděte do složky occupancy-quickstart\src ukázky.

  2. Spusťte následující příkaz a po zobrazení výzvy se přihlaste:

    dotnet run GetAvailableAndFreshSpaces
    

V okně výstupu se dozvíte, jak se funkce definovaná uživatelem spouští a zachycuje události z simulace zařízení.

Výstup pro UDF

Pokud je monitorovaná podmínka splněná, funkce definovaná uživatelem nastaví hodnotu prostoru s příslušnou zprávou, jak jsme viděli dříve. Funkce GetAvailableAndFreshSpaces vypíše zprávu v konzole.

Vyčištění prostředků

Pokud chcete v tuto chvíli přestat zkoumat službu Azure Digital Twins, můžete odstranit prostředky vytvořené v tomto kurzu:

  1. V nabídce vlevo v Azure Portal vyberte Všechny prostředky, vyberte skupinu prostředků Digital Twins a vyberte Odstranit.

    Tip

    Pokud došlo k potížím s odstraněním instance služby Digital Twins, aktualizace služby byla provedena s opravou. Zkuste instanci odstranit znovu.

  2. V případě potřeby odstraňte ukázkové aplikace na pracovním počítači.

Další kroky

Teď, když jste zřídili prostory a vytvořili architekturu pro aktivaci vlastních oznámení, můžete přejít na některý z následujících kurzů: