Mosquittoサーバーの特定のトピックにサブスクライブしているクライアントをリストする


8

それが一般的な質問ですが、ここではシナリオを提供します。

私はMosquittoサーバーを実行して、espリレーモジュール(IteadのSonoff)とHome Assistantの間にmqtt通信を提供しています。ほとんどの場合、問題なく動作します。各モジュールには独自のトピックがあり、HASSにはモジュールと同じ数の「軽い」構成があるため、個々のトグルボタンでWebフロントエンドから制御できます。

ただし、ライトが実際にオンになっていて、HASSのトグルがオフとして表示される(およびその逆の状況も)一貫性のない状態の状況を経験しました。ログを調査したところ、MosquittoがHASSに特定のメッセージを発行していないことがわかりました(すべてのモジュール状態トピックにサブスクライブする必要があります)。具体的には、4つのモジュールとそれに対応する状態トピック(state/sonoff_xx/POWER)を指定すると、HASSはモジュール2と4のトピックにのみサブスクライブされ、1と3にはサブスクライブされないようです。モジュール4の予想される動作は次のとおりです。他の作業モジュールですが、HASSへの公開は他の2つにはありません。

Jun 15 19:22:46 nas mosquitto[9486]: Received PUBLISH from sonoff4 (d0, q0, r1, m0, 'stat/sonoff4/POWER', ... (2 bytes))
Jun 15 19:22:46 nas mosquitto[9486]: Sending PUBLISH to home-assistant (d0, q0, r0, m0, 'stat/sonoff4/POWER', ... (2 bytes))

これはHASSとリレーモジュールに関する問題ではありませんが、特定のクライアントがサブスクライブしていると想定されているMQTTサーバーのステータスを調べる方法についてですが、ログを見るとわかりません。

回答:


6

いいえ、どのクライアントが何に加入しているかのリストを蚊から取得することはできません。

ここで最も可能性が高いのは、mosquittoがサブスクライブしたクライアントにパブリッシュしないのではなく、HASSがサブスクライブしていないことです。

サブスクリプション要求が行われるたびにログを記録するようにmosquittoを取得できます。これを使用してリストを作成できます。

log_type subscribe, unsubscribe

これにより、どのクライアントがどのトピックをサブスクライブ/サブスクライブ解除したかがすべてログに記録されます。


1
私はすでに(すべてのレベルのログを記録していますlog_type allmosquitto.conf)、実際に私が持っている間、コンソールから接続することにより、購読エントリチェックしたjournalctl -fランニングを。しかし、HASSサブスクリプションに関するエントリは見つかりませんでした。これは数日前に発生した可能性があり、journaldが永続的として構成されていないため、現在のブートのみが手元にあったためです。それが私がモスキートの状態を調べたいと思った理由です。
ダリオ

1
QoSレベルに焦点を当てるべきではありません。私の推測では、ノード(Sonoffユニット)から送信されたメッセージはQoS = 0を使用して送信されており、1回だけ送信されるということです。その意味では信頼できません。私は良いレベルが見つかるまでこの値を上げようとします。私の意見では、スイッチの状態はQoS 1または2を使用する必要があります。センサーokです値は、1つまたは2つが、たまにはQoSの0使用する必要があります欠場する
ジミーWestberg

3

すべてに対してmosquittoログを有効にし、ログをサブスクライブすると、接続、切断、サブスクライブ、エラーなどのクライアントのアクションごとにデコードできるメッセージを見つけることができます。

あなたが設定します

log_dest topic
log_type all

mosquitto.confで、あなたはサブスクライブします

$SYS/broker/log/#

私はこのアプローチにうんざりしました購読および公開イベントは表示されていません
kavie
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.