Последние статьи
- Твердотельный датчик направления и скорости ветра. Эксперимент
- iPhone на стене в качестве панели управления домом
- MegaD-16M-XT - подсветка выключателей и не только
- Переделка выключателей в кнопки и мини-обзор текущего рынка
- RadSens - модульный счетчик Гейгера с интерфейсом I2C
- "U" - значит универсальный. Обзор модуля MegaD-16U-XT
- SCD4x - современная альтернатива для измерения концентрации CO2
- HTU31D - новый датчик температуры и влажности с нагревательным элементом
- Измерение коэффициента пульсации ламп с помощью MegaD-2561
- Использование солнечных панелей в качестве датчика освещенности
- Согласование датчиков с выходом типа TTL со стандартными входами контроллера
- DPS368 - датчик атмосферного давления индустриального класса повышенной точности
- DS18B20 Waterpoof - импортзамещение
- TMP117 - высокоточный датчик температуры с интерфейсом I2C
- MegaD-16R-XT - расширитель на 16 релейных выходов
- MegaD-2561-RTC V3 - больше портов, зуммер и ИОН
Контроль за температурой сервера
22/09/2010 22:29:19
Сервер для домашней автоматизации на базе ОС Linux является в целом зверушкой неприхотливой, но, в то же время, достаточно важной, когда речь заходит об управлении отоплением или электричеством. Кроме того, необходимо постараться обеспечить сохранность данных, хранимых на сервере, например, в медиа-архиве, таких как личное видео или фото. В этом смысле, контроль за температурой элементов сервера является одной из приоритетных задач.
В предыдущих своих статьях я рассказывал о средствах, помогающих осуществить контроль за температурой любых объектов с помощью компонента DS18B20. Для решения этой задачи, мы обойдемся без них, так как в современных компьютерных системах все необходимые средства уже встроены. Вопрос лишь в том, как получить доступ к этим системным ресурсам и каким образом эти данные отобразить пользователю.
Контроль температуры жесткого диска
Когда я установил на сервер новый жесткий диск Seagate ST31500341AS объемом 1,5Тб для хранения личного фото-архива, я обнаружил, что этот диск прилично греется. Давно известно, что продолжительность жизни жестких дисков во многом зависит от температурного режима работы. Для снижения температурной нагрузки я установил на диск дешевый вентилятор Coolcox HD8015-12 за 58 руб. Вопреки моим скептическим ожиданиям это решение значительно снизило температуру жесткого диска, не увеличив при этом общий уровень шума. Осталось только наладить температурный контроль за работой жестких дисков. Для этого в Linux'е есть пакет hddtemp.
Для установки его на Debian Linux необходимо выполнить команду:
apt-get install hddtemp
Использование программы очень простое
hddtemp /dev/sda
Вывод
/dev/sda: ST31500341AS: 32°C
Но у меня два жестких диска и мне бы хотелось вывести эту информацию в Web-интерфейс Умного Дома. Была бы задача, а решение в среде Linux всегда найдется.
При установке hddtemp по умолчанию запускается tcp-сервис hddtemp, доступ к которому осуществляется через порт 7634. Таким образом информацию о температуре дисков можно получить, например, с помощью программы telnet
telnet localhost 7634
Вывод
|/dev/hda|WDC WD800JB-32JJC0|39|C||/dev/sda|ST31500341AS|32|C|
А раз так, то можно написать простенькую программу на PHP для вывода этой информации в табличном HTML виде на Web-сервер.
<? $host="localhost"; $h=fsockopen($host, 7634); while(!feof($h) ) $http_response.=fgets($h, 4096); $hdd_list = explode("||", preg_replace("/^|||$/", "", $http_response)); echo "<table border=1>"; for ( $i = 0; $i < count($hdd_list); $i++ ) { $hdd_fields = explode("|", $hdd_list[$i]); echo "<tr>"; for ( $j = 0; $j < count($hdd_fields); $j++ ) echo "<td>$hdd_fields[$j]</td>"; echo "</tr>"; } echo "</table>"; fclose($h); ?>
В результате получаем что-то вроде этого...
Нетрудно модифицировать скрипт для записи данных в MySQL базу с последующим построением графиков или создания контролирующих программ, уведомляющих тем или иным способом о перегреве.
Контроль температуры процессора и системной платы
Важно иметь представление о температуре жестких дисков, но не менее важно мониторить температуру других частей компьютера, к которым, прежде всего, относятся процессор и чипсет. Для этого нам потребуется пакет lm_sensors.
apt-get install lm-sensors
После установки пакета необходимо произвести поиск поддерживаемого оборудования.
sensors-detect
Для моей материнской платы P4P800 был найден чип Winbond W83627HF, модуль которого был прописан в "автозагрузку" /etc/modules
Но можно вызвать его и в ручном режиме
modprobe w83627hf
Далее нужно только выполнить команду
sensors
Вывод
w83627thf-isa-0290
Adapter: ISA adapter
VCore: +1.58 V (min = +0.00 V, max = +3.84 V)
+12V: +12.28 V (min = +9.18 V, max = +7.30 V) ALARM
+3.3V: +3.36 V (min = +1.18 V, max = +2.93 V) ALARM
+5V: +5.07 V (min = +3.41 V, max = +0.00 V) ALARM
-12V: +6.06 V (min = -14.91 V, max = -0.11 V) ALARM
V5SB: +4.97 V (min = +1.72 V, max = +0.46 V) ALARM
VBat: +3.20 V (min = +0.27 V, max = +0.19 V) ALARM
fan1: 0 RPM (min = -1 RPM, div = 128) ALARM
CPU Fan: 2789 RPM (min = -1 RPM, div = 4) ALARM
fan3: 0 RPM (min = 251 RPM, div = 128) ALARM
M/B Temp: +36.0°C (high = +81.0°C, hyst = +0.0°C) sensor = thermistor
CPU Temp: +44.0°C (high = +80.0°C, hyst = +75.0°C) sensor = diode
temp3: -48.0°C (high = +80.0°C, hyst = +75.0°C) sensor = thermistor
cpu0_vid: +1.525 V
beep_enable:enabled
Вытащить эти данные в Web-интерфейс можно аналогично предыдущему способу. А можно и гораздо проще. Например, таким образом:
<? echo "<pre>"; passthru("sensors"); echo "</pre>"; ?>
Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.
Добавить комментарий:
Сортировка комментариев: Последние сверху | Первые сверху
2010-09-23 23:11:03 | Nick
Здравствуйте!
Спасибо за статью.
Столкнулся с такой проблемой - в ответ на комманду:
telnet localhost 7634
Получаю следующее сообщение:
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Пакет hddtemp стоит и отлично работает...
В чем может быть проблема?
PS Дистрибутив Debian Etch.
2010-09-23 23:28:03 | Andrey_B
Nick, нужно убедится, что запущен процесс hddtemp в режиме демона:
ps ax | grep hddtemp
Например, у меня этот процесс запущен так:
/usr/sbin/hddtemp -d -l 127.0.0.1 -p 7634 -s | /dev/hda /dev/sda
2010-09-24 21:54:13 | Nick
Спасибо, Андрей!
С вашей подачи все получилось. После запуска hddtemp в режиме демона:
hddtemp -d -l 127.0.0.1 -p 7634 /dev/sda -s :
telnet говорит:
:/dev/sda:WDC WD10EADS-00P8B0:28:C:Connection closed by foreign host.
А дальше дело техники...
2012-02-17 12:26:11 | aurodionov
Andrey_B, если не затрудрит прикрепите первый .php скрипт вложением
при копировании со станицы отображает при обращении пустую страницу ,
демон работает ,на команды отвечает ,сам к сожалению не силён в php.
с уважением, aurodionov
2012-02-18 15:46:18 | Andrey_B
aurodionov, Добавил ссылку на архив в статье.
2012-02-19 22:31:18 | aurodionov
спасибо, Андрей ,заработало
2016-02-23 22:40:20 | Шерзод
хотел узнать ваше мнение насчет этого кода:
$info = exec("nc localhost 7634");
$arr = explode("|", $info);
echo $arr[3]." градусов";
1. Целесообразно ли использовать nc вместо telnet?
2. Безопасно ли использовать exec?
2016-02-24 19:00:29 | Andrey_B
Шерзод, если работает и вас все устраивает, в чем вопрос?
Что значит безопасно ли использование exec()? С какой точки зрения?