共用方式為


在遠端監視預先設定的解決方案中建立自訂規則

簡介

在預先設定的解決方案中,您可以設定會在裝置的遙測值觸達特定臨界值時觸發的規則搭配使用動態遙測與遠端監視預先設定解決方案會說明如何在解決方案中新增自訂遙測值,例如 ExternalTemperature。 本文則會示範如何在解決方案中建立動態遙測類型的自訂規則。

本教學課程使用簡單的 Node.js 模擬裝置,來產生要傳送至預先設定之解決方案後端的動態遙測。 然後,您要在 RemoteMonitoring Visual Studio 解決方案中新增自訂規則,並將此自訂後端部署至 Azure 訂用帳戶。

若要完成本教學課程,您需要:

  • 有效的 Azure 訂用帳戶。 如果您沒有帳戶,只需要幾分鐘的時間就可以建立免費試用帳戶。 如需詳細資料,請參閱 Azure 免費試用
  • Node.js 0.12.x 版或更新版本,以建立模擬裝置。
  • Visual Studio 2015 或 Visual Studio 2017,以使用新規則修改預先設定的解決方案後端。

佈建解決方案

如果您尚未在您的帳戶中佈建遠端監視預先設定的解決方案:

  1. 使用 Azure 帳戶認證登入 azureiotsuite.com,然後按一下 []+ 以建立解決方案。
  2. 按一下 [遠端監視] 圖格上的 [選取]
  3. 輸入遠端監視預先設定的解決方案的 [解決方案名稱]
  4. 選取您想要用來佈建解決方案的 [區域] 和 [訂用帳戶]
  5. 按一下 [建立解決方案] 開始佈建程序。 此程序通常需要數分鐘的執行時間。

等候佈建程序完成

  1. 按一下狀態為 佈建中 的解決方案圖格。
  2. 請注意, 佈建狀態 說明您的 Azure 訂用帳戶中已經佈建 Azure 服務。
  3. 佈建完成之後,狀態會變更為 就緒
  4. 按一下圖格,就會在右邊窗格中看到解決方案的詳細資料。

注意

如果您在佈建預先設定的解決方案時遇到問題,請參閱 azureiotsuite.com 網站的權限常見問題集。 如果問題持續發生,請在入口網站建立服務票證。

是否有您預期會看到但沒有列出的解決方案詳細資料? 請在 使用者心聲中提供功能建議給我們。

請記下您為部署選擇的解決方案名稱。 本教學課程稍後需要用到此解決方案名稱。

設定 Node.js 模擬裝置

  1. 在遠端監視儀表板上,按一下 [+ 新增裝置],然後新增自訂裝置。 記下 IoT 中樞主機名稱、裝置識別碼和裝置金鑰。 當您在本教學課程稍後準備 remote_monitoring.js 裝置用戶端應用程式時,需要這些資料。

  2. 請確定 Node.js 0.12.x 版或更新版本已經安裝在您的開發電腦上。 在命令提示字元或殼層中執行 node --version 來檢查版本。 如需使用套件管理員在 Linux 上安裝 Node.js 的資訊,請參閱 Installing Node.js via package manager (透過套件管理員安裝 Node.js)

  3. 安裝 Node.js 之後,請將最新版本的 azure-iot-sdk-node 儲存機制複製到您的開發電腦。 一律使用 master 分支取得最新版本的程式庫和範例。

  4. 從您的本機複本 azure-iot-sdk-node 儲存機制,將下列兩個檔案從 node/device/samples 資料夾複製到您開發電腦的空白資料夾中:

    • packages.json
    • remote_monitoring.js
  5. 開啟 remote_monitoring.js 檔案並尋找下列變數定義:

    var connectionString = "[IoT Hub device connection string]";
    
  6. 以您裝置的連接字串取代 [IoT 中樞裝置連接字串] 。 使用您在步驟 1 記下的 IoT 中樞主機名稱、裝置識別碼,以及裝置金鑰的值。 裝置連接字串使用的格式如下:

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

    如果 IoT 中樞主機名稱是 contoso 且裝置識別碼是 mydevice,連接字串看起來如下片段:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. 儲存檔案。 在殼層或命令提示字元中,於包含這些檔案的資料夾,執行下列命令以安裝必要的套件,然後執行範例應用程式:

    npm install
    node remote_monitoring.js
    

觀察運作中的動態遙測

儀表板會顯示現有模擬裝置的溫度與濕度遙測:

The default dashboard

如果您選取在上一節執行的 Node.js 模擬裝置,您會看到溫度、濕度與外部溫度遙測:

Add external temperature to the dashboard

遠端監視解決方案會自動偵測其他的外部溫度遙測類型,並將它新增到儀表板的圖表上。

當您確認 Node.js 主控台應用程式會將 ExternalTemperature 遙測傳送至預先設定的解決方案時,便可將其停止。 在將自訂規則新增至解決方案後,您會再次執行此 Node.js 主控台應用程式,因此請將主控台視窗保持開啟狀態。

規則的儲存位置

規則的相關資訊會保存在兩個位置︰

  • DeviceRulesNormalizedTable 資料表 – 此資料表會儲存解決方案入口網站所定義之規則的標準化參考。 解決方案入口網站在顯示裝置規則時,會查詢此資料表以取得規則定義。
  • DeviceRules Blob – 此 Blob 會儲存所有註冊裝置已定義的所有規則,並且會定義為 Azure 串流分析作業的參考輸入。   當您在解決方案入口網站中更新現有規則或定義新規則時,資料表和 Blob 皆會更新,以反映所做的變更。 入口網站中顯示的規則定義來自資料表存放區,串流分析作業所參考的規則定義則來自 Blob。

更新 RemoteMonitoring Visual Studio 解決方案

下列步驟說明如何修改 RemoteMonitoring Visual Studio 解決方案,以納入使用模擬裝置所傳來之 ExternalTemperature 遙測的新規則︰

  1. 如果您尚未這麼做,請使用下列 Git 命令將 azure-iot-remote-monitoring 儲存機制複製到本機電腦上的適當位置︰

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. 在 Visual Studio 中,從 azure-iot-remote-monitoring 儲存機制的本機複本開啟 RemoteMonitoring.sln 檔案。

  3. 開啟檔案 Infrastructure\Models\DeviceRuleBlobEntity.cs 並新增 ExternalTemperature 屬性,如下所示︰

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. 在相同的檔案中新增 ExternalTemperatureRuleOutput 屬性,如下所示︰

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. 開啟檔案 Infrastructure\Models\DeviceRuleDataFields.cs,並在現有的 Humidity 屬性後新增下列 ExternalTemperature 屬性:

    public static string ExternalTemperature
    {
    

    get { return 「ExternalTemperature」; } }```

  1. 在相同的檔案中更新 _availableDataFields 方法,以納入 ExternalTemperature,如下所示︰

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

7.開啟 Infrastructure\Repository\DeviceRulesRepository.cs 檔案,並修改 BuildBlobEntityListFromTableRows 方法,如下所示:

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

重建並重新部署解決方案。

您現在可以在 Azure 訂用帳戶中部署已更新的解決方案。

  1. 開啟提高權限的命令提示字元,並瀏覽至 azure-iot-remote-monitoring 儲存機制本機複本的根目錄。

  2. 若要部署已更新的解決方案,請執行下列命令,並將 {deployment name} 換成您先前記下之預先設定解決方案部署的名稱︰

    build.cmd cloud release {deployment name}
    

更新串流分析作業

部署完成時,您可以將串流分析作業更新為使用新的規則定義。

  1. 在 Azure 入口網站中,瀏覽至預先設定之解決方案資源所在的資源群組。 此資源群組的名稱和您在部署期間為解決方案所指定的名稱相同。

  2. 瀏覽至 {deployment name}-Rules 串流分析作業。

3.按一下 [停止] 以停止串流分析作業執行。 (您必須等到串流作業停止後,才能編輯查詢)。

4. 按一下 [查詢]。 編輯查詢以納入 ExternalTemperatureSELECT 陳述式。 下列範例示範具有全新 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. 按一下 [儲存] 來變更已更新的規則查詢。

  2. 按一下 [啟動] 讓串流分析作業再次開始執行。

在儀表板中新增規則

您現在可以在解決方案儀表板中對裝置新增 ExternalTemperature 規則。

  1. 瀏覽至解決方案入口網站。

2.流覽至 [裝置] 面板。

3.找出您建立的自訂裝置,以傳送 ExternalTemperature 遙測,然後在 [ 裝置詳細 資料] 面板上,按一下 [ 新增規則]。

4.選取[資料欄位中的 ExternalTemperature]。

  1. 將 [閾值] 設定為 56。 然後按一下 [儲存及檢視規則]

  2. 返回儀表板以檢視警示歷程記錄。

  3. 在您保持開啟的主控台視窗中,啟動 Node.js 主控台應用程式,以開始傳送 ExternalTemperature 遙測資料。

8.請注意, [警示歷程記錄 ] 資料表會在觸發新規則時顯示新的警示。  

其他資訊

變更運算子 > 的程序更為複雜,不在本教學課程所述步驟的適用範圍內。 雖然您可以變更串流分析作業,以使用您所想要的任何運算子,但在解決方案入口網站中反映該運算子是更為複雜的工作。

下一步

既然您已了解如何建立自訂規則,您可以進一步了解預先設定的解決方案︰