2017-07-06 73 views
2

現在、「スマートホーム」のようなものが開発されており、私の家にはいくつかのデバイスがあります。それらのすべてはMQTTを介してOpenHabに接続されています。私はPaho MQTT library(Python)を使っています。MQTTの無制限キープアライブ

一般に、MQTTには「キープアライブ」プロパティがあります。このプロパティーは、サブスクライブされたトピックに更新がないときに、クライアントが接続される(AFAIKがサーバーにpingを送信する)時間をMQTTサーバーに記述します。

しかし、ここでは大きな問題があります。必要なトピックは、1時間に1回、または数日/月に1回更新することもできます。これが屋内アラームであるとしましょう。 キープアライブのタイムアウトを回避するか、そのフィールドを無視するにはどうすればよいですか?無制限にできますか?

答えて

3

keepaliveの値が何を表しているのか分かりません。

MQTTクライアントは、メッセージを発行したり受信したりしなくても、無期限に接続を維持できます。しかし、ブローカーは、クライアントにLast Will and Testament(LWT)メッセージをいつ送信するかを知るために、どのクライアントがまだ接続されているかを把握する必要があります。これを行うには、keepalive時間を使用します。

このタイマーがkeepalive時間の1.5倍を超えると、ブローカがタイマーをリセットするたびに、ブローカはクライアントを切断とマークしてLWTを処理します。メッセージレートが非常に低いクライアントが切断されないようにするために、ブローカは、タイマーがkeepaliveの値に達するとPINGREQパケットをクライアントに送信し、クライアントからPINGRESPパケットを受信して​​、それがまだ生きていることを証明した後、タイマーをクライアントを接続された状態のままにします。

関連する問題