Noodl Advent Calendar 5日目担当のまえぷーです。宜しくお願いします!
#概要
NoodlはUIを作成するだけでなく、外部連携が可能なツールです。
連携方法は今のところ次の2種類があります。
- MQTT
- REST
今回はNoodlでMQTTを扱う方法についてまとめました。
#MQTTって?
Message Queuing Telemetry Transportの頭文字を取ってMQTTといいます。MQTTはメジャーな通信プロトコルなので、ネットで調べるといっぱい情報が得られます。
自分なりの解釈でざっとまとめると、「IoTの流れでネットワークに接続する端末が増え、ネットワークを流れるデータ量を減らすプロトコルがMQTT」と認識しています。
##MQTTの基本構成と用語
この記事で登場する用語は次の8つです。
- MQTTブローカ
- パブリッシャー(送信者)
- サブスクライバー(受信者)
- パブリッシュ(送信)
- サブスクライブ(受信)
- メッセージ
- ペイロード
- トピック
MQTTもHTTPと似たようにサーバを中継して通信を行います。MQTTの場合、サーバの事をMQTTブローカと呼んだりします。データを送信する端末をパブリッシャー、受信する端末をサブスクライバーと呼びます。
パブリッシャーがデータを送信することをパブリッシュするといい、サブスクライバーがデータを受信することをサブスクライブするといいます。MQTTでやり取りされるデータの事をメッセージと呼び、その中身をペイロードと呼びます。
MQTTの中でも重要なのがトピックです。このトピックについて宅配BOXを例に解説してみます。
宅配BOXは、ネットで何か購入した際に届け先を自宅ではなく宅配BOXとすることで、荷物の再配達を減らす目的で利用されています。配達業者の方は宅配BOXに荷物を入れ、荷物を受け取る人に連絡がいき、好きな時間に荷物を受け取ることができます。
宅配BOXに荷物を入れる人はMQTTでいうところのパブリッシャー(送信者)です。宅配BOXから荷物を受け取る人がMQTTでいうところのサブスクライバー(受信者)です。そして、宅配BOXがMQTTブローカです。
宅配BOXに荷物を出し入れする際、どの部屋を利用するかは番号などで管理されていますよね、これが「トピック」です。
MQTTには他にもQoSやWill、RetainなどありますがNoodlでMQTTを使う分には上述の知識で扱えるため割愛します。
#MQTTを使うための設定
NoodlでMQTTを使うにはMQTTブローカのエンドポイント(URL)をプロジェクトに設定します。Noodlエディタの画面左上の方に歯車マークをクリックしてプロジェクト設定を開きます。
プロジェクト設定の最も下に、「External Broker」という項目があります。この項目にチェックを入れます。
チェックすると、MQTTブローカのエンドポイント(URL)入力欄が表示されます。
入力するURLは次のフォーマットです。
mqtt://user:pass@brokerurl.com:port
MQTTブローカを設定すると大抵このフォーマットのURLが表示されますので、それをこの欄に入力します。
Noodlで使用例のあるMQTTブローカは次の通りです。
#パブリッシュ(送信)
Noodlでのパブリッシュは「Send Messsageノード」を使用します。
Send Messageノードのプロパティを開くと次のような設定が現れます。
- Topic:メッセージをパブリッシュするトピック名。
- Format:ペイロードのフォーマットです。JSONまたはCSVの2種類から選択します。
- Send On Change :チェックするとペイロードのデータが別の値やデータに更新されたときにメッセージをパブリッシュします。
- Rate Limit:チェックすると、1秒間にパブリッシュするメッセージ数を制限できます。
- Payload:ペイロードにするデータのプロパティ。
例えば次のように使います。Send On Changeにチェックしておき、StateノードのCurrent Stateをペイロードにつなぎます。今回のペイロード名をstateにしています。画面をタップすると状態が切り替わるので、現在の状態をMQTTブローカの「/pub」というトピックにパブリッシュします。
#サブスクライブ(受信)
Noodlでのサブスクライブは「Recive Messsageノード」を使用します。
Recive Messageノードを開くと次のようなプロパティがあります。
- Enabled:サブスクライブを有効にします。
- Topic:サブスクライブするトピック名です。
- Payload:サブスクライブしたペイロードが格納されるプロパティ名
例えば、次のように使います。MQTTでサブスクライブしたメッセージのペイロードを画面のTextに表示しています。
#おわりに
画面を作ったら、やっぱり外部サービスとの連携がしたいですよね!今回はMQTTを紹介しましたが、RESTノードを使う方法もあります。この方法はWeb APIからデータ取得などに利用できます。
それでは、よいNoodlライフお!