IoT Platformのルールエンジンについて

こんにちは!エンジニアのブルーです!

最近はIoTに関する案件が増えてきた印象があります。
そこで、本日はAlibaba Cloudが提供するIoT Platformの機能の1つであるルールエンジンについてご紹介したいと思います。

ルールエンジンとは?

ルールエンジンとはIoT Platformに送られてきたデータを他のサービスに連携するための仕組みです。
例えば、センサーからIoT Platformに対してデータを送っている場合、そのデータをデータベースに保存したい、などはよくある例かと思います。

このような場合、ルールエンジンを使用することで、簡単にデータベースにデータを挿入することができます。

ルールエンジンの種類

ルールエンジンには以下の2種類があります。

  • サービスサブスクリプション
  • データ転送

サービスサブスクリプションは簡単な手順でデータの転送を実現できます。
データ転送はより複雑な設定をする際に有効です。

順に仕様を実際に試していきたいと思います。

前準備

今回は以下のような環境を事前に作成しておきます。
f:id:sbc_aokin:20200212140801p:plain:w300

【ECSの設定】
AlibabaCloudのECSをデバイスと仮定します。 CentOS7.7環境を準備し、以下のコマンドを実行しておきます。
unzipとNode.jsのインストールを行なっています。

# yum install -y unzip
# yum install -y nodejs

【IoT Platformの設定】

1. IoT Platformのコンソールを開く。
2. 左側ペインより「クイックスタート」を開く。
3. デバイスへの接続で「開始」を押す。
4. 再度問われるので「開始」を押す。
5. デバイスの登録で「プロダクト名」と「デバイス名」を入力して「次へ」を押す。
 プロダクト:blog-product デバイス:blog-device1
6. 開発キットの選択で「Linux」「MQTT」「Node.js」を選択し、「次へ」を押す。
7. SDKのダウンロードにて「ダウンロード SDK kit」を押し、SDKをダウンロードする。
8. ダウロード後、「次へ」を押します。 9. ダウンロードしたkitをECS上に起き、以下のように解凍しておきます。

# unzip aliyun_iot_device_quickstart.zip
# cd aliyun_iot_device_quickstart

10. kitのstart.shを実行します。

# sh start.sh

11. IoT Platformのコンソールに戻り、IoT Platfromでデータを受信していることを確認します。

以上、前準備は完了です。

サービスサブスクリプション

サービスサブスクリプションを使用することで簡単にデータを転送することができます。
サービスサブスクリプションはAMQPとAlibaba CloudのMNSをサポートしています。
MNSはAlibaba Cloudが提供するキューイングサービスです。(詳しくはこちら)

サービスサブスクリプションの利用方法

ここでは、以下のようなデバイスがPublishしてきたデータをMNSのキューに転送するような設定をしていきたいと思います。 f:id:sbc_aokin:20200212143313p:plain:w400

IoT Platform > ルールエンジン > サービスサブスクリプション
より「サブスクリプションの作成」を選択します。

以下のようなポップアップが表示されますので設定していきます。

  • ・プロダクト:「blog-product」を選択してください。(前準備で作成したプロダクト)
  • ・サブスクリプションタイプ:今回はMNSを選択します。
  • ・メッセージタイプ:デバイスアップストリーム通知

最後にOKを押します。

f:id:sbc_aokin:20200212161426p:plain:w400

以下のような確認画面が表示されるので「OK」を押します。
これはMNSにキューを作成するよ!というメッセージです。 f:id:sbc_aokin:20200212143852p:plain:w400

設定がうまくいくとMNSコンソールにキューができます。

今回の設定では「デバイスアップストリーム通知」を選択しているので、
IoT PlatformにデータをPubishすることでキューにデータが送られることになります。

MNSコンソールの画面で受信を押すことでメッセージを確認できます。 f:id:sbc_aokin:20200206162408p:plain

メッセージの受信を押すと以下のようにメッセージが表示されます。 f:id:sbc_aokin:20200206162411p:plain:w500

データ転送

データ転送では以下の4つのプロダクトへの転送をサポートしています。(2020年2月現在)
データ転送でサポートされていないデータベースにデータを保存したい場合はFunctionComuputeを経由することで実現できます。

  • RDS
  • TableStore
  • MNS
  • FunctionCompute

データ転送の利用方法

ここでは、データ転送のMNSを利用して、MNSにデータを転送していきたいと思います。
サブスクリプションでもMNSを使用しましたが、サブスクリプションはMNSのキューに直接データを送ることができます。

データ転送のMNSを使用する際はMNSトピックにデータをPublishします。
つまりトピックのサブスクライバーに複数の送信先を指定しておけば、1つのメッセージを複数のサブスクライバーに送ることができます。
トピックとキューに関してはこちらを参考にしてください。

今回の構成を図にすると以下のようになります。
f:id:sbc_aokin:20200212144842p:plain:w600

まず、 トピックのサブスクライブ先としてキューを準備しておきます。 MNSのコンソールより、キュー > キューの作成を押します。

  • キュー名:blog-test-que

最後に「OK」を押します。
f:id:sbc_aokin:20200212145538p:plain:w400

次にMNS側のトピックとキューを作成します。
MNSのコンソールより、トピック > トピックの作成 を押します。

  • Topic名:blog-test-topic
  • 最大メッセージバイト数:1024

「OK」を押します。
f:id:sbc_aokin:20200212145622p:plain

トピックのサブスクライバーとしてキューを設定します。
トピック > サブスクリプションリスト を押します。
トピックリストの下にサブスクリプションリストが表示されます。
サブスクライブボタンを押し、以下のように設定します。

  • プッシュタイプ:キュー
  • サブスクリプション名:test-sub
  • エンドポイント:blog-test-que

最後に「OK」を押します。 f:id:sbc_aokin:20200212145641p:plain

これでMNSの設定は完了です。

続いてIoT Platformの設定です。
IoT Platformのコンソールより ルールエンジン > データ転送より「ルールの作成」を選択します。

  • ルール名:testRule
  • データ型:JSON

「OK」を押します。

f:id:sbc_aokin:20200212145802p:plain:w400

作成されたルールの「表示」を選択します。 右上のSQLを作成から転送するトピックや値を設定できます。 今回は以下のように既存のトピックにPulishされるデータを全て転送したいと思います。

  • フィールド:*
  • Topic:TSLデータの報告
  • プロダクト:blog-product
  • デバイス:blog-device1
  • トピック:thing/event/property/post f:id:sbc_aokin:20200212145929p:plain:w400

続いて、データ転送を設定していきます。「操作の追加」を押します。 ポップアップが開かれたら以下を入力していきます。

  • 対処方法の選択:「Message Serviceに送信」
  • リージョン:東京
  • Topic:blog-test-topic
  • Role:AliyunIOTAccessingMNSRole

最後に「OK」を押します。

f:id:sbc_aokin:20200212150029p:plain:w400

※ここの「Message Service」はMNSのことです。

作成したルールを有効化します。
左側ペインのデータ転送を押します。有効化したいルールの「開始」を押します。
確認画面が出るので、「確認」を押します。
ここ中国なので少しわかりにくいですが、青いボタンの方です。
f:id:sbc_aokin:20200212150145p:plain:w400

これで設定完了です。 MNSコンソールの「メッセージの受信」を押すとblog-test-queでデータを受けているのがわかるかなと思います。
データ転送の場合、文字化けしてしまっているので、Base64のデコードのチェックを外すことでメッセージを確認できます。 f:id:sbc_aokin:20200212150358p:plain

最後に

いかがでしたか?ルールエンジンでAlibaba Cloudに色々連携できることがわかったかと思います。
最後までお読みいただきありがとうございました。