Имеем
Сервер на FreeBSD 8.1 Release 64-bit с установленным WEB сервером Apache и работающим MRTG. Необходимо наличие свободного COM порта.
Железо
Схема простейшего контроллера содержится в архиве с исходными текстами (файл DS9097_Schematic.gif). Для сбора схемы с одним датчиком были закуплены в магазине «Чип&Дип» следующие детали:
1.Диод Шоттки - 1N5818 – 2шт.
2.Стабилитрон на 3,9 В - BZX55C3v9 – 1шт.
3.Стабилитрон на 6,2 В - BZX55C6v2 – 1шт.
4.Резистор на 1,5 КОм – 1шт.
5.Датчик температуры DS1820 – 1шт.
6.Корпус разъема DB9 – 1шт.
7.Разъем DB9 мама (Female) – 1шт.
Всё это дело обошлось примерно в 420р. По ценам января 2011 года.
Если руки растут из правильных мест, и имеете навык общения с паяльником, всю схему можно разместить в корпусе разъёма навесным монтажом.
Автор не несёт ответственности за возможные негативные последствия вызванные попытками применить на практике материалы данной статьи!
Полупроводники имеют штриховую маркировку. Штриху соответствует катод (по схеме: катод – штрих, анод – треугольник). Датчик, повернутый спилом вверх, ножками к нам, маркируется с лева на право. Датчик я вывел обычной витой парой. Третий контакт не соединял – датчику хватает и паразитного питания. Если потребуется, дополнительные датчики подключаются параллельно. Каждый датчик имеет уникальный ID, так что не запутаетесь.
Возможные грабли:
СофтПеред закупкой деталей убедитесь, что COM порт вашего сервера мониторинга имеет стандартное питание 9 В. Померьте напряжение между 4 и 5 контактом. Убил кучу времени пытаясь завести схему на сервере Hewlett Packard с 5-ти вольтовым портом. У стандартного порта напряжение между 4 и 5 контактом будет примерно 10-11,5 вольт. Для низковольтных портов используется другая схема контроллера. Мне в результате пришлось подсоединить контроллер к другому серверу и снимать показания через NRPE (но это уже будет другая статья).
В портах этой программы не оказалось.
Придётся ставить вручную из исходников. Исходники можно скачать с сайта разработчиков по адресу:
http://www.digitemp.com
Для компиляции понадобится gmake, если не установлен, собираем из портов
Код: Выделить всё
#cd /usr/ports/devel/gmake
#make install clean
#rehash
Код: Выделить всё
#mkdir /«какая-нибудь временная папка с исходниками»
#cd /«какая-нибудь временная папка с исходниками»
#fetch http://www.digitemp.com/software/linux/digitemp-3.6.0.tar.gz
#tar -xzvf digitemp-3.6.0.tar.gz
/«какая-нибудь временная папка с исходниками»/digitemp-3.6.0
Код: Выделить всё
#cd digitemp-3.6.0
#gmake ds9097
Код: Выделить всё
#./digitemp_DS9097
В принципе, кроме этого файла нам больше ничего и не нужно.
Создаём рабочую папку нашей системы наблюдения за температурой.
Код: Выделить всё
#mkdir /usr/local/etc/digitemp/
#cp digitemp_DS9097 /usr/local/etc/digitemp/digitemp
#rm –r /«какая-нибудь временная папка с исходниками»
#cd /usr/local/etc/digitemp
Код: Выделить всё
#./digitemp -i -s /dev/cuau0
Как видно, у меня один датчик. Нумерация датчиков начинается с нуля.TTY /dev/cuau0
READ_TIME 1000
LOG_TYPE 1
LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F"
CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C"
HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%"
SENSORS 1
ROM 0 0x28 0x4B 0xD1 0xC7 0x02 0x00 0x00 0xF0
Пробуем снять показания.
Код: Выделить всё
#/usr/local/etc/digitemp/digitemp -a -c /usr/local/etc/digitemp/.digitemprc
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Jan 27 12:51:38 Sensor 0 C: 23.62 F: 74.53
Код: Выделить всё
#/usr/local/etc/digitemp/digitemp -t 0 -q -o "%.C" -c /usr/local/etc/digitemp/.digitemprc
24
Теперь прикручиваем это всё к MRTG
Для начала немного лирики (теория). Исторически MRTG предназначен для показа графиков загрузки всяческих сетевых интерфейсов. Значения для этих графиков берутся из показаний соответствующих программных счётчиков снимаемых по протоколу SNMP. Для построения одного графика на входе MRTG должен получить четыре параметра:
1.Значение счётчика входящего трафика (зелёный граф);
2.Значение счётчика исходящего трафика (синий граф);
3.Uptime;
4.Как это всё называется.
Курение манов MRTG показало, что можно снимать значения и других параметров (не только загрузки сетевых интерфейсов) по протоколу SNMP, также существует возможность получать значения для графиков из результатов выполнения какого либо выражения (команды). Главное чтобы вывод был понятен MRTG. В качестве команды возвращающей 4 значения в голову сразу пришла команда cat читающая четырёх строчный файл.
Пора перейти к практике.
Нам нужен скрипт, который будет снимать периодически показания температуры, и создавать четырёх строчный файл в нужном формате.
Код: Выделить всё
#ee /usr/local/etc/mrtg/thermo.sh
Небольшой комментарий для тех, кто слабо знаком с работой echo. Первая команда создаёт новый файл /usr/local/etc/mrtg/thermal.log с одной строкой содержащей 0. Вторая команда дописывает в этот файл вторую строку содержащую текущее значение температуры. Третья дописывает в третью строку значение Uptime. Четвёртая – в четвёртую название параметра (из головы).#!/bin/sh
echo 0 > /usr/local/etc/mrtg/thermal.log
echo `/usr/local/etc/digitemp/digitemp -t 0 -q -o "%.C" -c /usr/local/etc/digitemp/.digitemprc ` >> /usr/local/etc/mrtg/thermal.log
echo "15 days, 23:09:18" >> /usr/local/etc/mrtg/thermal.log
echo "Thermal State" >> /usr/local/etc/mrtg/thermal.log
Делаем скрипт исполняемым и пробуем запустить
Код: Выделить всё
#chmod +x /usr/local/etc/mrtg/thermo.sh
#/usr/local/etc/mrtg/thermo.sh
Код: Выделить всё
#cat /usr/local/etc/mrtg/thermal.log
0
24
15 days, 23:09:18
Thermal State
строку выводится значение с потолка (серверной) . Теперь необходимо добавить запись в cron на периодический запуск этого скрипта. У меня MRTG запускается тоже через cron каждые пять минут (чаще нельзя). Показания температуры будем снимать с таким же интервалом.
Возможные грабли:
У меня работает так:Опрос датчика температуры длится довольно длительное время. В .digitemprc стоит параметр
READ_TIME 1000
одна секунда. Реально получается чуть меньше 750мс. Т.е. скрипт не получится стартовать с такими же параметрами, как и MRTG – данные просто не успеют подготовиться.
Настало время править конфигурационный файл MRTG.*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root /usr/local/etc/mrtg/thermo.sh
Примечание:
У меня направление движения графика по-умолчанию, цвета тоже «родные».
Добавляем в конфигурацию следующие строки:
Я оставил возможность подцепить на двухпроводную шину второй датчик (например - в офисе) и выводить его зелёным цветом. В этом случае первая строка thermo.sh будет такая:Target[thermal]: `/bin/cat /usr/local/etc/mrtg/thermal.log`
Pagetop[thermal]: <h1>Thermal State in My Town</h1>
Title[thermal]: Thermal State
PNGTitle[thermal]: Thermal State in Server Room
MaxBytes[thermal]: 50
AbsMax[thermal]: 50
LegendI[thermal]: Outer
LegendO[thermal]: Inner
kMG[thermal]: C
Options[thermal]: nopercent,gauge,noinfo
YLegend[thermal]: Temp, C
ShortLegend[thermal]:
Legend1[thermal]: external
Legend2[thermal]: internal
Код: Выделить всё
echo `/usr/local/etc/digitemp/digitemp -t 1 -q -o "%.C" -c /usr/local/etc/digitemp/.digitemprc ` > /usr/local/etc/mrtg/thermal.log
http://мойсервермониторинга/mrtg/thermal.html