LoginSignup
8
2

More than 3 years have passed since last update.

Noodlで外部サービスとの連携方法~MQTT~

Last updated at Posted at 2019-12-04

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でやり取りされるデータの事をメッセージと呼び、その中身をペイロードと呼びます。

image.png

 MQTTの中でも重要なのがトピックです。このトピックについて宅配BOXを例に解説してみます。

 宅配BOXは、ネットで何か購入した際に届け先を自宅ではなく宅配BOXとすることで、荷物の再配達を減らす目的で利用されています。配達業者の方は宅配BOXに荷物を入れ、荷物を受け取る人に連絡がいき、好きな時間に荷物を受け取ることができます。
 宅配BOXに荷物を入れる人はMQTTでいうところのパブリッシャー(送信者)です。宅配BOXから荷物を受け取る人がMQTTでいうところのサブスクライバー(受信者)です。そして、宅配BOXがMQTTブローカです。

image.png

 宅配BOXに荷物を出し入れする際、どの部屋を利用するかは番号などで管理されていますよね、これが「トピック」です。

 MQTTには他にもQoSやWill、RetainなどありますがNoodlでMQTTを使う分には上述の知識で扱えるため割愛します。

MQTTを使うための設定

 NoodlでMQTTを使うにはMQTTブローカのエンドポイント(URL)をプロジェクトに設定します。Noodlエディタの画面左上の方に歯車マークをクリックしてプロジェクト設定を開きます。

image.png

 プロジェクト設定の最も下に、「External Broker」という項目があります。この項目にチェックを入れます。
image.png

 チェックすると、MQTTブローカのエンドポイント(URL)入力欄が表示されます。

image.png

 入力するURLは次のフォーマットです。

mqtt://user:pass@brokerurl.com:port

 MQTTブローカを設定すると大抵このフォーマットのURLが表示されますので、それをこの欄に入力します。

 Noodlで使用例のあるMQTTブローカは次の通りです。

パブリッシュ(送信)

 Noodlでのパブリッシュは「Send Messsageノード」を使用します。
image.png

 Send Messageノードのプロパティを開くと次のような設定が現れます。

image.png
image.png

  • Topic:メッセージをパブリッシュするトピック名。
  • Format:ペイロードのフォーマットです。JSONまたはCSVの2種類から選択します。
  • Send On Change :チェックするとペイロードのデータが別の値やデータに更新されたときにメッセージをパブリッシュします。
  • Rate Limit:チェックすると、1秒間にパブリッシュするメッセージ数を制限できます。
  • Payload:ペイロードにするデータのプロパティ。

 例えば次のように使います。Send On Changeにチェックしておき、StateノードのCurrent Stateをペイロードにつなぎます。今回のペイロード名をstateにしています。画面をタップすると状態が切り替わるので、現在の状態をMQTTブローカの「/pub」というトピックにパブリッシュします。
image.png

サブスクライブ(受信)

 Noodlでのサブスクライブは「Recive Messsageノード」を使用します。
image.png

 Recive Messageノードを開くと次のようなプロパティがあります。
image.png
image.png

  • Enabled:サブスクライブを有効にします。
  • Topic:サブスクライブするトピック名です。
  • Payload:サブスクライブしたペイロードが格納されるプロパティ名

 例えば、次のように使います。MQTTでサブスクライブしたメッセージのペイロードを画面のTextに表示しています。
image.png

おわりに

 画面を作ったら、やっぱり外部サービスとの連携がしたいですよね!今回はMQTTを紹介しましたが、RESTノードを使う方法もあります。この方法はWeb APIからデータ取得などに利用できます。

 それでは、よいNoodlライフお!

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2