Dela via


Skapa en anpassad regel i den förkonfigurerade fjärrövervakningslösningen

Introduktion

I de förkonfigurerade lösningarna kan du konfigurera regler som utlöses när ett telemetrivärde för en enhet når ett visst tröskelvärde. Använd dynamisk telemetri med den förkonfigurerade fjärrövervakningslösningen som beskriver hur du kan lägga till anpassade telemetrivärden, till exempel ExternalTemperature i din lösning. Den här artikeln visar hur du skapar en anpassad regel för dynamiska telemetrityper i din lösning.

I den här självstudien används en enkel Node.js simulerad enhet för att generera dynamisk telemetri som ska skickas till den förkonfigurerade lösningens serverdel. Sedan lägger du till anpassade regler i lösningen RemoteMonitoring Visual Studio och distribuerar den här anpassade serverdelen till din Azure-prenumeration.

För att slutföra den här kursen behöver du:

  • En aktiv Azure-prenumeration. Om du inte har något konto kan du skapa ett kostnadsfritt utvärderingskonto på bara några minuter. Mer information om den kostnadsfria utvärderingsversionen av Azure finns Kostnadsfri utvärderingsversion av Azure.
  • Node.js version 0.12.x eller senare för att skapa en simulerad enhet.
  • Visual Studio 2015 eller Visual Studio 2017 för att ändra den förkonfigurerade lösningens serverdel med dina nya regler.

Etablera lösningen

Om du inte redan har etablerat den förkonfigurerade lösningen för fjärrövervakning i ditt konto:

  1. Logga in på azureiotsuite.com med dina autentiseringsuppgifter för Azure-kontot och klicka för + att skapa en lösning.
  2. Klicka på Välj på panelen Fjärrövervakning.
  3. Ange ett lösningsnamn för den förkonfigurerade lösningen för fjärrövervakning.
  4. Välj den region och prenumeration som du vill använda för att etablera lösningen.
  5. Klicka på Skapa lösning för att påbörja etableringen. Den här processen tar normalt flera minuter.

Vänta tills etableringsprocessen har slutförts

  1. Klicka på ikonen för din lösning med statusen Etablerar.
  2. Observera etableringsstatusen när Azure-tjänsterna distribueras i din Azure-prenumeration.
  3. När etableringen har slutförts ändras statusen till Klar.
  4. Klicka på ikonen så ser du informationen om din lösning i den högra rutan.

Anteckning

Om det uppstår några problem när du distribuerar den förkonfigurerade lösningen kan du läsa Behörigheter på webbplatsen azureiotsuite.com och Vanliga frågor och svar. Om problemen kvarstår så skapa en tjänstbiljett på portalen.

Finns det något som du förväntar dig att se men som inte visas för din lösning? Lämna förslag på funktioner i User Voice.

Anteckna det lösningsnamn som du valde för distributionen. Du behöver det här lösningsnamnet senare i den här självstudien.

Konfigurera Node.js simulerad enhet

  1. På instrumentpanelen för fjärrövervakning klickar du på + Lägg till en enhet och lägger sedan till en anpassad enhet. Anteckna IoT Hub värdnamn, enhets-ID och enhetsnyckel. Du behöver dem senare i den här självstudien när du förbereder remote_monitoring.js-enhetsklientprogrammet.

  2. Kontrollera att Node.js version 0.12.x eller senare är installerad på utvecklingsdatorn. Kör node --version i en kommandotolk eller i ett gränssnitt för att kontrollera versionen. Information om hur du använder en pakethanterare för att installera Node.js i Linux finns i Installera Node.js via pakethanteraren.

  3. När du har installerat Node.js klonar du den senaste versionen av lagringsplatsen azure-iot-sdk-node till utvecklingsdatorn. Använd alltid huvudgrenen för den senaste versionen av biblioteken och exemplen.

  4. Från din lokala kopia av lagringsplatsen azure-iot-sdk-node kopierar du följande två filer från mappen node/device/samples till en tom mapp på utvecklingsdatorn:

    • packages.json
    • remote_monitoring.js
  5. Öppna filen remote_monitoring.js och leta efter följande variabeldefinition:

    var connectionString = "[IoT Hub device connection string]";
    
  6. Ersätt [IoT Hub enhetsanslutningssträng] med enhetens anslutningssträng. Använd värdena för din IoT Hub värdnamn, enhets-ID och enhetsnyckel som du antecknar i steg 1. En enhetsanslutningssträng har följande format:

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

    Om ditt IoT Hub värdnamn är contoso och enhets-ID:t är mydevice ser anslutningssträngen ut som följande kodfragment:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. Spara filen. Kör följande kommandon i ett gränssnitt eller en kommandotolk i mappen som innehåller dessa filer för att installera de nödvändiga paketen och kör sedan exempelprogrammet:

    npm install
    node remote_monitoring.js
    

Observera dynamisk telemetri i praktiken

Instrumentpanelen visar telemetri för temperatur och luftfuktighet från befintliga simulerade enheter:

The default dashboard

Om du väljer den Node.js simulerade enhet som du körde i föregående avsnitt visas telemetri för temperatur, luftfuktighet och extern temperatur:

Add external temperature to the dashboard

Fjärrövervakningslösningen identifierar automatiskt den extra externa temperaturtelemetritypen och lägger till den i diagrammet på instrumentpanelen.

Du kan stoppa Node.js-konsolappen när du har kontrollerat att den skickar ExternalTemperature-telemetri till den förkonfigurerade lösningen. Låt konsolfönstret vara öppet eftersom du kör den här Node.js-konsolappen igen när du har lagt till den anpassade regeln i lösningen.

Lagringsplatser för regler

Information om regler finns kvar på två platser:

  • DeviceRulesNormalizedTable-tabell – Den här tabellen lagrar en normaliserad referens till de regler som definieras av lösningsportalen. När lösningsportalen visar enhetsregler frågar den den här tabellen efter regeldefinitionerna.
  • DeviceRules-blob – Den här bloben lagrar alla regler som definierats för alla registrerade enheter och definieras som referensindata till Azure Stream Analytics-jobben.   När du uppdaterar en befintlig regel eller definierar en ny regel i lösningsportalen uppdateras både tabellen och bloben för att återspegla ändringarna. Regeldefinitionen som visas i portalen kommer från tabelllagret och regeldefinitionen som refereras av Stream Analytics-jobben kommer från bloben.

Uppdatera lösningen RemoteMonitoring Visual Studio

Följande steg visar hur du ändrar remotemonitoring-Visual Studio lösning så att den innehåller en ny regel som använder telemetrin ExternalTemperature som skickas från den simulerade enheten:

  1. Om du inte redan har gjort det klonar du lagringsplatsen azure-iot-remote-monitoring till en lämplig plats på den lokala datorn med hjälp av följande Git-kommando:

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. I Visual Studio öppnar du filen RemoteMonitoring.sln från din lokala kopia av lagringsplatsen azure-iot-remote-monitoring.

  3. Öppna filen Infrastructure\Models\DeviceRuleBlobEntity.cs och lägg till egenskapen ExternalTemperature på följande sätt:

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. I samma fil lägger du till egenskapen ExternalTemperatureRuleOutput enligt följande:

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Öppna filen Infrastructure\Models\DeviceRuleDataFields.cs och lägg till följande ExternalTemperature-egenskap efter den befintliga egenskapen Humidity :

    public static string ExternalTemperature
    {
    

    get { return "ExternalTemperature"; } } ```

  1. I samma fil uppdaterar du metoden _availableDataFields så att ExternalTemperature inkluderas på följande sätt:

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

7. Öppna filen Infrastructure\Repository\DeviceRulesRepository.cs och ändra metoden BuildBlobEntityListFromTableRows på följande sätt:

```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;
}
```

Återskapa och distribuera om lösningen.

Nu kan du distribuera den uppdaterade lösningen till din Azure-prenumeration.

  1. Öppna en upphöjd kommandotolk och gå till roten för din lokala kopia av lagringsplatsen azure-iot-remote-monitoring.

  2. Om du vill distribuera den uppdaterade lösningen kör du följande kommando och ersätter {deployment name} med namnet på den förkonfigurerade lösningsdistribution som du antecknade tidigare:

    build.cmd cloud release {deployment name}
    

Uppdatera Stream Analytics-jobbet

När distributionen är klar kan du uppdatera Stream Analytics-jobbet så att de nya regeldefinitionerna används.

  1. I Azure Portal går du till resursgruppen som innehåller dina förkonfigurerade lösningsresurser. Den här resursgruppen har samma namn som du angav för lösningen under distributionen.

  2. Gå till Stream Analytics-jobbet {deployment name}-Rules.

3. Klicka på Stoppa för att stoppa Stream Analytics-jobbet från att köras. (Du måste vänta tills strömningsjobbet har stoppats innan du kan redigera frågan).

4. Klicka på Fråga. Redigera frågan för att inkludera SELECT-instruktionen för ExternalTemperature. I följande exempel visas den fullständiga frågan med den nya SELECT-instruktionen :

```
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. Klicka på Spara för att ändra den uppdaterade regelfrågan.

  2. Klicka på Start för att starta Stream Analytics-jobbet igen.

Lägg till din nya regel på instrumentpanelen

Nu kan du lägga till regeln ExternalTemperature på en enhet på instrumentpanelen för lösningen.

  1. Gå till lösningsportalen.

2. Gå till panelen Enheter .

3. Leta upp den anpassade enhet som du skapade som skickar ExternalTemperature-telemetri och klicka på Lägg till regel på panelen Enhetsinformation.

4. Välj ExternalTemperature i datafältet.

  1. Ange Tröskelvärde till 56. Klicka sedan på Spara och visa regler.

  2. Gå tillbaka till instrumentpanelen för att visa larmhistoriken.

  3. I konsolfönstret som du lämnade öppet startar du Node.js-konsolappen för att börja skicka ExternalTemperature-telemetridata .

8. Observera att tabellen Larmhistorik visar nya larm när den nya regeln utlöses.  

Ytterligare information

Att ändra operatorn > är mer komplext och går utöver de steg som beskrivs i den här självstudien. Du kan ändra Stream Analytics-jobbet så att det använder vilken operatör du vill, men det är en mer komplex uppgift att återspegla operatorn i lösningsportalen.

Nästa steg

Nu när du har sett hur du skapar anpassade regler kan du lära dig mer om de förkonfigurerade lösningarna: