LoginSignup
9
9

More than 5 years have passed since last update.

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

Posted at

はじめに

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 の期限が切れてしまいます(泣
9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9