Creare una regola personalizzata nella soluzione di monitoraggio remota preconfigurata

Introduzione

Nelle soluzioni preconfigurate è possibile configurare regole che si attivano quando un valore di telemetria per un dispositivo raggiunge una soglia specifica. Usare i dati di telemetria dinamica con la soluzione di monitoraggio remoto preconfigurata descrive come aggiungere alla soluzione valori di telemetria personalizzati, ad esempio ExternalTemperature. Questo articolo illustra come creare regole personalizzate per tipi di dati di telemetria dinamica nella soluzione.

Questa esercitazione usa un semplice dispositivo simulato Node.js per generare dati di telemetria dinamica da inviare al back-end della soluzione preconfigurata. Si aggiungeranno quindi regole personalizzate nella soluzione RemoteMonitoring di Visual Studio e si distribuirà questo back-end personalizzato alla sottoscrizione di Azure.

Per completare questa esercitazione, sono necessari:

  • Una sottoscrizione di Azure attiva. Se non si dispone di un account, è possibile creare un account di valutazione gratuita in pochi minuti. Per informazioni dettagliate, vedere la pagina relativa alla versione di valutazione gratuita di Azure.
  • Node.js versione 0.12.x o successiva per creare un dispositivo simulato.
  • Visual Studio 2015 o Visual Studio 2017 per modificare nuovamente il back-end della soluzione preconfigurata con le nuove regole.

Effettuare il provisioning della soluzione

Se nel proprio account non è già stato effettuato il provisioning della soluzione preconfigurata per il monitoraggio remoto:

  1. Accedere a azureiotsuite.com con le credenziali dell'account Azure e fare clic su + per creare una soluzione.
  2. Fare clic su Seleziona nel riquadro Remote monitoring (Monitoraggio remoto).
  3. Immettere un valore in Nome soluzione per la soluzione preconfigurata di monitoraggio remoto.
  4. Selezionare l'area e la sottoscrizione che si desidera usare per il provisioning della soluzione.
  5. Fare clic su Crea soluzione per iniziare il processo di provisioning. In genere il processo richiede alcuni minuti.

Attendere il completamento del processo di provisioning.

  1. Fare clic sul riquadro della soluzione con stato Provisioning.
  2. Notare gli stati Provisioning man mano che i servizi di Azure vengono distribuiti nella sottoscrizione di Azure.
  3. Al termine del provisioning, lo stato cambierà in Pronto.
  4. Fare clic sul riquadro per visualizzare i dettagli della soluzione nel riquadro di destra.
Nota

In caso di problemi di distribuzione della soluzione preconfigurata, vedere Autorizzazioni per il sito azureiotsuite.com e le domande frequenti. Se i problemi persistono, creare un ticket di servizio nel portale.

Se ci sono dettagli importanti non elencati per la soluzione, è possibile inviare suggerimenti sulle funzionalità usando i suggerimenti degli utenti.

Prendere nota del nome della soluzione che si è scelto per la distribuzione. Il nome della soluzione sarà necessario più avanti nell'esercitazione.

Configurare il dispositivo simulato Node.js

  1. Nel dashboard di monitoraggio remoto fare clic su + Aggiungi un dispositivo e quindi aggiungere un dispositivo personalizzato. Prendere nota del nome host dell'hub IoT, dell'ID dispositivo e della chiave del dispositivo. Queste informazioni saranno necessarie più avanti nell'esercitazione quando si preparerà l'applicazione client per dispositivi remote_monitoring.js.
  2. Verificare che Node.js 0.12.x o una versione successiva sia installata sul computer di sviluppo. Per verificare la versione, eseguire node --version al prompt dei comandi o in una shell. Per informazioni sull'uso di Gestione pacchetti per installare Node.js su Linux, vedere Installing Node.js via package manager (Installazione di Node.js tramite Gestione pacchetti).
  3. Dopo aver installato Node.js, clonare l'ultima versione del repository azure-iot-sdk-node nel computer di sviluppo. Usare sempre il ramo master per la versione più recente delle librerie e degli esempi.
  4. Da una copia locale del repository azure-iot-sdk-node, copiare i seguenti due file dalla cartella node/device/samples in una cartella vuota sul computer di sviluppo:

    • packages.json
    • remote_monitoring.js
  5. Aprire il file remote_monitoring.js e cercare la definizione di variabile seguente:

    var connectionString = "[IoT Hub device connection string]";
    
  6. Sostituire [stringa di connessione dispositivo Hub IoT] con la stringa di connessione del dispositivo. Usare i valori per il nome host dell'hub IoT, dell'ID dispositivo e della chiave del dispositivo annotati nel passaggio 1. Una stringa di connessione del dispositivo ha il formato seguente:

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

    Se il nome host dell'Hub IoT è contoso e l'ID dispositivo è mydevice, la stringa di connessione sarà simile al seguente frammento:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. Salvare il file. Eseguire i comandi seguenti in una shell o al prompt dei comandi nella cartella che contiene i file per installare i pacchetti necessari e quindi eseguire l'applicazione di esempio:

    npm install
    node remote_monitoring.js
    

Osservare la telemetria dinamica in azione

Il dashboard mostra dati di telemetria su temperatura e umidità dai dispositivi simulati esistenti:

Dashboard predefinito

Se si seleziona il dispositivo simulato Node.js in esecuzione nella sezione precedente, verranno visualizzati i dati di telemetria su temperatura, umidità e temperatura esterna:

Aggiungere la temperatura esterna al dashboard

La soluzione di monitoraggio remoto rileva automaticamente il tipo di dati di telemetria aggiuntivo relativo alla temperatura esterna e lo aggiunge al grafico nel dashboard.

È possibile arrestare l'applicazione console Node.js dopo avere verificato che sta inviando i dati di telemetria ExternalTemperature alla soluzione preconfigurata. Mantenere aperta la finestra della console in quanto si eseguirà nuovamente l'applicazione console Node.js dopo aver aggiunto la regola personalizzata alla soluzione.

Posizioni di archiviazione delle regole

Le informazioni sulle regole vengono mantenute in due posizioni:

  • Tabella DeviceRulesNormalizedTable: questa tabella archivia un riferimento normalizzato alle regole definite dal portale della soluzione. Quando il portale della soluzione visualizza le regole del dispositivo, interroga questa tabella per trovare le definizioni delle regole.
  • BLOB DeviceRules: questo BLOB archivia tutte le regole definite per tutti i dispositivi registrati ed è definito come input di riferimento per i processi di analisi di flusso di Azure.

Quando si aggiorna una regola esistente o si definisce una nuova regola nel portale della soluzione, sia la tabella sia il BLOB vengono aggiornati per riflettere le modifiche. La definizione della regola visualizzata nel portale proviene dall'archivio tabelle e la definizione della regola a cui fanno riferimento i processi di analisi di flusso proviene dal BLOB.

Aggiornare la soluzione RemoteMonitoring di Visual Studio

La procedura seguente mostra come modificare la soluzione RemoteMonitoring di Visual Studio per includere una nuova regola che usa i dati di telemetria ExternalTemperature inviati dal dispositivo simulato:

  1. Se non è ancora stato fatto, clonare il repository azure-iot-remote-monitoring in un percorso appropriato nel computer locale usando il comando Git seguente:

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. In Visual Studio aprire il file RemoteMonitoring.sln dalla copia locale del repository azure-iot-remote-monitoring.

  3. Aprire il file Infrastructure\Models\DeviceRuleBlobEntity.cs e aggiungere una proprietà ExternalTemperature come segue:

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. Nello stesso file aggiungere una proprietà ExternalTemperatureRuleOutput come indicato di seguito:

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Aprire il file Infrastructure\Models\DeviceRuleDataFields.cs e aggiungere la seguente proprietà ExternalTemperature dopo la proprietà Humidity esistente:

    public static string ExternalTemperature
    {
        get { return "ExternalTemperature"; }
    }
    
  6. Nello stesso file aggiornare il metodo _availableDataFields in modo che includa ExternalTemperature come segue:

    private static List<string> _availableDataFields = new List<string>
    {                    
        Temperature, Humidity, ExternalTemperature
    };
    
  7. Aprire il file Infrastructure\Repository\DeviceRulesRepository.cs e modificare il metodo BuildBlobEntityListFromTableRows come segue:

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

Ricompilare e ridistribuire la soluzione.

È ora possibile distribuire la soluzione aggiornata alla sottoscrizione di Azure.

  1. Aprire un prompt dei comandi con privilegi elevati e passare alla radice della copia locale del repository azure-iot-remote-monitoring.

  2. Per distribuire la soluzione aggiornata, eseguire il comando seguente sostituendo {nome distribuzione} con il nome della distribuzione della soluzione preconfigurata annotato in precedenza:

    build.cmd cloud release {deployment name}
    

Aggiornare il processo di analisi di flusso

Dopo aver completato la distribuzione, è possibile aggiornare il processo di analisi di flusso in modo che usi le nuove definizioni delle regole.

  1. Nel portale di Azure passare al gruppo di risorse che contiene le risorse della soluzione preconfigurata. Questo gruppo di risorse ha lo stesso nome specificato per la soluzione durante la distribuzione.

  2. Passare al processo di analisi di flusso {nome distribuzione}-Regole.

  3. Fare clic su Stop per arrestare l'esecuzione del processo di analisi di flusso. È necessario attendere che il processo di analisi di flusso si arresti prima di poter modificare la query.

  4. Fare clic su Query. Modificare la query aggiungendo l'istruzione SELECT per ExternalTemperature. L'esempio seguente illustra la query completa con la nuova istruzione 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
    
  5. Fare clic su Salva per modificare la query di regola aggiornata.

  6. Fare clic su Avvia per avviare nuovamente il processo di analisi di flusso.

Aggiungere la nuova regola nel dashboard

È ora possibile aggiungere la regola ExternalTemperature a un dispositivo nel dashboard della soluzione.

  1. Passare al portale della soluzione.

  2. Passare al pannello Dispositivi.

  3. Individuare il dispositivo personalizzato che è stato creato che invia i dati di telemetria ExternalTemperature e nel pannello Dettagli dispositivo fare clic su Aggiungi regola.

  4. Selezionare ExternalTemperature in Campo dati.

  5. Impostare Soglia su 56. Quindi fare clic su Salva e visualizza regole.

  6. Tornare al dashboard per visualizzare la cronologia avvisi.

  7. Nella finestra della console che è stata lasciata aperta avviare l'applicazione console Node.js per iniziare a inviare i dati di telemetria ExternalTemperature.

  8. Si noti che la tabella Cronologia avvisi mostra nuovi avvisi quando viene attivata la nuova regola.

Informazioni aggiuntive

Modificare l'operatore > è più complesso ed esula dalla procedura descritta in questa esercitazione. Mentre è possibile modificare il processo di analisi di flusso perché usi qualsiasi operatore desiderato, riflettere tale operatore nel portale della soluzione è un'attività più complessa.

Passaggi successivi

Ora che si è appreso come creare regole personalizzate, è possibile vedere altre informazioni sulle soluzioni preconfigurate: