Python
mqtt
Pepper
Choregraphe

MQTT Publisher ボックスを作る その2

More than 3 years have passed since last update.


はじめに


TLS MQTT Publisher ボックス

前回のボックスをコピーして、「TLS MQTT Pub」ボックスを作成します。


設定項目


  • Port を 8883 に変更

  • Topic のパスに tls を追加 (前回との区別のためだけです)

  • Certificate パラメータを追加

Certificate には証明書のファイル名を指定します。test.mosquitto.org を使う場合にはコチラからダウンロードします。

2015032901.png

使用する証明書は以下の場所に配置します。

2015032902.png


Python コード

コードはこんな感じにします。前回とほとんど変わりません。crt_file を取得して、tls_set() しているだけです。

class MyClass(GeneratedClass):

def __init__(self):
GeneratedClass.__init__(self)

def onLoad(self):
self.framemanager = ALProxy("ALFrameManager")
self.folderName = None

def onUnload(self):
import sys

if self.folderName and self.folderName in sys.path:
sys.path.remove(self.folderName)
self.folderName = None

def onInput_onStart(self, payload):
import sys, os

self.folderName = os.path.join(
self.framemanager.getBehaviorPath(self.behaviorId), "../lib")
if self.folderName not in sys.path:
sys.path.append(self.folderName)

import paho.mqtt.client as paho

host = self.getParameter("Broker Host")
port = self.getParameter("Broker Port")
crt_file = self.getParameter("Certificate")
keep_alive = self.getParameter("KeepAlive")
topic = self.getParameter("Topic")
qos = self.getParameter("Qos")
retain = self.getParameter("Retain")

mqttc = paho.Client()
mqttc.tls_set(self.folderName + "/crts/" + crt_file)
mqttc.connect(host, port, keep_alive)
mqttc.publish(topic, payload, qos, retain)

def onInput_onStop(self):
self.onUnload()
self.onStopped()


Choregraphe で接続

これも前回とほとんど同じです。

2015032903.png


Subscriber 側

Subscriber もほとんど同じです。


tls_sub.py

import paho.mqtt.client as paho

def on_message(mqttc, obj, msg):
print("topic: " + msg.topic + ", payload: " + str(msg.payload) + ", qos: " + str(msg.qos) + ", retain: " + s\
tr(msg.retain))

if __name__ == '__main__':
mqttc = paho.Client()

mqttc.on_message = on_message
mqttc.tls_set("mosquitto.org.crt")
mqttc.connect("test.mosquitto.org", 8883, 60)
mqttc.subscribe("my/topic/tls/pepper", 0)

mqttc.loop_forever()



動作確認


Subscriber を実行

PC 上で実行し、トピックに対するメッセージを受け取るために待機します。

$ python tls_sub.py


Publisher を実行

Choregraphe でプログラムを実行し、メッセージを送信します。


結果表示

Publisher -> Broker -> Subscriber とメッセージが伝わり、Subscriber 側で表示されました。

$ python tls_sub.py

topic: my/topic/tls/pepper, payload: TLS Hello World from Pepper, qos: 0, retain: 0


通信内容の確認

一応、SSL/TLS になっているか、パケットをキャプチャして見てみます。内容の詳細までは見ていませんが、何やら SSL/TLSv1 でやりとりしているらしいことが分かります。

2015032904.png


感想


  • Topic は外から渡せるようにしておいたほうが良い気がしています。

  • 次は Sub ボックスをやります。

  • でも、3/31 で Choregraphe の期限が切れてしまいます(泣