Добрый день! Очередной термометр своими руками, но теперь для «серверных» помещений, просто, дёшево и эффективно.
Появилась необходимость следить за работой кондиционера в «серверной», так как однажды он нас подвёл, выключился и продолжительное время серверы работали в помещении при температуре 35-40 градусов. Было принято решение такой ситуации более не допускать и каким-то образом следить за температурой в помещении.
Поиск на «
али» и «
ибее» удивил ценой на подобные устройства, от 10$ за штуку. Так же было совершенно неясно какое программное обеспечение было у этих устройств и как его сопрягать с существующими системами.
В интернетах по запросу «
ds18b20 к компьютеру» была найдена полезная информация, подключение возможно с использованием USB-UART адаптера. «То, что надо, дайте два!»
Итак, приступим. Краткое техническое задание:
1) Измерять температуру.
2) Дёшево.
3) Надёжно.
4) Это должно работать как под Windows, так и под *nix.
Что нам нужно:
1) Адаптер
USB-UART.
2) Датчик
DS18B20.
3) Резистор 4,7 кОм.
В зависимости от варианта исполнения так же понадобится:
4)
Корпус.
5) Термоусадка.
6) Коннектор
DuPont.
Аппаратная часть.
Идём на али/ибей, заказываем несколько разных самых дешевых адаптеров USB-UART и датчики температуры DS18B20 на проводе. Ждём месяц и бегом на почту за посылками.
Приехали адаптеры на чипах
PL2303,
CH340 и
CP2102. После подключения датчика к адаптеру выяснилось, что
для работы годятся только те адаптеры которые собраны на чипе CP2102.
Хочу отметить что флюс на адаптере не смыт, USB порт держится на только на линиях питания и данных, и корпус порта к плате не припаян. Порт пришлось укрепить дополнительно пропаяв все площадки.
Схема для сборки:
Подключение датчика к адаптеру не составит особого труда, а адаптера к компьютеру – тем более.
В результате имеем два варианта исполнения устройства, в корпусе и без.
Вариант в корпусе, получился интереснее, но и дороже потому что штучно корпусы найти не удалось, пришлось брать 10 штук. Как и предполагалось, корпус пришлось «доработать напильником», а точнее выкусить бокорезами выступающие пазы крепления в середине корпуса с внутренней стороны. После этого плата переходника поместилась в корпус с небольшим усилием.
Вариант без корпуса так же выглядит достойно. В данном случае резистор находится под термоусадкой, запаян он между желтым и красным проводами. Сделано для того чтобы не «калечить» адаптер и в случае необходимости использовать его для других целей.
Программная часть.
Предположу, что в любой серверной «живёт» хотя бы одна из перечисленных ниже операционных систем, именно для них и опишу программные решения. Для получения температуры будем использовать программное обеспечение
DigiTemp написанное для ОС Linux и успешно портированное под Windows. Программа позволяет считывать параметры с устройств по шине 1-Wire.
Идея проста, после того как данные получены с устройства, проверяем температуру на соответствие заданному промежутку и если температура «ушла» за пределы оповещаем каким – либо доступным способом.
Windows.
Для ОС Windows необходимо подключить «термометр» к порту, установить
драйверы на адаптер и скачать архив
dtreg17.zip. Распаковываем архив, запускаем файл run_me.cmd.
Содержимое файла
@echo off
for /f %%a in ('digitemp.exe -a -q') do set "temperature=%%a"
@rem Если температура больше 25°
if %temperature% GTR 25 (
echo Temperature is %temperature%!
@rem Оповещаем всеми доступными способами.
@rem pause
)
@rem Если температура меньше 18°
if %temperature% LSS 18 (
echo Temperature is %temperature%!
@rem Оповещаем всеми доступными способами.
@rem pause
)
Linux.
Обновляем пакеты, ставим DigiTemp, создаём файл конфигурации, опрашиваем, оповещаем.
Обновление, установка, настройка
# sudo usermod -a -G tty www-data
# sudo usermod -a -G dialout www-data
# apt-get update
# apt-get upgrade
# apt-get install digitemp
# ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Aug 1 08:13 /dev/ttyUSB0
# digitemp_DS9097 -w -s /dev/ttyUSB0
DigiTemp v3.7.1 Copyright 1996-2015 by Brian C. Lane
GNU General Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
.
Devices on the Main LAN
28FF5C5D71160584 : DS18B20 Temperature Sensor
# digitemp_DS9097 -i -s /dev/ttyUSB0
# cp .digitemprc /etc/digitemp.conf
# digitemp_DS9097 -t 0 -q -o "%.1C" -c /etc/digitemp.conf
29.1
FreeBSD.
Обновляем пакеты, ставим DigiTemp, создаём файл конфигурации, дополнительно настраиваем права доступа, опрашиваем, оповещаем.
Обновление, установка, настройка
# pkg update
# pkg search digitemp
digitemp-3.6.0 Dallas Semiconductor 1-wire device reading console application
# pkg install digitemp
# ls -l /dev/cua*
crw-rw---- 1 uucp dialer 0x70 1 авг 09:50 /dev/cuaU0
crw-rw---- 1 uucp dialer 0x71 1 авг 09:56 /dev/cuaU0.init
crw-rw---- 1 uucp dialer 0x72 1 авг 09:56 /dev/cuaU0.lock
# digitemp_DS9097 -w -s /dev/cuaU0
DigiTemp v3.6.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
.
Devices on the Main LAN
28FFA69161160323 : DS18B20 Temperature Sensor
# digitemp_DS9097 -i -s /dev/cuaU0
# cp .digitemprc /usr/local/etc/digitemp.conf
# digitemp_DS9097 -t 0 -q -o "%.1C" -c /usr/local/etc/digitemp.conf
20.4
Внимание!
Если скрипт будет запускаться не от пользователя root, то необходимо добавить этого пользователя в группу "dialer" для получения доступа к /dev/cua*.
Например, скрипт выполняется от пользователя www:
# pw usermod www -G dialer
Как это работает у нас?!
Сервер на ОС FreeBSD по крону каждые 10 минут опрашивает датчик запуская php-скрипт temperature.php и если температура отклонилась от заданного в скрипте диапазона, то отправляется письмо на указанные в скрипте адреса.
temperature.php
#!/usr/local/bin/php
<?php
$text='Температура воздуха в серверной: ';
$addtext=' °C.
Актуальная температура доступна по ссылке http://server-ip/temp.php';
$temp = exec('/usr/local/bin/digitemp_DS9097 -t 0 -q -o "%.1C" -c /usr/local/etc/digitemp.conf');
if ($temp > 25 || $temp < 16) {
mail("user1@ server.local ", "GISMETEO. server.local", "$text$temp$addtext");
mail("user2@ server.local ", "GISMETEO. server.local", "$text$temp$addtext");
}
?>
Так же есть скрипт
temp.php который лежит в корне веб-сервера для «онлайн мониторинга», обновляется так же, раз в 10 минут.
temp.php
<?php header('refresh: 600'); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<?php
$temp = exec('/usr/local/bin/digitemp_DS9097 -t 0 -q -o "%.1C" -c /usr/local/etc/digitemp.conf');
$today = date("Y-m-d H:i:s");
echo "<html><head><style>body {background-color: #A9A9A9;</style></head><body><h2>Температура воздуха в серверной: ";
if ($temp < 16) echo "<font color=\"blue\">$temp °C</font>";
else if ($temp > 25) echo "<font color=\"red\">$temp °C</font>";
else echo "<font color=\"green\">$temp °C</font>";
echo "</h2><h4>$today</h4></body></html>";
echo "Российские СН 512-78 (п.3) предъявляют следующие требования к микроклимату: температура воздуха в помещениях 20 °C ± 2 °С (не более 25 °С).";
?>
Работает эта система уже около года, за всё время ложных срабатываний не наблюдалось.
На этом всё, спасибо за внимание!
ЗЫ. На звание лучший кодер не претендую, все скрипты писались на ходу.
Да, кстати — CP2102 в китайских переходниках тоже «не без греха». Или родные драйверы с глюком. Чисто случайно имел удовольствие на это наступить (потеря данных при передаче большим блоком).
А схема в топике работает только потому что в тех же распространенных усб-юарт мостах обычно имеется ограничитель тока на портах обычно миллиампера на 4.
Ну, если где и есть, то сопротивлением канала. У CP2102 обещают просадку 0.8V для вытекающего 10 mA. Этак можно и весь трехвольтовый регулятор просадить…
Подробнее тут
we.easyelectronics.ru/electro-and-pc/ft232-kak-podruzhit-1-wire-s-kompom.html
только «схема» без резистора.
проверял так же 2-3 подключенных впараллель датчика — тоже работало
проблем за это время не наблюдалось.
1. Работает на PL2303 (переходник USB <-> COM) «фирменном», уже года три. Опрашивается роутером и рисует график из под RRDTools.
2. Работает на USB-UART pl2303 (куплен на Али) с первыми попавшимися драйверами. Работает под Виндой ХР. Делался просто для проверки пачки Dallas-вских датчиков с Али, но уже более года работает 24/7
До этого колхозил эти датчики к ардуинке, они с определенной периодичностью зависали, приходилось аппаратно передергивать.
Здесь, думаю, должно быть понадежнее
Если подключаете к ардуине, запитывайте не от VCC, а от вывода контроллера, чтобы питание подавалось только перед замером. Это и правильнее (датчик не греется), и перезагружает его по питанию.
Конечно, не исключаю и варианта кривой реализации кода… Он у меня постоянно в терминал писал температуру
иначе это уже колхоз
хотя… кому как
меня за это бы просто уволили
и потом если это твоё личное то это одно
а когда от тебя зависит куча народу-это совсем другое
Если в серверной не обеспечивается температурный режим (при любых раскладах, безо всяких отговорок, при любых ситуациях), то всё, что вы там колхозите — это утренник в детском саду.
Два кондиционера, которые у вас там установлены, должны комплектоваться LON- или RS485 платами, по которым и мониторинг и съём данных обеспечивается вашему персоналу. И, даже более того, эта пара кондиционеров должна между собой завязываться в сетку, чтобы при аварии одного, второй подхватывал работу (ну и, плюс, циклическая периодическая автосмена, чтобы ресурс каждого расходовался одинаково).
А экономия «давайте купим бытовой китайский кондиционер самый дешёвый» порой обходится очень дорого, поверьте.
Хороший сервак, даже один, померший от перегрева, по цене перетянет один бытовой сплит, не считая ещё косвенных убытков. Математика простая.
а я о чём говорил
Везде затраты на предотвращение аварий выглядят логичнее и менее масштабны, чем затраты на аварийное и стрессовое восстановление дорогостоящей аппаратуры и серверов.
Либо у вас там начальник чего-то недопонимает, либо мы знаем не всю картину про персонал, который допустил отключение тех кондиционеров.
Простые человеческие отношения, безо всяких согласований и печатей на бумагах… но когда следующим летом сломается первый из кондиционеров, ребята его починят раньше, чем сломается второй. А в этом и прикол. И безо всякой Роснефти.
Как при такой защите он может помереть от перегрева — я не понимаю.
Что конечно не отменяет необходимости организации нормального резервированного охлаждения серверной и то, что выключение сервера по перегреву это все отказ в предоставлении услуги.
Речь-то тут не о троттлинге и возможности серваков выживать. Речь о том, чтобы в серверной выдерживать заданный температурный режим. И о том, что колхозинга тут быть не должно, есть готовые, надёжные и устойчивые решения…
А сказал я это к фразе:
Не приходилось видеть в «хороших» серваках такой сервис, ибо не нужен
В нем реализовано аварийное безусловное выключение сервера по сигналу перегрева от одного из датчиков температуры: процессор, чипсет или материнка.
Для SSD это еще актуальнее. И у HDD возможности алгоритмов компенсации не бесконечны.
А батареи в UPS раздуются еще быстрее, а комплект батарей к какому-нибудь SURT5000 стоит как кондиционер в сборе.
Ну и да, температурный контроль должен быть от серверов максимально независимым. У теплотехников есть промышленные многоточечные контроллеры (запитать через независимый УПС!), один датчик в пасть кондиционеру, другие на 1,5 м от пола по проходам, с выдачей результатов по последовательному порту на компьютер вне серверной и сухим контактом, замыкающимся при превышении заданной температуры — его подключают на пульт пожсигнализации независимым шлейфом, и пишут охране инструкцию что делать при срабатывании. А то, что натворил автор, это довоенный колхоз и чувство ложной безопасности.
1) его называете телекомовским?
2) почему не взяли серверный?
написано не мной.
кто-то вскрывал DS18B20 и с фото на руках показывал, что они бывают палёные?
блин
бывало…
Щас такое конечно не происходит но дежурный инженер каждые пару часов должен сходить проверить состояние температуры.
кто-нить подскажите сушествует ли аналогичная хрень но с пробросом внутрь vmware?
видимо нужно либо vid/pid модифицировать, либо какое-то USB over TCP мутить, но это дорого выходит.
Поэтому я и спросил про реальный опыт, может есть у кого.
Но нигде не упоминается, что того что не присутствует в списке проброшено не будет.
Ясно написано, что HIDы не будут, так CP2102 это не HID, и проброшен будет, менять вид/пид не нужно.
Итого за пять баксов вы отсылаете температуру (и не только ее) хоть через Serial/TCP, хоть по HTTP, хоть по Zabbix sender, хоть через SNMP trap, хоть любым своим протоколом.
А если это виснет, как питание передёрнуть? от usb-то… К dvd-rom концевичок притулить?
А если ардуино виснет, в ней есть встроенный аппаратный watchdog, который ее ребутнет. А вот в компах аппаратный watchdog встречается нечасто…
А для полноты картины берем источник бесперебойного питания для пожарной сигнализации (1000р), аккумулятор на 7ач (1000р) и получаем совершенно независимый термо- (и не только — можно датчики влажности зацепить, концевики чего-нибудь и прочее)-контроль с автономностью минимум в сутки. Умеющий вышеперечисленные оповещения по сети, а вдобавок светозвуковую сигнализацию от которого можно вынести куда-то, где ее удобно наблюдать персоналу.
Во-первых, «зубов бояться ...», во-вторых, как мне кажется: паленые — не будут работать сразу…
Решал такую же задачу. И точно так же выбрал DS18B20 в качестве датчика. Но мое устройство — автономное, и расположено вне серверной (внутрь только провод к датчику идет). Вот честно, китайской ардуине доверия больше, чем связке «комп с мегакучей избыточного железа плюс ОС с гиперкучей избыточного софта». Четвертый год пашет, проблем нет.
и вообще неверь никому и дублируй как минимум
Задача моего «ардуиноколхоза» — верещать над ухом у дежурного персонала. Чтобы не спал, а активнее пинал персонал ремонтный :)
То есть — это не единственное устройство. А дублирующее. Но делать его на основе компа я не стал, выше описал почему.
простите…
Да, цена меня удивляет.
Почему не сделать по человечески например через Digispark Attiny за 1.5$?
При этом датчик не нужен был-бы — attiny85 имеет свой, надо только откалибровать кусочком льда.
Но можно и датчик присоединить, если очень хочется.
Ну и куча возможностей еще бы появилось, т.к. полноценный проц + корректная схема работы и все это за 1.5$ — куда уж бюджетнее?
А можно еще и GSM-модем прикрутить — чтобы сразу слать админу нескучные SMS, цена вопроса 10-15$.
Ну а если честно — извините — это колхоз, и колхоз вполне применим во многих местах жизни, а во многих — абсолютно нет — серверная в этом числе.
На тот момент не предполагал даже о таком решении.
Но это все — ненадежно — отсюда, собственно, все что выше написано.
Ок, настаивать не буду :)
Большой вопрос — чето сразу не сообразил, т.к. думал про схему, а не про способ.
А почему решили делать внешний датчик, а не воспользоваться любым на материнской плате, винте, видяхе, CPU? На материнку тоже выносной сенсор можно подключить, и не нужно будет вообще ничего внешнего — опрос всего этого в линуксе/bsd делается спокойно.
Т.е. если температура в корпусе или видяхе или CPU или HDD выше нормы больше 1 часа — трубить тревогу.
Это Вас спасет, даже если дело будет не в кондиционере.
Можно было и так, но почему-то выбор пал на внешний.
Если бы он был, можно было бы и подключить.
Нужно было мониторить именно работу кондиционеров в помещении, потому как один из них вёл себя очень подозрительно.
ссылка
ссылка
У меня где-то завалялась их пдфка об этом способе.
Проблемы с совместимостью (которые были в старых релизах) давным-давно пофикшены.
в данном случае имеет место кривоватая программная эмуляция.
С чего это bitbang-эмуляция стала вдруг кривоватой?
Она может быть кривоватой только из-за рук программистов, ее сделавших :)
А если все реализовано по документации никакой кривоватости быть не может.
Естественно, она будет уступать hardware, но только в части скорости и может быть чуть в стабильности — т.к. процессор должен успевать раздавать тайминги, а при железячном исполнении за этим присматривают другие.
Но это точно надежнее решения, где используется эмуляция несовместимых протоколов через грязный хак :D
А вот прошивка для Digispark сейчас полностью допилена и работает без каких-либо вопросов и нареканий, и там действительно обычный bitbang.
с частью usb контроллеров оно не работает.
Чем сложнее конструкция — тем ниже ее надежность.
Вот у меня, на аналогичном переходнике, в серверной рисует два графика: температура воздуха и непосредственно на радиаторе кондиционера.
Система мониторинга температуры не предназначена для формирования каких-либо управляющих воздействий: для этого действительно нужны автономные блоки.
А над жалюзи старых кондеев вешаем выключатель — флажок (кусок 12см гибкой проволоки с парусом 2х2 см на конце) — если скорость потока падает gpio ловит сигнал останова.
В шкафах термодатчики уже редкость, есть 19" вент панели с цифровым термостатом и индикатором.
А так все оборудование отдает температуры по snmp. Бегать проверять не надо.
Клиент-серверная приблуда. На компе с сервером лицензий установлена клиентская часть. Web как-то… не стал. А график в делфе легко. Ну и отправка так же почты. Все хочу переделать на push уведомления.
И есть еще вот такая коробочка. Так же клиент-серверная-клиент… В смысле все та же ардуина. на «сервере» идет отправка широковещательных пакетов с данными в сеть. Это мониторинг напряжения на линии. Так уж повезло, но ИБП у меня eaton. Их приложение такое приложение… дельно настроить отключение серверов у меня не вышло, клиентсерверная реализация работает через пень колоду, даже ТП не помогла. А уж отвалы ИБП из сети… (в смысле отваливаются интерфейсы диагностики (что ethernet, что usb)). Их я вообще не победил. Хотя сами ИБП мне оч нравятся. По сему так выкрутился. Взял на всякий случай 1/2 времени расчетной, если за это время напряжение не появилось, то тушу все. «Серверная» часть висит на ИБП с холодным стартом и сама не выключается (power fail). При появлении напряжения он стартует, ждет 5 минут чтобы это не было «баловством» от электриков и уже wakeonlan'ом будит все.
Так я за пол часа грубо говоря и так решил стоявшую передо мной задачу.
не такой уж и колхоз. Тем более
Если из чего-то готового… то это деньги и не всегда их целесообразно тратить на то что я могу сделать руками и получить за это «плюшки». Ну и… это облегчение жизни мне. Если прошлым админам (было аж 2 штуки, работали без вынимача) это было не нужно и они просто ходили временами и мониторили и если выключили свет, то бежали сломя голову все тушить или потом включать… то сейчас я один на организацию, легко могу ехать на моря на 2 недели и из всех 5 звонков все были не «аааааавсесламалось», а просто информационные (типа 30 минут нет связи с финорганом, что делать (нет они звонили конечно в духе «ааа», но скриптики мои мониторят коннект, переподключают, меняют автоматом адреса, если нет инета, то через пол часа через 3г модем в ТП провайдера отправляется заготовленное письмо, на той стороне провайдер знает что надо сделать, куда посмотреть и каким боком мне отрапортовать))
Так что меня устраивает мой колхоз.
ну и вложения… нанка, microusb кабель, moc и кабель питания 1 штука.
Профит + приятно проведенное время )))
Мониторить нужно все и сразу по возможности, включая инженерное оборудование если нет АСУЗ. Если вы не доверяете оборудованию инфраструктуры, чтобы разворачивать там мониторинг, то как при этом у вас работает на этой же инфраструктуре пром оборудование?!
Необходимость наличия ДС зависит от масштаба и важности процессов, а не от используемой системы мониторинга. Чтобы оперативно заметить отключение холодоснабжения в помещении — вам достаточно одного сервера. Вопрос в другом, что вы будете делать с этой информацией.
В общем и целом мой посыл был прост — осваивайте системы мониторинга, при своей околонулевой стоимости они существенно облегчат «вам» жизнь.
и да, «одного сервера» для этого недостаточно, потому что причин перегрева внутри сервера может быть очень много и помимо повышенной температуры воздуха на входе. а главное — для того, чтобы это понять, нужно подключение админа, который доступен далеко не всегда. реагирование на сигнал от мониторинга инфраструктуры требует совсем других специалистов, как правило с куда как более низкой квалификацией.
вообще вы путаете шило и мыло: мониторинг сетевого оборудования и серверов решает совсем другие задачи, получаемые от него данные о состоянии среды сугубо косвенные, доверять им полностью по определению нельзя.
«шило и мыло»масштабы и возможности.Надо будет рассказать владельцам, что inlet датчики на оборудовании «сугубо косвенны», доверять им нельзя, и поэтому я снимаю их с мониторинга.
Думаю, на этом можно остановиться, вашу позицию я услышал.
С учетом вышесказанного, а также с учетом вопроса стоимости, логичнее выглядит связка USBasp+BME280.
Тем более, что i2c прекрасно видится линуксом, а на его основе можно данные кидать как и куда угодно.
Но лично я предпочел (и собственно использую) полностью независимый вариант на базе ATmega328P+ SIM800 + BME280 на автономном питании для оповещения через SMS в нештатной ситуации.
А на случай отказа GSM модуля (или сотовой сети) крутится дублирующая система на USBasp+BME280, которая кладет данные в БД для истории и также оповещает в телеграм и на мыло при достижении температуры 22 градуса.
С учетом объема холодного воздуха в серверной, в которой в нормальном режиме 20 градусов, рост с 20 до 28 градусов при обоих выключенных кондиционерах занимает порядка 40-60 минут, чего мне достаточно для прибытия на место.
Впрочем, за 5 лет это пригодилось лишь единожды — когда была авария на энергосети и пропало питание с обоих независимых фидеров, выключив оба кондиционера.
У меня работает на CH340 с 2 транзисторами, возможно будет и с одним диодом.
Землю сенсора на землю переходника. плюс сенсора на +5, данные на RX напрямую а уже TX через резистор на RX.
Тогда получается что сенсор при передаче замыкает на землю ногу RX что допустимо, ЕЧ нормальное состояние 1 так что никаких проблем. Единственное что иногда надо не 4 килоома а 1-2 килоома но это мелочи.
И да — там не битбанг! А полноценный уарт но при передаче и приеме резко переключаются скорости и притом нестандартные и изза этого всякие китайские «совместимые» подделки и ch340 — не всегда коректно работают.
Никому, потому что есть другие системы контроля и слежения за состоянием оборудования.
А в чём колхоз? Работа устройства стабильна, отказов не было, в софте чётко прописан диапазон температур, если с датчика не удалось считать информацию, тоже прилетит оповещение.
За 4$ можно два собрать, и перестраховаться, на случай паранойи.
С ардуиной и дурак сделает, а здесь оригинальное и работоспособное, как показал опыт, решение. Опять же в комментариях подробно растолковали, что Вы везде неправы. А термометр работает!