

支援終止通知：2026 年 5 月 20 日， AWS 將終止對 的支援 AWS IoT Events。2026 年 5 月 20 日之後，您將無法再存取 AWS IoT Events 主控台或 AWS IoT Events 資源。如需詳細資訊，請參閱[AWS IoT Events 終止支援](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-end-of-support.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 透過在 中執行分析對偵測器模型進行故障診斷 AWS IoT Events
<a name="iotevents-analyze-api"></a>

AWS IoT Events 可以分析偵測器模型並產生分析結果，而無需將輸入資料傳送至偵測器模型。 AWS IoT Events 會執行本節所述的一系列分析，以檢查您的偵測器模型。此進階故障診斷解決方案也會摘要診斷資訊，包括嚴重性等級和位置，讓您可以快速尋找和修正偵測器模型中的潛在問題。如需偵測器模型診斷錯誤類型和訊息的詳細資訊，請參閱 [的偵測器模型分析和診斷資訊 AWS IoT Events](analyze-diagnostic-information.md)。

您可以使用 AWS IoT Events 主控台、[API](https://docs.aws.amazon.com/iotevents/latest/apireference/)、[AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/reference/iotevents/index.html) 或 [AWS SDK](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html) 來檢視偵測器模型分析的診斷錯誤訊息。

**注意**  
您必須修正所有錯誤，才能發佈偵測器模型。
建議您在生產環境中使用偵測器模型之前，先檢閱警告並採取必要的動作。否則，偵測器模型可能無法如預期般運作。
您最多可以同時有 10 個`RUNNING`處於 狀態的分析。

若要了解如何分析偵測器模型，請參閱 [分析 AWS IoT Events （主控台） 的偵測器模型](analyze-api-console.md)或 [在 AWS IoT Events (AWS CLI) 中分析偵測器模型](analyze-api-api.md)。

**Topics**
+ [的偵測器模型分析和診斷資訊 AWS IoT Events](analyze-diagnostic-information.md)
+ [分析 AWS IoT Events （主控台） 的偵測器模型](analyze-api-console.md)
+ [在 AWS IoT Events (AWS CLI) 中分析偵測器模型](analyze-api-api.md)

# 的偵測器模型分析和診斷資訊 AWS IoT Events
<a name="analyze-diagnostic-information"></a>

偵測器模型分析會收集下列診斷資訊：
+ **層級** – 分析結果的嚴重性層級。根據嚴重性等級，分析結果分為三個一般類別：
  + **資訊** (`INFO`) – 資訊結果會告訴您偵測器模型中的重要欄位。這種類型的結果通常不需要立即採取行動。
  + **警告** (`WARNING`) – 警告結果會特別注意可能導致偵測器模型問題的欄位。建議您在生產環境中使用偵測器模型之前，先檢閱警告並採取必要的動作。否則，偵測器模型可能無法如預期般運作。
  + **錯誤** (`ERROR`) – 錯誤結果會通知您偵測器模型中發現的問題。當您嘗試發佈偵測器模型時， AWS IoT Events 會自動執行這組分析。您必須修正所有錯誤，才能發佈偵測器模型。
+ **位置** – 包含可用來尋找分析結果參考之偵測器模型中 欄位的資訊。位置通常包含狀態名稱、轉換事件名稱、事件名稱和表達式 （例如 `in state TemperatureCheck in onEnter in event Init in action setVariable`)。
+ **類型** – 分析結果的類型。分析類型分為下列類別：
  + `supported-actions` – AWS IoT Events 可以在偵測到指定的事件或轉換事件時叫用動作。您可以定義內建動作，以使用計時器或設定變數，或將資料傳送至其他 AWS 服務。您必須指定在提供服務 AWS 的 AWS 區域中使用其他 AWS 服務的動作。
  + `service-limits` – 服務配額也稱為限制，是您 AWS 帳戶的服務資源或操作數量上限或下限。除非另有說明，否則每個配額都是區域特定的。根據您的業務需求，您可以更新偵測器模型，以避免遇到限制或請求提高配額。您可以要求提高某些配額，而其他配額無法提高。如需詳細資訊，請參閱 [ 配額](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-quotas.html)。
+ **`structure`** – 偵測器模型必須具備所有必要的元件，例如狀態，並遵循 AWS IoT Events 支援的結構。偵測器模型必須至少有一個狀態和評估傳入輸入資料的條件，以偵測重大事件。偵測到事件時，偵測器模型會轉換為下一個狀態，並可以叫用 動作。這些事件稱為轉換事件。轉換事件必須指示下一個狀態才能進入。
+ **`expression-syntax`** – AWS IoT Events 在您建立和更新偵測器模型時， 提供多種指定值的方法。您可以在表達式中使用常值、運算子、函數、參考和替換範本。您可以使用表達式來指定常值，也可以在指定特定值之前 AWS IoT Events 評估表達式。您的表達式必須遵循必要的語法。如需詳細資訊，請參閱[篩選、轉換和處理事件資料的表達式](iotevents-expressions.md)。

  中的偵測器模型表達式 AWS IoT Events 可以參考特定資料或資源。
  + **`data-type`** – AWS IoT Events 支援整數、小數、字串和布林資料類型。如果 AWS IoT Events 可以在表達式評估期間自動將一種資料類型的資料轉換為另一種資料類型，則這些資料類型是相容的。
**注意**  
整數和小數是 唯一支援的相容資料類型 AWS IoT Events。
AWS IoT Events 無法評估算術表達式，因為 AWS IoT Events 無法將整數轉換為字串。
  + **`referenced-data`** – 您必須定義偵測器模型中參考的資料，才能使用資料。例如，如果您想要將資料傳送至 DynamoDB 資料表，您必須先定義參考資料表名稱的變數，才能在表達式 () 中使用變數`$variable.TableName`。
  + **`referenced-resource`** – 偵測器模型使用的資源必須可用。您必須先定義資源，才能使用它們。例如，您想要建立偵測器模型來監控溫室的溫度。您必須定義輸入 (`$input.TemperatureInput`)，將傳入的溫度資料路由到偵測器模型，才能使用 `$input.TemperatureInput.sensorData.temperature` 參考溫度。

請參閱下一節以疑難排解錯誤，並從偵測器模型的分析中尋找可能的解決方案。

## 故障診斷 中的偵測器模型錯誤 AWS IoT Events
<a name="troubleshoot-error-messages"></a>

上述錯誤類型提供偵測器模型的診斷資訊，並對應至您可能擷取的訊息。使用這些訊息和建議的解決方案來疑難排解偵測器模型的錯誤。

**Topics**
+ [`Location`](#analyze-location)
+ [`supported-actions`](#analyze-supported-actions)
+ [`service-limits`](#analyze-service-limits)
+ [`structure`](#analyze-structure)
+ [`expression-syntax`](#analyze-expression-syntax)
+ [`data-type`](#analyze-data-type)
+ [`referenced-data`](#analyze-referenced-data)
+ [`referenced-resource`](#analyze-referenced-resource)

### `Location`
<a name="analyze-location"></a>

具有 相關資訊的分析結果`Location`對應至下列錯誤訊息：
+ **訊息** – 包含有關分析結果的其他資訊。這可以是資訊、警告或錯誤訊息。

#### 解決方案
<a name="w2aac42c13c13b9b7b5b1b3b1b1"></a>

  如果您指定了 AWS IoT Events 目前不支援的動作，您可能會收到此錯誤訊息。如需支援的動作清單，請參閱 [在 中接收資料和觸發動作的支援動作 AWS IoT Events](iotevents-supported-actions.md)。

### `supported-actions`
<a name="analyze-supported-actions"></a>

具有 相關資訊的分析結果`supported‐actions`對應於下列錯誤訊息：
+ **訊息：**動作定義中存在無效的動作類型：*動作定義*。

#### 解決方案
<a name="w2aac42c13c13b9b9b5b1b3b1b1"></a>

  如果您指定了 AWS IoT Events 目前不支援的動作，您可能會收到此錯誤訊息。如需支援的動作清單，請參閱 [在 中接收資料和觸發動作的支援動作 AWS IoT Events](iotevents-supported-actions.md)。
+ **訊息：** DetectorModel 定義具有 *aws-service*動作，但 *region-name* 不支援*aws-service*此服務。

#### 解決方案
<a name="w2aac42c13c13b9b9b5b3b3b1b1"></a>

  如果您指定的動作受到支援 AWS IoT Events，但目前區域中無法使用該動作，則可能會收到此錯誤訊息。當您嘗試將資料傳送至 區域中無法使用 AWS 的服務時，可能會發生這種情況。您還必須為 AWS IoT Events 和 AWS 您正在使用的服務選擇相同的區域。

### `service-limits`
<a name="analyze-service-limits"></a>

具有 相關資訊的分析結果`service‐limits`對應於下列錯誤訊息：
+ **訊息：**承載中允許的內容表達式超過 state-name 中 *event-name* 中的 *content-expression-size* 位元組限制。 **

#### 解決方案
<a name="w2aac42c13c13b9c11b5b1b3b1b1"></a>

  如果動作承載的內容表達式大於 1024 個位元組，您可能會收到此錯誤訊息。承載的內容表達式大小最多可達 1024 個位元組。
+ **訊息：**偵測器模型定義中允許的狀態數量超過*states-per-detector-model*。

#### 解決方案
<a name="w2aac42c13c13b9c11b5b3b3b1b1"></a>

  如果您的偵測器模型有超過 20 個狀態，您可能會收到此錯誤訊息。偵測器模型最多可有 20 個狀態。
+ **訊息：**計時器*計時器名稱*的持續時間應至少為*minimum-timer-duration*秒長。

#### 解決方案
<a name="w2aac42c13c13b9c11b5b5b3b1b1"></a>

  如果您的計時器持續時間少於 60 秒，您可能會收到此錯誤訊息。我們建議計時器的持續時間介於 60 到 31622400 秒之間。如果您指定計時器持續時間的表達式，持續時間表達式的評估結果會四捨五入至最接近的整數。
+ **訊息：**每個事件允許的動作數量超過偵測器模型定義中*actions-per-event*限制

#### 解決方案
<a name="w2aac42c13c13b9c11b5b7b3b1b1"></a>

  如果事件有 10 個以上的動作，您可能會收到此錯誤訊息。對於偵測器模型中的每個事件，您最多可以有 10 個動作。
+ **訊息：**每個狀態允許的轉換事件數超過偵測器模型定義中每個*transition-events-per-state*state 限制。

#### 解決方案
<a name="w2aac42c13c13b9c11b5b9b3b1b1"></a>

  如果狀態有 20 個以上的轉換事件，您可能會收到此錯誤訊息。偵測器模型中的每個狀態最多可以有 20 個轉換事件。
+ **訊息：**每個狀態允許的事件數量超過偵測器模型定義中*events-per-state*數量

#### 解決方案
<a name="w2aac42c13c13b9c11b5c11b3b1b1"></a>

  如果狀態有 20 個以上的事件，您可能會收到此錯誤訊息。偵測器模型中每個狀態最多可以有 20 個事件。
+ **訊息：**可與單一輸入相關聯的偵測器模型數量上限可能已達到限制。輸入 *input-name* 用於 *detector-models-per-input* 偵測器模型路由。

#### 解決方案
<a name="w2aac42c13c13b9c11b5c13b3b1b1"></a>

  如果您嘗試將輸入路由到超過 10 個偵測器模型，您可能會收到此警告訊息。您最多可以有 10 個與單一偵測器模型相關聯的不同偵測器模型。

### `structure`
<a name="analyze-structure"></a>

具有 相關資訊的分析結果`structure`對應於下列錯誤訊息：
+ **訊息：**動作只能定義一種類型，但找到具有*number-of-types*的動作。請分割為個別動作。

#### 解決方案
<a name="w2aac42c13c13b9c13b5b1b3b1b1"></a>

  如果您使用 API 操作來建立或更新偵測器模型，在單一欄位中指定兩個或多個動作，則可能會收到此錯誤訊息。您可以定義`Action`物件陣列。請務必將每個動作定義為單獨的物件。
+ **訊息：**TransitionEvent *transition-event-name* 會轉換為不存在的狀態*名稱*。

#### 解決方案
<a name="w2aac42c13c13b9c13b5b3b3b1b1"></a>

  如果 AWS IoT Events 找不到轉換事件參考的下一個狀態，您可能會收到此錯誤訊息。請確定已定義下一個狀態，且您已輸入正確的狀態名稱。
+ **訊息：** DetectorModelDefinition 具有共用狀態名稱：找到*狀態名稱*，重複*number-of-states*。

#### 解決方案
<a name="w2aac42c13c13b9c13b5b5b3b1b1"></a>

  如果您針對一個或多個狀態使用相同的名稱，您可能會收到此錯誤訊息。請務必為偵測器模型中的每個狀態提供唯一的名稱。狀態名稱必須有 1-128 個字元。有效字元：a-z、A-Z、0-9、\$1 （底線） 和 - （連字號）。
+ **訊息：**定義的 initialStateName *initial-state-name* 未對應至定義的狀態。

#### 解決方案
<a name="w2aac42c13c13b9c13b5b7b3b1b1"></a>

  如果初始狀態名稱不正確，您可能會收到此錯誤訊息。偵測器模型會保持初始 （啟動） 狀態，直到輸入到達為止。輸入到達後，偵測器模型會立即轉換為下一個狀態。請確定初始狀態名稱是已定義狀態的名稱，而且您輸入正確的名稱。
+ **訊息：**偵測器模型定義必須在條件中使用至少一個輸入。

#### 解決方案
<a name="w2aac42c13c13b9c13b5b9b3b1b1"></a>

  如果您未在條件中指定輸入，則可能會收到此錯誤。您必須在至少一個條件中使用至少一個輸入。否則， AWS IoT Events 不會評估傳入的資料。
+ **訊息：**在 SetTimer 中只能設定秒數和 durationExpression 的其中之一。

#### 解決方案
<a name="w2aac42c13c13b9c13b5c11b3b1b1"></a>

  如果您同時使用 `seconds`和 `durationExpression`做為計時器，您可能會收到此錯誤訊息。請確定您使用 `seconds`或 `durationExpression`做為 的參數`SetTimerAction`。如需詳細資訊，請參閱 *AWS IoT Events API 參考*中的 [SetTimerAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_SetTimerAction.html)。
+  **訊息：**無法連線偵測器模型中的動作。檢查啟動動作的條件。

#### 解決方案
<a name="w2aac42c13c13b9c13b5c15b3b1b1"></a>

  如果偵測器模型中的動作無法連線，事件的條件會評估為 false。檢查包含 動作的事件條件，以確保其評估為 true。當事件的條件評估為 true 時，動作應該可以連線。
+ **訊息：**正在讀取輸入屬性，但這可能是計時器過期所造成。

#### 解決方案
<a name="w2aac42c13c13b9c13b5c17b3b1b1"></a>

  發生下列任一情況時，可以讀取輸入屬性的值：
  + 已收到新的輸入值。
  + 當偵測器中的計時器過期時。

  

  若要確保只有在收到輸入的新值時才會評估輸入屬性，請在您的 條件中包含對 `triggerType(“Message”)`函數的呼叫，如下所示：

  在偵測器模型中評估的原始條件：

  ```
  if ($input.HeartBeat.status == “OFFLINE”)
  ```

  會變成類似以下內容：

  ```
  if ( triggerType("MESSAGE") &&  $input.HeartBeat.status == “OFFLINE”)
  ```

  其中對`triggerType(“Message”)`函數的呼叫會在條件中提供的初始輸入之前出現。透過使用此技術，`triggerType("Message")`函數將評估為 true，並滿足接收新輸入值的條件。如需`triggerType`函數使用方式的詳細資訊，請在 *AWS IoT Events 開發人員指南*的[表達式](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-expressions.html)區段`triggerType`中搜尋 
+ **訊息：**無法連線偵測器模型中的狀態。檢查會導致轉換至所需狀態的條件。

#### 解決方案
<a name="w2aac42c13c13b9c13b5c19b3b1b1"></a>

  如果偵測器模型中的狀態無法連線，則會導致傳入轉換至該狀態的條件會評估為 false。檢查偵測器模型中傳入轉換到該無法連線狀態的條件是否評估為 true，以便達到所需的狀態。
+ **訊息：**過期計時器可能會導致未預期的訊息數量傳送。

#### 解決方案
<a name="w2aac42c13c13b9c13b5c21b3b1b1"></a>

  若要防止偵測器模型因計時器過期而進入無限訊息傳送量的無限狀態，請考慮在偵測器模型的條件下使用對`triggerType("Message")`函數的呼叫，如下所示：

  在偵測器模型中評估的原始條件：

  ```
  if (timeout("awake"))
  ```

  會轉換為如下所示的條件：

  ```
   if (triggerType("MESSAGE") && timeout("awake")) 
  ```

  其中對`triggerType(“Message”)`函數的呼叫會在條件中提供的初始輸入之前出現。

  此變更可防止在偵測器中啟動計時器動作，防止無限循環的訊息傳送。如需如何在偵測器中使用計時器動作的詳細資訊，請參閱《 *AWS IoT Events 開發人員指南*》中的[使用內建動作](https://docs.aws.amazon.com/iotevents/latest/developerguide/built-in-actions.html)頁面

### `expression-syntax`
<a name="analyze-expression-syntax"></a>

具有 相關資訊的分析結果`expression‐syntax`對應於下列錯誤訊息：
+ **訊息：**您的承載表達式 \$1*expression*\$1 無效。定義的承載類型為 JSON，因此您必須指定 AWS IoT Events 評估為字串的表達式。

#### 解決方案
<a name="w2aac42c13c13b9c15b5b1b3b1b1"></a>

  如果指定的承載類型是 JSON，則 AWS IoT Events 首先檢查服務是否可以將您的表達式評估為字串。評估的結果不能是布林值或數字。如果驗證不成功，您可能會收到此錯誤。
+ **訊息：** `SetVariableAction.value` 必須是表達式。無法剖析值 '*variable-value*'

#### 解決方案
<a name="w2aac42c13c13b9c15b5b3b3b1b1"></a>

  您可以使用 `SetVariableAction`來定義具有 `name`和 的變數`value`。`value` 可以是字串、數字或布林值。您也可以指定 的表達式`value`。如需詳細資訊，請參閱 *AWS IoT Events API 參考*中的 [SetVariableAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_SetVariableAction.html)。
+ **訊息：**我們無法剖析 DynamoDB 動作的屬性表達式 (*attribute-name*)。使用正確的語法輸入表達式。

#### 解決方案
<a name="w2aac42c13c13b9c15b5b5b3b1b1"></a>

  您必須對 `DynamoDBAction`. 替代範本中的所有參數使用表達式。如需詳細資訊，請參閱 *AWS IoT Events API 參考*中的 [DynamoDBAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_DynamoDBAction.html)。
+ **訊息：**我們無法剖析 DynamoDBv2 動作的 tableName 表達式。使用正確的語法輸入表達式。

#### 解決方案
<a name="w2aac42c13c13b9c15b5b7b3b1b1"></a>

   `tableName`中的 `DynamoDBv2Action` 必須是字串。您必須使用 的表達式`tableName`。表達式接受文字、運算子、函數、參考和替代範本。如需詳細資訊，請參閱 *AWS IoT Events API 參考*中的 [DynamoDBv2Action](https://docs.aws.amazon.com/iotevents/latest/apireference/API_DynamoDBv2Action.html)。
+ **訊息：**我們無法將您的表達式評估為有效的 JSON。DynamoDBv2 動作僅支援 JSON 承載類型。

#### 解決方案
<a name="w2aac42c13c13b9c15b5b9b3b1b1"></a>

   的承載類型`DynamoDBv2`必須是 JSON。請確定 AWS IoT Events 可以將承載的內容表達式評估為有效的 JSON。如需詳細資訊，請參閱 *AWS IoT Events API 參考*中的 [DynamoDBv2Action](https://docs.aws.amazon.com/iotevents/latest/apireference/API_DynamoDBv2Action.html)。
+ **訊息：**我們無法剖析 *action-type* 承載的內容表達式。使用正確的語法輸入內容表達式。

#### 解決方案
<a name="w2aac42c13c13b9c15b5c11b3b1b1"></a>

  內容表達式可以包含字串 ('*string*')、變數 (\$1variable.*variable-name*)、輸入值 (\$1input.*input-name*.*path-to-datum*)、字串串連，以及包含 的字串`${}`。
+ **訊息：**自訂承載必須是非空白的。

#### 解決方案
<a name="w2aac42c13c13b9c15b5c13b3b1b1"></a>

  如果您為動作選擇**自訂承載**，但未在 AWS IoT Events 主控台中輸入內容表達式，則可能會收到此錯誤訊息。如果您選擇**自訂承載**，則必須在**自訂承載**下輸入內容表達式。如需詳細資訊，請參閱 *AWS IoT Events API 參考*中的[承載](https://docs.aws.amazon.com/iotevents/latest/apireference/API_Payload.html)。
+ **訊息：**無法剖析計時器 '*timer**-name' 的持續時間表達式 'duration-expression*'。

#### 解決方案
<a name="w2aac42c13c13b9c15b5c15b3b1b1"></a>

  計時器持續時間表達式的評估結果必須是介於 60–31622400 之間的值。持續時間的評估結果會四捨五入到最接近的整數。
+ **訊息：**無法剖析 *action-name* 的表達式 '*expression*'

#### 解決方案
<a name="w2aac42c13c13b9c15b5c17b3b1b1"></a>

  如果指定動作的表達式語法不正確，您可能會收到此訊息。請務必使用正確的語法輸入表達式。如需詳細資訊，請參閱[在 中篩選裝置資料和定義動作的語法 AWS IoT Events](iotevents-expressions.md#expression-syntax)。
+ **訊息：**`IotSitewiseAction`無法剖析 的 *fieldName*。您必須在表達式中使用正確的語法。

#### 解決方案
<a name="w2aac42c13c13b9c15b5c19b3b1b1"></a>

  如果 AWS IoT Events 無法剖析 的 *fieldName*，您可能會收到此錯誤`IotSitewiseAction`。請確定 *fieldName* 使用 AWS IoT Events 可以剖析的表達式。如需詳細資訊，請參閱 *AWS IoT Events API 參考*中的 [IotSiteWiseAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_IotSiteWiseAction.html)。

### `data-type`
<a name="analyze-data-type"></a>

具有 相關資訊的分析結果`data‐type`對應至下列錯誤訊息：
+ **訊息：**計時器*計時器名稱*的持續時間表達式 *duration-expression* 無效，必須傳回數字。

#### 解決方案
<a name="w2aac42c13c13b9c17b5b1b3b1b1"></a>

  如果 AWS IoT Events 無法將計時器的持續時間表達式評估為數字，您可能會收到此錯誤訊息。請確定您的 `durationExpression` 可以轉換為數字。不支援其他資料類型，例如布林值。
+ **訊息：**運算式 *condition-expression* 不是有效的條件運算式。

#### 解決方案
<a name="w2aac42c13c13b9c17b5b3b3b1b1"></a>

  如果 AWS IoT Events 無法將 評估`condition-expression`為布林值，您可能會收到此錯誤訊息。布林值必須為 `TRUE`或 `FALSE`。請確定您的條件表達式可以轉換為布林值。如果結果不是布林值，則相當於 `FALSE`，而且 不會叫用動作或轉換為事件中`nextState`指定的 。
+ **訊息：**在下列表達式中找到不相容的資料類型 【*inferred-types*】 以供*參考*： *expression*

#### 解決方案
<a name="w2aac42c13c13b9c17b5b5b3b1b1"></a>

  **解決方案**：偵測器模型中相同輸入屬性或變數的所有表達式都必須參考相同的資料類型。

  使用下列資訊來解決問題：<a name="expression-reference-type-compatibility"></a>
  + 當您使用參考做為具有一或多個運算子的運算元時，請確定您參考的所有資料類型都相容。

    例如，在以下表達式中，整數`2`是 `==`和 `&&`運算子的運算元。為了確保運算元相容，`$variable.testVariable + 1`且`$variable.testVariable`必須參考整數或小數。

    此外，整數`1`是`+`運算子的運算元。因此， `$variable.testVariable` 必須參考整數或小數。

    ```
    ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
    ```
  + 當您使用參考做為傳遞給函數的引數時，請確定該函數支援您參考的資料類型。

    例如，下列`timeout("time-name")`函數需要具有雙引號的字串做為引數。如果您使用*計時器名稱*值的參考，則必須參考具有雙引號的字串。

    ```
    timeout("timer-name")
    ```
**注意**  
對於 `convert(type, expression)`函數，如果您使用*類型*值的參考，則參考的評估結果必須是 `String`、 `Decimal`或 `Boolean`。

  如需詳細資訊，請參閱[AWS IoT Events 運算式中輸入和變數的參考](iotevents-expressions.md#expression-reference)。
+ **訊息：**搭配*參考*使用的不相容資料類型 【*inferred-types*】。這可能會導致執行時間錯誤。

#### 解決方案
<a name="w2aac42c13c13b9c17b5b7b3b1b1"></a>

  如果相同輸入屬性或變數的兩個表達式參考兩種資料類型，您可能會收到此警告訊息。請確定相同輸入屬性或變數的表達式參考偵測器模型中的相同資料類型。
+ **訊息：**您為運算子 【*運算子*】 輸入的資料類型 【*推論類型*】 與下列表達式不相容：'*expression*'

#### 解決方案
<a name="w2aac42c13c13b9c17b5b9b3b1b1"></a>

  如果您的表達式結合與指定運算子不相容的資料類型，您可能會收到此錯誤訊息。例如，在以下表達式中，運算子與整數、十進位和字串資料類型`+`相容，但不與布林資料類型的運算元相容。

  ```
  true + false
  ```

  您必須確定搭配 運算子使用的資料類型相容。
+ **訊息：**針對*輸入屬性*找到的資料類型 【*推論類型*】 不相容，可能導致執行時間錯誤。

#### 解決方案
<a name="w2aac42c13c13b9c17b5c11b3b1b1"></a>

  如果相同輸入屬性的兩個表達式參考 狀態`OnEnterLifecycle`的 或 狀態`OnExitLifecycle`的 `OnInputLifecycle`和 的兩種資料類型，您可能會收到此錯誤訊息。確定您在 `OnEnterLifecycle`（或 `OnInputLifecycle`和 `OnExitLifecycle`) 中的表達式參考偵測器模型每個狀態的相同資料類型。
+ **訊息：**承載表達式 【*運算式*】 無效。指定將在執行時間評估為字串的表達式，因為承載類型是 JSON 格式。

#### 解決方案
<a name="w2aac42c13c13b9c17b5c13b3b1b1"></a>

  如果您指定的承載類型為 JSON，但 AWS IoT Events 無法將其表達式評估為字串，則可能會收到此錯誤。確定評估的結果是字串，而不是布林值或數字。
+ **訊息：**您的插入表達式 \$1*interpolated-expression*\$1 必須在執行時間評估為整數或布林值。否則，您的承載表達式 \$1*payload-expression*\$1 在執行時間將無法剖析為有效的 JSON。

#### 解決方案
<a name="w2aac42c13c13b9c17b5c15b3b1b1"></a>

  如果 AWS IoT Events 無法將插入表達式評估為整數或布林值，您可能會收到此錯誤訊息。請確定您的插補表達式可以轉換為整數或布林值，因為不支援其他資料類型，例如 tring。
+ **訊息：**`IotSitewiseAction`欄位表達式中的*表達式*類型定義為類型*定義的類型*，並推斷為類型*推斷類型*。定義的類型和推斷的類型必須相同。

#### 解決方案
<a name="w2aac42c13c13b9c17b5c17b3b1b1"></a>

  如果您在 `propertyValue` 中的表達式`IotSitewiseAction`具有與推斷的資料類型不同的定義，您可能會收到此錯誤訊息 AWS IoT Events。請務必針對偵測器模型中此表達式的所有執行個體使用相同的資料類型。
+ **訊息：**用於`setTimer`動作的資料類型 【*inferred-types*】 不會`Integer`針對下列表達式評估為 ： **

#### 解決方案
<a name="w2aac42c13c13b9c17b5c19b3b1b1"></a>

  如果持續時間表達式的推斷資料類型不是整數或小數，您可能會收到此錯誤訊息。請確定您的 `durationExpression` 可以轉換為數字。不支援其他資料類型，例如布林值和字串。
+ **訊息：**與比較運算子 【*運算子*】 運算元搭配使用的資料類型 【*推論類型*】 在下列表達式中不相容： **

#### 解決方案
<a name="w2aac42c13c13b9c17b5c21b3b1b1"></a>

  偵測器模型的條件式表達式 (*運算式*) 中*運算子*運算元的推斷資料類型不相符。運算元必須與偵測器模型所有其他部分中的相符資料類型搭配使用。

**提示**  
您可以使用 `convert` 來變更偵測器模型中表達式的資料類型。如需詳細資訊，請參閱[要在 AWS IoT Events 表達式中使用的函數](iotevents-expressions.md#expression-function)。

### `referenced-data`
<a name="analyze-referenced-data"></a>

具有 相關資訊的分析結果`referenced‐data`對應於下列錯誤訊息：
+ **訊息：**偵測到中斷的計時器：計時器*計時器名稱*用於表達式，但從未設定。

#### 解決方案
<a name="w2aac42c13c13b9c19b5b1b3b1b1"></a>

  如果您使用未設定的計時器，可能會收到此錯誤訊息。在表達式中使用計時器之前，您必須先設定計時器。此外，請確定您輸入正確的計時器名稱。
+ **訊息：**偵測到損壞的變數：變數*變數名稱*用於表達式，但從未設定。

#### 解決方案
<a name="w2aac42c13c13b9c19b5b3b3b1b1"></a>

  如果您使用未設定的變數，可能會收到此錯誤訊息。您必須先設定變數，才能在表達式中使用它。此外，請確定您輸入正確的變數名稱。
+ **訊息：**偵測到損壞的變數：變數會先用於表達式，然後再設定為值。

#### 解決方案
<a name="w2aac42c13c13b9c19b5b5b3b1b1"></a>

  每個變數都必須指派給一個值，才能在表達式中進行評估。在每次使用之前設定變數的值，以便擷取其值。此外，請確定您輸入正確的變數名稱。

### `referenced-resource`
<a name="analyze-referenced-resource"></a>

具有 相關資訊的分析結果`referenced‐resource`對應至下列錯誤訊息：
+ **訊息：**偵測器模型定義包含參考不存在的輸入。

#### 解決方案
<a name="w2aac42c13c13b9c21b5b1b3b1b1"></a>

  如果您使用表達式來參考不存在的輸入，您可能會收到此錯誤訊息。請確定您的表達式參考現有的輸入，並輸入正確的輸入名稱。如果您沒有輸入，請先建立一個輸入。
+ **訊息：**偵測器模型定義包含無效的 InputName： *input-name*

#### 解決方案
<a name="w2aac42c13c13b9c21b5b3b3b1b1"></a>

  如果您的偵測器模型包含無效的輸入名稱，您可能會收到此錯誤訊息。請確定您輸入正確的輸入名稱。輸入名稱必須有 1-128 個字元。有效字元：a-z、A-Z、0-9、\$1 （底線） 和 - （連字號）。

# 分析 AWS IoT Events （主控台） 的偵測器模型
<a name="analyze-api-console"></a>

AWS IoT Events 可讓您透過偵測事件並使用 AWS IoT Events API 觸發動作，來監控 IoT 資料並對其做出反應。下列步驟使用 AWS IoT Events 主控台來分析偵測器模型。

**注意**  
 AWS IoT Events 開始分析偵測器模型後，您有最多 24 小時的時間擷取分析結果。

偵測器模型分析可協助您最佳化模型、識別潛在問題，並確保它們如預期般運作。例如，在風力槍上，偵測器模型分析可能會顯示模型是否根據異常震動模式正確識別潛在的齒輪故障。或者，如果模型在風速超過安全操作閾值時準確觸發維護警示。透過根據分析精簡模型，您可以改善預測性維護、減少停機時間，並提高整體能源生產效率。

**分析偵測器模型**

1. 登入 [AWS IoT Events 主控台](https://console.aws.amazon.com/iotevents/)。

1. 在導覽窗格中，選擇**偵測器模型**。

1. 在**偵測器模型**下，選擇目標偵測器模型。

1. 在偵測器模型頁面上，選擇**編輯**。

1. 在右上角，選擇**執行分析**。  
![\[如何在主控台中分析偵測器模型的 AWS IoT Events 螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/iotevents/latest/developerguide/images/analyzeAPI1.png)

   以下是 AWS IoT Events 主控台中的範例分析結果。  
![\[如何在主控台中分析偵測器模型的 AWS IoT Events 螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/iotevents/latest/developerguide/images/analyzeAPI2.png)

# 在 AWS IoT Events (AWS CLI) 中分析偵測器模型
<a name="analyze-api-api"></a>

以程式設計方式分析您的 AWS IoT Events 偵測器模型，可提供有關其結構、行為和效能的寶貴洞見。此 API 型方法允許自動化分析、與現有工作流程整合，以及跨多個偵測器模型執行大量操作的能力。透過利用 [StartDetectorModelAnalysis](https://docs.aws.amazon.com/iotevents/latest/apireference/API_StartDetectorModelAnalysis.html) API，您可以啟動模型的深入檢查、協助您識別潛在問題、最佳化邏輯流程，並確保您的 IoT 事件處理符合您的業務需求。

下列步驟使用 AWS CLI 來分析偵測器模型。

**使用 分析偵測器模型 AWS CLI**

1. 執行下列命令以開始分析。

   ```
   aws iotevents start-detector-model-analysis --cli-input-json file://file-name.json
   ```
**注意**  
將 *file-name* 取代為包含偵測器模型定義的檔案名稱。  
**Example 偵測器模型定義**  

   ```
   {
       "detectorModelDefinition": {
           "states": [
               {
                   "stateName": "TemperatureCheck",
                   "onInput": {
                       "events": [
                           {
                               "eventName": "Temperature Received",
                               "condition": "isNull($input.TemperatureInput.sensorData.temperature)==false",
                               "actions": [
                                   {
                                       "iotTopicPublish": {
                                           "mqttTopic": "IoTEvents/Output"
                                       }
                                   }
                               ]
                           }
                       ],
                       "transitionEvents": []
                   },
                   "onEnter": {
                       "events": [
                           {
                               "eventName": "Init",
                               "condition": "true",
                               "actions": [
                                   {
                                       "setVariable": {
                                           "variableName": "temperatureChecked",
                                           "value": "0"
                                       }
                                   }
                               ]
                           }
                       ]
                   },
                   "onExit": {
                       "events": []
                   }
               }
           ],
           "initialStateName": "TemperatureCheck"
       }
   }
   ```

   如果您使用 AWS CLI 來分析現有的偵測器模型，請選擇下列其中一項來擷取偵測器模型定義：
   + 如果您想要使用 AWS IoT Events 主控台，請執行下列動作：

     1. 在導覽窗格中，選擇**偵測器模型**。

     1. 在**偵測器模型**下，選擇目標偵測器模型。

     1. 從**動作**中選擇**匯出偵測器模型**，以下載偵測器模型。偵測器模型會儲存在 JSON 中。

     1. 開啟偵測器模型 JSON 檔案。

     1. 您只需要 `detectorModelDefinition` 物件。移除下列項目：
        + 頁面頂端的第一個大括號 (`{`)
        + 該`detectorModel`行
        + `detectorModelConfiguration` 物件
        + 頁面底部的最後一個大括號 (`}`)

     1. 儲存檔案。
   + 如果您想要使用 AWS CLI，請執行下列動作：

     1. 在終端機執行下列命令。

        ```
        aws iotevents describe-detector-model --detector-model-name detector-model-name
        ```

     1. 將 *detector-model-name* 取代為偵測器模型的名稱。

     1. 將`detectorModelDefinition`物件複製到文字編輯器。

     1. 在 之外新增大括號 (`{}`)`detectorModelDefinition`。

     1. 在 JSON 中儲存檔案。  
**Example 回應範例**  

   ```
   {
       "analysisId": "c1133390-14e3-4204-9a66-31efd92a4fed"
   }
   ```

1. 從輸出複製分析 ID。

1. 執行下列命令來擷取分析的狀態。

   ```
   aws iotevents describe-detector-model-analysis --analysis-id "analysis-id"
   ```
**注意**  
將 *analysis-id* 取代為您複製的分析 ID。  
**Example 回應範例**  

   ```
   {
       "status": "COMPLETE"
   }
   ```

   狀態可以是下列其中一個值：
   + `RUNNING` – AWS IoT Events 正在分析偵測器模型。此程序最多可能需要一分鐘才能完成。
   + `COMPLETE` – AWS IoT Events 已完成分析偵測器模型。
   + `FAILED` – AWS IoT Events 無法分析偵測器模型。請稍後再試。

1. 執行下列命令來擷取偵測器模型的一或多個分析結果。
**注意**  
將 *analysis-id* 取代為您複製的分析 ID。

   ```
   aws iotevents get-detector-model-analysis-results --analysis-id "analysis-id"
   ```  
**Example 回應範例**  

   ```
   {
       "analysisResults": [
           {
               "type": "data-type",
               "level": "INFO",
               "message": "Inferred data types [Integer] for $variable.temperatureChecked",
               "locations": []
           },
           {
               "type": "referenced-resource",
               "level": "ERROR",
               "message": "Detector Model Definition contains reference to Input 'TemperatureInput' that does not exist.",
               "locations": [
                   {
                       "path": "states[0].onInput.events[0]"
                   }
               ]
           }
       ]
   }
   ```

**注意**  
 AWS IoT Events 開始分析偵測器模型後，您有最多 24 小時的時間擷取分析結果。