MQTT#using Python Library as a Subscriber and Publisher

この記事ではPythonを使用しMQTT Clientを実装する方法を紹介します。ちなみにBroker側はRaspberry-pi3を使用します。

Install Broker

Raspberry操作するとき役に立つLink:

Raspberrypi#Using VNC Viewer
RaspberryPI#初期でcmdline.txt編集しStatic IP設定
RaspberryPI#OSを入れずにSSHをEnableする方法

RaspberryからBrokerビルドする方法:

MQTT#Brokerのセットアップ

もsBrokerから接続拒否されたら:

RaspberryPI#OSを入れずにSSHをEnableする方法

Install Python Library

まずMQTT ClientのLibraryをインストールします。

pip install paho-mqtt

https://www.eclipse.org/paho/index.php?page=clients/python/index.php

https://www.eclipse.org/paho/index.php?page=clients/python/docs/index.php

Main Functions used

connect()

connect(host, port=1883, keepalive=60, bind_address=””)

connect() 関数はBrokerに接続します。

  • host
    • BrokerのhostnameやIP address 
  • port
    • Brokerの接続Port. Defaults は 1883.
  • keepalive
    • Brokerと接続する最大時間(秒)
  • bind_address
    • Local network interfaceのIP
  • Callback
    • .BrokerからCONNACKのReturn Messageが来るときのCallBack関数。

disconnect()

disconnect()

Brokerと接続を切断します。

publish()

publish(topic, payload=None, qos=0, retain=False)

Brokerにメッセージを送る。

argumentsは以下になります:

  • topic
    • MessageのTopic
  • payload
    • Publish のmessage
  • qos
    • quality of service 
  • retain
    • True,Message= “last known good”

MQTTMessageInfoの戻り:

  • rc
    • publishing.の結果
      • MQTT_ERR_SUCCESS=成功
      • MQTT_ERR_NO_CONN=未接続
      • MQTT_ERR_QUEUE_SIZE =max_queued_messages_set使用
  • mid 
    • message ID
  • wait_for_publish() 
    • block until the message is published. 
  • is_published 
    • True=MessageがPublishedされた

Callback (publish)

MessageがPublishされたら生成されるCallBack関数

subscribe()

subscribe(topic, qos=0)

TopicをSubscribe する関数。

  • topic
    • subscribeするTopic
  • qos
    • quality of service.

Callback (subscribe)

SubscribeがBrokerからAckされたら生成されるCallBack関数

Callbacks

on_connect()

on_connect(client, userdata, flags, rc)

Brokerから接続OKの返事がきたときのCall Back関数.

  • client
    • the client instance 
  • userdata
    • the private user data as set in Client() or user_data_set()
  • flags
    • response flags 
  • rc
    • connection 結果

on_message()

on_message(client, userdata, message)

Called when a message has been received on a topic.

Message受信されたときのCall Back関数.

  • client
    • the client instance 
  • userdata
    • the private user data as set in Client() or user_data_set()
  • message
    • MQTTMessageのinstance . members topic, payload, qos, retainが含まれているClassです。

on_publish()

on_publish(client, userdata, mid)

publish() call が完了したときのCall Backの関数。

on_subscribe()

on_subscribe(client, userdata, mid, granted_qos)

BrokerからsubscribeのTopic返事がきたときのCall Back関数です。


Implement a Subscriber

以下はSubscriberを実装するPython Scriptです。Topicは’RoboDK/Station/#’になります。

import paho.mqtt.client as mqtt
import time

def on_connect(client,userdata,flag,rc):
    print(‘Connected with result code ‘+str(rc))
    client.subscribe(‘RoboDK/Station/#’)

def on_disconnect(client,userdata,rc):
    if rc !=0:
        print(‘Something Wrong..’)

def on_message(client,userdata,msg):
    print(str(msg.payload)+’,’+msg.topic+’,’+str(msg.qos))
   
   
BROCKER_URL=’192.168.1.50′
BROCKET_PORT=1883
   
client=mqtt.Client()
client.on_connect=on_connect
client.on_disconnect=on_disconnect
client.on_message=on_message

client.connect(BROCKER_URL,BROCKET_PORT,60)
count=0

while True:
    client.loop_forever()
client.disconnect()


Implement a Publisher

以下Publisherを実装するPython Scriptです。Topicは’RoboDK/Station/st1/Example’になります。

import paho.mqtt.client as mqtt
import time

def on_connect(client,userdata,flag,rc):
    print(‘Connected with result code ‘+str(rc))
    client.subscribe(‘RoboDK/Station/s1/Lamp/Red’)

def on_disconnect(client,userdata,rc):
    if rc !=0:
        print(‘Something Wrong..’)

def on_publish(client,userdata,mid):
    print(‘publish: {0}’.format(mid))
   
BROCKER_URL=’192.168.1.50′
BROCKET_PORT=1883
   
client=mqtt.Client()
client.on_connect=on_connect
client.on_disconnect=on_disconnect
client.on_publish=on_publish

client.connect(BROCKER_URL,BROCKET_PORT,60)
count=0

while count<100:
    ret=client.publish(‘RoboDK/Station/st1/Example’,str(count))
    count=count+1
    time.sleep(0.1)
client.disconnect()

Result

まずPublisherを実行し、MessageをBrokerにPublishします。

最初はTeraterm を使用しRaspberry piアクセスし、以下のコマンドを実行しsubscriberを生成します。

mosquitto_sub -d -t RoboDK/Station/st1/#

The result is output from the Terminal.

次はSubscriberのPython Scriptを実行すると、Publisherからのメッセージが受信できるようになります。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする