Sdílet prostřednictvím


Vytvoření vlastního pravidla v předkonfigurovaném řešení vzdáleného monitorování

Úvod

V předkonfigurovaných řešeních můžete nakonfigurovat pravidla , která se aktivují, když hodnota telemetrie pro zařízení dosáhne konkrétní prahové hodnoty. Použití dynamické telemetrie s předkonfigurovaným řešením vzdáleného monitorování popisuje, jak do řešení přidat vlastní hodnoty telemetrie, jako je ExternalTemperature. V tomto článku se dozvíte, jak vytvořit vlastní pravidlo pro dynamické typy telemetrie ve vašem řešení.

Tento kurz používá jednoduché simulované zařízení Node.js ke generování dynamické telemetrie, která se odesílá do zázemí předkonfigurovaného řešení. Potom do řešení RemoteMonitoring Visual Studio přidáte vlastní pravidla a nasadíte tento přizpůsobený back-end do svého předplatného Azure.

K dokončení tohoto kurzu potřebujete:

  • Aktivní předplatné Azure. Pokud účet nemáte, můžete si během několika minut vytvořit bezplatný zkušební účet. Podrobnosti najdete v článku Bezplatná zkušební verze Azure.
  • Node.js verze 0.12.x nebo novější k vytvoření simulovaného zařízení.
  • Visual Studio 2015 nebo Visual Studio 2017 pro úpravu back-endu předkonfigurovaného řešení vašimi novými pravidly.

Zřízení řešení

Pokud jste ještě ve svém účtu nezřídili předkonfigurované řešení vzdáleného monitorování:

  1. Přihlaste se k azureiotsuite.com pomocí přihlašovacích údajů účtu Azure a kliknutím na + vytvořte řešení.
  2. Klikněte na Vybrat na dlaždici vzdáleného monitorování.
  3. Zadejte název řešení pro předkonfigurované řešení vzdáleného monitorování.
  4. Vyberte oblasti a předplatné, které chcete použít ke zřízení řešení.
  5. Kliknutím na Vytvořit řešení zahájíte proces zřizování. Spuštění tohoto procesu obvykle trvá několik minut.

Počkejte, až se dokončí proces zřizování.

  1. Klikněte na dlaždici pro vaše řešení se stavem Pořizování.
  2. Všimněte si stavů procesu zřizování, když jsou služby Azure nasazovány ve vašem předplatném Azure.
  3. Po dokončení zřizování se stav změní na Připraveno.
  4. Kliknutím na dlaždici zobrazíte v pravém podokně podrobnosti o řešení.

Poznámka:

Pokud při nasazování předkonfigurovaného řešení dochází k problémům, projděte si Oprávnění na webu azureiotsuite.com a Nejčastější dotazy. Pokud problémy potrvají, vytvořte servisní tiket na portálu .

Očekáváte nějaké podrobnosti, které nejsou uvedeny pro vaše řešení? Dejte nám návrhy funkcí na User Voice.

Poznamenejte si název řešení, který jste zvolili pro vaše nasazení. Tento název řešení budete potřebovat později v tomto kurzu.

Konfigurace simulovaného zařízení Node.js

  1. Na řídicím panelu vzdáleného monitorování klikněte na + Přidat zařízení a potom přidejte vlastní zařízení. Poznamenejte si název hostitele služby IoT Hub, ID zařízení a klíč zařízení. Budete je potřebovat později v tomto kurzu při přípravě klientské aplikace zařízení remote_monitoring.js.

  2. Ujistěte se, že na vývojovém počítači je nainstalovaná Node.js verze 0.12.x nebo novější. Spusťte node --version na příkazovém řádku nebo v terminálu a zkontrolujte verzi. Informace o použití správce balíčků k instalaci Node.js v Linuxu naleznete v tématu Instalace Node.js prostřednictvím správce balíčků.

  3. Po instalaci Node.jsnaklonujte nejnovější verzi úložiště azure-iot-sdk-node na vývojový počítač. Vždy používejte větev master pro nejnovější verzi knihoven a ukázek.

  4. Z místní kopie úložiště azure-iot-sdk-node zkopírujte následující dva soubory ze složky node/device/samples do prázdné složky na vývojovém počítači:

    • packages.json
    • remote_monitoring.js
  5. Otevřete soubor remote_monitoring.js a vyhledejte následující definici proměnné:

    var connectionString = "[IoT Hub device connection string]";
    
  6. Nahraďte [připojovací řetězec zařízení IoT Hub] svým připojovacím řetězcem zařízení. Použijte hodnoty pro název hostitele služby IoT Hub, ID zařízení a klíč zařízení, které jste si poznamenali v kroku 1. Připojovací řetězec zařízení má následující formát:

    HostName={your IoT Hub hostname};DeviceId={your device id};SharedAccessKey={your device key}
    

    Pokud je název hostitele služby IoT Hub contoso a ID vašeho zařízení je mydevice, připojovací řetězec vypadá jako následující fragment kódu:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. Uložte soubor. Spuštěním následujících příkazů v prostředí nebo příkazovém řádku ve složce, která obsahuje tyto soubory, nainstalujte potřebné balíčky a spusťte ukázkovou aplikaci:

    npm install
    node remote_monitoring.js
    

Sledování dynamické telemetrie v akci

Řídicí panel zobrazuje telemetrii teploty a vlhkosti z existujících simulovaných zařízení:

výchozí řídicího panelu

Pokud vyberete Node.js simulované zařízení, které jste spustili v předchozí části, zobrazí se telemetrie teploty, vlhkosti a externí teploty:

Přidání externí teploty na řídicí panel

Řešení vzdáleného monitorování automaticky rozpozná další typ telemetrie externí teploty a přidá ho do grafu na řídicím panelu.

Aplikaci konzoly Node.js můžete zastavit, když jste ověřili, že odesílá ExternalTemperature telemetrii do předkonfigurovaného řešení. Okno konzoly nechte otevřené, protože po přidání vlastního pravidla do řešení znovu spustíte tuto aplikaci konzoly Node.js.

Úložiště pravidel

Informace o pravidlech se uchovávají ve dvou umístěních:

  • Tabulka DeviceRulesNormalizedTable – Tato tabulka ukládá normalizovaný odkaz na pravidla definovaná portálem řešení. Když portál řešení zobrazí pravidla zařízení, dotazuje se na tuto tabulku pro definice pravidel.
  • Blob DeviceRules – Tento blob ukládá všechna pravidla definovaná pro všechna registrovaná zařízení a je definován jako referenční vstup pro úlohy Azure Stream Analytics.   Když aktualizujete existující pravidlo nebo definujete nové pravidlo na portálu řešení, tabulka i objekt blob se aktualizují tak, aby odrážely změny. Definice pravidla zobrazená na portálu pochází z úložiště tabulek a definice pravidla, na kterou odkazují úlohy Stream Analytics, pochází z blobu.

Aktualizace řešení RemoteMonitoring sady Visual Studio

Následující kroky ukazují, jak upravit řešení RemoteMonitoring sady Visual Studio tak, aby zahrnovalo nové pravidlo, které používá ExternalTemperature telemetrii odesílanou ze simulovaného zařízení:

  1. Pokud jste to ještě neudělali, naklonujte úložiště azure-iot-remote-monitoring do vhodného umístění na místním počítači pomocí následujícího příkazu Git:

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. Ve Visual Studiu otevřete soubor RemoteMonitoring.sln z místní kopie úložiště azure-iot-remote-monitoring.

  3. Otevřete soubor Infrastructure\Models\DeviceRuleBlobEntity.cs a následujícím způsobem přidejte vlastnost ExternalTemperature:

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. Do stejného souboru přidejte vlastnost ExternalTemperatureRuleOutput následujícím způsobem:

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Otevřete soubor Infrastructure\Models\DeviceRuleDataFields.cs a přidejte následující vlastnost ExternalTemperature za existující vlastnost Vlhkost:

    public static string ExternalTemperature
    {
    

    get { return "VnějšíTeplota"; } } ```

  1. Ve stejném souboru aktualizujte metodu _availableDataFields tak, aby zahrnovala ExternalTemperature následujícím způsobem:

    private static List<string> _availableDataFields = new List<string>
    {                    
        Temperature, Humidity, ExternalTemperature
    };
    

7. Otevřete soubor Infrastructure\Repository\DeviceRulesRepository.cs a upravte metodu BuildBlobEntityListFromTableRow s následujícím způsobem:

```csharp
else if (rule.DataField == DeviceRuleDataFields.Humidity)
{
    entity.Humidity = rule.Threshold;
    entity.HumidityRuleOutput = rule.RuleOutput;
}
else if (rule.DataField == DeviceRuleDataFields.ExternalTemperature)
{
  entity.ExternalTemperature = rule.Threshold;
  entity.ExternalTemperatureRuleOutput = rule.RuleOutput;
}
```

Znovu sestavte a nasaďte řešení.

Aktualizované řešení teď můžete nasadit do svého předplatného Azure.

  1. Otevřete příkazový řádek se zvýšenými oprávněními a přejděte do kořenového adresáře místní kopie úložiště azure-iot-remote-monitoring.

  2. Pokud chcete nasadit aktualizované řešení, spusťte následující příkaz, který nahrazuje {deployment name} s názvem předkonfigurovaného nasazení řešení, které jste si poznamenali dříve:

    build.cmd cloud release {deployment name}
    

Aktualizace úlohy Stream Analytics

Po dokončení nasazení můžete úlohu Stream Analytics aktualizovat tak, aby používala nové definice pravidel.

  1. Na webu Azure Portal přejděte do skupiny prostředků, která obsahuje vaše předkonfigurované prostředky řešení. Tato skupina prostředků má stejný název, který jste zadali pro řešení během nasazení.

  2. Přejděte do úlohy {deployment name}-Rules Stream Analytics.

3. Kliknutím na Zastavit zastavíte spuštění úlohy Stream Analytics. (Před úpravou dotazu musíte počkat na zastavení úlohy streamování).

4. Klepněte na tlačítko Dotaz. Upravte dotaz tak, aby zahrnoval příkaz SELECT pro ExternalTemperature. Následující ukázka ukazuje úplný dotaz s novým příkazem SELECT:

```
WITH AlarmsData AS 
(
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Temperature' as ReadingType,
     Stream.Temperature as Reading,
     Ref.Temperature as Threshold,
     Ref.TemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Temperature IS NOT null AND Stream.Temperature > Ref.Temperature
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Humidity' as ReadingType,
     Stream.Humidity as Reading,
     Ref.Humidity as Threshold,
     Ref.HumidityRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Humidity IS NOT null AND Stream.Humidity > Ref.Humidity
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'ExternalTemperature' as ReadingType,
     Stream.ExternalTemperature as Reading,
     Ref.ExternalTemperature as Threshold,
     Ref.ExternalTemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.ExternalTemperature IS NOT null AND Stream.ExternalTemperature > Ref.ExternalTemperature
)
 
SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData
 
SELECT *
INTO DeviceRulesHub
FROM AlarmsData
```
  1. Kliknutím na Uložit změníte aktualizovaný dotaz pravidla.

  2. Kliknutím na Spustit spusťte úlohu Stream Analytics znovu.

Přidání nového pravidla na řídicím panelu

Můžete nyní na řídicím panelu řešení přidat k zařízení pravidlo ExternalTemperature.

  1. Přejděte na portál řešení.

2. Přejděte na panel Zařízení.

3. Vyhledejte vlastní zařízení, které jste vytvořili a které odesílá telemetrii ExternalTemperature, a na panelu Podrobnosti o zařízení klikněte na Přidat pravidlo.

4. V datovém polivyberte ExternalTemperature.

  1. Nastavte prahovou hodnotu na 56. Potom klikněte na Uložit a zobrazit pravidla.

  2. Vraťte se na řídicí panel a zobrazte historii alarmů.

  3. Ve volném okně konzole spusťte konzolovou aplikaci Node.js a zahajte odesílání telemetrie ExternalTemperature.

8. Všimněte si, že tabulka Historie alarmů při aktivaci nového pravidla zobrazuje nové alarmy.  

Další informace

Změna operátoru > je složitější a přesahuje kroky popsané v tomto kurzu. I když můžete úlohu Stream Analytics změnit tak, aby používala libovolný operátor podle vašeho výběru, zobrazení tohoto operátoru v portálu řešení je složitější úkol.

Další kroky

Teď, když jste viděli, jak vytvořit vlastní pravidla, najdete další informace o předkonfigurovaných řešeních: