Pythonは今日最も広く使用されている言語で、ほとんどのオペレーティングシステムで動作します。 マイクロ Python は 低いエンド プロセッサのために設計されていました。 このガイドでは、ステッププロセスによってステップを記述してビルドします。Python MQTTの特長 クライアント利用するEclipseパホ ライブラリー. . すべてのMQTTの詳細情報も提供 MQTT クライアントと MQTT クライアント間で起こることができるハンドシェイクとメッセージトランザクションpython 拡張可能 MQTTブローカーお問い合わせ Pahoライブラリはオープンソースです ライセンスポリシーを自由に使用できるクライアント。
始める前に、次のことを確かめて下さい:
pip インストール paho-mqtt==1.6.0
python -m の venv myenv
ソースmyenv/bin/activate # Windows では `myenv\Scripts\activate
このセクションには、ブローカーに接続するさまざまな方法のコードスニペットがあります。 確認する MQTT アプリケーションは、使用する接続タイプをサポートしています。 また、取得 対応する接続パラメータの接続クラウドホスト MQTT サーバー(住所、港、ユーザー名/パスワード、CAの証明書) またはその他のローカルインストールインスタンス。
MQTTの特長 TCP で
クライアントを TCP に接続するために、次のコードを使用します。
MQTT 接続を使用してマクロ アドレスを定義する パラメータ。
def on_connect(client、userdata、フラグ、rc):
print('\n{} Connected'.format(client._client_id.decode()))) は、
random_chars = ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
client_id = 'crystalmq_'+random_chars ディレクティブ
クライアント = paho.mqtt.client.Client(client_id)
client.on_connect = オンコネクト
client.connect('public-mqtt-broker.bevywise.com'、1883年)
クライアント.loop_start()
クライアントを作成する
def on_connect(client、userdata、フラグ、理由) コード,
プロパティ=なし):
印刷('\n{}) 理由コードと接続:
{}'.format(client._client_id.decode(), 理由コード)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ランダムなクライアント ID を生成する
random_chars = ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
client_id = 'crystalmq_' + ランダム_chars
# MQTTv5でMQTTクライアントを初期化
クライアント = mqtt.Client(client_id, プロトコル=paho.mqtt.client. MQTTv5の特長
client.on_connect = オンコネクト
client.connect('public-mqtt-broker.bevywise.com'、1883年)
TLS/SSL上のMQTT
次のコードは、ブローカーに安全に接続するのに役立ちます TLS 以上 MQTT 接続を使用してマクロ ADDRESS を定義する パラメータ。
# MQTT接続パラメータ
ADDRESS = "public-mqtt-broker.bevywise.com" # 交換する
ブローカーの住所
ポート = 8883 # MQTT サーバー TLS ポート
CLIENT_ID = 'crystalmq_' + ''.join(random.choices(string.ascii_letters)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# MQTT接続用のコールバック機能
def on_connect(client、userdata、フラグ、rc):
印刷('\n{}) 結果コードと接続:
{}'.format(client._client_id.decode()、mqtt.connack_string(rc)))
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ランダムなクライアント ID を生成する
client_id = 'crystalmq_' + ''.join(random.choices(string.ascii_letters)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# MQTT クライアントの初期化
クライアント = mqtt.Client(client_id)client.on_connect = オンコネクト
# TLS接続を有効にする
クライアント.tls_set()
ca_certs=None, # サーバの CA 証明書ファイルへのパス
認証
certfile=None, # 相互のクライアント証明書ファイルへのパス
認証(該当する場合)
keyfile=None, # クライアントの秘密鍵ファイルへのパス (該当する場合)
cert_reqs=ssl.CERT_REQUIRED、
tls_version=sssl. は、 PROTOCOL_TLS、
暗号=なし
)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ブローカーに接続する
client.connect(ADDRESS、ポート)
MQTT TLS 証明書の生成そして提供して下さい MQTT 接続を保護するための接続パラメータ。 MQTTClient_connect を呼び出す前に TLS パラメータを設定する クライアントをクライアントに接続オンライン クラウド MQTT サーバーTLS を安全にオーバーします。
# MQTT接続パラメータ
ADDRESS = "public-mqtt-broker.bevywise.com" # 交換する
ブローカーの住所
ポート = 8883 # MQTT TLSポート
CLIENT_ID = 'crystalmq_' + ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
# MQTT接続用のコールバック機能
def on_connect(client、userdata、フラグ、rc):
印刷('\n{}) 結果コードと接続:
{}'.format(client._client_id.decode()、mqtt.connack_string(rc)))
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ランダムなクライアント ID を生成する
client_id = 'crystalmq_' + ''.join(random.choices(string.ascii_letters) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# MQTT クライアントの初期化
クライアント = mqtt.Client(client_id)
client.on_connect = オンコネクト
# サーバー検証なしでTLS接続を有効にする
client.tls_set(cert_reqs=ssl.CERT_NONE) は、
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ミドルウェア(ブローカー)に接続する
client.connect(ADDRESS、ポート)
メッセージングプラットフォーム(ブローカー)にサーバー証明書が発行されている場合 から 信頼される CA は、サーバー 証明書を使用して確認することができます:
# MQTT接続パラメータ
ADDRESS = "public-mqtt-broker.bevywise.com" # 交換する
ブローカーの住所
ポート = 8883 #ブローカーのTLSポート
CLIENT_ID = 'crystalmq_' + ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
# MQTT接続用のコールバック機能
def on_connect(client、userdata、フラグ、rc):
印刷('\n{}) 結果コードと接続:
{}'.format(client._client_id.decode()、mqtt.connack_string(rc)))
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ランダムなクライアント ID を生成する
client_id = 'crystalmq_' + ''.join(random.choices(string.ascii_letters) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# MQTT クライアントの初期化
クライアント = mqtt.Client(client_id)
client.on_connect = オンコネクト
# CA 証明書ファイルへのパス
ca_cert = '/path/to/your/ca_certificate.pem お問い合わせ
# サーバー認証によるTLS接続を有効にする
client.tls_set(ca_certs=ca_cert, cert_reqs=sssl.CERT_REQUIRED) は、
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ブローカーに接続する
client.connect(ADDRESS、ポート)
MQTT サーバーに自己署名されたサーバー 証明書がある場合 それからサーバー 証明書はから得られるルートの証明書を使用して確認することができます ブローカー:
ランダム、文字列、paho.mqtt.client、sslをインポートする
ssl.match_hostname = lambda cert, ホスト名: ログイン
def on_connect(client、userdata、フラグ、rc):
print('\n{} Connected'.format(client._client_id.decode()))) は、
random_chars = ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
client_id = 'crystalmq_'+random_chars ディレクティブ
クライアント = paho.mqtt.client.Client(client_id)
root_cert_path = '/path/to/root.crt お問い合わせ
client.tls_set(ca_certs=root_cert_path,
cert_reqs=ssl.CERT_REQUIRED,tls_version=sssl.PROTOCOL_TLSv1_2,
ciphers=なし
client.tls_insecure_set(True) クライアント
client.on_connect = オンコネクト
client.connect('public-mqtt-broker.bevywise.com'、8883)
クライアント.loop_start()
WebSocket 経由で MQTT
このようにブローカーのアドレスを定義して接続します WebSocket 経由でクライアント。
# WebSocket用のMQTT接続パラメータ(TLSなし)
ADDRESS_WS = 'ws://public-mqtt-broker.bevywise.com:8083/mqtt' # 置換
あなたのメッセージングミドルウェアのWebSocketアドレスを使って
CLIENT_ID = 'crystalmq_' + ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
# MQTT接続用のコールバック機能
def on_connect(client、userdata、フラグ、rc):
印刷('\n{}) 結果コードと接続:
{}'.format(client._client_id.decode()、mqtt.connack_string(rc)))
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ランダムなクライアント ID を生成する
client_id = 'crystalmq_' + ''.join(random.choices(string.ascii_letters) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# WebSocket 用の MQTT クライアントを初期化 (TLS なし)
クライアント = mqtt.Client(client_id)
client.on_connect = オンコネクト
# WebSocket経由でサーバーに接続(TLSなし)
クライアント.connect(ADDRESS_WS)
セキュアなWebSocket上MQTT
以下のコードを使用して、クライアントをセキュアに接続します。 ウェブソケット。
TLSの設定 TLS セクションで MQTT で指定されたオプション。
ブローカーの接続を使用してマクロアドレスを定義する パラメータ。
# WebSocketの接続パラメータ(TLS付き)
ADDRESS_WSS = 'ws://public-mqtt-broker.bevywise.com:8084/mqtt' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
ブローカーの安全なWebSocketアドレスに置き換える
CLIENT_ID = 'crystalmq_' + ''.join(random.choices(string.ascii_letters)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# MQTT接続用のコールバック機能
def on_connect(client、userdata、フラグ、rc):
印刷('\n{}) 結果コードと接続:
{}'.format(client._client_id.decode()、mqtt.connack_string(rc)))
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ランダムなクライアント ID を生成する
client_id = 'crystalmq_' + ''.join(random.choices(string.ascii_letters)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# WebSocket 用の MQTT クライアントを初期化 (TLS 付き)
クライアント = mqtt.Client(client_id)
client.on_connect = オンコネクト
# CA 証明書ファイルへのパス(サーバー証明書の検証の場合)
お問い合わせ
必須)
ca_cert = '/path/to/your/ca_certificate.pem お問い合わせ
# WebSocket の TLS 接続を有効にする
client.tls_set(ca_certs=ca_cert, cert_reqs=sssl.CERT_REQUIRED) は、
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # TLSでWebSocket上のメッセージハブに接続する
クライアント.connect(ADDRESS_WSS)
MQTT の設定 認証
Python MQTTクライアントを接続するには、MQTT ユーザー名と MQTT が必要です。 認証用のパスワード、接続オプションにユーザー名とパスワードを追加 このように:
# TCP の MQTT 接続パラメータ (TLS なし)
ADDRESS_TCP = 'public-mqtt-broker.bevywise.com' # 交換する
ブローカーのTCPアドレス
ポート = 1883 # MQTT の TCP ポート
ユーザ名 = 'your_mqtt_username' # MQTT ユーザー名で置換する
PASSWORD = 'your_mqtt_password' # MQTT パスワードで置換する
CLIENT_ID = 'crystalmq_' + ''.join(random.choices(string.ascii_letters)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# MQTT接続用のコールバック機能
def on_connect(client、userdata、フラグ、rc):
印刷('\n{}) 結果コードと接続:
{}'.format(client._client_id.decode()、mqtt.connack_string(rc)))
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ランダムなクライアント ID を生成する
client_id = 'crystalmq_' + ''.join(random.choices(string.ascii_letters)
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
string.digits、k=10)
# TCP の MQTT クライアントを初期化 (TLS なし)
クライアント = mqtt.Client(client_id)
client.username_pw_set(username=USERNAME、パスワード=パスワード)
client.on_connect = オンコネクト
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # TCP(TLSなし)を超えるメッセージングプラットフォームに接続
認証
client.connect(ADDRESS_TCP, ポート)
高度な機能
最終ウィル&テストの設定
設定する最終ウィルとテスト機能に クライアントが予期しないとブローカーが公開するメッセージを指定する 切断。 これは、接続されていないクライアントの他の加入者に通知するのに役立ちます ステータス。
接続にLast Willを設定するには、次のコードを使用します。 オプション:
random_chars = ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
client_id = 'crystalmq_'+random_chars ディレクティブ
クライアント = paho.mqtt.client.Client(client_id)
client.will_set("willtopic", payload="Good bye CrystalMQ", qos=0,
保持=偽物
client.connect('public-mqtt-broker.bevywise.com'、1883年)
調節は生きている保ちます
MQTT はクライアント・ブローカー・コネクションを維持します。 働き続けるメカニズム。 調整する常に生き続ける頻度を制御する間隔 クライアントは PINGREQ メッセージを送信します。
あなたの要件に合ったコードを変更します。
client.connect(hostip、ポート、enalive=40)
セッションの持続性の設定
MQTTクライアントのセッションデータには、 クライアントとクライアントが受け取る任意のデータによって行われたサブスクリプション QoS>0。 クライアントはメッセージングプラットフォームを利用して、セッションデータをコネクション間で保存することができます。
MQTT 3.1.1の顧客は維持するためにMQTTサーバーを要求するためにきれいなセッション= 0を置くことができます 接続間で保存されたセッション情報。
random_chars = ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
client_id = 'crystalmq_'+random_chars ディレクティブ
クライアント = paho.mqtt.client.Client(client_id,clean_session=False)
MQTTの特長 5 クライアントは、クリーンスタート = 0 とセッションの有効期限を設定できます Interval = 'N' をサーバーにリクエストし、セッション情報を保存 'N' 秒間の接続
random_chars = ''.join(random.choices(string.ascii_letters +)
string.digits、k=10)
client_id = 'crystalmq_' + ランダム_chars
# MQTTv5 用の MQTT クライアントを clean_session=False で初期化
クライアント = mqtt.Client(client_id, clean_session=) 偽,
プロトコル=mqtt MQTTv5の特長
# MQTT接続用のコールバック機能
def on_connect(client、userdata、フラグ、rc、プロパティ=なし):
印刷('\n{}) 結果コードと接続:
{}'.format(client._client_id.decode()、mqtt.connack_string(rc)))
プロパティの場合:
print("Received Connection プロパティ:")
prop の場合, val プロパティ.items():
print(f"{prop}: {val}")
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # on_connect コールバック関数を設定する
client.on_connect = オンコネクト
# 接続の詳細(あなたのものに置き換えてください)
ブローカーの
アドレスおよび港)
Broker_address = 'public-mqtt-broker.bevywise.com お問い合わせ
ブローカー_port = 1883 # ブローカーのポートに置き換える
# MQTT サーバーに接続する
client.connect(broker_address、ブローカー_port)
設定最大 パケット サイズ
MQTT5 クライアントは、ミドルウェア(ブローカー)をリクエストして、データを送信することができます。 このように設定することで、特定のサイズ未満のパケット:
paho.mqtt.propertiesの輸入のプロパティから
paho.mqtt.packettypesのインポートPacketTypesから
def on_connect(client、userdata、フラグ、rc、プロパティ=なし):
print('\n{} Connected'.format(client._client_id.decode()))) は、
クライアント = paho.mqtt.client.Client(client_id=client_id),
プロトコル=paho.mqtt.client。 MQTTv5の特長
client.on_connect = オンコネクト
connect_properties = プロパティ(PacketTypes.CONNECT)
connect_properties.MaximumPacketSize=256
client.connect('public-mqtt-broker.bevywise.com'、1883年)
プロパティ=connect_properties
クライアント.loop_start()
MQTTブローカーの確保
IoTデバイスをグローバルに展開し、ホストされているMQTTサーバーWi-Fi、GSMなどのさまざまな通信方法を通して、 潜在的な攻撃を疑わしいものにする。 IoT の実装を保護するため、セキュアMQTT ブローカーの展開重要です。 MQTT認証とTLS/SSLの実装が可能 TCP と WebSocket 接続の MQTT の両方の暗号化。 設立によりMQTTのセキュリティMQTTコネクトから右へ 段階は、改ざん防止、堅牢なIoTエコシステム、データやデバイスの保護を保証します。 不正なアクセスから。
データの送信
複数の加入者にデータを効率的に配信 以下のコードスニペットで指定されたトピックに公開します。
ランダム、文字列、paho.mqtt.client、時間
def on_publish(クライアント、ユーザーデータ、ミッド):
print('\n{} SENT PktID:{}'.format(client._client_id.decode(),mid)) は、
random_chars = ''.join(random.choices(string.ascii_letters + string.digits)、
k=10)
client_id = 'crystalmq_'+random_chars ディレクティブ
クライアント = paho.mqtt.client.Client(client_id)
client.on_connect = on_publish ディレクティブ
client.connect('public-mqtt-broker.bevywise.com'、1883年)
クライアント.loop_start()
真の時:
client.publish('testtopic'、'Hello CrytalMQ!'、qos=1、retain=False)
時間.睡眠(40)
# MQTT のコールバック関数が acnowledgment を公開 (on_publish)
def on_publish(クライアント、ユーザーデータ、ミッド):
print('\n{} SENT PktID:{}'.format(client._client_id.decode(), middle) ) は、
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ランダムなクライアント ID を生成する
random_chars = ''.join(random.choices(string.ascii_letters +)
文字列。 数字,
k=10)
client_id = 'crystalmq_' + ランダム_chars
# MQTTv5 の MQTT クライアントを初期化
クライアント = mqtt.Client(client_id、プロトコル=mqtt。) MQTTv5の特長
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # on_publish コールバック関数を設定する
クライアント.on_publish = on_publish
# 接続の詳細(サーバーのリプレース)
メールアドレス
そして港)
Broker_address = 'public-mqtt-broker.bevywise.com お問い合わせ
ブローカー_port = 1883 # ブローカーのポートに置き換える
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # サーバーに接続する
client.connect(broker_address、ブローカー_port)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # MQTT通信を処理する背景スレッドを開始します
クライアント.loop_start()
保持メッセージの設定
メッセージの公開時に保持フラグを有効にして、そのメッセージを確実にするために ブローカーは各トピックの最後のメッセージを格納します。 これは、新しい加入者を保証する 接続時に最新のメッセージを受信します。
これを実行するには、次のコードスニペットを使用します。
client.publish('testtopic'、'Hello、CrystalMQ!'、qos=0、retain=True)
QoSレベルを指定する
プロトコルはMQTT QoSレベル3レベルメッセージ 配達:
MQTT メッセージを公開する際に必要な QoS レベルを指定します。 このコード:
publish_properties = プロパティ(PacketTypes.PUBLISH)
publish_properties.MessageExpiryInterval = 60
client.publish("testtopic", "Hello CrysqlMQ!", qos=1,
プロパティ=publish_properties
メッセージの有効期限インターバル
「メッセージの有効期限間隔」プロパティは、メッセージの寿命を秒単位に設定します。 現時点では、ブローカーはそれを破棄します。MQTT5の特長この機能をサポートしています。 MQTT5 クライアントは、データを公開する際にこれを設定できます。
MQTT 5のため:
publish_properties = プロパティ(PacketTypes.PUBLISH)
publish_properties.MessageExpiryInterval = 60
client.publish("testtopic", "Hello CrysqlMQ!", qos=1,
プロパティ=publish_properties
トピック 別名で
'Topic Alias' プロパティは、クライアントが短いエイリアスを使用することを可能にします トピック名の代わりに、メッセージパケットサイズを減らし、ネットワークを改善 効率。
connect_properties = プロパティ(PacketTypes.CONNECT)
connect_properties.TopicAliasMaximum = 10
client.connect('public-mqtt-broker.bevywise.com'、1883年)
プロパティ=connect_properties
MQTT PUBLISHに関連付けられている特性はメッセージの処理を高めます、 ブローカーやクライアントのコンテキストや指示を提供します。 これらのプロパティ, 含む メッセージの有効期限間隔とトピックのエイリアス、メッセージ配信とネットワークの最適化 帯域幅。
トピックフィルタへのサブスクライブ
他のクライアントが公開したデータを受信するには、このクライアントは マッチする購読MQTTの特長 トピックス次のようにします。
def on_subscribe(client、userdata、mid、feed_qos):
print('\n{} サブスクライブ
QoS:{}'.format(client._client_id.decode(),granted_qos))
def on_message(クライアント、ユーザデータ、メッセージ):
print('\n{} RCVD トピック:{}, メッセージ:{}, QoS:{}
PktId:{}'.format(client._client_id.decode(),message.topic,message.payload,message.qos,message.mid))
random_chars = ''.join(random.choices(string.ascii_letters + string.digits)、
k=10)
client_id = 'crystalmq_'+random_chars ディレクティブ
クライアント = paho.mqtt.client.Client(client_id)
client.on_message=オンメッセージ
client.on_subscribe = on_subscribe クライアント
client.connect('public-mqtt-broker.bevywise.com'、1883年)
クライアント.loop_start()
client.subscribe('testtopic', qos=1)
このトピックフィルタは、正確なトピックと一致させることができます。 # や + のようなワイルドカード
データの受信
サブスクリプションに送信されたデータを受信するには、コールバック関数 次のように定義する必要があります。
# MQTT接続用のコールバック機能
def on_connect(client、userdata、フラグ、rc、プロパティ=なし):
print('\n{} Connected'.format(client._client_id.decode()))) は、
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 接続時にトピックを購読する
client.subscribe('testtopic'、qos=0)
トピックからの購読解除
トピックから更新(unsubscribe)を受信を停止するには、提供されたコードを使用します 以下:
def on_unsubscribe(クライアント、ユーザデータ、ミッド):
print('\n{} UNSUBSCRIBED'.format(client._client_id.decode())))) は、
client.unsubscribe("testtopic")
クライアントの接続を適切に終了させる 双方の問題および資源の漏出を避けるブローカー、それによって維持システム 安定性。
以下のコードを使用して、ブローカーからクライアントを切断します。
def on_disconnect(client、userdata、rc):
print('\n{} rc:{}'.format(client._client_id.decode(),rc) と接続する
クライアント.loop_stop()
クライアント.disconnect()
自分で開発してカスタマイズする機会があります この環境内でビジネスロジックを複雑にし、具体的に具体的に ニーズと目的。
クライアントの識別 戦略
特定のクライアント ID を各デバイスに正確に識別できるように割り当てます。 プライベートセットアップでは、 明確に割り当てる 個々のクライアントへのID; 共有環境で、ランダム表示 各クライアント ID に文字列を入力し、一意性を維持します。
データアーキテクチャ デザイン
戦略的にデータ構造を事前に計画する。 プレーンテキストを扱うかどうか、 JSON の形式、または数値データ、設計が特定の特定のを満たすために調整されることを確認します アプリケーションのニーズ。
強力なエラー処理
MQTT接続を処理する強力なエラー管理を実施 失敗、サブスクリプションの問題、およびメッセージを効果的に公開するエラー。
機密保持
ユーザー名、パスワードなどの機密情報を保護 ソースコードにハードコーディングしないクライアントID。 環境変数または 代わりに設定ファイルを固定します。
定期的なテストと監視
MQTT通信を継続的にテストし、クライアントのメトリックを監視 接続状況、メッセージスループット、エラーレートなど、迅速に識別および修正 問題。
セッションマネジメントの最適化
きれいで、持続的なセッション(`clean: true` または `clean: false`) は、サブスクリプションとキューイングされたメッセージを全体に保持する必要がある クライアントの接続。
接続解除の解除
コードを追加して、再接続を試みるMQTTブローカーそこにあるとき 予期しない切断。 これにより、クライアントが接続され、接続されていないことを確実にします。 データを失います。
Python MQTTクライアントを使用するクライアントのための完全なコードをダウンロード 当社のメッセージングプラットフォームまたは選択したブローカーと接続するためのライブラリ。
インポート paho.mqtt.client として mqtt
インポート sys
輸入時間
ランダム、文字列をインポート
json、信号、osを輸入して下さい
paho.mqtt.propertiesの輸入のプロパティから #
paho.mqtt.packettypesのインポートPacketTypesから #
def on_connect(client、userdata、フラグ、rc):
print('\n{} Connected'.format(client._client_id.decode()))) は、
def on_message(クライアント、ユーザデータ、メッセージ):
print('\n{} RCVD トピック:{}, メッセージ:{}, QoS:{}
PktId:{}'.format(client._client_id.decode(),message.topic,message.payload,message.qos,message.mid))
def on_publish(クライアント、ユーザーデータ、ミッド):
print('\n{} SENT PktID:{}'.format(client._client_id.decode(),mid)) は、
def on_subscribe(client、userdata、mid、feed_qos):
print('\n{} サブスクライブ
QoS:{}'.format(client._client_id.decode(),granted_qos))
def on_unsubscribe(クライアント、ユーザデータ、ミッド):
print('\n{} UNSUBSCRIBED'.format(client._client_id.decode())))) は、
def on_disconnect(client、userdata、rc):
print('\n{} rc:{}'.format(client._client_id.decode(),rc) と接続する
クライアント.loop_stop()
random_chars = ''.join(random.choices(string.ascii_letters + string.digits)、
k=10)
client_id = 'crystalmq_'+random_chars ディレクティブ
クライアント = mqtt.Client(client_id)
# client.username_pw_set("some username", "some password")
# クライアント。 will_set("willtopic", payload="Good bye CrystalMQ", qos=0,
保持=偽物
# client.tls_set(ca_certs='/path/to/root.crt',certfile='/path/to/client.crt',
keyfile='/path/to/client.key',
cert_reqs=ssl.CERT_REQUIRED,tls_version=sssl. リリース PROTOCOL_TLSv1_2、暗号=なし)
client.on_connect = オンコネクト
client.connect('public-mqtt-broker.bevywise.com', 1883年, keepalive=40年)
# connect_properties = プロパティ(PacketTypes.CONNECT)
# connect_properties.SessionExpiryInterval = 60
# connect_properties.MaximumPacketSize=256
# connect_properties.TopicAliasMaximum = 10
# client.connect('public-mqtt-broker.bevywise.com'),
1883年、プロパティ=connect_properties
クライアント.loop_start()
client.subscribe('testtopic',0) は、
真の時:
#publish_properties = プロパティ(PacketTypes.PUBLISH)
#publish_properties.MessageExpiryInterval = 60
# クライアント。 publish("testtopic", "Hello CrysqlMQ!", qos=1,
プロパティ=publish_properties
client.publish('testtopic','Hello CrytalMQ!', 0) は、
時間.睡眠(30)
パス
# クライアント.disconnect()
インポート paho.mqtt.client
インポート sys
輸入時間
ランダムなインポート
インポート文字列
インポート json
輸入信号
輸入のos
def on_connect(client、userdata、フラグ、rc、プロパティ=なし):
print('\n{} Connected'.format(client._client_id.decode()))) は、
def on_message(クライアント、ユーザデータ、メッセージ、プロパティ=なし):
print('\n{} RCVD トピック:{}, メッセージ:{}, QoS:{}
PktId:{}'.format(client._client_id.decode(), message.topic,
message.payload.decode(), message.qos, message.mid) は、
def on_publish(client、userdata、mid、プロパティ=なし):
print('\n{} SENT PktID:{}'.format(client._client_id.decode(), middle) ) は、
def on_subscribe(クライアント、ユーザデータ、ミッド、qos、プロパティ=なし):
print('\n{} と QoS:{}'.format(client._client_id.decode(), qos) でサブスクライブ
def on_unsubscribe(クライアント、ユーザデータ、ミッド、プロパティ=なし):
print('\n{} UNSUBSCRIBED'.format(client._client_id.decode())))) は、
def on_disconnect(クライアント、ユーザデータ、rc、プロパティ=なし):
print('\n{} rc:{}'.format(client._client_id.decode(), rc) との接続
クライアント.loop_stop()
random_chars = ''.join(random.choices(string.ascii_letters + string.digits)、
k=10)
client_id = 'crystalmq_' + ランダム_chars
クライアント = paho.mqtt.client.Client(client_id,
プロトコル=paho.mqtt.client。 MQTTv5の特長
client.on_connect = オンコネクト
client.on_message=オンメッセージ
クライアント.on_publish = on_publish
client.on_subscribe = on_subscribe クライアント
クライアント。on_unsubscribe = on_unsubscribe
client.on_disconnect = on_disconnect ディレクティブ
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # オプション: 認証やその他のオプションを設定する
# client.username_pw_set("some username", "some password")
# クライアント。 will_set("willtopic", payload="Good bye CrystalMQ", qos=0,
保持=偽物
client.connect('public-mqtt-broker.bevywise.com', 1883年, keepalive=40年)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # オプション: 接続用にMQTTv5プロパティを設定
# connect_properties ディレクティブ
paho.mqtt.properties.プロパティ(paho.mqtt.packettypes.PacketTypes.CONNECT)
# connect_properties.SessionExpiryInterval = 60
# connect_properties.MaximumPacketSize = 256
# connect_properties.TopicAliasMaximum = 10
# client.connect('public-mqtt-broker.bevywise.com'、1883、
プロパティ=connect_properties
クライアント.loop_start()
client.subscribe('testtopic'、qos=0)
真の時:
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # オプション: MQTTv5 の公開設定
# publish_properties は、
paho.mqtt.properties.プロパティ(paho.mqtt.packettypes.PacketTypes.PUBLISH)
#publish_properties.MessageExpiryInterval = 60
# クライアント。 publish("testtopic", "Hello CrysqlMQ!", qos=1,
プロパティ=publish_properties
client.publish('testtopic'、'Hello CrystalMQ!'、qos=0)
時間.睡眠(30)
# クリーンアップ
クライアント.disconnect()
クライアント.loop_stop()
print(「プログラム終了」) MQTT クライアントの切断。」
pyinstaller の使用
PyInstaller は Python アプリケーションをバンドルできる人気のあるツールです。 Windows、macOS、およびLinux用のスタンドアローン実行可能。 使い方はこちら pyinstaller は Python スクリプトを実行可能に変換します。
pipインストールpyinstaller
パイインストーラ --onefile your_script.py ディレクティブ
あなたが完全に構築することができた希望MQTTクライアントこれを使う チュートリアル。 python の専門家であること、選択MQTTの特長 Pythonプラグイン付きブローカー、できるように python を使用して終わる完全な IoT アプリケーション エンドを構築します。
IoT導入支援をお探しですか? お気軽にお問い合わせくださいMQTTサポート