Настройка работы c MQTT для MajorDoMo

Posted by

Всем привет! Сейчас я покажу, как я снимаю данные с датчика DHT11 через протокол MQTT и передаю их в сервис MajorDoMo.

Моя схема:

Есть центральный сервис MajorDoMo он развернут на Ubuntu 18.04 Server amd64 виртуального контейнера под ESXi 6.0.0 развернутого внутри домашнего сервера HP MicroServer Gen8.

Есть миникомпьютер на базе Raspberry Pi 3 Model B к которому подключен датчик температуры и влажности, он находится в другой комнате.

Как я себе вижу задачу: На оси Raspbian Stretch миникомпьютера Raspberry Pi 3 Model B крутится скрипт который который снимает показания и передает их в Majordomo.

Стенд:

  • ekzorchik@srv-bionic:~$ — 172.33.33.14 (MajorDoMo) на Ubuntu 18.04 Server, задействована заметка Как установить MajorDoMo на Ubuntu 18.04 Server. После обязательно следует перезагрузить систему чтобы после все циклы запустились, раньше этого было достаточно и задание в crontab отрабатывало, теперь его нужно изменить:

После циклы работают как надо.

Шаг №1: Проверяю, что подключившись с основной системы к Raspberry Pi 3 Model B могу снять показания с датчика температуры:

Temp=21.0* Humidity=17.0%

  • Где 21 градус — это температура у меня в комнате
  • Где 17% — это влажность у меня в комнате.

Шаг №2: Если нужно с MajorDoMo получать показания датчика DHT11 без использования MQTT то на системе Ubuntu 18.04 Server проделываем:

Warning: Permanently added '172.33.33.10' (ECDSA) to the list of known hosts.

Temp=20.0* Humidity=18.0%

Дальше уже на основании моих разобранных заметок полученные значения обрабатываем и переносим в MajorDoMo.

Шаг №3: Теперь вернемся к тому, что я хочу с Raspberry Pi 3 Model B передавать показания через протокол MQTT, для этого нужно проделать все по ранее опубликованной заметке (tips_ubuntu_18_04_mosquitto_v1.odt) где я разобрал как установить MQTT на Ubuntu 18.04 Server amd64.

Шаг №4: Устанавливаю в Webинтерфейс MajorDoMo поддержку протокола MQTT и настраиваю:

http://IP&DNS — Панель управления — Система — Маркет дополнений — в поиске набираю «MQTT» и нажимаю клавишу Enter, вижу найденное совпадение, хоть и пишется что оно установлено (но я его не ставил), а потому напротив данного приложения нажимаю «Обновить», тем самым запуститься процесс установки самой последней версии.

Устанавливаю модуль MQTT для работы в MajorDoMo

Отлично. Переходим к первоначальной настройки связи Ubuntu и Raspberry:

http://IP&DNS — Устройства — MQTT — (MQTT) Настроить

  • MajorDoMo Client: 172.33.33.14
  • Hostname: (*) localhost
  • Port: (*) 1883
  • Subscription path: (*) #
  • authorization required: отмечаю галочкой
  • Username: mqtt-spy (это на доступ к подписке)
  • Password: Aa1234567 (это на доступ к подписке)

и нажимаю кнопку «Обновить"

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

  • «-d» → Режим отладки
  • «-t» → mqtt topic to publish to
  • «-m» → message payload to send
  • «-h» → mqtt host to connect to. Defaults to localhost.
  • «-p» → network port to connect to. Defaults to 1883 for plain MQTT and 8883 for MQTT over TLS.
  • «-u» → provide a username
  • «-P» → provide a password

Проверяю, что в интерфейсе MajorDoMo:

http://IP&DNS — Устройства — MQTT — В виде Списка

Тестовое сообщение отправленное через MQTT в MajorDoMo

Отлично модуль настроен. Удаляю из Web-интерфейса данную тестовую запись.

Шаг №5: Чтобы с Raspberry Pi 3 Model B установленной операционной системы Raspbian Stretch через протокол MQTT можно было отправлять показания от датчика DHT11:

In [1]: import paho.mqtt.client as mqtt

In [2]: import time

In [3]: import sys

In [4]: import Adafruit_DHT

In [5]: username = "mqtt-spy"

In [6]: password = "Aa1234567"

In [7]: clientid = "client"

In [8]: mqtcc = mqtt.Client(client_id=clientid)

In [9]: mqtcc.username_pw_set(username,password=password)

In [10]: mqtcc.connect("172.33.33.25",port=1883,keepalive=60)

In [11]: mqtcc.loop_start()

In [12]: temp11 = Adafruit_DHT.read_retry(11,4)

In [13]: temp11 = "temp,c=" + str(temp11)

In [14]: print(temp11)

temp,c=(14.0, 24.0)

In [15]: topic="test"

формат(имя топика и отправить значение переменной)

In [16]: mqtcc.publish(topic,payload=temp11)

In [17]: quit

pi@raspberrypi:~ $

Получилось отправить: температуру с датчика DHT11

Проверка работы через python с протоколом MQTT

Шаг №6: Теперь можно написать скрипт который через протокол MQTT будет передавать данные в MajorDoMo:

Честно скрипт полностью не мой собственный, а найденный и оптимизированные под свои нужны, он работает.

и вот спустя обозначенный 30 секунд данные в MajorDoMo успешно появляются:

Результат работы python скрипта на Raspberry по отправке данных датчика в MajorDoMo

 

Шаг №7: Теперь нужно каким-либо образом настроить чтобы скрипт на Raspberry Pi 3 Model B включался сам и передавал показания:

Время наступает и запускается скрипт:

pi 1281 1.1 1.0 13996 10012 ? S 23:26 0:00 /usr/bin/python /home/pi/dht11

Данные идут:

Скритп запускается данные передаются в MajorDoMo

Опять время наступает, ранее запущенный скрипт завершается, новый запускается

pi 1336 2.6 1.3 26748 13844 ? Sl 23:28 0:01 /usr/bin/python /home/pi/dht11

Работает. И показания присылаются в MajorDoMo.

Потребление системных ресурсов Raspberry мало и не нагружается систему.

Итого! Все шагами выше я для себя задокументировал настройку как через MQTT можно снимать показания датчика DHT11 и передавать их на центральный узел где развернут сервис MQTT. Плюс если нет желания использовать MQTT использовать связку строки через sshpass и подключаться. Я считаю что правильнее когда сервер не Raspberry Pi 3 Model B, а полноценная система Ubuntu 18.04 Server. Каждый узел делаю только ту задачу которую умеет делать хорошо. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.