(UPD) - Обновление конфигурации.
MQTT или Message Queue Telemetry Transport – это легкий, компактный и открытый протокол обмена данными созданный для передачи данных на удалённых локациях, где требуется небольшой размер кода и есть ограничения по пропускной способности канала.
Брокер MQTT в основном отвечает за получение всех сообщений, отправленных по этому протоколу, их фильтрацию, определение получателей и передачу их конечным устройствам.
Брокеров достаточно много, установим один из самых популярных – Mosquitto MQTT Broker. Он очень прост в установке, конфигурации и использовании.
Выполняем:
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients
Откроем новый терминал. Запустим в новом терминале команду mosquitto_sub, чтобы подписаться на тему:
mosquitto_sub -h localhost -t test
Флаг -h указывает имя хоста сервера MQTT, флаг -t - тему. После запуска команды на экране не появится вывода, поскольку mosquitto_sub ждет получения сообщений. В первом терминале публикуем сообщение:
mosquitto_pub -h localhost -t test -m "hello world"
Команда mosquitto_pub использует те же флаги, что и mosquitto_sub, но в этот раз нужен флаг -m (он позволяет ввести текст сообщения). Нажимаем Enter, и в другом терминале появится MQTT-сообщение "hello world".
Теперь настроим парольную аутентификацию.
Запустим утилиту mosquitto_passwd для создания файла паролей. Эта команда предложит ввести пароль для указанного пользователя и поместит его в файл /etc/mosquitto/passwd.
sudo mosquitto_passwd -c /etc/mosquitto/passwd usermqtt
В файл конфигурации Mosquitto добавим информацию о новом файле:
sudo nano /etc/mosquitto/conf.d/default.conf
На экране появится пустой файл. Вводим в него:
allow_anonymous false
password_file /etc/mosquitto/passwd
listener 1883 0.0.0.0
В конце файла нужно обязательно оставить пустую строку. Строка allow_anonymous false блокирует анонимных пользователей. Строка password_file задает путь к файлу паролей. Строка listener 1883 0.0.0.0 позволяет слушать стандартный порт MQTT по любому адресу. Сохраняем настройки, перезапускаем Mosquitto и проверяем новые настройки:
sudo systemctl restart mosquitto
Читаем тестовый топик:
mosquitto_sub -h localhost -t test -u "usermqtt" -P "passmqtt"
Публикуем тестовый топик:
mosquitto_pub -h localhost -t "test" -m "hello world" -u "usermqtt" -P "passmqtt"
Также можно публиковать топик по локальному сетевому адресу:
mosquitto_pub -h 10.150.10.150 -t "test" -m "hello world" -u "usermqtt" -P "passmqtt"
Дополнительные статьи:
- Установка брокера сообщений Mosquitto в Ubuntu 18.04
- How to Install and Secure the Mosquitto MQTT Messaging Broker on Ubuntu 16.04
Напишем скрипт на Python, который будет публиковать данные по использованию процессора, памяти и диска. Установим необходимые библиотеки:
pip install psutil
pip install paho-mqtt
Psutil - это кросс-платформенная библиотека Python, используемая для доступа к системным деталям и утилитам процессов. Она используется для отслеживания использования различных ресурсов в системе.
Paho - библиотека клиента MQTT Python Eclipse Paho.
Код скрипта:
import time
import psutil
from paho.mqtt import client as mqtt_client
broker = '10.150.10.150'
port = 1883
client_id = f'server'
username = 'usermqtt'
password = 'passmqtt'
def connect_mqtt():
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(client_id)
client.username_pw_set(username, password)
client.on_connect = on_connect
client.connect(broker, port)
return client
def publish(client):
while True:
time.sleep(5)
topic = 'server/cpu/percent'
msg = psutil.cpu_percent()
result = client.publish(topic, msg)
topic = 'server/memory/percent'
msg = psutil.virtual_memory()[2]
result = client.publish(topic, msg)
topic = 'server/disk/disk_usage'
msg = psutil.disk_usage('/')[3]
result = client.publish(topic, msg)
def run():
client = connect_mqtt()
client.loop_start()
publish(client)
if __name__ == '__main__':
run()
Просмотрим подробный вывод:
mosquitto_sub -h localhost -t "#" -u "usermqtt" -P "passmqtt" -v
server/cpu/percent 8.0
server/memory/percent 90.6
server/disk/disk_usage 92.3
Данный скрипт можно добавить в CRON.
Дополнительные статьи:
Пришло время настроить MQTT и Home Assistant. Для установки переходим в Настройки->Дополнения->Магазин дополнений и выбираем Mosquitto broker.
Если система установлена по статье Установка Home Assistant Supervised, то достаточно установить только дополнение Mosquitto broker, сервер устанавливать не требуется.
Устанавливаем, включаем - Перезапускать дополнение при сбоях. Настраиваем конфигурацию.
Можно использовать тех пользователей, которые есть в системе, но лучше создать отдельного пользователя.
Сохраняем, запускаем. Переходим в Настройки->Устройства и службы. На вкладке Интеграции видим:
Нажимаем Настроить. Соглашаемся, получаем подключенную интеграцию. Вновь нажимаем Настроить.
Выбираем RE-CONFIGURE MQTT.
Нажимаем Далее.
Отмечаем Разрешить обнаружение, остальное оставляем по умолчанию.
Переходим в редактор и в файл includes/sensor/system.yaml добавим новые сенсоры:
- platform: mqtt
name: "Server CPU load"
icon: "mdi:cpu-64-bit"
expire_after: 60
unit_of_measurement: "%"
state_topic: "server/cpu/percent"
- platform: mqtt
name: "Server Memory load"
icon: "mdi:memory"
expire_after: 60
unit_of_measurement: "%"
state_topic: "server/memory/percent"
- platform: mqtt
name: "Server Disk load"
icon: "mdi:harddisk"
expire_after: 60
unit_of_measurement: "%"
state_topic: "server/disk/disk_usage"
Изменился формат конфигурации элементов MQTT, настроенных вручную. Старый формат, в котором конфигурации размещаются под sensor ключом платформы, больше не должен использоваться и устарел.
Новый вариант добавления датчиков в файл configuration.yaml:
mqtt:
sensor:
- name: "Server CPU load"
icon: "mdi:cpu-64-bit"
expire_after: 60
unit_of_measurement: "%"
state_topic: "server/cpu/percent"
- name: "Server Memory load"
icon: "mdi:memory"
expire_after: 60
unit_of_measurement: "%"
state_topic: "server/memory/percent"
- name: "Server Disk load"
icon: "mdi:harddisk"
expire_after: 60
unit_of_measurement: "%"
state_topic: "server/disk/disk_usage"
Проверим конфигурацию в Панель разработчика->YAML:
Перезапускаем Home Assistant. Или:
Некоторые компоненты Home Assistant можно перезагрузить без необходимости перезапуска всей системы. При нажатии на одну из приведенных ниже опций выгружается текущая конфигурация YAML этой опции и загружается новая.
Нажимаем - Объекты интеграции "MQTT", настроенные вручную.
Результат на вкладке - Обзор.
Ссылки по теме: