マイナー・マイナー

隠れた名作の発掘が生きがい。

MQTTの挙動をMacで確認する


スポンサードリンク

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 コトハジメ