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


Далее можем добавить график, там же где добавляли элементы данных
На выходе получим что-то типа этого:)
Как бы все, надеюсь было полезно:)

