Если инфорация оказалась интересна и/или полезна, не побрезгуйте, оставьте комментарий ;)

воскресенье, 6 февраля 2022 г.

Установка Mosquitto MQTT Broker

Продолжаем эксперименты с самопальным умным домом, до которого еще оччччень далеко. В этой статье был прошит Zigbee-сниффер. А в этой установлена Ubuntu Server 20.04 на Banana PI M5.

Теперь на очереди настройка брокера MQTT - Mosquitto MQTT Broker. Что такое Message Queuing Telemetry Transport (MQTT) можно почитать тут. Брокер собирает с сервера-издателя, в нашем случае это будет Zigbee2MQTT, данные с датчиков, точнее Zigbee2MQTT сам посылает их в заданный канал брокера. А программы-клиенты, в нашем случае это будет Home Assistant считывает из канала показания датчиков(и не только).

В настройке я шел по советам Стива, поэтому данный текст можно назвать переводом выжимки из его статьи. В оригинале рассматривается установка под разные ОС, изменение лимита открытых файлов (наверное, актуально для больших инсталляций, возможно, придется к этому вернуться), запуск нескольких экземпляров брокера.

Начнем. Нужно добавить репозиторий, из которого будет ставиться брокер:

pi@ubuntu:~$ sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
pi@ubuntu:~$ sudo apt-get update
pi@ubuntu:~$ sudo apt-get install mosquitto mosquitto-clients

Mosquitto ставится как демон. Попробуем запустить его в интерактивном режиме. Останавливаем демон:
pi@ubuntu:~$ sudo systemctl stop mosquitto.service Запускаем Mosquitto из командной строки:

pi@ubuntu:~$ mosquitto -v
1644094311: mosquitto version 2.0.14 starting
1644094311: Using default config.
1644094311: Starting in local only mode. Connections will only be possible from clients running on this machine.
1644094311: Create a configuration file which defines a listener to allow remote access.
1644094311: For more details see https://mosquitto.org/documentation/authentication-methods/
1644094311: Opening ipv4 listen socket on port 1883.
1644094311: Opening ipv6 listen socket on port 1883.
1644094311: mosquitto version 2.0.14 running
1644094311: New connection from 127.0.0.1:48812 on port 1883.
1644094311: New client connected from 127.0.0.1:48812 as mqttjs_69852d1b (p2, c1, k60).
Видим, что он успешно занял порт 1883 для ipv4 и ipv6. Можно проверить
pi@ubuntu:~$ sudo netstat -tunlp |grep 1883
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      17896/mosquitto     
tcp6       0      0 :::1883                 :::*                    LISTEN      17896/mosquitto
Тут статья, как посмотреть открытые сетевые порты в Linux.

Останавливаем интерактивный экземпляр Mosquitto и запускаем обратно демон: pi@ubuntu:~$ sudo systemctl start mosquitto.service Проверяем, что демон запустился.

pi@ubuntu:~$ sudo systemctl status mosquitto.service 
● mosquitto.service - Mosquitto MQTT Broker
        Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled)
        Active: active (running) since Sat 2022-02-05 20:55:20 UTC; 25min ago
        Docs: man:mosquitto.conf(5)
                man:mosquitto(8)
    Process: 17885 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 17891 ExecStartPre=/bin/chown mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 17894 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS)
    Process: 17895 ExecStartPre=/bin/chown mosquitto /run/mosquitto (code=exited, status=0/SUCCESS)
    Main PID: 17896 (mosquitto)
        Tasks: 1 (limit: 3839)
        Memory: 1.0M
        CGroup: /system.slice/mosquitto.service
                └─17896 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Feb 05 20:55:20 ubuntu systemd[1]: Starting Mosquitto MQTT Broker...
Feb 05 20:55:20 ubuntu systemd[1]: Started Mosquitto MQTT Broker.
Отлично.

Теперь протестируем, что сообщения передаются от издеталя клиенту. Инструкции взяты тут. Потребуется 3 SSH-сессии. Одна будет издателем и две будут подписчиками. Итак, сессия №1. Подписываемся на канал testTopic:

pi@ubuntu:~$ mosquitto_sub -d -t testTopic
Client null sending CONNECT
Client null received CONNACK (0)
Client null sending SUBSCRIBE (Mid: 1, Topic: testTopic, QoS: 0, Options: 0x00)
Client null received SUBACK
Subscribed (mid: 1): 0

Из второй сессии отправляем сообщение в канал testTopic

pi@ubuntu:~$ mosquitto_pub -d -t testTopic -m "Привет, Москва!"
Client null sending CONNECT
Client null received CONNACK (0)
Client null sending PUBLISH (d0, q0, r0, m1, 'testTopic', ... (27 bytes))
Client null sending DISCONNECT

В первой сессии мы увидим наше сообщение:

Client null sending PINGREQ
Client null received PINGRESP
Client null received PUBLISH (d0, q0, r0, m0, 'testTopic', ... (27 bytes))
Привет, Москва!

В сессии №3 тоже подписываемся на канал testTopic:

pi@ubuntu:~$ mosquitto_sub -d -t testTopic
Client null sending CONNECT
Client null received CONNACK (0)
Client null sending SUBSCRIBE (Mid: 1, Topic: testTopic, QoS: 0, Options: 0x00)
Client null received SUBACK
Subscribed (mid: 1): 0

Из второй сессии отправляем сообщение в канал testTopic

pi@ubuntu:~$ mosquitto_pub -d -t testTopic -m "И вам не хворать, коль не шутите"
Client null sending CONNECT
Client null received CONNACK (0)
Client null sending PUBLISH (d0, q0, r0, m1, 'testTopic', ... (27 bytes))
Client null sending DISCONNECT

В первой и третьей сессиях должно появится ваше сообщение:

Client null received SUBACK
Subscribed (mid: 1): 0
Client null received PUBLISH (d0, q0, r0, m0, 'testTopic', ... (57 bytes))
И вам не хворать, коль не шутите

В файл конфигурации /etc/mosquitto/mosquitto.conf я добавил следующие строки:
pi@ubuntu:~$ sudo vim /etc/mosquitto/mosquitto.conf
listener 1883
allow_anonymous true

Следующая на очереди статья - настройка Zigbee2MQTT

Комментариев нет: