無料の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までとか制約があるようだ。どうやってインスタンスを止めたらいいのかわからないのだが。。