Condividi tramite


Creare una regola personalizzata nella soluzione preconfigurata di monitoraggio remoto

Introduzione

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

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

Per completare questa esercitazione, è necessario:

  • Una sottoscrizione di Azure attiva. Se non si ha un account, è possibile creare un account di valutazione gratuito in pochi minuti. Per informazioni dettagliate, vedere 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 il back-end della soluzione preconfigurato con le nuove regole.

Configurare la soluzione

Se non hai ancora predisposto la soluzione preconfigurata di monitoraggio remoto nel tuo account:

  1. Accedere a azureiotsuite.com usando le credenziali dell'account Azure e fare clic su + per creare una soluzione.
  2. Fare clic su Seleziona nel riquadro monitoraggio remoto.
  3. Immettere il nome della soluzione per la soluzione di monitoraggio remoto preconfigurata.
  4. Seleziona l'area e la sottoscrizione che desideri utilizzare per effettuare il provisioning della soluzione.
  5. Fare clic su Crea soluzione per avviare il processo di provisioning. L'esecuzione di questo processo richiede in genere alcuni minuti.

Attendere che il processo di provisioning sia completato

  1. Clicca sul riquadro per la soluzione con lo stato di approvvigionamento .
  2. Si noti gli stati di configurazione quando i servizi di Azure vengono distribuiti nella sottoscrizione di Azure.
  3. Al termine del provisioning, lo stato passa a Pronto.
  4. Fare clic sul riquadro per visualizzare i dettagli della soluzione nel riquadro di destra.

Annotazioni

Se si verificano problemi durante la distribuzione della soluzione preconfigurata, esaminare le autorizzazioni sul sito di azureiotsuite.com e le domande frequenti . Se i problemi persistono, creare un ticket di servizio sul portale .

Ci sono dettagli che ti aspetteresti di vedere che non sono elencati per la tua soluzione? Fornire suggerimenti sulle funzionalità su User Voice.

Prendere nota del nome della soluzione scelto per la distribuzione. Questo nome della soluzione è necessario più avanti in questa esercitazione.

Configurare il dispositivo simulato Node.js

  1. Sul cruscotto 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. Sono necessari più avanti in questa esercitazione quando si prepara l'applicazione client del dispositivo remote_monitoring.js.

  2. Assicurarsi che Node.js versione 0.12.x o successiva sia installato nel computer di sviluppo. Eseguire node --version nel prompt dei comandi o in una shell per controllare la versione. Per informazioni sull'uso di una gestione pacchetti per installare Node.js in Linux, vedere Installazione di Node.js tramite Gestione pacchetti.

  3. Dopo aver installato Node.js, clonare la versione più recente del repository azure-iot-sdk-node nel computer di sviluppo. Usa sempre il ramo master per la versione più recente delle librerie e degli esempi.

  4. Dalla copia locale del repository azure-iot-sdk-node copiare i due file seguenti dalla cartella node/device/samples in una cartella vuota nel 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 del dispositivo dell'hub IoT] con la stringa di connessione del dispositivo. Usate i valori del nome host del vostro hub IoT, dell'ID del dispositivo e della chiave del dispositivo che avete annotato 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 è simile al frammento di codice seguente:

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

    npm install
    node remote_monitoring.js
    

Osservare i dati di telemetria dinamici in azione

Il dashboard mostra i dati di telemetria relativi a temperatura e umidità dai dispositivi simulati esistenti:

Il dashboard predefinito

Se si seleziona il Node.js dispositivo simulato eseguito nella sezione precedente, vengono visualizzati i dati di telemetria relativi a temperatura, umidità e temperatura esterna:

Aggiungere temperatura esterna al dashboard

La soluzione di monitoraggio remoto rileva automaticamente il tipo di telemetria della temperatura esterna aggiuntiva e lo aggiunge al grafico nel dashboard.

È possibile arrestare l'app console Node.js dopo aver verificato che sta inviando dati di telemetria ExternalTemperature alla soluzione preconfigurata. Mantenere aperta la finestra della console perché si esegue di nuovo questa Node.js'app console 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, esegue una query in questa tabella per 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 che 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

I passaggi seguenti illustrano 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 è già 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 indicato di seguito:

    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 proprietà ExternalTemperature seguente dopo la proprietà Humidity esistente:

    public static string ExternalTemperature
    {
    

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

  1. Nello stesso file aggiornare il metodo _availableDataFields per includere ExternalTemperature nel modo seguente:

    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 indicato di seguito:

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

Ricompilare e ridistribuire la soluzione.

È ora possibile distribuire la soluzione aggiornata nella 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 annotata in precedenza:

    build.cmd cloud release {deployment name}
    

Aggiornare il processo di Analisi di flusso

Al termine della distribuzione, è possibile aggiornare il processo di Analisi di flusso per usare le nuove definizioni di regola.

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

  2. Vai al processo {nome distribuzione}-Regole di Analisi del flusso di dati.

3. Fare clic su Arresta per arrestare l'esecuzione del processo di Analisi di flusso. È necessario attendere che il processo di streaming venga arrestato prima di poter modificare la query.

4. Fare clic su Query. Modifica la query per includere 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
```
  1. Fare clic su Salva per modificare la query della regola aggiornata.

  2. Fare clic su Start per avviare di nuovo il processo di Analisi di flusso in esecuzione.

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 creato che invia dati di telemetria ExternalTemperature e nel pannello Dettagli dispositivo fare clic su Aggiungi regola.

4. Selezionare ExternalTemperature nel campo dati.

  1. Impostare Soglia su 56. Fare quindi clic su Salva e visualizzare le regole.

  2. Tornare al dashboard per visualizzare la cronologia degli avvisi.

  3. Nella finestra della console aperta, avviare la app console di Node.js per iniziare l'invio di dati di telemetria ExternalTemperature.

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

Informazioni aggiuntive

La modifica dell'operatore > è più complessa e supera i passaggi descritti in questa esercitazione. Anche se è possibile modificare il processo di Analisi di flusso in modo da usare qualsiasi operatore desiderato, riflettendo tale operatore nel portale della soluzione è un'attività più complessa.

Passaggi successivi

Dopo aver visto come creare regole personalizzate, è possibile ottenere altre informazioni sulle soluzioni preconfigurate: