Как установить брокер Mosquitto на Raspberry Pi 3 Model B

Posted by

Заинтересовала меня аббревиатура именуемая, как . Из прочитанного по этому я вроде понял, что в основе MQTT лежит серверная часть, она же брокер и клиентская часть которая отправляет сообщения в рубрику.

MQTT расшифровывается, как Message Queue Telemetry Transport — это протокол обмена данными поверх TCP/IP через порт 1883 (если используется шифрование то 8883/SSL). Обмен сообщения ведется между клиентами которые в свою очередь могут быть, как издателями (publisher) так и подписчиками (subscriber) сообщений, и самим брокером (broker) на приложении .

Издатель отправляет данные на MQTT брокер, указывая в сообщении определенную тему, топик (topic). Подписчики могут получать разные данные от множества издателей в зависимости от подписки на соответствующие топики.

Устройства MQTT используют определенные типы сообщений для взаимодействия с брокером, ниже представлены основные:

  • Connect – установить соединение с брокером
  • Disconnect – разорвать соединение с брокером
  • Publish – опубликовать данные в топик на брокере
  • Subscribe – подписаться на топик на брокере
  • Unsubscribe – отписаться от топика

Схема работы MQTT

Ладно пора перейти к действиям:

Скачиваю самый последний релиз Jessie (не Stretch) и записываю его на карту памяти MicroSD: https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/2017-07-05-raspbian-jessie.zip.torrent

pi@raspberrypi:~ $ uname -a && lsb_release -a

Linux raspberrypi 4.9.46-v7+ #1032 SMP Wed Aug 30 12:09:14 BST 2017 armv7l GNU/Linux

No LSB modules are available.

Distributor ID: Raspbian

Description: Raspbian GNU/Linux 8.0 (jessie)

Release: 8.0

Codename: jessie

После того, как на карту памяти (MicroSD) установили образ Raspbian Jessie его нужно подготовить к дальнейшему использованию, либо же сделать ниже следующие три шага, но все же лучше обратиться к заметке и подготовить:

pi@raspberrypi:~ $ sudo rm -Rf /var/lib/apt/lists

pi@raspberrypi:~ $ sudo apt-get update && sudo apt-get upgrade -y

pi@raspberrypi:~ $ sudo rpi-update

Скачиваю и устанавливаю брокер Mosquitto:

pi@raspberry:~ $ wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

pi@raspberry:~ $ sudo apt-key add mosquitto-repo.gpg.key

pi@raspberrypi:~ $ sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list -O /etc/apt/sources.list.d/mosquitto-jessie.list

pi@raspberrypi:~ $ sudo apt-get update

pi@raspberrypi:~ $ apt-cache search python-mosquitto

python-mosquitto - MQTT version 3.1 Python client library

pi@raspberrypi:~ $ sudo apt-get install mosquitto mosquitto-clients python-mosquitto -y

pi@raspberrypi:~ $ mosquitto --help | head -n 3

mosquitto version 1.4.14 (build date Mon, 10 Jul 2017 23:48:43 +0100)

mosquitto is an MQTT v3.1.1/v3.1 broker.

pi@raspberrypi:~ $ sudo mkdir -p /var/lib/mosquitto

pi@raspberrypi:~ $ sudo chown -R mosquitto:root /var/lib/mosquitto/

Конфигурационный файл для работы представлен ниже, я понимаю, что он похож на большинство представленных в интернете, но от отвечает всем моим задумкам и я использую его:

pi@raspberrypi:~ $ sudo nano /etc/mosquitto/mosquitto.conf

pid_file /var/run/mosquitto.pid

persistence true

persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

password_file /etc/mosquitto/passwd

listener 1883

persistence_file mosquitto.db

log_dest syslog

log_dest stdout

log_dest topic

log_type error

log_type warning

log_type notice

log_type information

connection_messages true

log_timestamp true

allow_anonymous false

Создаю пользователя для работы с Mosqutto:

pi@raspberrypi:~ $ sudo mosquitto_passwd -c /etc/mosquitto/passwd pi

Password: Aa1234567

Reenter password: Aa1234567

Чтобы добавить еще одного пользователя, теперь уже опускается ключ «-c»:

pi@raspberrypi:~ $ sudo mosquitto_passwd /etc/mosquitto/passwd ekzorchik

Password: Aa1234567

Reenter password: Aa1234567

После проверяю конфигурационный файл на ошибки:

pi@raspberrypi:~ $ /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Error: Unknown configuration variable "password_file /etc/mosquitto/passwd".

Error found at /etc/mosquitto/mosquitto.conf:11.

Error: Unable to open configuration file.

У меня в этой строчки вместо символа пробела стоял символ <TAB>, поправил и проверяю:

pi@raspberrypi:~ $ sudo /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

1504440707: mosquitto version 1.4.14 (build date Mon, 10 Jul 2017 23:48:43 +0100) starting

1504440707: Config loaded from /etc/mosquitto/mosquitto.conf.

1504440707: Opening ipv4 listen socket on port 1883.

1504440707: Opening ipv6 listen socket on port 1883.

Ошибок нет, нажимаю Ctrl + C

^C1504440725: mosquitto version 1.4.14 terminating

1504440725: Saving in-memory database to /var/lib/mosquitto/mosquitto.db.

pi@raspberrypi:~ $ sudo systemctl restart mosquitto

pi@raspberrypi:~ $ sudo systemctl status mosquitto

mosquitto.service - Mosquitto MQTT Broker

Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled)

Active: active (running) since Sun 2017-09-03 15:12:18 MSK; 18s ago

Docs: man:mosquitto(8)

https://mosquitto.org/

Main PID: 3047 (mosquitto)

CGroup: /system.slice/mosquitto.service

└─3047 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Sep 03 15:12:18 raspberrypi systemd[1]: Started Mosquitto MQTT Broker.

Sep 03 15:12:18 raspberrypi mosquitto[3047]: 1504440738: mosquitto version 1....g

Sep 03 15:12:18 raspberrypi mosquitto[3047]: mosquitto version 1.4.14 (build ...g

Sep 03 15:12:18 raspberrypi mosquitto[3047]: Config loaded from /etc/mosquitt....

Sep 03 15:12:18 raspberrypi mosquitto[3047]: Opening ipv4 listen socket on po....

Sep 03 15:12:18 raspberrypi mosquitto[3047]: Opening ipv6 listen socket on po....

Sep 03 15:12:18 raspberrypi mosquitto[3047]: 1504440738: Config loaded from /....

Sep 03 15:12:18 raspberrypi mosquitto[3047]: 1504440738: Opening ipv4 listen ....

Sep 03 15:12:18 raspberrypi mosquitto[3047]: 1504440738: Opening ipv6 listen ....

Hint: Some lines were ellipsized, use -l to show in full.

pi@raspberrypi:~ $ sudo netstat -tulpn | grep 1883

tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 3047/mosquitto

tcp6 0 0 :::1883 :::* LISTEN 3047/mosquitto

Проверяю как работает, для это подключаюсь к миникомпьютеру двумя консолями терминала чтобы видеть их за одни раз:

(Серверная часть)

  • pi@raspberrypi:~ $ mosquitto_sub -t test_mqtt -u pi -P Aa1234567 -h 10.7.9.161 -p 1883

(Клиентская часть)

  • pi@raspberrypi:~ $ mosquitto_pub -d -t test_mqtt -m "Test Message" -h 10.7.9.161 -p 1883 -u pi -P Aa1234567

Client mosqpub|3113-raspberryp sending CONNECT

Client mosqpub|3113-raspberryp received CONNACK

Client mosqpub|3113-raspberryp sending PUBLISH (d0, q0, r0, m1, 'test_mqtt', ... (12 bytes))

Client mosqpub|3113-raspberryp sending DISCONNECT

и в (Серверную часть) приходит сообщение Test Message

Работа "Издателя" и "Подписчика" в MQTT на примере

Итого я для себя разобрал, как установить протокол MQTT и как работает тестовый пример. Уже имя это и немного практики я сделаю что-то более интересное и продуктивное. Об этом что у меня получилось Вы (читатели) увидите на моем блоге. А пока у меня всё, с уважением автор блога Олло Александр aka ekzorchik.