Python3でMQTTクライアント

ESP8266でMQTTを喋れるようになったので、受ける側を考えます。自分用のサービスまでしか考えていないので、記述が楽なPythonで作ります。調べると paho というMQTTクライアントがあるようなので、こちらを参考にそれを試してみます。

Python3でvenvを使って仮想環境を作ります。

~$ mkdir python
~$ cd python
~/python$ sudo apt install python3-venv
~/python$ python3 -m venv pytest
~/python$ source ./pytest/bin/activate
(pytest) ~/python$ cd pytest/
(pytest) ~/python/pytest$ 
(pytest) ~/python/pytest$ python -V
Python 3.6.8

pipをバージョンアップします。

(pytest) ~/python/pytest$ pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl (1.4MB)
    100% |████████████████████████████████| 1.4MB 672kB/s 
Installing collected packages: pip
  Found existing installation: pip 9.0.1
    Uninstalling pip-9.0.1:
      Successfully uninstalled pip-9.0.1
Successfully installed pip-19.1.1
(pytest) ~/python/pytest$ 

pahoをインストールします。

(pytest) ~/python/pytest$ pip install paho-mqtt
Collecting paho-mqtt
  Downloading https://files.pythonhosted.org/packages/25/63/db25e62979c2a716a74950c9ed658dce431b5cb01fde29eb6cba9489a904/paho-mqtt-1.4.0.tar.gz (88kB)
     |████████████████████████████████| 92kB 12.6MB/s 
Installing collected packages: paho-mqtt
  Running setup.py install for paho-mqtt ... done
Successfully installed paho-mqtt-1.4.0
(pytest) ~/python/pytest$ 

Subscriberをテストしてみます。ソースコードは以下のとおりです。

# -*- coding:utf-8 -*-
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, respons_code):
    topic = '/feeds/sensor/#'
    print('watch %s' % topic)
    client.subscribe(topic)

def on_message(client, userdata, msg):
    print(msg.topic + ' ' + str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect('XXX.XXX.XXX.XXX', 1883, keepalive=60)
client.loop_forever()

結果は、

(pytest) ~/python/pytest$ python scbscriber.py 
watch /feeds/sensor/#
/feeds/sensor/0001 b'0001 4C11AEXXXXXX 1970/01/01 08:00:02 28802 0'
/feeds/sensor/0001 b'0001 4C11AEXXXXXX 2019/07/16 01:39:52 1563241192 1'
/feeds/sensor/0001 b'0001 4C11AEXXXXXX 2019/07/16 01:39:53 1563241193 2'
/feeds/sensor/0001 b'0001 18FE34XXXXXX 1970/01/01 08:00:02 28802 0'
/feeds/sensor/0001 b'0001 4C11AEXXXXXX 2019/07/16 01:39:54 1563241194 3'
/feeds/sensor/0001 b'0001 18FE34XXXXXX 2019/07/16 01:39:55 1563241195 1'
/feeds/sensor/0001 b'0001 4C11AEXXXXXX 2019/07/16 01:39:55 1563241195 4'
/feeds/sensor/0001 b'0001 18FE34XXXXXX 2019/07/16 01:39:56 1563241196 2'
/feeds/sensor/0001 b'0001 4C11AEXXXXXX 2019/07/16 01:39:56 1563241196 5'
/feeds/sensor/0001 b'0001 18FE34XXXXXX 2019/07/16 01:39:57 1563241197 3'
/feeds/sensor/0001 b'0001 4C11AEXXXXXX 2019/07/16 01:39:57 1563241197 6'
/feeds/sensor/0001 b'0001 18FE34XXXXXX 2019/07/16 01:39:58 1563241198 4'

ということで、無事に動作しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)