無料のMQTT Serverとして、mqtt.eclipseprojects.io 等があるが、認証付きのMQTT Serverを使ってみたかったので、shiftr.ioを試してみる。
アカウントを作って、無料プランでインスタンスを作れるようである。好きなホスト名(EndPointというかドメイン名というか)が選べるようなので、、適当に指定してみる。
インスタンス起動後、Clientからpub/subをしてみる。テストで使ったPythonはpaho-mqttというやつ。
paho-mqtt · PyPI
pip install paho-mqtt
使う時な以下の様にしてimportする(やり方はいろいろあると思いますが、、一例で)
import paho.mqtt.client as mqtt
動作確認したソースは以下
#!/usr/bin/python3 import paho.mqtt.client as mqtt import pdb HOST = "hogehoge.cloud.shiftr.io" # 作成したエンドポイント(hogehogeは仮称) ID ="hogehoge" #エンドポイントのユニーク名がID PWD ="XXXXXXXXXX" # PWDは作成したトークンを指定 # CONNACK を受けると呼び出される connect() def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("control/#") # PUBLISH を受けると呼び出される message() def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client("dev00") # dev00は任意 client.username_pw_set(ID, password = PWD) client.on_connect = on_connect client.on_message = on_message #pdb.set_trace() client.connect(HOST, 1883, 60) # 1883指定でTCP / 8883でTLS このままだと丸見えだ print("aft connect") client.loop_start() print("aft loop") import time count = 0 while True: print("zzz...") time.sleep(1) if count % 5 == 0: client.publish("control/dev00","stop") count += 1
ShiftrではMQTTの利用状況がリアルタイムで表示される。一人だけでやってるとあまり面白さはないけど、複数でメッセージを共有すると視覚的効果が得られそうだ。
■経路暗号化
TLSをどう使えという説明がないので、正しいのかどうかわかりませんが、以下でTLSで接続できるのを確認
client = mqtt.Client("dev00") client.username_pw_set(ID, password = PWD) client.on_connect = on_connect client.on_message = on_message client.tls_set() # この行を追加 client.connect(HOST, 8883, 60) # ポートを8883に変更
念のためパケットキャプチャして、TLSで暗号化されているのを確認
なぜMQTTか? Node-REDでMQTTが使えるので、Node-REDとつないでみたいため。
■ご参考URL
制約はあるけどお試しで、TLS+認証が使えるMQTT Server
https://www.shiftr.io/
無料プランだと一日6Hまでとか制約があるようだ。どうやってインスタンスを止めたらいいのかわからないのだが。。