AWS IoT EventsでIoTデバイスの動作を監視してみた

はじめに

こんにちは、omkです。
先日、社内でとあるIoT機器を開発していてそのなかで初めてAWS IoT Eventsを使ってみました。
とあるIoT機器については近々ブログに上がると思いますのでお楽しみに。

で、そのIoT機器に取り付けているモーターが故障すると非常に困るのですが、無人のときに壊れると検知できない問題がありました。
この問題に対して、MQTTでAWS IoT Coreにパブリッシュされるモーターに依存した情報がモーターの故障時に一定の値でパブリッシュされることに着目し、AWS IoT Eventsを用いて状態を監視することとしました。

今回の記事ではやってみた内容に基づいてAWS IoT Eventsをどんな風に使えるかを紹介していこうと思います。

AWS IoT Eventsとは

IoT センサーやアプリケーションで発生したイベントを検出し対応するサービスです。
入力に基づき状態を遷移する探知機(ステートマシン)を作成して、ステータスに応じて任意にアクションを実行可能です。

やってみた

今回はモーターが動かなくなるケースを想定して3回連続して同じ値が入力された場合にアラートメールを送信します。

イメージとしてはこんな感じです。

IoTデバイスから特定のトピックに対してMQTTで情報をパブリッシュします。

IoTルールで対象トピックに流れる情報をキャッチしてIoTアクションを実行します。
アクションではIoT Eventsにメッセージを送信します。

IoT Eventsではアクションから入力を受けて、対象の入力をもとに探知機で評価を行います。
パブリッシュされた情報を探知機内で変数として保有しておき、前回の実行との比較から3回連続で同じ値であればSNSでアラートを通知します。

Eventsまわり

まずはIoT Eventsに渡されるデータの形式を入力として保存します。
データ形式をファイル化しておきコンソールからアップすると楽です。
データ形式が後から変わると正常に動かなくなることがあるので、その際は再度入力を最新のデータ形式でアップロードして更新すると良いです。

次に探知機モデルを作成します。
今回は、正常な状態と特異な状態を遷移する単純なモデルにしました。

IoT Eventsでは変数を使うことが出来、今回は「前回の結果」変数と「カウント」変数を準備します。
前回の結果変数と今回の入力の値を照会して同じであればカウント変数をインクリメントし、カウント変数が3に達すればアラートを上げます。

「OnEnter」でその状態に遷移したタイミングで実行する内容を設定できます。
画像の「Nomal」状態に入った際に前回の結果変数とカウント変数を初期化するようにしました。

「OnInput」で指定の状態で入力を受けた際に実行する内容を設定できます。
「Nomal」状態で入力を受けて、前回の結果変数と今回の入力の値が同じであるという条件で、カウント変数をインクリメントするようにしました。
また、同じでなかった場合に「前回の結果」変数に今回の入力の値を代入してカウント変数を0にするようにしました。

「移行イベント」(図のNormalからAbnormalに伸びる線)では状態を遷移する条件を設定できます。
カウント変数が3になったときに「Normal」から「Abnormal」に遷移するようにしています。
またその際のアクションとしてSNSにメッセージを送信するようにしています。

同じようにAbnormal側にも正常化の条件を設定していけば探知機モデルは完成なのでテストして発行します。
デバイスが複数ある場合は複数の探知機を作ってデバイスごとにあてがうことも可能です。

そんな感じで使い方のイメージがつけば幸いです。

Eventsまでのところ

対象のMQTTトピックを仮に「device/state」とします。
IoT Ruleでは対象トピックの内容をすべて受け取りたいので条件を以下にしました。

SELECT * FROM "device/state"

アクションでは「IoT Events入力にメッセージを送信」としてIoT Eventsの入力にパブリッシュされた情報をそのまま送信します。

これで、一通りの設定が出来たので対象トピックに対して、入力に設定したデータの形式でデータをパブリッシュしてみます。
探知機の変数に値が入ります。

同じ値で3回実行してみることでSNSトピックから設定したメールアドレスにメールが送信されます。

おわりに

これで実現したいことが実装できたのでモーターが壊れても安心です。
実際に使ったときには最後まで元気に動いていたのでアラートが鳴ることはなかったんですけどね。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA