Daftar klien yang berlangganan topik tertentu di server Mosquitto

8

Jadi itu adalah pertanyaan umum, tetapi saya akan memberikan skenario di sini.

Saya menjalankan server Mosquitto untuk menyediakan comm mqtt antara modul relay esp ( Sonoff dari Itead ) dan Home Assistant . Sebagian besar waktu, itu berfungsi dengan baik. Setiap modul memiliki topiknya sendiri, dan ada banyak konfigurasi "cahaya" di HASS sebagai modul, sehingga mereka dapat dikontrol dari antarmuka web dengan tombol sakelar individual.

Saya telah mengalami, bagaimanapun, situasi negara yang tidak konsisten di mana lampu benar-benar menyala dan beralih di HASS ditampilkan mati (dan situasi yang berlawanan juga). Dengan memeriksa log, saya menemukan bahwa Mosquitto tidak mempublikasikan pesan tertentu ke HASS (yang seharusnya berlangganan semua topik status modul). Lebih khusus, mengingat 4 modul dan topik yang terkait ( state/sonoff_xx/POWER), HASS tampaknya hanya berlangganan ke modul 2 dan 4 topik, tetapi tidak 1 dan 3. Berikut ini adalah perilaku yang diharapkan untuk modul 4, hal yang sama dapat diverifikasi untuk modul kerja lainnya, tetapi penerbitan ke HASS tidak ada untuk dua lainnya.

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))

Ini bukan pertanyaan tentang HASS dan modul relai, tetapi ini tentang bagaimana menggali status MQTT Server yang seharusnya memiliki klien tertentu berlangganan tetapi, dengan melihat log, tidak.

Dario
sumber

Jawaban:

6

Tidak, Anda tidak bisa mendapatkan daftar klien mana yang berlangganan mosquitto.

Apa yang paling mungkin di sini adalah bahwa HASS tidak berlangganan daripada mosquitto tidak mempublikasikan ke klien yang berlangganan.

Anda bisa mendapatkan mosquitto untuk login setiap kali permintaan berlangganan dibuat yang kemudian bisa Anda gunakan untuk membuat daftar.

log_type subscribe, unsubscribe

Ini akan mencatat semua klien yang berlangganan / berhenti berlangganan dari topik apa.

hardillb
sumber
1
Saya sudah masuk semua level ( log_type alldalam mosquitto.conf), sebenarnya saya sudah memeriksa entri berlangganan dengan menghubungkan dari konsol sambil journalctl -fmenjalankan. Saya tidak dapat menemukan entri tentang langganan HASS karena itu mungkin terjadi beberapa hari yang lalu dan journald tidak dikonfigurasikan sebagai persisten, jadi saya hanya punya boot saat ini. Itulah alasan mengapa saya berharap untuk memeriksa status Mosquitto.
Dario
1
Jika Anda tidak fokus pada level QoS. Dugaan saya adalah bahwa pesan yang dikirim dari node (unit Sonoff) sedang dikirim menggunakan QoS = 0 yang berarti hanya dikirim sekali. Tidak bisa diandalkan dalam arti itu. Saya akan mencoba untuk meningkatkan nilai ini sampai saya menemukan level yang bagus. Switch state harus menggunakan QoS 1 atau 2 menurut saya. Nilai sensor yang boleh dilewatkan satu atau dua sesekali harus menggunakan QoS 0.
Jimmy Westberg
3

Anda dapat Mengaktifkan mosquitto log untuk semua dan berlangganan log Anda akan menemukan pesan yang dapat Anda decode untuk setiap tindakan klien seperti menghubungkan, memutuskan sambungan, berlangganan dan menerbitkan kesalahan bahkan.

Anda akan mengatur

log_dest topic
log_type all

di mosquitto.conf maka Anda akan berlangganan

$SYS/broker/log/#
Anas Naguib
sumber
Saya lelah dengan pendekatan ini. Berlangganan dan menerbitkan acara tidak ditampilkan
kavie