Бюджетный термометр для серверной
- Цена: $2~3
Добрый день! Очередной термометр своими руками, но теперь для «серверных» помещений, просто, дёшево и эффективно.
Появилась необходимость следить за работой кондиционера в «серверной», так как однажды он нас подвёл, выключился и продолжительное время серверы работали в помещении при температуре 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, создаём файл конфигурации, опрашиваем, оповещаем.
# 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 и если температура отклонилась от заданного в скрипте диапазона, то отправляется письмо на указанные в скрипте адреса.
<?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 минут.
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 °С)."
Работает эта система уже около года, за всё время ложных срабатываний не наблюдалось.
На этом всё, спасибо за внимание!
ЗЫ. На звание лучший кодер не претендую, все скрипты писались на ходу.
- Велосипедная куртка ARSUXEO
- WiFi розетка на 16А с измерением потребления
- Новые наушники от фирмы KZ ZS - новый звук в стиле Железного человека.
- Секретный блок питания "FSP270-60LE". Обзор, разбор и тесты
- LM1875T - интегральный усилитель на оригинальных микросхемах
- Ugreen CM151 - HDMI выход для iPhone / Android или "воздух" по проводам.
- Шикарный ремешок для часов за 85 руб.
- Ремонтная плата блока питания на 12 вольт
- Своими руками: силиконовый кабель для наушников
- Очень приличный кабель для наушников.