クライアントがまだMQTTブローカーに接続されているかどうかを確認する方法はありますか?
何かのようなもの
if client.isConnected(): # for example
# if True then do stuff
編集:Raspberry Piがまだ実行されているにもかかわらず(外観からは、コードは更新された結果を表示していました)、クライアントからの受信を停止する場合がありました。
私が何か間違ったことをしているかもしれないので、これがコードです:
client = mqtt.Client()
client.connect(address, 1883, 60)
while True:
data = getdata()
client.publish("$ahmed/",data,0)
time.sleep(0.2)
不在だったので、なぜ止まったのかわからない!ブローカーを再起動した場合にのみ、ブローカーは再び受信を開始します。
On_connectでフラグをアクティブにし、on_disconnectで非アクティブにすることができます。このようにして、クライアントが接続されているかどうかを知ることができます。
import paho.mqtt.client as mqtt
flag_connected = 0
def on_connect(client, userdata, flags, rc):
global flag_connected
flag_connected = 1
def on_disconnect(client, userdata, rc):
global flag_connected
flag_connected = 0
client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect(server,port)
client.loop_forever()
if flag_connected == 1:
# Publish message
else:
# Wait to reconnect
doc に表示されませんが、独自の状態変数を設定するために使用できるon_disconnect
on_connect
コールバックがあります
編集:
loop
関数のいずれかを呼び出して、ネットワーク操作を処理するためのクライアントサイクルを与える必要があります。
client = mqtt.Client()
client.connect(address, 1883, 60)
while True:
data = getdata()
client.publish("$ahmed/",data,0)
client.loop(timeout=1.0, max_packets=1)
time.sleep(0.2)
pythonでは、任意のオブジェクトにメンバーを追加できます。@ hardibが言ったように、次のようなことができます。
def on_connect(client, ...):
client.is_connected = True
def on_disconnect(client, ...):
client.is_connected = False
client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
...
client.connect()
if client.is_connected:
do something
しかし、これはテストしませんでした。関係のない理由で、クライアントオブジェクトがグローバルとして定義されているmqttクライアントのみを使用したため、そこに値を割り当てました。これは関係なく機能するはずです。