LoginSignup
18
19

More than 5 years have passed since last update.

MQTT Publisher ボックスを作る

Last updated at Posted at 2015-03-21

はじめに

  • MQTT とは
    詳細は以下のサイト等で確認して頂ければと思いますが、簡単な説明としては Pub/Sub メッセージングモデルの軽量なプロトコルです。IoT, WoT で繋がるような非力なデバイスで動かすことを想定しているため、色々と低コストでの処理が可能です。

  • Pepper 君でも使えるのではないかと思い、ちょっと試してみます。

  • MQTT 勉強中です。

MQTT Publisher ボックス

MQTT の Python 用ライブラリとして、以下のライブラリを使用します。

ますは Python ボックスを作り、入力の Type を「バン」から「文字列」に変更します。

2015032101.png

設定項目

設定項目はこんな感じにします。

MQTT のブローカのホスト、ポート、KeepAlive 値と、メッセージ送信するトピック、QOS 値、Retain 値を指定できるようにします。

2015032102.png

Python コード

コードはこんな感じにします。各種パラメータを取得して、MQTT ブローカに接続・メッセージを送信します。

ボックス内でのライブラリの使用方法は、以下の記事を参考にさせて頂きました。

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")
        keep_alive = self.getParameter("KeepAlive")
        topic      = self.getParameter("Topic")
        qos        = self.getParameter("Qos") 
        retain     = self.getParameter("Retain")

        mqttc = paho.Client()
        mqttc.connect(host, port, keep_alive)
        mqttc.publish(topic, payload, qos, retain)

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

Choregraphe で接続

メッセージ内容を設定するための「Text Edit」ボックスと、作成した「MQTT」ボックスを接続します。

2015032103.png

Subscriber 側

MQTT Publisher 側から送信するメッセージを受け取る側になる Subscriber を用意します。Pub 側と同じ Paho ライブラリを使用しています。

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: " + str(msg.retain))

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

    mqttc.on_message = on_message
    mqttc.connect("test.mosquitto.org", 1883, 60)
    mqttc.subscribe("my/topic/pepper", 0)

    mqttc.loop_forever()

動作確認

Subscriber を実行

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

$ python sub.py

Publisher を実行

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

結果表示

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

$ python sub.py
topic: my/topic/pepper, payload: Hello World from Pepper, qos: 0, retain: 0

感想

  • Publisher 側のほうが使いようがあるかと思って試してみたのですが、Subscriber 側としても面白そうな気がしてきました。
18
19
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
18
19