アプリケーション開発

オートメーション機能の利用方法

ステップ3:レシピの応用

本チュートリアルで使用しているソースコードの詳細を記載します。パラメータを変更するなどして、是非新たなレシピを生み出してみてください。

サンプル

温度が閾値以上の場合にエアコンを起動するとともにSlackに通知する

{
  "description": "温度が閾値以上の場合にエアコンを起動するとともにSlackに通知する",
  "recipeVersion": "0.1",
  "parameters": {
    "getTemperatureThingId": {
      "type": "string",
      "description": "温度取得APIを実行するデバイスのthingId",
      "required": true
    },
    "putAirConditionerThingId": {
      "type": "string",
      "description": "エアコン起動APIを実行するデバイスのthingId",
      "required": true
    },
    "thresholdValue": {
      "type": "string",
      "description": "トリガーを実行する閾値となる温度の値",
      "required": true
    },
    "slackWebhookUrl": {
      "type": "string",
      "description": "SlackのWebhook のURL",
      "required": true
    },
    "slackMessage": {
      "type": "string",
      "description": "Slackに通知するメッセージ",
      "default": "部屋の温度が閾値以上となったため、エアコンを起動しました。",
      "required": true
    }
  },
  "dataSourceSteps": [
    {
      "id": "12345678901",
      "name": "温度取得APIを実行",
      "description": "",
      "action": "symphony:runDeviceApiGet",
      "inputs": {
        "path": "/temperature",
        "thingId": "{{ getTemperatureThingId }}",
        "queryParameters": []
      }
    }
  ],
  "triggerSteps": {
    "switchTrigger": {
      "id": "12345678902",
      "name": "温度の確認",
      "description": "",
      "action": "symphony:switchDeviceApiResponse",
      "inputs": {
        "parameterName": "temperature",
        "type": "integer",
        "format": "int32",
        "targetDataSourceId": "12345678901",
        "conditionals": [
          {
            "value": "{{ thresholdValue }}",
            "conditional": "GreaterThanOrEqualTo",
            "targetActionIds": ["12345678903", "12345678904"]
          }
        ]
      }
    }
  },
  "actionSteps": [
    {
      "id": "12345678903",
      "name": "エアコンの起動APIを実行",
      "description": "",
      "action": "symphony:runDeviceApiPut",
      "inputs": {
        "path": "/airConditioner",
        "thingId": "{{ putAirConditionerThingId }}",
        "bodyParameters": []
      }
    },
    {
      "id": "12345678904",
      "name": "Slackに通知",
      "description": "",
      "action": "symphony:notifySlack",
      "inputs": {
        "message": "{{ slackMessage }}",
        "slackWebhookUrl": "{{ slackWebhookUrl }}"
      }
    }
  ]
}

9時から17時の間、指定の鍵の状態がunlocked であればSlackに通知する

{
  "description": "9時から17時の間、指定の鍵の状態がunlocked であればSlackに通知する",
  "recipeVersion": "0.1",
  "parameters": {
    "putLockThingId": {
      "type": "string",
      "description": "ロック状態のイベント開始APIを実行するデバイスのthingId",
      "required": true
    },
    "slackWebhookUrl": {
      "type": "string",
      "description": "SlackのWebhook のURL",
      "required": true
    },
    "slackMessage": {
      "type": "string",
      "description": "Slackに通知するメッセージ",
      "default": "自宅の玄関の鍵が開きました",
      "required": true
    }
  },
  "dataSourceSteps": [
    {
      "id": "12345678901",
      "name": "ロック状態のイベントAPIを実行",
      "description": "",
      "action": "symphony:runDeviceApiPut",
      "inputs": {
        "path": "/lock",
        "thingId": "{{ putLockThingId }}",
        "bodyParameters": [
          {
            "interval": 30000
          }
        ]
      }
    }
  ],
  "triggerSteps": {
    "compareTriggers": [
      {
        "id": "12345678902",
        "name": "ロック状態のイベントメッセージの確認",
        "description": "",
        "action": "symphony:compareEventMessage",
        "inputs": {
          "parameterName": "smartlock",
          "type": "string",
          "value": "unlocked",
          "conditional": "Equal",
          "targetDataSourceId": "12345678901"
        },
        "andor": "and"
      },
      {
        "id": "12345678903",
        "name": "現在日時の確認",
        "description": "",
        "action": "symphony:compareTimestamp",
        "inputs": {
          "parameterName": "hour",
          "type": "string",
          "format": "time",
          "value": "09:00",
          "conditional": "GreaterThanOrEqualTo",
        },
        "andor": "and"
      },
      {
        "id": "12345678904",
        "name": "現在日時の確認",
        "description": "",
        "action": "symphony:compareTimestamp",
        "inputs": {
          "parameterName": "time",
          "type": "integer",
          "format": "time",
          "value": "17:00",
          "conditional": "LessThanOrEqualTo",
        },
        "andor": "and"
      }
    ],
    "compareMatchTargetActionIds": ["12345678905"]
  },
  "actionSteps": [
    {
      "id": "12345678905",
      "name": "Slackに通知",
      "description": "",
      "action": "symphony:notifySlack",
      "inputs": {
        "message": "{{ slackMessage }}",
        "slackWebhookUrl": "{{ slackWebhookUrl }}"
      }
    }
  ]
}

レシピ・フォーマット

プロパティ名 必須 説明
description string 説明文。Symphony上で見えるものはレシピ登録時に別途管理する。
recipeFormatVersion string レシピのフォーマットのバージョン。1.0 固定。
recipeVersion string レシピ作成者が区別するためのバージョン。Symphony上では管理されない。
parameters object インプットパラメータのオブジェクト
 {key} string レシピ内で使われるパラメータ名
 type string パラメータの型
 description string パラメータの説明
 required boolean このパラメータが必須かどうか。存在しない場合trueとして扱う。
 default string このパラメータのデフォルト値
dataSourceSteps objectList データソースのステップ。空を許容する。
 id string このステップのid。レシピ内で一意の文字列とする。
 name string このステップの任意の名前
 description string このステップの説明
 action string ステップの動作を一意に決める文字列。別途定義される。
 inputs object このステップのインプットパラメータの定義。action によって異なる。
triggerSteps object トリガー(条件の確認)のステップ。空を許容しない。
 switchTrigger object 任意の値に対して、条件とアクションを設定する。
  id string このステップのid。レシピ内で一意の文字列とする。
  name string このステップの任意の名前
  description string このステップの説明
  action string ステップの動作を一意に決める文字列。別途定義される。
  inputs object このステップのインプットパラメータの定義。action によって異なる。
 compareTriggers objectList 複数の任意の値に対して、条件を設定する
  id string このステップのid。レシピ内で一意の文字列とする。
  name string このステップの任意の名前
  description string このステップの説明
  action string ステップの動作を一意に決める文字列。別途定義される。
  inputs object このステップのインプットパラメータの定義。action によって異なる。
  andor string andまたはorを指定。この条件をANDとして処理するか、ORとして処理するか。未指定の場合and として処理する。
 compareMatchTargetActionIds stringList compareTriggers で指定した条件を満たした場合に実行するアクション(満たさない状態から満たす状態への変更時)
 compareUnMatchTargetActionIds stringList compareTriggers で指定した条件を満たさなくなった場合に実行するアクション(満たす状態から満たさない状態への変更時)
actionSteps objectList 条件を満たした際のアクションのステップ。空を許容しない。
 id string このステップのid。レシピ内で一意の文字列とする。
 name string このステップの任意の名前
 description string このステップの説明
 action string ステップの動作を一意に決める文字列。別途定義される。
 inputs object このステップのインプットパラメータの定義。action によって異なる。

各ステップのアクション(action)の定義

データソースステップ

action 内容
symphony:runDeviceApiGet GET のデバイスAPI を実行する
symphony:runDeviceApiPost POST のデバイスAPI を実行する
symphony:runDeviceApiPut PUT のデバイスAPI を実行する
symphony:runDeviceApiDelete DELETE のデバイスAPI を実行する

トリガーステップ

action 内容
symphony:switchDeviceApiResponse one-shot のレスポンスのプロパティに対して複数の条件を設定可能で、いずれかの条件を満たすかどうかを判定し、満たした条件のアクションを呼び出す
symphony:switchEventMessage イベントメッセージのプロパティに対して複数の条件を設定可能で、いずれかの条件を満たすかどうかを判定し、満たした条件のアクションを呼び出す。レシピカテゴリがモニタリングの場合のみ利用可能。
symphony:compareDeviceApiResponse one-shot のレスポンスのプロパティが条件を満たすかどうか判定する。複数の条件をand、orで連結可能。
symphony:compareEventMessage イベントメッセージのプロパティが条件を満たすかどうか判定する。複数の条件をand、orで連結可能。レシピカテゴリがモニタリングの場合のみ利用可能。
symphony:changeDeviceApiResponse one-shot のレスポンスのプロパティに変化があったかどうかを判定する。複数の条件をand、orで連結可能。レシピカテゴリがモニタリングの場合のみ利用可能。
symphony:changeEventMessage イベントメッセージのプロパティに変化があったかどうかを判定する。複数の条件をand、orで連結可能。レシピカテゴリがモニタリングの場合のみ利用可能。
symphony:compareTimestamp 現在日時(JST)が指定の日時条件を満たすか判定する。複数の条件をand、orで連結可能。
symphony:alwaysTrue 常に条件を満たしたものとする。

アクションステップ

action 内容
symphony:runDeviceApiGet GET のデバイスAPI を実行する
symphony:runDeviceApiPost POST のデバイスAPI を実行する
symphony:runDeviceApiPut PUT のデバイスAPI を実行する
symphony:runDeviceApiDelete DELETE のデバイスAPI を実行する
symphony:notifyHttpPost 指定のURL にHTTP(S) POST リクエストを実行する
symphony:notifySlack Slack にリクエストを実行する