MQTTはM2MやIoT向けに開発された軽量プロトコルです。Broker(仲介者)を介して、PublisherとSubscriber(送信者と受信者)がメッセージをやりとりするような仕組みのようです。
いろいろと見てみた限り、BrokerにはMosquittoが提供しているバイナリ、Publisher/SubscriberにはPahoのpythonライブラリが簡単に使えそうだったので、これらを使ってMQTTの動作確認をしました。
Mosquitto Brokerのインストール
Mosquittoのページ:An Open Source MQTT v3.1 Broker
downloadページを見ると、Macにインストールするにはどうやらbrewコマンドを利用するようなので、まずhomebrewをインストールし、mosquittoをインストールする。
Homebrewのページ:Homebrew — The missing package manager for OS X
homebrewインストール
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
mosquittoのインストール
$ brew install mosquitto
下記ディレクトリにインストールされた。
/usr/local/opt/mosquitto
Publisher/Subscriberの準備
Pahoのページ:Paho - Open Source messaging for M2M
Python Clientのdownloadページの通り、git cloneしてきてインストールする。
$ git clone http://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.python.git
$ cd org.eclipse.paho.mqtt.python.git
$ sudo python setup.py install
Publisher/Subscriberのサンプルプログラムを次のように書いた。
publisher.py
import paho.mqtt.client as mqtt def on_connect(client, userdata, rc): print("Connected with result code "+str(rc)) client.publish("topic/hoge", "hello world!", 0) def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("127.0.0.1", 1883, 60) client.loop_forever()
subscriber.py
import paho.mqtt.client as mqtt def on_connect(client, userdata, rc): print("Connected with result code "+str(rc)) client.subscribe("topic/hoge") def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("127.0.0.1", 1883, 60) client.loop_forever()
on_connect関数の中身を変えている。接続が確立した後に、Publisherは"topic/hoge"のトピックに対して"hello world!"を送信する。Subscriberは"topic/hoge"のトピックで待ち構える。
動作確認
Broker、Subscriber、Publisherの順番でプログラムを実行する。
ターミナル1 (Broker)
$ /usr/local/opt/mosquitto/sbin/mosquitto
ターミナル2 (Subscriber)
$ python subscriber.py
ターミナル3 (Publisher)
$ python publisher.py
ターミナル3でpublisher.pyを実行した後、下記メッセージがターミナル2に表示されたら成功です。
topic/hoge hello world!
参考サイト
IoT時代を支えるプロトコルMQTT技術詳解
MQTTについてのまとめ — そこはかとなく書くよん。
MQTT コトハジメ