Опрос


Что для Вас Умный Дом?


Результаты

Контроль за температурой сервера

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
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2016-02-24 19:00:29 | Andrey_B
Шерзод, если работает и вас все устраивает, в чем вопрос?
Что значит безопасно ли использование exec()? С какой точки зрения?


2016-02-23 22:40:20 | Шерзод
хотел узнать ваше мнение насчет этого кода:
$info = exec("nc localhost 7634");
$arr = explode("|", $info);
echo $arr[3]." градусов";

1. Целесообразно ли использовать nc вместо telnet?
2. Безопасно ли использовать exec?


2012-02-19 22:31:18 | aurodionov
спасибо, Андрей ,заработало


2012-02-18 15:46:18 | Andrey_B
aurodionov, Добавил ссылку на архив в статье.


2012-02-17 12:26:11 | aurodionov
Andrey_B, если не затрудрит прикрепите первый .php скрипт вложением
при копировании со станицы отображает при обращении пустую страницу ,
демон работает ,на команды отвечает ,сам к сожалению не силён в php.
с уважением, aurodionov


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.
А дальше дело техники...


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-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.