Мониторинг температуры гермозоны с помощью 1-wire датчиков и Zabbix 2

image

Имеем в наличии гермозону на 4 ряда с 16-тью открытыми стойками в каждом ряду.
Схема кондиционирования: горячие-холодные коридоры, внутренние кондиционеры с внешними испарителями, 3 кондиционера на ряд, то есть 6 кондиционеров на холодный коридор.

Задача: построить систему мониторинга температуры гермозоны с возможностью предупреждения выхода кондиционеров из строя.

Для решения данной задачи решено было использовать сеть 1-wire температурных датчиков и систему мониторинга Zabbix 2.

Собираем сеть 1-wire.

Что такое сеть 1-wire можно прочитать тут.

Нам необходимо:

1. Контроллер 1-Wire сети DS9490R

image

2. Температурные датчики DS18B20, в количестве, расчитываем: 4 ряда * 16 стоек в ряду * 2 датчика на стойку (холодный и горячие коридоры), то есть 128 датчика.

image

3. Для удобной установки датчика использовали вот такой переходник RJ45 на RJ45, кат. 5e GCT11-8p8c, так же в количестве 128 штук

image

4. И на каждый датчик по 2 патч-корда, то есть 128 * 2 = 256, длина патч-корда половина ширины стойки сервера

Собираем датчик, выбираем в переходнике три любых провода, делаем 3 дырки в переходнике, припаиваем датчик и так 128 раз :)
Рекомендуется залить место припоя клеем из термопистолета, получается что-то похоже на это:
image

Датчики сразу рекомендуется проверять на работу, прямым подключением к контролеру 1-wire сети и считывания с него информации. Так же рекомендуется пронумеровать датчики: последовательно наклеить номера с 1 по 128. Инициализация 1-wire сети будет описана ниже.

А так это смотрится если закрепить на стойке.

image

Так как на контролере разъем 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 элементов данных, то есть на каждый датчик температуры по элементу данных.

image

Для нас здесь важно понимать:
gmz.temp.t17 — это ключ элемента, они используется для отсылки значения датчика
и тип элемента должен быть “Zabbix trapper”, так как отправка значений будет происходить через программу zabbix_sender.

Создаем также 12 дополнительных элементов данных, на каждый из 12 кондиционеров. Датчики расположены так, что 3 датчика находится под выводом холодного воздуха кондиционера, поэтому считаем среднее этих трех датчиков, то элемент данных будет вычисляемым.

image

Обратите внимание на формулу, то есть складываются последние полученные значения датчиков и делится на три.

После того как добавили элементы данных мы можем посылать данные значений в 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


Если все так, то вы можете добавлять графики и триггеры, и настраивать оповещения.

image

image
Поделиться публикацией

Похожие публикации

Комментарии 40

    0
    3. Для удобной установки датчика использовали вот такой переходник RJ45 на RJ45, кат. 5e GCT11-8p8c, так же в количестве 128 штук
    Плагиат, однако ;)
    Ну а если серьезно, скажите, чем обоснован выбор Zabbix? Почему не использовали, например, rrdtool, или БД какую-нить с гуглочартами?
      0
      Про плагиат я промолчу… :)

      Это только часть системы, другая часть собирала данные по SNMP с Uniping Server Solution.
      Во-вторых нужна была нормальная современная система с веб-интерфейсом, нормальными графиками, и самое главное с нормальной системой триггеров и настройкой действий для них.
      Так как в Zabbix можно посылать любые данные, он является прекрасным средством мониторинга практически чего угодно :) Если сам не может забрать данные то всегда есть zabbix_sender или сейчас можно написать подключаемый модуль.
        0
        Вас понял, спасибо. Я просто к тому, что такие вещи как мониторинг можно своими несложными скриптами через тот же крон фигачить с учетом оповещений, храня данные в БД. Думаю, не сильно монструозно получится, зато полностью управляемо и расширяемо. А для графиков куча вариантов есть…
          +2
          Я не люблю солянку, я выберу ту систему которая максимально удовлетворяет задачам из коробки, но при этом расширяемая (желательно без писания кода на С++ :) )
          В Zabbix ничего нет монструазного…
          Хотите графиков с кучей аналитик вон Яндекс Graphite использует, так как Zabbix слабоват для их кол-ва серверов, именно с точки зрения визуализации.
            0
            Когда параметров мало, собственные скрипты кажутся проще, чем zabbix.
            Когда показателей становится хотя бы тысяча, приготовить zabbix уже проще, чем не закопаться в своих костылях.
            Когда data-item'ов миллион — требуется серьезная оптимизация производительности :)
              0
              Ну речь же идет про конкретную задачу, поэтому вопрос и возник…
                0
                у человека уже есть датацентр, в котором наверняка уже есть система мониторинга, в которую нужно было добавить матрицу термометров, я так понял задачу.
                Если бы я себе дома мониторил температуру в холодильнике — zabbix конечно черезчур.
                Кстати, тут в каком-то очередном посте про умный дом человек рассказывал, что он в пол закатал около 20 термодатчиков в одной комнате — собирался мониторить сквозняки :)
                  0
                  Жесть ))
                    0
                    Во-первых дата-центр не один ;)
                    + куча всяческих узлов связи и серверных.
                    И планировалось не только мониторить температуру, а вообще инженерную инфраструктуру, и чтоб все это пищало и слало всем смс-ки, письма, будило бы операторов ДЦ из динамиков, то есть был рассмотрен потенциал развития системы и лучше Zabbix мне кажется ничего нет, на данный момент из open source.
                      0
                      У нас теперь другая проблема — определить порог «важности» алертов. Просыпаться просто так никому не хочется, но и не знать что происходит — тоже не вариант.
                        0
                        А чем Вас триггеры не устраивают?
                        1. Все зависит от системы и как быстро в ней растут параметры: если температура за последние 5 минут поднялась на 2 градуса, то просто информейшен — ничего не происходит
                        2. если на 10 — уже ворнинг, можно просыпаться
                        3. дальше алерт с вызовом пожарных :)
                          0
                          Я вцелом говорю, о системном мониторинге — когда много данных различного порядка (не только температуры).
                          Это проще, когда есть четко-определенные отделы, которые сами для себя определяют пороги алертов. Когда людей не сотни, и обязанности перекликаются между друг другом возникает сложность в том, кто должен получить алерт и о чем, а также какой порог срабатывания.

                          Если конкретно — сейчас вот, например, прошивка на RAID контроллере устарела по мнению контроллера, как расценивать эту ошибку?

                          Для меня мониторинг — это не только настройка самого мониторинга, но и глубокий анализ деятельности админов/девелоперов/бизнес-отдела, для того чтобы их жизнь была не алертовым адом (и, как результат, фильтрами всех писем от zabbix/nagios в папку «alerts»), а реальной системой, когда смс/email от сервера мониторинга означает «Нужно бежать и чинить».

                          Спасибо за статью, очень здорово! Особенно понравилось как Вы «бочку» использовали в качестве корпуса :)
                            0
                            > Если конкретно — сейчас вот, например, прошивка на RAID контроллере устарела по мнению контроллера, как расценивать эту ошибку?

                            А это ошибка или ворнинг?

                            Все триггеры расцениваются наверно, не от класса критичности, а порожденными экшенами, то есть «чего делать то»:

                            1. Если в системе возникло событие никак не влияющую на систему, то есть в рамках допустимых значений НОРМЫ системы, норма ессно высчитывается, то есть это некое отклонение от среднего нормы, то это информация, то есть потом мы будем знать при анализе когда система начала выходить из нормального состояния. ДЕЛАТЬ НИЧЕГО НЕ НАДО.

                            2. Возникает единожды или уже периодически выход за диапазон НОРМЫ процесса, тут информационное, но рекомендующую уже проанализировать систему, либо что-то сделать чтобы вернуть процесс в диапозон нормы, либо раздвинуть диапазон НОРМЫ, так как после анализа, может оказаться, что условия системы изменились.
                            Здесь без человеческого анализа «лучшее враг хорошего» скорее никак.

                            3. Ну и третий — это хоть единственное срабатывание, в диапазоне, в котором мы точно понимаем, что это экстренная ситуация

                            Ваш случай, это подплан номера 2, если система работает, с такой же стабильностью как и прежде, но есть вариант возможного улучшения, то тут человеческий анализ, либо обновить прошивку и считать чувствительность триггера нормальной, либо внести это событие внутрь нормы процесса и триггер реагировать его не будет.

                            Вы меня простите тут за ночные умствования, развлекаюсь :)
                            Я рад, что оказалась статья полезной.
                            Использовать «бочку» не моя идея, а кто создавал прототип, в котором было только 15 датчиков для теста и для графиков использовался какой-то ужас от digitemp :)
                              0
                              Сейчас это ворнинг, Вы все верно говорите, как раз в подпланах номера 2 кроется проблема, где нужно делать анализ. Но беда в том, что этих ворнингов накапливается столько, что психологически для админов они перестают быть ворнингами, и становятся нормой, что не есть хорошо, а анализ делать… Ну кто его сделает кроме меня? :)
                              Выходит что при текущей загруженности моих человекочасов нужно попросту отключать ненужные проверки, до тех пор пока не возникнет потребность их мониторить…
                                0
                                Ну да пока приходиться мерится, что пока нет:

                                Tony Stark: Any military victims?
                                Jarvis: Not according to public records, sir.
                                Tony Stark: Bring up the thermogenic signatures again, factor in three thousand degrees.
                                Jarvis: The oracle cloud has completed analysis. Accessing satellites and plotting the last twelve months of thermogenic occurrence now.

                                )))
          +1
          Может быть надо было запараллелить провода?
            0
            Где? Для чего?
            Я не очень хорошо понимаю электронику, поэтому называется «как шмогли» :)
              0
              Запаралелить провода питания. 3 земли, 3 питания, 2 данных.
                0
                Так они же и так параллельно подключены, использование нескольких проводов не сильно повлияет, ведь длина то останется. Тут если есть проблема с питанием проще источник питания на половину сети отдельный воткнуть ( с общей землей).
                  0
                  Не. Проще посмотреть как народ делает длинные сети, а не придумывать свой велосипед.
                  Обычно около мастера сети ставится блок питания на 12-18В, а в каждом датчике собирается схемка из нескольких деталей с линейным стабилизатором типа 78L05 или LP2950. Стоимость каждого датчика рублей на 15-20 от силы возрастает, но никаких проблем со стабильностью не будет.
                    +1
                    А зачем вы включение с паразитным питанием импользуете? Трехпроводная схема стабильнее работает.
                      0
                      С паразитным? Стабилизатор около каждого датчика как раз для нормального питания нужен.
                      Только сейчас обратил внимание, что у автора на первой картинке схема с паразитным питанием. Сурово для 128 датчиков, с учетом того, что одновременно из всей сети при таком включении можно опрашивать только один датчик.
                        0
                        На картинке
                        image

                        это просто для примера, взял из инета просто с таким же контролером.
                        У меня каждая ножка датчика на отдельный провод.
            0
            Про глюки на длинных сетях смотрим: Сайт DigiTemp. А именно Long Wire runs (glitches).
            Да и на коротких сетях не повредит в конце линии поставить такое. Избавит от появления барабашек в сети :)
              0
              О, спасибо!
              Так и думал, что есть какая-то «нашлепка», но в электронике не бум, так что usb-хаб c питанием спас, а то было мучение с барабашками :)
                0
                А не подскажите как подключить диод Шоттки, когда DS18B20 подключают к GPIO Raspberry Pi? У ds18b20 3 контакта, а у Шоттки всего 2. Подключаю DS18B20 последовательно с помощью переходника RJ45 на RJ45, как у автора, но использую 3 жилы витой пары. Вот и не могу понять какие контакты DS18B20 через Шоттки пускать… Кажется DATA + GND (данные + земля)?..
                Никак не могу понять как у гугла об этом спросить…

                Заранее спасибо!
                0
                Глюки при паразитном питании бывают часто, поэтому необходим накопитель у каждого датчика. Вот например, проверенная схема, работающая стабильно. SR560 конечно излишен (установил то, что было), достаточно менее мощного диода Шоттки.
                image
                  0
                  а зачем RG45?
                  переходники RG11-RG11 есть, провода дешевле в три раза. не проще ли было собрать эту схему по телефонному кабелю, или есть какой-то ньюанс?
                    +2
                    Нюанса нет, прототип до меня собирался на этих переходниках, тем более в ЦОДе есть витая пара в неограниченных кол-вах, а телефонного кабеля нет.
                    0
                    Для 1wire под linux лучше использовать owfs.
                    Более продвинутая штука, чем digitemp. И проблема с несколькими подсетями решилась бы.
                      0
                      Изначально стоял FreeBSD.
                      0
                      3 дня назад домой поставил датчик температуры ds1821 (с программируемым термостатом) к котлу, не понравились механические.
                      По поводу ds18b20 — хороший дешёвый вариант. Около 3$ за штуку.
                        +1
                        Нечто подобное мы делали в теплицах с узбекскими колхозниками. Но кроме мониторинга было еще управляющее воздействие: когда температура или влажность выходили за допустимые границы, звенел звонок, узбекские дежурные бежали и проверяли параметры по приборам (термометр) и либо открывали форточку на потолке, дергая за веревку, либо запускали «турбину». а еще мы разрабатывали приложение для смартфона для управления рабочими, но этот проект провалился, т.к. сотрудники не поддавались обучению и потеряли все смартфоны.
                          0
                          > но этот проект провалился, т.к. сотрудники не поддавались обучению и потеряли все смартфоны.
                          я лежу :))))
                          вы учить не умеете вы их на стажировку в KFC или Burger King отправили им там быстро IQ подняли :)
                          А зачем рабочий в этой схеме, то есть не понятно зачем ему вообще бежать проверять термометр, если у оператора есть это на графике, а к турбине нельзя прикрутить какой нить юнипинг с розеткой, а к форточке шаговый двигатель, тогда можно было бы и уровень открытия регулировать :)
                            +1
                            Там общий уровень развития колхозников очень низкий. Раз в неделю приезжал хозяин теплицы и объяснял своим колхозникам как не надо работать. выглядело это как в сериале с Джамшутом и Равшаном. Колхозники плохо изъяснялись по русский, и кроме как колхозниками они никем быть не могли.
                            Что касается автоматики — то с этим было очень сложно. Дело в том, что теплицы были одноразовыми: представьте теплицу в километр длиной и метров 400 шириной, которая сделана из брусков и обтянута полиэтиленом. строиться такая теплица на один сезон. в потолке деревянные форточки с веревкой, для открывания/закрывания. поскольку площадь теплиц большая (17Га), то автоматических форточек нужно очень много, а это довольно дорого, а ставить несколько штук никакого смысла нет. с термогенераторами примерно такая же штука — проще узбекскому колхознику подбежать, открыть вентиль и чиркнуть зажигалкой, чтобы ее запустить, чем какую-то сложную автоматизацию придумывать.
                            А вот мониторинг — просто спасение, поскольку колхозники сами ничего делать не будут, пока их не напнешь. вот такая история.
                              +1
                              Я еще помню с этим клиентом такую историю: мы отправили аналитика, для того, чтобы он проанализировал проблемы и предложил ИТ решения. вернулся аналитики и рассказывает, какие он услышал проблемы:
                              — комбайнер залил мало солярки и уехал в поле, там солярка у него кончилась, пришлось отправлять туда на лошади мужика с соляркой
                              или
                              — в прошлом году выписали рабочих из Узбекистана, а среди них попалась проститутка, так у нас почти все 120 рабочих сифилисом заболели и мы остались без рабочих
                              и все в том же духе.
                                0
                                «эффективного менеджера» им из Газпрома :) (как посыл на похороны :) )
                          0
                          Можете доработать свой протокол для отправки показаний в облачное хранилище показаний для публичного и/или приватного доступа для дальнейшего доступа через API?
                          Для собственных нужд Вы смотрю также использовали digitemp, принципиально ли оно отличается от бюджетного беспроводного wifi подключения датчиков описанного здесь?
                            0
                            Я практически ничего не понял, что Вы хотите?
                            Какой протокол? Зачем Вам нужна температура какого-то ЦОД :)?

                              0
                              Различные виды протоколов передачи показаний тут.
                              Интересны дополнительные способы решения задач мониторинга, кроме тех что уже описаны и в проекте и на Хабре неоднократно.
                              Температура в ЦОД лишь 1 из многих способов ее применения в приватном доступе для дальнейшего мониторинга к примеру с Android.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое