MQTT Subscriber 상자 만들기

소개



이번에는 MQTT 의 Subscriber 측의 박스를 만들고 Pepper 군에서 동작시켜 보았습니다.

Publisher 측에서 동작시켜 본 내용은 이쪽.
  • MQTT Publisher 상자 만들기
  • MQTT Publisher 상자 만들기 그 2

  • 아직, MQTT 공부중입니다.

    MQTT Subscriber 상자



    MQTT의 Python용 라이브러리로 다음 라이브러리를 사용합니다.
  • Paho - Open Source messaging for M2M

  • 설정 항목



    MQTT 브로커 정보와 검색할 주제에 대한 정보를 설정합니다.



    파이썬 코드



    MQTT 브로커에 연결하고 주제를 Subscribe합니다. 그런 다음 loop_forever 에서 수신 대기 상태로.
    프로그램이 끝나면 주제를 Unsubscribe합니다.

    박스내에서의 라이브러리의 사용 방법은, 이하의 기사를 참고로 했습니다.
  • Pepper용 Twitter 박스 만들기

  • (어쩐지 검토하고 나면 코드를 고치고 싶어졌습니다)
    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()
    

    Choregraphe로 연결





    Publisher 측면



    MQTT 브로커에 "hello world"를 날리기만 하면 됩니다.

    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)
    

    동작 확인



    Subscriber 실행



    Choregraphe에서 프로그램을 실행하여 메시지 수신 대기 상태가 됩니다.

    Publisher 실행



    터미널에서 Publisher를 실행합니다.
    $ python pub.py
    

    결과 표시



    Publisher -> Broker -> Subscriber와 메시지가 전달되고 Subscriber 측인 Choregraphe의 로그 뷰어에 내용이 표시됩니다.



    동작 확인 2



    시험에 Subscriber 측에서의 메시지 수신시의 처리를 아래의 형태로 바꾸어 보면, Pepper 군이 말해 줍니다.
        def onMessage(self, mqttc, obj, msg):
            tts = ALProxy("ALTextToSpeech")
            tts.say(msg.payload)
    

    감상


  • Publisher/Subscriber 와 양쪽 모두 했습니다만, Publisher 측으로서는 각종 정보를 정기적으로 날리는, Subscriber 측으로서는 컨트롤의 정보를 취득해 처리를 바꾼다, 라고 하는 느낌이 Pepper 군에서는 사용하기 쉬울까.
  • 이번은 시도하고 있지 않습니다만, 일대다, 다대일이라고 하는 사용법도 재미있을 것 같네요.
  • 좋은 웹페이지 즐겨찾기