

支援終止通知：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-error-messages"></a>

請參閱下一節，針對錯誤進行故障診斷，並尋找解決 問題的可能解決方案 AWS IoT Events。

**Topics**
+ [偵測器模型建立錯誤](#create-detector-model)
+ [來自已刪除偵測器模型的更新](#update-detector-model)
+ [動作觸發失敗 （符合條件時）](#no-action)
+ [動作觸發失敗 （達到閾值時）](#trigger-action)
+ [狀態用量不正確](#wrong-state)
+ [連線訊息](#connection-aborted-error)
+ [InvalidRequestException 訊息](#invalid-request)
+ [Amazon CloudWatch Logs `action.setTimer`錯誤](#cw-logs-timer)
+ [Amazon CloudWatch 承載錯誤](#cw-logs-payload)
+ [不相容的資料類型](#troubleshoot-expressions-incompatible-data-types)
+ [無法傳送訊息至 AWS IoT Events](#failed-to-send-to-iot-events)

## 偵測器模型建立錯誤
<a name="create-detector-model"></a>

當我嘗試建立偵測器模型時出現錯誤。

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

 建立偵測器模型時，您必須考慮下列限制。
+ 每個`action`欄位只允許一個動作。
+ `condition` 是 的必要項目`transitionEvents`。`OnEnter`、 `OnInput`和 `OnExit`事件是選用的。
+ 如果 `condition` 欄位為空，則條件表達式的評估結果等同於 `true`。
+ 條件表達式的評估結果應為布林值。如果結果不是布林值，則等於 `false` 且 不會觸發 `actions`或 轉換為事件中`nextState`指定的 。

如需詳細資訊，請參閱[AWS IoT Events 偵測器模型限制](iotevents-restrictions-detector-model.md)。

## 來自已刪除偵測器模型的更新
<a name="update-detector-model"></a>

我幾分鐘前更新或刪除了偵測器模型，但我仍透過 MQTT 訊息或 SNS 提醒從舊偵測器模型取得狀態更新。

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

如果您更新、刪除或重新建立偵測器模型 （請參閱 [UpdateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_UpdateDetectorModel.html))，則會在刪除所有偵測器執行個體並使用新模型之前發生延遲。在此期間，舊版偵測器模型的執行個體可能會繼續處理輸入。您可能會繼續收到先前偵測器模型定義的提醒。請等待至少 7 分鐘，再重新檢查更新或報告錯誤。

## 動作觸發失敗 （符合條件時）
<a name="no-action"></a>

當條件滿足時，偵測器無法觸發動作或轉換為新狀態。

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

確認偵測器條件式表達式的評估結果是布林值。如果結果不是布林值，則相當於 `false`，而且 不會觸發 `action`或 轉換為事件中`nextState`指定的 。如需詳細資訊，請參閱[條件式表達式語法](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-conditional-expressions.html)。

## 動作觸發失敗 （達到閾值時）
<a name="trigger-action"></a>

當條件式表達式中的變數達到指定的值時，偵測器不會觸發動作或事件轉換。

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

如果您`setVariable`更新 `onInput`、 `onEnter`或 `onExit`，則在目前處理週期`condition`期間評估任何 時，不會使用新的值。而是使用原始值，直到目前的週期完成為止。您可以在偵測器模型定義中設定 `evaluationMethod` 參數，以變更此行為。當 `evaluationMethod` 設定為 時`SERIAL`，變數會更新，並依事件定義的順序評估事件條件。當 `evaluationMethod` 設為 `BATCH`（預設值） 時，只有在評估所有事件條件後，才會更新變數並執行事件。

## 狀態用量不正確
<a name="wrong-state"></a>

當我嘗試使用 傳送訊息至輸入時，偵測器會進入錯誤狀態`BatchPutMessage`。

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

 如果您使用 [BatchPutMessage](https://docs.aws.amazon.com/iotevents/latest/apireference/API_iotevents-data_BatchPutMessage.html) 將多則訊息傳送至輸入，無法保證訊息或輸入的處理順序。若要保證訂購，請一次傳送訊息一個，每次等待 `BatchPutMessage` 確認成功。

## 連線訊息
<a name="connection-aborted-error"></a>

當我嘗試呼叫或叫用 API 時收到`('Connection aborted.', error(54, 'Connection reset by peer'))`錯誤。

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

確認 OpenSSL 使用 TLS 1.1 或更新版本來建立連線。這應該是大多數 Linux 發行版本或 Windows 第 7 版及更新版本下的預設值。macOS 使用者可能需要升級 OpenSSL。

## InvalidRequestException 訊息
<a name="invalid-request"></a>

當我嘗試呼叫 `CreateDetectorModel`和 `UpdateDetectorModel` APIs時，會收到 InvalidRequestException。

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

檢查下列項目以協助解決問題。如需詳細資訊，請參閱 [CreateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateDetectorModel.html) 和 [UpdateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_UpdateDetectorModel.html)。
+ 請確定您不同時使用 `seconds`和 `durationExpression`做為 的參數`SetTimerAction`。
+ 請確定 的字串表達`durationExpression`式有效。字串表達式可以包含數字、變數 (`$variable.<variable-name>`) 或輸入值 (`$input.<input-name>.<path-to-datum>`)。

## Amazon CloudWatch Logs `action.setTimer`錯誤
<a name="cw-logs-timer"></a>

您可以設定 Amazon CloudWatch Logs 來監控 AWS IoT Events 偵測器模型執行個體。以下是當您使用 時 AWS IoT Events， 產生的常見錯誤`action.setTimer`。
+ **錯誤：**您的名為 的計時器持續時間表達式`{{<timer-name>}}`無法評估為數字。

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

   請確定您的 字串表達式`durationExpression`可以轉換為數字。不允許其他資料類型，例如布林值。
+ **錯誤：**名為 的計時器的持續時間表達式評估結果`{{<timer-name>}}`大於 31622440。為了確保準確性，請確定您的持續時間表達式參考介於 60‐31622400 之間的值。

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

   請確定計時器的持續時間小於或等於 31622400 秒。持續時間的評估結果會四捨五入到最接近的整數。
+ **錯誤：**名為 之計時器的持續時間表達式評估結果`{{<timer-name>}}`小於 60。為了確保準確性，請確定您的持續時間表達式參考介於 60‐31622400 之間的值。

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

   請確定計時器的持續時間大於或等於 60 秒。持續時間的評估結果會四捨五入到最接近的整數。
+ **錯誤：**`{{<timer-name>}}`無法評估名為 之計時器的持續時間表達式。檢查資料的變數名稱、輸入名稱和路徑，以確保您參考現有的變數和輸入。

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

   請確定您的字串表達式參考現有的變數和輸入。字串表達式可以包含數字、變數 (`$variable.{{variable-name}}`) 和輸入值 (`$input.{{input-name}}.{{path-to-datum}}`)。
+ **錯誤：**無法設定名為 的計時器`<timer-name>`。請檢查您的持續時間表達式，然後再試一次。

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

   請參閱 [SetTimerAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_SetTimerAction.html) 動作以確保您指定了正確的參數，然後再次設定計時器。

如需詳細資訊，請參閱[在開發 AWS IoT Events 偵測器模型時啟用 Amazon CloudWatch 記錄](https://docs.aws.amazon.com/iotevents/latest/developerguide/best-practices.html#best-practices-cw-logs)。

## Amazon CloudWatch 承載錯誤
<a name="cw-logs-payload"></a>

您可以設定 Amazon CloudWatch Logs 來監控 AWS IoT Events 偵測器模型執行個體。以下是當您設定動作承載時 AWS IoT Events， 產生的常見錯誤和警告。
+ **錯誤：**我們無法評估動作的表達式。確定資料的變數名稱、輸入名稱和路徑參考現有的變數和輸入值。此外，請確認承載的大小小於 1 KB，即承載允許的大小上限。

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

   請確定您輸入正確的變數名稱、輸入名稱和資料路徑。如果動作承載大於 1 KB，您也可能收到此錯誤訊息。
+ **錯誤：**我們無法剖析 承載的內容表達式`{{<action-type>}}`。使用正確的語法輸入內容表達式。

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

   內容表達式可以包含字串 (`'{{string}}'`)、變數 (`$variable.{{variable-name}}`)、輸入值 (`$input.{{input-name}}.{{path-to-datum}}`)、字串串連，以及包含 的字串`${}`。
+ **錯誤：**您的承載表達式 {{{expression}}} 無效。定義的承載類型為 JSON，因此您必須指定 AWS IoT Events 評估為字串的表達式。

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

   如果指定的承載類型是 JSON，則 AWS IoT Events 首先檢查服務是否可以評估字串的表達式。評估的結果不能是布林值或數字。如果驗證失敗，您可能會收到此錯誤。
+ **警告：**動作已執行，但我們無法將動作承載的內容表達式評估為有效的 JSON。定義的承載類型為 JSON。

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

   如果您將承載類型定義為 ，請確定 AWS IoT Events 可以將動作承載的內容表達式評估為有效的 JSON`JSON`。即使 AWS IoT Events 無法將內容表達式評估為有效的 JSON， 仍會 AWS IoT Events 執行動作。

如需詳細資訊，請參閱[在開發 AWS IoT Events 偵測器模型時啟用 Amazon CloudWatch 記錄](https://docs.aws.amazon.com/iotevents/latest/developerguide/best-practices.html#best-practices-cw-logs)。

## 不相容的資料類型
<a name="troubleshoot-expressions-incompatible-data-types"></a>

訊息：在下列表達式`<reference>`中找到 的不相容資料類型 【`<inferred-types>`】： `<expression>`

### 解決方案
<a name="w2aac42c11c25b5b1b1"></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)。

## 無法傳送訊息至 AWS IoT Events
<a name="failed-to-send-to-iot-events"></a>

訊息：無法傳送訊息至 Iot Events

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

您可能會因為下列原因遇到此錯誤：
+ 輸入訊息承載不包含 `Input attribute Key`。
+ `Input attribute Key` 與輸入定義中指定的 JSON 路徑不同。
+ 輸入訊息與 AWS IoT Events 輸入中定義的結構描述不相符。

**注意**  
從其他 服務擷取的資料也會失敗。

**Example**  
例如，在 中 AWS IoT Core， AWS IoT 規則會失敗並顯示下列訊息 `Verify the Input Attribute key.`

若要解決此問題，請確定輸入承載訊息結構描述符合 AWS IoT Events 輸入定義，且`Input attribute Key`位置相符。如需詳細資訊，請參閱 以[在 中建立模型的輸入 AWS IoT Events](create-input-overview.md)了解如何定義 AWS IoT Events 輸入。