[Настройка] OpenHardwareMonitor и элемент для сцены
Добавлено: Пт фев 27, 2015 12:48 am
Подключаем OpenHardwareMonitor и собираем любые данные о нашей системе. Есть версии для Windows и Linux. Программа не требует установки. Просто поместите ее в автозагрузку сами или включите соответствующую опцию. Получение данных происходит через web сервер, который OpenHardwareMonitor умеет создавать по умолчанию на 8085 порту. Нам нужно включить эту опцию.
Теперь напишем сценарий, который при запуске будет получать нужные нам данные и записывать их, например, в свойства объекта ThisComputer. Обращаю Ваше внимание, что для функции segGlobal() не обязательно указывать имя объекта ThisComputer. Если имя не указано, оно будет выбрано по умолчанию.
Предлагаемый сценарий состоит из двух частей. Первая часть обращается к web серверу OpenHardwareMonitor и получает нужные данные. В моем примере это процент загрузки и температура ядер процессора.
Вторая часть рассчитывает цветовую температуру для ядер. Если это Вам не нужно, просто удалите. Я использую для элемента, который показывает загрузку ядер. Цвет линий отражает температуру. Обзор на этот элемент сделаю сообщением ниже. А пока продолжим разбираться с OpenHardwareMonitor.
В сценарии есть массивВ нем нужно указать все интересующие нас свойства. Порядок такой: Имя свойства МД => ID этого свойства в OpenHardwareMonitor. Узнать нужные ID можно открыв этот адрес в браузере http://127.0.0.1:8085/data.json Не очень дружелюбно, но сравнивая со страничкой, поиском можно все легко найти.
Во второй части сценария, для расчета цветовой температуры, в массиве нужно указать все свойства, для которых это требуетсяПорядок такой: Мы указываем имя CPUCore1Temp, сценарий рассчитывает цвет, добавляет к имени свойства буквы HEX, и записывает данные в новое свойство CPUCore1TempHEX.
Все нужные свойства необходимо создать заранее самому.
Ну вот и все. Осталось только запускать этот сценарий с нужной периодичностью. Я делаю это из onNewMinute примерно так:
Теперь напишем сценарий, который при запуске будет получать нужные нам данные и записывать их, например, в свойства объекта ThisComputer. Обращаю Ваше внимание, что для функции segGlobal() не обязательно указывать имя объекта ThisComputer. Если имя не указано, оно будет выбрано по умолчанию.
СценарийПоказать
Код: Выделить всё
function searchJson($obj,$arrprop) {
foreach($obj->Children as $child) {
if(isset($child->id)) {
foreach($arrprop as $pn=>$id) {
if ($id == $child->id) {
$sensorvalue = round(substr($child->Value,0,strpos($child->Value,' ')),0);
sg($pn,$sensorvalue);
}
}
}
searchJson($child,$arrprop);
}
return;
}
//Получение данных от OpenHardwareMonitor
$ch = curl_init('http://127.0.0.1:8085/data.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ohm = curl_exec($ch);
$json = json_decode($ohm);
// 'Имя свойства'=>id
$arrprop=array('CPUCore1Temp'=>27,'CPUCore2Temp'=>28,'CPUCore3Temp'=>29,'CPUCore4Temp'=>30,
'CPUCore1Load'=>33,'CPUCore2Load'=>34,'CPUCore3Load'=>35,'CPUCore4Load'=>36);
searchJson($json,$arrprop);
// Расчет цветовой температуры для элемента на сцене
$min = 45; // зеленый
$mid = 52; // желтый
$max = 65; // красный
$arrprop=array('CPUCore1Temp','CPUCore2Temp','CPUCore3Temp','CPUCore4Temp');
foreach($arrprop as $pn) {
$t=gg($pn);
if ($t<$min) {$t=$min;} elseif ($t>$max) {$t=$max;}
if ($t<$mid){
$t = round( ($t-$min)/($mid-$min)*255 );
$t = dechex($t);
$hcolor = '#'.$t.'ff00';
// $hcolor = $t.',255,0';
} else {
$t = 255 - round( ($t-$mid)/($max-$mid)*255 );
$t = dechex($t);
$hcolor = '#ff'.$t.'00';
//$hcolor = '255,'.$t.',0';
}
sg($pn.'HEX', $hcolor);
}
Вторая часть рассчитывает цветовую температуру для ядер. Если это Вам не нужно, просто удалите. Я использую для элемента, который показывает загрузку ядер. Цвет линий отражает температуру. Обзор на этот элемент сделаю сообщением ниже. А пока продолжим разбираться с OpenHardwareMonitor.
В сценарии есть массив
Код: Выделить всё
$arrprop=array('CPUCore1Temp'=>27,'CPUCore2Temp'=>28,'CPUCore3Temp'=>29,'CPUCore4Temp'=>30,'CPUCore1Load'=>33,'CPUCore2Load'=>34,'CPUCore3Load'=>35,'CPUCore4Load'=>36);
Во второй части сценария, для расчета цветовой температуры, в массиве нужно указать все свойства, для которых это требуется
Код: Выделить всё
$arrprop=array('CPUCore1Temp','CPUCore2Temp','CPUCore3Temp','CPUCore4Temp');
Все нужные свойства необходимо создать заранее самому.
Ну вот и все. Осталось только запускать этот сценарий с нужной периодичностью. Я делаю это из onNewMinute примерно так:
Код: Выделить всё
runScript('HardwareMonitor');