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