IoT時代を支えるプロトコルMQTT
MQTTは「MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport」(http://mqtt.org/より引用)と定義されており、IoTやM2M(Machine-to-Machine)向けに開発された軽量プロトコルです。センサデバイスから少量のデータを定期的に送受信もしくは配信を行うために最適化された、私たちがなじみ深いHTTP(Hyper Text Transfer Protocol)とは異なるプロトコルです。Client-Serverにあたるソフトウェア実装はC, Java, JavaScript, Python, Lua, C++, .NET, Perl, PHP, Rubyなどで書かれており、センサデバイスの環境により最適なライブラリやソフトウェア実装を選ぶことができます(図3)。
今回はまず「MQTTはどこまで軽量で安全化?」を確認するため、インターネットを経由したMQTTによるデモを見ていきましょう。
MQTTでつなぐ
インターネット経由でMQTTのデモする場合、「http://test.mosquitto.org/」を利用するのがリーズナブルです。http://test.mosquitto.org/上ではBroker/Server側の設定はすべて済んでいますので、Client/Subscriber側を用意するだけでよいのです。今回はWindows環境でMQTTのPythonライブラリであるpaho-mqttを使って接続してみましょう。まずは図4に従いMQTT環境と整えていきましょう。
C:\> python-3.4.1.amd64.msi ※https://www.python.org/downloads/ からダウンロードする C:\> cd Python34\Scripts C:\Python34\Scripts> pip install paho-mqtt Downloading/unpacking paho-mqtt Running setup.py (path:C:\Users … \paho-mqtt\setup.py) egg_info for package paho-mqtt Installing collected packages: paho-mqtt Running setup.py install for paho-mqtt Successfully installed paho-mqtt Cleaning up...
つづいてMQTT PythonライブラリをつかってClient側を設定を行います(図5)。
C:\test> notepad unencrypted-mqtt.py ※Windowsのメモ帳を使ってプログラム作成
# coding=utf8
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("test")
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("test.mosquitto.org", 1883)
client.loop_forever()
今回は接続先をデモ環境であるtest.mosquitto.orgの1833番ポートに「SSLなし」で接続しています。
準備が整ったら。すぐに接続してみましょう(図6)。
C:\test> py unencrypted-mqtt.py Connected with result code 0 test b'Hello World'
これで接続完了です。ですが、これでは皆様も釈然としないかと思いますので、プロトコル詳解をネットワークアナライザであるWiresharkを使って見てみましょう。
