

サポート終了通知: 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)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# イベントデータをフィルタリング、変換、処理する式
<a name="iotevents-expressions"></a>

式は、受信データを評価し、計算を実行し、特定のアクションまたは状態遷移が発生する条件を決定するために使用されます。 AWS IoT Events には、ディテクターモデルを作成および更新するときに値を指定するいくつかの方法が用意されています。式を使用してリテラル値を指定するか、特定の値を指定する前に式を評価 AWS IoT Events できます。

**Topics**
+ [デバイスデータをフィルタリングし、 でアクションを定義する構文 AWS IoT Events](#expression-syntax)
+ [の式の例と使用法 AWS IoT Events](expression-usage.md)

## デバイスデータをフィルタリングし、 でアクションを定義する構文 AWS IoT Events
<a name="expression-syntax"></a>

式は、デバイスデータをフィルタリングし、アクションを定義するための構文を提供します。 AWS IoT Events 表現では、リテラル、演算子、関数、リファレンス、および置換テンプレートを使用できます。これらのコンポーネントを組み合わせることで、強力で柔軟な式を作成して、IoT データの処理、計算の実行、文字列の操作、ディテクターモデル内での論理的な意思決定を行うことができます。

### リテラル
<a name="expression-literal"></a>
+ 整数
+ 10 進数
+ String
+ ブール値

### オペレータ
<a name="expression-operator"></a>

単項  
+ 否定 (ブール値): `!`
+ 否定 (ビット単位): `~`
+ マイナス (算術): `-`

String  
+ 連結: **`+`**

  両方のオペランドは文字列である必要があります。文字列リテラルは一重引用符 (') で囲む必要があります。

  例: `'my' + 'string'` → `'mystring'`

算術  
+ 加算: **`+`**

  両方のオペランドは数値である必要があります。
+ 減算: **`-`**
+ 除算: **`/`**

  オペランドの少なくとも 1 つ (除数または被除数) が 10 進値でない限り、除算の結果は丸められた整数値になります。
+ 乗算: **`*`**

ビット単位 (整数)  
+ または: **`|`**

  例: `13 | 5` → `13`
+ AND: **`&`**

  例: `13 & 5` → `5`
+ XOR: **`^`**

  例: `13 ^ 5` → `8`
+ NOT: **`~`**

  例: `~13` → `-14`

ブール値  
+ 未満: **`<`**
+ 以下: **`<=`**
+ 等しい: **`==`**
+ 等しくない: **`!=`**
+ 以上: **`>=`**
+ 以上: **`>`**
+ AND: **`&&`**
+ または: **`||`**
**注記**  
`||` の部分式に未定義のデータが含まれている場合、その部分式は `false` として扱われます。

括弧  
括弧を使用して、表現内の用語をグループ化できます。

### AWS IoT Events 式で使用する関数
<a name="expression-function"></a>

AWS IoT Events には、ディテクターモデル式の機能を強化するための一連の組み込み関数が用意されています。これらの関数は、タイマー管理、型変換、null チェック、トリガータイプの識別、入力検証、文字列操作、ビット単位オペレーションを有効にします。これらの機能を活用することで、応答性の高い AWS IoT Events 処理ロジックを作成し、IoT アプリケーションの全体的な有効性を向上させることができます。

組み込み関数    
`timeout("{{timer-name}}")`  
指定されたタイマーが経過した場合、`true` に評価されます。「{{*timer-name*}}」を、定義したタイマーの名前を引用符で囲んで置き換えます。イベントアクションでは、タイマーを定義してから、タイマーをスタート、リセット、または以前に定義したタイマーをクリアできます。フィールド `detectorModelDefinition.states.onInput|onEnter|onExit.events.actions.setTimer.timerName` を参照してください。  
ある状態で設定されたタイマーは、別の状態で参照できます。タイマーが参照されている状態に入力する前に、タイマーを作成した状態にアクセスする必要があります。  
たとえば、ディテクターモデルには `TemperatureChecked`と の 2 つの状態があります`RecordUpdated`。`TemperatureChecked` 状態でタイマーを作成しました。`TemperatureChecked` 状態のタイマーを使用するには、まず `RecordUpdated`状態にアクセスする必要があります。  
精度を確保するために、タイマーを設定する必要がある最小時間は 60 秒です。  
`timeout()` は、実際のタイマーの有効期限切れに最初にチェックされたときにのみ `true` を返し、その後 `false` を返します。  
`convert({{type}}, {{expression}})`  
指定された型に変換された表現の値に評価されます。{{タイプ}}値は、`String`、`Boolean`、`Decimal` またはである必要があります。これらのキーワードの 1 つ、またはキーワードを含む文字列に評価される表現を使用してください。次の変換のみが成功し、有効な値を返します。  
+ ブール型 → 文字列

  `"true"` または `"false"` の文字列を返します。
+ 10 進数 → 文字列
+ 文字列 → ブール型
+ 文字列 → 10 進数

  指定する文字列は、10 進数の有効な表現である必要があります。そうでない場合、`convert()` は失敗します。
`convert()` が有効な値を返さない場合、そのパートである表現も無効です。この結果は `false` と同等であり、表現が発生するイベントのパートとして指定された `actions` または `nextState` への移行をトリガーしません。  
`isNull({{expression}})`  
表現がヌルを返す場合、`true` と評価されます。例えば、入力 `{ "a": null }` がメッセージ `true` を受信した場合、以下は `isUndefined($input.MyInput.a)` と評価されますが、`false` は `MyInput` と評価されます。  

```
isNull($input.MyInput.a)
```  
`isUndefined({{expression}})`  
表現が未定義の場合、`true` と評価されます。例えば、入力 `MyInput` がメッセージ `{ "a": null }` を受信した場合、以下は `false` と評価されますが、`isNull($input.MyInput.a)` は `true` と評価されます。  

```
isUndefined($input.MyInput.a)
```  
`triggerType("{{type}}")`  
{{タイプ}}値は `"Message"` または `"Timer"` にすることができます。次の例のように、タイマーの期限が切れたために表示されるイベント条件が評価されている場合は、`true` に評価されます。  

```
triggerType("Timer")
```
または、入力メッセージを受信しました。  

```
triggerType("Message")
```  
`currentInput("{{input}}")`  
指定された入力メッセージを受信したために表示されるイベント条件が評価されている場合、`true` に評価されます。例えば、入力 `Command` がメッセージ `{ "value": "Abort" }` を受信した場合、以下は `true` と評価されます。  

```
currentInput("Command")
```
次の表現のように、この関数を使用して、特定の入力が受信され、タイマーが期限切れになっていないために条件が評価されていることを確認します。  

```
currentInput("Command") && $input.Command.value == "Abort"
```

文字列照合関数    
`startsWith({{expression1}}, {{expression2}})`  
最初の文字列表現が 2 番目の文字列表現でスタート場合、`true` と評価されます。例えば、入力 `MyInput` がメッセージ `{ "status": "offline"}` を受信した場合、以下は `true` と評価されます。  

```
startsWith($input.MyInput.status, "off")
```
両方の表現は文字列値に評価される必要があります。いずれかの表現が文字列値に評価されない場合、関数の結果は未定義です。変換は実行されません。  
`endsWith({{expression1}}, {{expression2}})`  
最初の文字列表現が 2 番目の文字列表現で終了する場合、`true` と評価されます。例えば、入力 `MyInput` がメッセージ `{ "status": "offline" }` を受信した場合、以下は `true` と評価されます。  

```
endsWith($input.MyInput.status, "line")
```
両方の表現は文字列値に評価される必要があります。いずれかの表現が文字列値に評価されない場合、関数の結果は未定義です。変換は実行されません。  
`contains({{expression1}}, {{expression2}})`  
最初の文字列表現に 2 番目の文字列表現が含まれている場合、`true` と評価されます。例えば、入力 `MyInput` がメッセージ `{ "status": "offline" }` を受信した場合、以下は `true` と評価されます。  

```
contains($input.MyInput.value, "fli")
```
両方の表現は文字列値に評価される必要があります。いずれかの表現が文字列値に評価されない場合、関数の結果は未定義です。変換は実行されません。

ビット単位の整数操作関数    
`bitor({{expression1}}, {{expression2}})`  
整数表現のビットごとの OR を評価します (バイナリ OR オペレーションは、整数の対応するビットに対して実行されます)。例えば、入力 `MyInput` がメッセージ `{ "value1": 13, "value2": 5 }` を受信した場合、以下は `13` と評価されます。  

```
bitor($input.MyInput.value1, $input.MyInput.value2)
```
両方の表現は整数値に評価される必要があります。いずれかの表現が整数値に評価されない場合、関数の結果は未定義です。変換は実行されません。  
`bitand({{expression1}}, {{expression2}})`  
整数表現のビット単位の AND を評価します (バイナリ AND オペレーションは、整数の対応するビットに対して実行されます)。例えば、入力 `MyInput` がメッセージ `{ "value1": 13, "value2": 5 }` を受信した場合、以下は `5` と評価されます。  

```
bitand($input.MyInput.value1, $input.MyInput.value2)
```
両方の表現は整数値に評価される必要があります。いずれかの表現が整数値に評価されない場合、関数の結果は未定義です。変換は実行されません。  
`bitxor({{expression1}}, {{expression2}})`  
整数表現のビット単位の XOR を評価します (バイナリ XOR オペレーションは、整数の対応するビットに対して実行されます)。例えば、入力 `MyInput` がメッセージ `{ "value1": 13, "value2": 5 }` を受信した場合、以下は `8` と評価されます。  

```
bitxor($input.MyInput.value1, $input.MyInput.value2)
```
両方の表現は整数値に評価される必要があります。いずれかの表現が整数値に評価されない場合、関数の結果は未定義です。変換は実行されません。  
`bitnot({{expression}})`  
整数表現のビット単位の NOT を評価します (バイナリ NOT オペレーションは整数のビットに対して実行されます)。例えば、入力 `MyInput` がメッセージ `{ "value": 13 }` を受信した場合、以下は `-14` と評価されます。  

```
bitnot($input.MyInput.value)
```
両方の表現は整数値に評価される必要があります。いずれかの表現が整数値に評価されない場合、関数の結果は未定義です。変換は実行されません。

### AWS IoT Events 式の入力と変数の リファレンス
<a name="expression-reference"></a>

入力  
`$input.{{input-name}}.{{path-to-data}}`  
`input-name` は、[CreateInput](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateInput.html) アクションを使用して作成する入力です。  
例えば、`inputDefinition.attributes.jsonPath` エントリを定義した `TemperatureInput` という名前の入力がある場合、値は次の使用可能なフィールドに表示される可能性があります。  

```
{
    "temperature": 78.5,
    "date": "2018-10-03T16:09:09Z"
  }
```
`temperature` フィールドの値をリファレンスするには、次のコマンドを使用します。  

```
$input.TemperatureInput.temperature
```
値が配列であるフィールドの場合、`[{{n}}]` を使用して配列のメンバーをリファレンスできます。例えば、次の値が与えられます。  

```
{
    "temperatures": [
      78.4,
      77.9,
      78.8
    ],
    "date": "2018-10-03T16:09:09Z"
  }
```
値 `78.8` は、次のコマンドで参照できます。  

```
$input.TemperatureInput.temperatures[2]
```

可変  
`$variable.{{variable-name}}`  
`{{variable-name}}` は、[CreateDetectorModel](https://docs.aws.amazon.com/iotevents/latest/apireference/API_CreateDetectorModel.html) アクションを使用して定義した可変です。  
例えば、`detectorDefinition.states.onInputEvents.actions.setVariable.variableName` を使用して定義した `TechnicianID` という名前の可変がある場合、次のコマンドを使用して、可変に最後に指定された (文字列) 値をリファレンスできます。  

```
$variable.TechnicianID
```
可変の値は、`setVariable` アクションを使用してのみ設定できます。表現の可変に値を割り当てることはできません。可変を設定解除することはできません。例えば、値 `null` を割り当てることはできません。

**注記**  
(正規表現) パターン `[a-zA-Z][a-zA-Z0-9_]*` に従わない識別子を使用する参照では、それらの識別子をバッククォート (```) で囲む必要があります。例えば、`_value` という名前のフィールドを持つ `MyInput` という名前の入力へのリファレンスでは、このフィールドを `$input.MyInput.`_value`` として指定する必要があります。

表現でリファレンスを使用する場合は、以下をチェックしてください。<a name="expression-reference-type-compatibility"></a>
+ 1 つ以上の演算子でオペランドとしてリファレンスを使用する場合は、参照するすべてのデータ型に互換性があることを確認してください。

  例えば、次の表現では、整数 `2` は `==` 演算子と `&&` 演算子の両方のオペランドです。オペランドに互換性があることを確認するには、`$variable.testVariable + 1` と `$variable.testVariable` は整数または 10 進数をリファレンスする必要があります。

  また、整数 `1` は `+` 演算子のオペランドです。したがって、`$variable.testVariable` は整数または 10 進数をリファレンスする必要があります。

  ```
  ‘$variable.testVariable + 1 == 2 && $variable.testVariable’
  ```
+ 関数に渡される引数としてリファレンスを使用する場合は、関数が参照するデータ型をサポートしていることを確認してください。

  例えば、次の `timeout("{{time-name}}")` 関数では、引数として二重引用符を含む文字列が必要です。{{timer-name}} 値のリファレンスを使用する場合は、二重引用符で囲まれた文字列を参照する必要があります。

  ```
  timeout("{{timer-name}}")
  ```
**注記**  
`convert({{type}}, {{expression}})` 関数の場合、{{タイプ}}値にリファレンスを使用する場合、リファレンスの評価結果は `String`、`Decimal`、または `Boolean` である必要があります。

AWS IoT Events 式は、整数、10 進数、文字列、ブール値データ型をサポートしています。次の表に、互換性のないタイプのペアのリストを示します。


|  互換性のないタイプのペア  | 
| --- | 
| 整数、文字列 | 
| 整数、ブール型 | 
| 10 進数、文字列 | 
| 10 進数、ブール型 | 
| 文字列、ブール型 | 

### AWS IoT Events 式の置換テンプレート
<a name="expression-substitution-template"></a>

****  
`'${{{expression}}}'`  
`${}` は、文字列を補間された文字列として識別します。は任意の AWS IoT Events 式に`expression`することができます。これには、演算子、関数、およびリファレンスが含まれます。  
例えば、[SetVariableAction](https://docs.aws.amazon.com/iotevents/latest/apireference/API_SetVariableAction.html) アクションを使用して可変を定義しました。`variableName` は `SensorID` であり、`value` は `10` です。次の置換テンプレートを作成できます。      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iotevents/latest/developerguide/iotevents-expressions.html)