Raspberry pi(paho)でのMQTTメッセージ購読の話

今回はRaspberry piでのMQTTメッセージを購読する方法を調査しました。
Raspberry piでの実装言語は… Pythonで行ってみました。
Pythonで行うとなるとpaho-mqttを使うと楽らしいので購読を行うだけのサンプルプログラムを作成してみました。

メインの参照はこちら…

https://github.com/eclipse/paho.mqtt.python

さまざまなサイトを見ましたが要素だけを抽出しました。
参考にさせていただいた全世界叡智に感謝
# 履歴残していませんでした;;

ターゲット

  • hostname : raspberrypi
  • Raspberry pi : 3 Model B v 1.2
  • OS : Raspberry pi OSだったはず…
  • debian : 10.12 (/etc/debian_version)
  • uname : Linux raspberrypi 5.10.63-v7+ #1496 SMP Wed Dec 1 15:58:11 GMT 2021 armv7l GNU/Linux
  • python : Python 3.7.3

今回の実装図はこんな感じになりました。
201にMQTTサーバ(mosquitto)があって
220に購読プログラムを走らせます
221からメッセージを発行します(mosquitto_pubコマンド)
これで、220発行のメッセージが220で購読後出力されれば疎通成功です。

環境は前回のMQTT(Mosquitto)サーバの構築の話 2022年5月28日の構成のままです。

pahoのインストール

pi@raspberrypi:~ $ sudo pip3 install paho-mqtt

購読サンプルソース

さまざまな実装方法があるらしいですが、要素だけを出すとこんな感じでしょうか。
on_message部分でメッセージ内容だけを標準出力に表示するだけのプログラムです。

#! /usr/bin/python3
import paho.mqtt.client as mqtt

host = '192.168.1.201'
port = 1883
topic = 'test'

def on_message(client, userdata, msg):
    print(str(msg.payload,'utf-8'))

def run():
    client = mqtt.Client()
    client.connect(host, port=port, keepalive=60)
    
    client.subscribe(topic)
    client.on_message = on_message

    client.loop_forever()

if __name__ == '__main__':
   run()

実行結果

購読プログラムの動作確認って単体だけではできません。
発行プログラム(コマンド)を実行してメッセージを購読できれば疎通確認とやっとなります。
そのため、
はじめに購読プログラムを実行してから、
発行プログラムを実行、
購読プログラムに発行メッセージが表示されることで
疎通確認となります。

1. 実行確認するのに購読プログラムを実行します

pi@raspberrypi:~ $ python3 subscribe.py 

2. 発行端末からMQTTメッセージ(topic test / 本文 “Test2”)を発行しました。

wataru@k8s-master:~ $ mosquitto_pub -h 192.168.1.201 -t test -m "Test2" -d
Client (null) sending CONNECT
Client (null) received CONNACK (0)
Client (null) sending PUBLISH (d0, q0, r0, m1, 'test', ... (5 bytes))
Client (null) sending DISCONNECT

3. 疎通確認

pi@raspberrypi:~ $ python3 subscribe.py 
Test2

通りました。

終いに

今回はRaspberry piでMQTTメッセージの購読ができることを確認できました!

Pythonで行いましたが他言語も考えられるかなとか思いましたが、しばらく放置ですね。