共用方式為


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

簡介

在預先設定的解決方案中,您可以設定 規則,以在裝置的遙測值達到特定閾值時觸發搭配遠端監視預先設定的解決方案使用動態遙測 說明如何將自定義遙測值,例如 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. 布建完成之後,狀態會變更為 Ready
  4. 按兩下圖格,即可在右側窗格中查看解決方案的詳細數據。

備註

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

是否有您預期會看到但未列於您解決方案中的詳細資料? 在 User Voice上提供功能建議。

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

設定 Node.js 模擬裝置

  1. 在遠端監控儀表板上,點擊 [+ 新增裝置],然後新增一個 自定義裝置。 記下 IoT 中樞主機名、裝置識別碼和裝置金鑰。 當您準備 remote_monitoring.js 裝置用戶端應用程式時,稍後在本教學課程中需要用到它們。

  2. 請確定 Node.js 0.12.x 版或更新版本已安裝在開發電腦上。 在命令提示字元或 Shell 中執行 node --version,以檢查版本。 如需使用套件管理員在 Linux 上安裝 Node.js 的相關信息,請參閱 透過套件管理員安裝 Node.js。

  3. 當您安裝 Node.js時,請將最新版的 azure-iot-sdk-node 存放庫複製到您的開發計算機。 務必使用 主分支 來取得最新版本的程式庫和範例。

  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. 儲存檔案。 在包含這些檔案的資料夾中,於 Shell 或命令提示字元中執行下列命令,以安裝必要的套件,然後執行範例程式:

    npm install
    node remote_monitoring.js
    

觀察作用中的動態遙測

儀錶板會顯示來自現有模擬裝置的溫度和濕度遙測:

預設儀錶板

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

將外部溫度新增至儀錶板

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

當您已確認 ExternalTemperature 遙測數據已傳送至預先配置的解決方案後,可以停止 Node.js 控制台應用程式。 讓主控台視窗保持開啟,因為您將自定義規則新增至解決方案之後,再次執行此 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. 請注意,警示歷程記錄 數據表會在觸發新規則時顯示新的警示。  

其他資訊

變更運算子 > 更為複雜,而且超出本教學課程中所述的步驟。 雖然您可以將串流分析作業更改為使用您喜歡的任何運算子,但在解決方案入口網站中反映該運算子則是一項更為複雜的任務。

後續步驟

既然您已瞭解如何建立自定義規則,您可以深入了解預先設定的解決方案: