Zabbix и Arduino Получаем данные из Arduino в Zabbix

В этом материале я обещал показать как можно использовать данный из Arduino в Zabbix.
Будем считать, что Arduino у вас прошита примером из предыдущей статьи и подключена к вашему компьютеру в моем случае это порт COM3.
Так же у вас настроен сервер Zabbix и на вашем компьютере настроен Zabbix Agent и эта связка работает.
Для реализации задумки нам потребуется Python, если у вас не установлен данный интерпретатор, то скачиваем и устанавливаем отсюда.
Т.к. Python мультиплатформенный, то данный материал легко реализуем на любых операционных системах (кроме мобильных) я же буду все проделывать в Windows.

Из Arduino в серийный порт мы получаем значения  влажности и температуры как

27.40 22.10
27.40 22.10
27.30 22.10

Итак, все настроено Python установлен, доустановим модуль pySerial с помощью pip в консоли, если pip отсутствует (касается например FreeBSD, где он автоматом не устанавливается), то устанавливаем.
pip install pyserial

Создадим директорию для нашего скрипта
mkdir "%ProgramFiles%\Zabbix Agent\scripts"

Напишем скрипт, который будет опрашивать наш серийный порт и получать значения из Arduino, обращаем внимание на переменную “ser“, если у вас другой номер серийного порта, укажите свой (посмотреть можно в Windows в устройствах, в Linux можно посмотреть dmesg)
import serial
import sys
ser = serial.Serial('COM3', 9600)

DELIMITER = ' '

CMD_DICT = {
    'humidity': lambda values: values.split(DELIMITER)[0],
    'temperature': lambda values: values.split(DELIMITER)[1]
}

try:
    CMD = sys.argv[1].strip().lower()
    if CMD not in CMD_DICT:
        print("CMD {} - first parameter".format(CMD_DICT.keys()))
        sys.exit(1)
except IndexError as e:
    print("CMD {} - first parameter".format(CMD_DICT.keys()))
    sys.exit(1)

# Вместо vals вставь блок кода с получением данных
dh = ser.readline()
vals = dh.decode()

command = CMD_DICT[CMD]
print(command(vals))

# Пример вызова:
# Влажность - python dh22.py humidity
# Температура - python dh22.py temperature

И сохраним данный скрипт под именем dh22.py в директорию С:\Program Files\Zabbix Agent\scripts\, для теста можно попробовать запустить скрипт с аргументами:
С:\Program Files\Zabbix Agent\scripts\dh22.py temperature
С:\Program Files\Zabbix Agent\scripts\dh22.py humidity

В первом случае вернет температуру, во втором влажность

Теперь нам нужно научить Zabbix Agent отдавать серверу эти значения, будем отдавать через пользовательские данные (UserParametr).
Открываем конфигурационный файл Zabbix Agent (в Windows используйте для редактирования программу notepad++, она замечательно работает с различными символами переноса строк)

notepad++ C:\Program Files\Zabbix Agent\zabbix_agentd.conf

В самый низ файла вписываем
UserParameter=dh22[*], C:\Users\vino\AppData\Local\Programs\Python\Python37\python.exe "C:\Program Files\Zabbix Agent\scripts\dh22.py" $1

Где:

  • dh22[*] – название параметра  (ключа), [*] – для аргументов (humidity или temperature)
  • C:\Users\vino\AppData\Local\Programs\Python\Python37\python.exe – путь до интерпретатора Python
  • C:\Program Files\Zabbix Agent\scripts\dh22.py – путь до скрипта
  • $1 – здесь будет возвращаемое значение

Рестартуем сервис Zabbix Agent

net stop "Zabbix Agent"
net start "Zabbix Agent"

На Zabbix сервере создаем два элемента данных для нашего хоста (Настройка->Узлы сети->Выбираем наш узел и переходим в его Элементы данных), один для температуры, второй для влажности (Сделал принтскринами, картинки кликабельные) :


Далее можем добавить график, там же где добавляли элементы данных

На выходе получим что-то типа этого:)

Как бы все, надеюсь было полезно:)

0 0 голосовать
Рейтинг статьи
Подписаться
Уведомление о
guest
0 Комментарий
Встроенные отзывы
Просмотр всех комментариев