Заинтересовала меня аббревиатура именуемая, как MQTT. Из прочитанного по этому я вроде понял, что в основе MQTT лежит серверная часть, она же брокер и клиентская часть которая отправляет сообщения в рубрику.
MQTT расшифровывается, как Message Queue Telemetry Transport
— это протокол обмена данными поверх TCP/IP через порт 1883 (если используется шифрование то 8883/SSL). Обмен сообщения ведется между клиентами которые в свою очередь могут быть, как издателями (publisher) так и подписчиками (subscriber) сообщений, и самим брокером (broker) на приложении Mosquitto.
Издатель отправляет данные на MQTT брокер, указывая в сообщении определенную тему, топик (topic). Подписчики могут получать разные данные от множества издателей в зависимости от подписки на соответствующие топики.
Устройства MQTT используют определенные типы сообщений для взаимодействия с брокером, ниже представлены основные:
- Connect – установить соединение с брокером
- Disconnect – разорвать соединение с брокером
- Publish – опубликовать данные в топик на брокере
- Subscribe – подписаться на топик на брокере
- Unsubscribe – отписаться от топика
Ладно пора перейти к действиям:
Скачиваю самый последний релиз 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 и как работает тестовый пример. Уже имя это и немного практики я сделаю что-то более интересное и продуктивное. Об этом что у меня получилось Вы (читатели) увидите на моем блоге. А пока у меня всё, с уважением автор блога Олло Александр aka ekzorchik.