[PYTHON] Make an MQTT Subscriber box

Introduction

This time, I made a box on the Subscriber side of MQTT and tried it with Pepper.

Click here for the contents of the operation on the Publisher side.

I'm still studying MQTT.

MQTT Subscriber box

The following libraries are used as the MQTT library for Python.

Setting items

Set the MQTT broker information and the topic information to be acquired.

2015040401.png

Python code

Connect to the MQTT broker and subscribe to the topic. After that, loop_forever puts it in the reception standby state. At the end of the program, the topic will be unsubscribed.

For how to use the library in the box, I referred to the following article.

(After reviewing something, I wanted to fix the code)

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

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

    def onUnload(self):
        import sys

        self.mqttc.unsubscribe(self.topic)

        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

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

        self.mqttc = paho.Client()
        self.mqttc.on_message = self.onMessage
        self.mqttc.connect(self.host, self.port, self.keep_alive)
        self.mqttc.subscribe(self.topic, self.qos)

        self.mqttc.loop_forever()

    def onMessage(self, mqttc, obj, msg):
        self.logger.info("topic: " + msg.topic + ", payload: " + str(msg.payload) + ", qos: " + str(msg.qos) + ", retain: " + str(msg.retain))

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

Connect with Choregraphe

2015040402.png

Publisher side

Just skip "hello world" to the MQTT broker.

pub.py


# coding=utf8

import paho.mqtt.client as paho

mqttc = paho.Client()

mqttc.connect("test.mosquitto.org", 1883, 60)
mqttc.publish("my/topic/pepper5", "hello world", 1)

Operation check

Run Subscriber

Run the program in Choregraphe and wait for the message to be received.

Run Publisher

Run Publisher from the terminal.

$ python pub.py

Result display

The message Publisher-> Broker-> Subscriber is transmitted, and the content is displayed in the log viewer of Choregraphe on the Subscriber side.

2015040403.png

Operation check 2

If you try changing the processing when receiving a message on the Subscriber side to the form below, Pepper will talk.

    def onMessage(self, mqttc, obj, msg):
        tts = ALProxy("ALTextToSpeech")
        tts.say(msg.payload)

Impressions

Recommended Posts

Make an MQTT Subscriber box
Make an MQTT Publisher box
Make an MQTT Publisher Box Part 2
Let's make an Errbot plugin
Creating an HTTP Get box
Make an RGB 3 color composite diagram
Make Scrapy an exe with Pyinstaller