PythonクライアントをPaho MQTTで実装

テキストコピッド

導入事例

Pythonは、今日最も広く使用されているプログラミング言語の1つです。すべての主要な言語でサポートされています。 オペレーティング システム。 制約された環境のために、マイクロ トピックス設計されている軽量のサブセットを提供します 低エンドプロセッサ用

このガイドは、構築のステップバイステップのプロセスを歩くMQTT クライアント利用するEclipse Paho MQTT Python ライブラリ。

Pahoライブラリは顧客サービスEclipse Foundation によって維持される実装。

前提条件

始める前に、次のことを確かめて下さい:

  • トピックス- Python 3.6 以降がシステムにインストールされているか、公式の Python ウェブサイトから必要なバージョンをダウンロードしてください。
  • パホ MQTT

pip インストール paho-mqtt==2.1.0

MQTTの特長 コネクト

このセクションでは、さまざまな方法で接続することができますMQTTについてPythonを使う。 進む前に、ブローカーが希望する接続方法をサポートしていることを確認してください (TCP、TLS、WebSocketなど) と正しい接続パラメータがあります。

  • サイトマップ
  • ポート番号
  • サイトマップ(必須)
  • 認証機関(TLS接続用)

基本TCP コネクション

BROKER_HOST = "broker-url" の
BROKER_PORT=1883年
クライアント = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2、client_id="testclient", Protocol=mqtt. MQTTv311の特長
client.connect(BROKER_HOST、BROKER_PORT)

認証と接続

認証を必要とするMQTTブローカーに接続するには、ユーザー名とパスワードを設定します。

client.username_pw_set("username"、"password")


TLS/SSL に接続

安全にご使用いただくためTLS/SSLの特長: : :

client.tls_set(cert_reqs=ssl.CERT_REQUIRED),
tls_version=sssl. は、 プロトカラー_TLS


WebSocketを介して接続

TCP ではなく WebSocket に接続するには:

クライアント = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client_id=CLIENTID、プロトコル=PROTOCOL、
交通機関="websockets"#

MQTT出版

トピックにデータを送信するには:

client.publish(topic="test/topic") は、
payload=json.dumps({"温度":50.5、"湿気":34})、
qos=1、retain=False)

MQTTの特長 会員登録

メッセージを受信するには、トピックフィルタを購読します。 ブローカーは先に進む クライアントへのメッセージのマッチング

client.subscribe(topic="test/+"、qos=1)


メッセージの受信を停止するには、クライアントは以下を使用して退会することができます。

client.unsubscribe(topic="test/+")

MQTTの切断

常に資源の漏出を避け、適切な保障するためにきれいに切断して下さい ブローカーのセッション処理:

クライアント.disconnect()
クライアント.loop_stop()

ベストプラクティス

1. 顧客識別戦略

特定のクライアント ID を各デバイスに正確に識別できるように割り当てます。 インスタグラム プライベートセットアップ、明確に割り当てる 個々の顧客へのID; 共有 環境、各クライアント ID にランダムな文字列を追加し、維持 ユニークネス。

2。 データアーキテクチャ デザイン

戦略的にデータ構造を事前に計画する。 明白を扱うかどうか テキスト、JSON 形式、または数値データ、設計が調整されることを確認します。 アプリケーション固有のニーズを満たします。

3。 強力なエラー処理

強力なエラー管理を実装し、MQTTの特長関係の失敗, サブスクリプションの問題とメッセージの公開エラーが効果的に.

4。 機密保持

ユーザー名、パスワード、クライアントIDなどの機密情報を保護 ソースコードをハードコーディングしない 環境変数またはセキュアな構成を使用する 代わりにファイル。

5。 定期的なテストと監視

連続テスト MQTT 通信やモニターなどのクライアントメトリック 接続状況、メッセージのスループット、エラー率を迅速に特定し、問題を解決します。

6. セッション管理の最適化

きれいで、ニュースリリース(`clean: true` または `clean: false`) は、サブスクリプションとキューイングされたメッセージを全体に保持する必要がある クライアントの接続。

7。 接続解除の解除

コードを追加して、再接続を試みるMQTTについてそこにあるとき 予期しない切断。 これにより、クライアントが接続され、接続されていないことを確実にします。 データを失います。

サンプル MQTTv311 の顧客

ドキュメント
輸入時間
json をインポート
ログイン
paho.mqtt.client を mqtt にインポート
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
ログ.basicConfig(level=logging.DEBUG)
# --- MQTT の構成---
BOKER_HOST = "mqtt-broker-URL" # ファームウェアのホスト/IPで実行
BROKER_PORT = 1883 # デフォルト MQTT ポート (TLS は、現在進行中です,8883 )
トランスポート = "tcp" # 'tcp' または 'websockets
ユーザ認証
プロフィール
PASSWORD = "お金"
暗号化 = 関係 # TLS 暗号化 toグル
クライアントID = "testclient4" MQTT クライアントのアシスタント
PROTOCOL = mqtt.MQTTv311 # MQTTバージョン3.1.1 動作
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 株式について お問い合わせ
def on_connect(client、userdata、フラグ、error_code、 response=None):
client.subscribe("test/topic") # 接続のトピック
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # お問い合わせ お問い合わせ
def on_message(クライアント、ユーザデータ、msg):
ログイン
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # クライアントから お問い合わせ
def on_disconnect(client、userdata、how_code、Not Property=)::
クライアント.loopstop() # ゲートウェイ
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
クライアント = mqtt.Client()
mqtt.CallbackAPIVersion.VERSION2,
client_id=クライアントID
ハードウェア
トランスポート=トランスポート
)
MQTTイベントをフォローする
#---設定---認証
認証について
client.username_pw_set(ユーザー名、パスワード)
# --- TLS 暗号化設定(有効化のみ) ---
暗号化の場合:
クライアント。 tls_set()
cert_reqs=ssl.CERT_REQUIRED、
tls_version=ssl.PROTOCOL_TLS
)
お問い合わせ
client.on_connect = オンコネクト
client.on_message= メッセージオン
client.on_disconnect = on_disconnect ディレクティブ
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # お問い合わせ
client.connect(BROKER_HOST、BROKER_PORT)
クライアント.loop_start() を起動 を起動 を起動 して
このサイトについて
睡眠(2)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # お問い合わせ
TOPIC = "テストトピック"
ペイロード = json.dumps({" 温度": 50.5、" 湿気": 34})
client.publish(topic=TOPIC、ペイロード=ペイ、qos=1、retain=False)
このサイトについて
時間. 睡眠(3)
お問い合わせ
クライアント.disconnect()

サンプル MQTTv5 の顧客

ドキュメント
輸入時間
json をインポート
ログイン
paho.mqtt.client を mqtt にインポート
paho.mqtt.properties のインポート プロパティから
paho.mqtt.packettypes のインポートパッケージタイプから
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # MQTT について
ログ.basicConfig(level=logging.DEBUG)
# --- MQTT の構成---
BOKER_HOST = "mqtt-broker-url" # ファームウェアの読み込み
デフォルトポート (TLS の 8883 )
トランスポート = "tcp" # オプション: 'tcp' または 'websockets
ユーザー名/パスワード認証
プロフィール
PASSWORD = "お金"
暗号化 = 関係 # TLS 動作真
CLIENTID = "testclient5" # クライアント パスワード
PROTOCOL = mqtt.MQTTv5 # MQTT v5 チュートリアル
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # コネクト---
def on_connect(client、userdata、フラグ、error_code、 response=None):
ユーザ登録
client.subscribe(「テスト/トピック」)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # お問い合わせ
def on_message(クライアント、ユーザデータ、msg):
携帯電話
ログイン
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # で接続解除---
def on_disconnect(client、userdata、how_code、Not Property=)::
# 脱獄
クライアント.loop_stop()
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
クライアント = mqtt.Client()
mqtt.CallbackAPIVersion.VERSION2,
client_id=クライアントID
ハードウェア
トランスポート=トランスポート
)
client.enable_logger() は、
#--------- 認証
認証について
client.username_pw_set(ユーザー名、パスワード)
# --- TLS/SSL(TLS/SSL) ---
暗号化の場合:
クライアント。 tls_set()
cert_reqs=ssl.CERT_REQUIRED、
tls_version=ssl.PROTOCOL_TLS
)
お問い合わせ
client.on_connect = オンコネクト
client.on_message= メッセージオン
client.on_disconnect = on_disconnect ディレクティブ
# --- MQTT v5 プロパティ 実行する お問い合わせ
connect_props = プロパティ(PacketTypes.CONNECT)
connect_props.SessionExpiryInterval = 60 # 接続解除後60秒の投稿
お問い合わせ
client.connect(クライアント)
ブールバード
ポート、
clean_start=mqtt.MQTT_CLEAN_START_FIRST_ONLY,
プロパティ=connect_props
)
.loop_start() # 別の で ゲートウェイ
お問い合わせ
睡眠(2)
# --- MQTT v5 公開プロパティ お問い合わせ
publish_props = プロパティ(PacketTypes.PUBLISH)
Publish_props.MessageExpiryInterval = 30 で ライブチャットで # Expire メッセージ
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # お問い合わせ
ペイロード = json.dumps({" 温度": 50.5、" 湿気": 34})
クライアント.publish()
=" トピックテスト/トピック",
ペイロード=ペイロード
qos=1,
transmission= 関係物,
プロパティ=publish_props
)
お問い合わせ お電話にてお問い合わせ
時間. 睡眠(3)
お問い合わせ
クライアント.disconnect()

トラブルシューティング

  • もし、MQTTについてURL が間違っているか、到達できないか、プログラムが接続例外をスローする可能性があります。
  • TLS を使用する場合は、暗号化=True とポートを 8883 に設定してください。

PythonでパワーIoT!

スマートなワークロードを実行
当社のMQTTブローカー

Python MQTTクライアントを簡単に接続し、メッセージングを合理化し、IoTプロジェクトをスケール化
信頼できる、高性能のブローカーを使って。