Имеем в наличии гермозону на 4 ряда с 16-тью открытыми стойками в каждом ряду.
Схема кондиционирования: горячие-холодные коридоры, внутренние кондиционеры с внешними испарителями, 3 кондиционера на ряд, то есть 6 кондиционеров на холодный коридор.
Задача: построить систему мониторинга температуры гермозоны с возможностью предупреждения выхода кондиционеров из строя.
Для решения данной задачи решено было использовать сеть 1-wire температурных датчиков и систему мониторинга Zabbix 2.
Собираем сеть 1-wire.
Что такое сеть 1-wire можно прочитать тут.
Нам необходимо:
1. Контроллер 1-Wire сети DS9490R
2. Температурные датчики DS18B20, в количестве, расчитываем: 4 ряда * 16 стоек в ряду * 2 датчика на стойку (холодный и горячие коридоры), то есть 128 датчика.
3. Для удобной установки датчика использовали вот такой переходник RJ45 на RJ45, кат. 5e GCT11-8p8c, так же в количестве 128 штук
4. И на каждый датчик по 2 патч-корда, то есть 128 * 2 = 256, длина патч-корда половина ширины стойки сервера
Собираем датчик, выбираем в переходнике три любых провода, делаем 3 дырки в переходнике, припаиваем датчик и так 128 раз :)
Рекомендуется залить место припоя клеем из термопистолета, получается что-то похоже на это:
Датчики сразу рекомендуется проверять на работу, прямым подключением к контролеру 1-wire сети и считывания с него информации. Так же рекомендуется пронумеровать датчики: последовательно наклеить номера с 1 по 128. Инициализация 1-wire сети будет описана ниже.
А так это смотрится если закрепить на стойке.
Так как на контролере разъем RJ11, а не RJ45, то рекомендую сделать нулевой датчик-переходник, его порядковый номер будет ноль, а номера стоек будут начинаться с 1, что более привычно.
ВАЖНО!
Протяженность нашей сети составила около 140 метров, так как сервер находился в 2 ряду.
В процессе тестирования выяснилось, что питания порта USB не хватает для такой длиной сети, контролер просто не может опросить датчики, дальше половины сети, поэтому рекомендую купить USB хаб, обязательно с внешнем питанием, и подключить контролер к нему. После подключения хаба, скорость опроса датчиков возросла, и в сети перестали появляться ошибки, все датчики читались.
Разбить сеть на два сегмента мне не удалось, так как программа которая считывает данные с датчиков, так и не смогла понять с каким контролером работать, по крайне мере заставить мне не удалось.
Инициализация 1-wire сети и получение значений датчиков.
Итак приступаем к настройке программной части.
Сервер к которому подключен USB контролер 1-wire сети работает под управлением FreeBSD 9.1, Zabbix 2.0.8 установлен из портов.
Для получения значений датчиков используется программа DigiTemp
Скачиваем исходники DigiTemp и компилируем, скомпилированные программы у меня располагаются: /usr/local/etc/digitemp/new/digitemp-3.6.0/
Для работы с нашем контроллером используем программу digitemp_DS2490
# cd /usr/local/etc/digitemp/new/digitemp-3.6.0/
# ./digitemp_DS2490 -i
DigiTemp нужно запускать из под root, чтобы она могла читать данные с устройства.
Необходимо запускать программу только из ее каталога, так как там хранится файл конфигурации сети.
./digitemp_DS2490 -i
— результатом выполнения будет являться файл конфигурации сети 1-wire с названием .digitemprc, в домашнем каталоге программы.
При этом digitemp выведет 64-битные ID датчиков, которые запишет в файл.
Пример .digitemprc
TTY USB
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 133
ROM 0 0x28 0x62 0xB5 0x19 0x03 0x00 0x00 0x61
ROM 1 0x28 0x29 0xD5 0x19 0x03 0x00 0x00 0xFD
ROM 2 0x28 0x59 0xDE 0x19 0x03 0x00 0x00 0x15
ROM 3 0x28 0xDA 0xD6 0x19 0x03 0x00 0x00 0x98
ROM 4 0x28 0xFD 0xBE 0x19 0x03 0x00 0x00 0x84
ROM 5 0x28 0xCB 0xE2 0x19 0x03 0x00 0x00 0x6F
ВАЖНО
Номер счетчика ROM 0 0x28 0x62 0xB5 0x19 0x03 0x00 0x00 0x61, НЕ ЯВЛЯЕТСЯ его физически последовательным номером в сети, этот номер получен во время инициализации сети, то есть кто первым ответил, тот и записался в файл.
Поэтому на стадии пайки датчиков и их проверки рекомендую формировать, сразу последовательную сеть. То есть берем датчик, спаяли, подсоединили сразу к контролеру, запустили ./digitemp_DS2490 -i получили его ID, скопировали его в Excel таблицу и так же добавили последовательно ROM номер … в таблицу.
Отсоединили датчик, наклеили на него последовательный номер, и повесили на гирлянду, соединяя патч-кардами. Не рекомендую подсоединять гирлянду к контролеру и запускать проверку, во-первых это будет гораздо дольше, а во-вторых в свете вышесказанного, из-за того, что ответы от датчиков приходят не последовательно, искать ID нового датчика будет сложнее.
После того как вы протестировали все датчики, подсоедините гирлянду к контролеру и запустите ./digitemp_DS2490 -i
Сформируется конфигурационный файл вашей сети .digitemprc
Вам необходимо заменить
ROM 0 0x28 0x62 0xB5 0x19 0x03 0x00 0x00 0x61
ROM 1 0x28 0x29 0xD5 0x19 0x03 0x00 0x00 0xFD
ROM 2 0x28 0x59 0xDE 0x19 0x03 0x00 0x00 0x15
ROM 3 0x28 0xDA 0xD6 0x19 0x03 0x00 0x00 0x98
ROM 4 0x28 0xFD 0xBE 0x19 0x03 0x00 0x00 0x84
на ту последовательно которая у вас получилась в Excel файле в таком же формате.
Сохраните полученный файл .digitemprc в другой папке, так как если вы вдруг запустите еще раз ./digitemp_DS2490 -i
, то ваш файл будет перезаписан, и тогда физическая адресация будет неверной с большой долей вероятности.
После того как 1-wire сеть настроена, можно считывать значения датчиков, запустите ./digitemp_DS2490 -q -a -r1 -n1
, программы выведет значения датчиков.
Проверьте правильность последовательного подключения в сети, например нагрейте 5 датчик, и запустите программу, температура должна возрастать на 4 (так как нумерация идет с 0)
Переходим к настройке Zabbix.
Сервер на котором установлен Zabbix в zabbix’е называется ZabbixServer.
Создаем в нем 129 элементов данных, то есть на каждый датчик температуры по элементу данных.
Для нас здесь важно понимать:
gmz.temp.t17 — это ключ элемента, они используется для отсылки значения датчика
и тип элемента должен быть “Zabbix trapper”, так как отправка значений будет происходить через программу zabbix_sender.
Создаем также 12 дополнительных элементов данных, на каждый из 12 кондиционеров. Датчики расположены так, что 3 датчика находится под выводом холодного воздуха кондиционера, поэтому считаем среднее этих трех датчиков, то элемент данных будет вычисляемым.
Обратите внимание на формулу, то есть складываются последние полученные значения датчиков и делится на три.
После того как добавили элементы данных мы можем посылать данные значений в Zabbix.
В crontab пользователя root добавляем задание:
*/1 * * * * /usr/local/etc/digitemp/digitemp_cron.sh > /dev/null 2>&1
То есть запускаем раз в минуту скрипт digitemp_cron.sh
cat /usr/local/etc/digitemp/digitemp_cron.sh
#!/usr/local/bin/bash
cd /usr/local/etc/digitemp/new/digitemp-3.6.0/
./digitemp_DS2490 -q -a -r1 -n1 -o"ZabbixServer gmz.temp.t%s %N %.2C" | /usr/local/bin/zabbix_sender -vv -z 127.0.0.1 -I 127.0.0.1 -T -i -
-o«ZabbixServer gmz.temp.t%s %N %.2C» — это строка определяет формат вывода данных.
ВАЖНО!
ZabbixServer — это название хоста с установленным Zabbix server в Zabbix.
Запустите ./digitemp_DS2490 -q -a -r1 -n1 -o"ZabbixServer gmz.temp.t%s %N %.2C" | /usr/local/bin/zabbix_sender -vv -z 127.0.0.1 -I 127.0.0.1 -T -i -
в результате работы zabbix_sender должно быть, что все строки отправлены и приняты:
Info from server: «Processed 133 Failed 0 Total133 Seconds spent 0.000540»
sent: 133; skipped: 0; total: 133
Если все так, то вы можете добавлять графики и тригеры, и настраивать оповещения.
Автор: nucleusv