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 typy dynamických telemetrických dat ve vašem řešení.

V tomto kurzu se používá jednoduché Node.js simulované zařízení k vygenerování dynamické telemetrie pro odesílání do předkonfigurovaného back-endu řešení. Potom přidáte vlastní pravidla do řešení RemoteMonitoring Visual Studio a nasadíte tento přizpůsobený back-end do předplatného Azure.

Pro absolvování tohoto kurzu potřebujete:

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

Zřízení řešení

Pokud jste ve svém účtu ještě 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 + vytvořte řešení.
  2. Klikněte na tlačítko Vybrat, které se nachází na dlaždici Vzdálené monitorování.
  3. Zadejte Název řešení pro předkonfigurované řešení vzdáleného monitorování.
  4. Vyberte Oblast a Předplatné, které chcete při zřizování řešení použít.
  5. Kliknutím na tlačítko Vytvořit řešení zahájíte proces zřizování. Tento proces obvykle trvá několik minut.

Počkejte, dokud proces zřizování neskončí.

  1. Klikněte na dlaždici s řešením, u kterého je uveden stav Zřizování.
  2. Stavy zřizování umožňují sledovat, jak se služby Azure nasazují na váš účet Azure.
  3. Jakmile bude zřizování dokončeno, stav se změní na Připraveno.
  4. Kliknutím na dlaždici zobrazíte v pravém podokně informace o řešení.

Poznámka

Pokud při nasazování předkonfigurovaného řešení narazíte na problémy, zkontrolujte Oprávnění na webu azureiotsuite.com a přečtěte si Nejčastější dotazy. Pokud problémy přetrvávají, vytvořte na portálu lístek služby.

Hledali jste informace, které se týkají vašeho řešení a nejsou zde uvedeny? Sdělte nám návrhy na funkce na webu User Voice.

Poznamenejte si název řešení, který jste zvolili pro nasazení. Tento název řešení potřebujete 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 pak přidejte vlastní zařízení. Poznamenejte si název hostitele IoT Hub, ID zařízení a klíč zařízení. Budete je potřebovat později v tomto kurzu při přípravě klientské aplikace remote_monitoring.js zařízení.

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

  3. Po instalaci Node.js naklonujte nejnovější verzi úložiště azure-iot-sdk-node do vývojového počítače. Vždy používejte hlavní větev 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 [IoT Hub připojovací řetězec zařízení] připojovacím řetězcem zařízení. Použijte hodnoty pro název hostitele 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 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. Soubor uložte. 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í:

The default dashboard

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

Add external temperature to the dashboard

Ř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á telemetrii ExternalTemperature do předkonfigurovaného řešení. Nechte okno konzoly otevřené, protože tuto Node.js konzolovou aplikaci spustíte znovu po přidání vlastního pravidla do řešení.

Umístění ú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 definic pravidel.
  • Objekt blob DeviceRules – Tento objekt blob ukládá všechna pravidla definovaná pro všechna zaregistrovaná 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 odkazovaná úlohami Stream Analytics pochází z objektu blob.

Aktualizace řešení RemoteMonitoring Visual Studio

Následující kroky ukazují, jak upravit řešení RemoteMonitoring Visual Studio tak, aby zahrnovalo nové pravidlo, které používá telemetrii ExternalTemperature odeslanou 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. V Visual Studio 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 přidejte vlastnost ExternalTemperature následujícím způsobem:

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. Ve stejném 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 "ExternalTemperature"; } } ```

  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 BuildBlobEntityListFromTableRows 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 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} 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. V Azure Portal přejděte do skupiny prostředků, která obsahuje 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 tlačítko Zastavit zastavíte spuštění úlohy Stream Analytics. (Před úpravou dotazu musíte počkat, až se úloha streamování zastaví).

4. Klikněte na 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 Start spusťte úlohu Stream Analytics znovu.

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

Teď můžete přidat pravidlo ExternalTemperature do zařízení na řídicím panelu řešení.

  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, které odesílá telemetrii ExternalTemperature , a na panelu Podrobnosti o zařízení klikněte na přidat pravidlo.

4. Vyberte externalTemperature v datovém poli.

  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. V okně konzoly, které jste opustili, spusťte aplikaci konzoly Node.js a začněte odesílat telemetrická data ExternalTemperature .

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

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 jakýkoli operátor, který chcete, reflektující tento operátor na portálu řešení představuje složitější úlohu.

Další kroky

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