以下のpythonプログラムでpaho-mqttを使いcloudMQTTにsubscribeしています。作っているアプリケーションでは、実際にメッセージを受け取るのは一週間に一度程度なので、長い間待ちの状態を維持する必要があります。このプログラムを実行すると、問題無くsubscribeすることができ、メッセージの受信も問題無くできます。また、長時間の待ち状態の維持もwifi経由での接続であれば問題ありません。一方で、インターネットへの接続をLTE回線にすると、毎回2時間12分程度経過した時点で、cloudMQTTのログにSocket error on client Python, disconnecting.と表示されmqtt接続が切れてしまいます。cloudMQTTのログを見ると、keepaliveの設定値60s毎にpingのやり取りがclientとcloudMQTTの間で行われている状態が2時間12分続いているのですが、突然上記のエラーが起きます。
どなたか、LTE回線を用いて、長時間コネクションを維持するアプリケーションを作成された方がいらしたら、アドバイスをお願い致します。
以下client側でのsubscribeのコードです。
1 import paho.mqtt.client as mqttClient 2 import time 3 4 def on_connect(client, userdata, flags, rc): 5 6 if rc == 0: 7 8 print("Connected to broker") 9 10 global Connected 11 Connected = True 12 13 else: 14 15 print("Connection failed") 16 17 def on_message(client, userdata, message): 18 msg = message.payload 19 print("Message received: ",msg.decode()) 20 21 Connected = False #global variable for the state of the connection 22 23 broker_address= "mxx.cloudmqtt.com" #Broker address 24 25 port = xxxx #SSL port 26 user = "xxxxxx" #Connection username 27 password = "yyyyy" #Connection password 28 29 client = mqttClient.Client("Python") #create new instance 30 client.username_pw_set(user, password=password) #set username and password 31 client.on_connect= on_connect #attach function to callback 32 client.on_message= on_message #attach function to callback 33 34 client.tls_set("/etc/ssl/certs/ca-certificates.crt") 35 36 client.connect(broker_address, port=port) #connect to broker 37 38 client.loop_start() #start the loop 39 40 while Connected != True: #Wait for connection 41 time.sleep(0.1) 42 43 client.subscribe("python/test") 44 print('subscribed to "python/test') 45 46 try: # just waiting for keyboard interrupt 47 while True: 48 time.sleep(3) 49 50 except KeyboardInterrupt: 51 print("exiting") 52 client.disconnect() 53 client.loop_stop()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/15 14:38