Zabbix и Arduino

В этом материале я обещал показать как можно использовать данные из 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)

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

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

Zabbix и Arduino

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

Zabbix и Arduino

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.