[Из песочницы] Мониторинг температуры серверной своими руками
Когда мы в очередной раз узнали об отказе кондиционера в серверной по гневным сообщениям от встроенного мониторинга серверов, было принято волевое решение научить Zabbix мониторить температуру в серверной. Чтобы при повторении подобной ситуации принять меры до того, как серверная превратится в баню.
Реализация довольно проста: термодатчик опрашивается контроллером через шину 1wire, сам контроллер подключается к любому доступному серверу по USB и опрашивается командой head -n1 /dev/cuaU, которая прописывется в конфиге zabbix агента следующим образом:
UserParameter=usbtemp,head -n1 /dev/cuaU0
Выбор датчика с цифровым интерфейсом обусловлен тем, что это хороший задел на будущее чтобы добавить на шину еще десяток датчиков, если потребуется мониторить температуру каждой стойки отдельно, напрмер. Сам контроллер подключен по USB и чтобы не изобретать свои драйвера прикидывается обычным CDC serial emulator, то есть обычным виртуальным COM портом, и можно конечно же было использовать и HID class, так как он идеологически лучше подходит со всеми своими структурированными HID-report«ами для опроса всяческих датчиков. Но решил все же пока обойтись CDC для наглядности и простоты реализации.
Итак, все что потребуется для реализации это: непосредственно термодатчик DS18B20, микроконтроллер имеющий аппаратный USB модуль на борту, пара резисторов, конденсаторов и USB шнурок. В качестве микроконтроллера реализующего мост 1wire-USB, использован МК PIC16F1454, вообще же читатель может использовать любой другой МК на собственный вкус (подключив пару библиотек — 1wire, USB-CDC), либо подключить внешний UART-USB мост типа CP2102. Не очень люблю подобные костыли поэтому предпочел решение на одной микросхеме — взял самый дешевый контроллер с USB, на момент создания устройства это был PIC16F1454.
В проекте не использовалось готовых USB стеков от Microchip или сторонних, вместо них использован самописный стек, разработанный ранее для другого проекта. Однако вдаваться в особенности реализации своей библиотеки USB я в данной статье не буду. Так как работа с шиной USB выходит за рамки этой статьи и заслуживает отдельной, либо даже цикла статей. За который я возможно возьмусь в скором будущем, если, конечно читателю эта тема будет интересна.
Схема очень простая, поэтому плата была сразу разведена в sprint layout, тем не менее привожу чертеж схемы.
Контроллер не поддерживает бут-лоадер, поэтому зашить его можно только через программатор, используя ICSP разъем. Подойдет PICKIT2, например, или его клон.
Правильно собранное устройство начинает работать сразу после подачи питания и наладки не требует. Устройство драйверов не требует так как используется стандартный класс CDC, под Windows 10 и FreeBSD определяется сразу, под Windows 7 потребуется указать inf файл (см. архив к статье), явно указывающий на драйвер usbser.sys. Под другими ОС устройство не тестировалось. При подключении должно определиться как /dev/cuaUx, под FreeBSD, где x — логический номер устройства. Выполнив команду #head -n1 /dev/cuaU0 вы можете проверить, что датчик корректно опрашивается и отображается текущая температура.
Под виндой для проверки можно использовать любую терминальную программу, например putty.
Если все работает правильно можно продолжить. Далее создаем новый параметр (item) где в качестве key прописываем наш UserParameter, указанный в конфиге агента.
Ну и после этого остается только создать новый график из этого параметра. И добавить триггер например на 28–30 градусов.
В следующей версии планируется добавить возможность опроса множества датчиков и отображение температуры, с выбранного датчика, на дисплее на самом устройстве. Архив с материалами к статье.