Страница 1 из 1

[Настройка] OpenHardwareMonitor и элемент для сцены

Добавлено: Пт фев 27, 2015 12:48 am
Bagir
Подключаем OpenHardwareMonitor и собираем любые данные о нашей системе. Есть версии для Windows и Linux. Программа не требует установки. Просто поместите ее в автозагрузку сами или включите соответствующую опцию. Получение данных происходит через web сервер, который OpenHardwareMonitor умеет создавать по умолчанию на 8085 порту. Нам нужно включить эту опцию.
Изображение
Теперь напишем сценарий, который при запуске будет получать нужные нам данные и записывать их, например, в свойства объекта 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);
} 
Предлагаемый сценарий состоит из двух частей. Первая часть обращается к web серверу OpenHardwareMonitor и получает нужные данные. В моем примере это процент загрузки и температура ядер процессора.
Вторая часть рассчитывает цветовую температуру для ядер. Если это Вам не нужно, просто удалите. Я использую для элемента, который показывает загрузку ядер. Цвет линий отражает температуру. Обзор на этот элемент сделаю сообщением ниже. А пока продолжим разбираться с OpenHardwareMonitor.
В сценарии есть массив

Код: Выделить всё

$arrprop=array('CPUCore1Temp'=>27,'CPUCore2Temp'=>28,'CPUCore3Temp'=>29,'CPUCore4Temp'=>30,'CPUCore1Load'=>33,'CPUCore2Load'=>34,'CPUCore3Load'=>35,'CPUCore4Load'=>36);
В нем нужно указать все интересующие нас свойства. Порядок такой: Имя свойства МД => ID этого свойства в OpenHardwareMonitor. Узнать нужные ID можно открыв этот адрес в браузере http://127.0.0.1:8085/data.json Не очень дружелюбно, но сравнивая со страничкой, поиском можно все легко найти.

Во второй части сценария, для расчета цветовой температуры, в массиве нужно указать все свойства, для которых это требуется

Код: Выделить всё

$arrprop=array('CPUCore1Temp','CPUCore2Temp','CPUCore3Temp','CPUCore4Temp');
Порядок такой: Мы указываем имя CPUCore1Temp, сценарий рассчитывает цвет, добавляет к имени свойства буквы HEX, и записывает данные в новое свойство CPUCore1TempHEX.

Все нужные свойства необходимо создать заранее самому.
Ну вот и все. Осталось только запускать этот сценарий с нужной периодичностью. Я делаю это из onNewMinute примерно так:

Код: Выделить всё

runScript('HardwareMonitor');

Элемент загрузки процессора для сцены

Добавлено: Пт фев 27, 2015 12:48 am
Bagir
Вариант черновой, и над ним еще работать и работать, но даже в таком виде он весьма уже интересный. Решил выложить, может кто допилит. В планах добавить картинку процессора и покраснение рамки при превышении нагрузки. Возможно было бы интересно сделать полоски не целыми, а сегментами. Пока что длинна полоски отображает нагрузку, а ее цвет - температуру ядра. На скрине оставил и другие элементы для наглядности и сравнения.
Изображение
Код очень простой. Поменяйте везде номер элемента element_94 на свой.
Стоит отметить, что в коде нет указаний о ширине и длине. Эти параметры берутся из настроек самого элемента. Четыре полоски внутри задаются в процентном соотношении от общего размера height:25%; Если у Вас две полоски :D то оставьте только две группы и замените height:50%;
Код элементаПоказать

Код: Выделить всё

<style type = "text/CSS">
div.element_94 {
border-radius:5px;
background:RGB(200,255,255);
}
.element_94 .line1 {
width:%ThisComputer.CPUCore1Load%%;
height:25%;
border-radius:3px;
background-color:%ThisComputer.CPUCore1TempHEX%;
}
.element_94 .line2 {
width:%ThisComputer.CPUCore2Load%%;
height:25%;
border-radius:3px;
background-color:%ThisComputer.CPUCore2TempHEX%;
}
.element_94 .line3 {
width:%ThisComputer.CPUCore3Load%%;
height:25%;
border-radius:3px;
background-color:%ThisComputer.CPUCore3TempHEX%;
}
.element_94 .line4 {
width:%ThisComputer.CPUCore4Load%%;
height:25%;
border-radius:3px;
background-color:%ThisComputer.CPUCore4TempHEX%;
}
</style>

<div class="line1"></div>
<div class="line2"></div>
<div class="line3"></div>
<div class="line4"></div>
При клике по элементу можно повесить действие на запуск скрипта для обновления данных.

Re: OpenHardwareMonitor и элемент для сцены

Добавлено: Вт июн 07, 2016 11:40 pm
Roman_13j
Здравствуйте! Недавно присоединился к сообществу MajorDomo. Вопрос такой: open hardware monitor не открывается на порту 8085, разрешения через брандмауэр для программы и порта на входящие и исходящие подключения давал, никак не хочет работать:((( Подскажите, пожалуйста, как исправить эту ситуацию???

Re: OpenHardwareMonitor и элемент для сцены

Добавлено: Ср июн 08, 2016 9:54 am
nick7zmail
Roman_13j писал(а):Здравствуйте! Недавно присоединился к сообществу MajorDomo. Вопрос такой: open hardware monitor не открывается на порту 8085, разрешения через брандмауэр для программы и порта на входящие и исходящие подключения давал, никак не хочет работать:((( Подскажите, пожалуйста, как исправить эту ситуацию???
У меня в локалке тоже не хочет открываться зараза. Попробуй с компа, где установлен - открыть в браузере localhost:8085
Если работает - то сервер стартует. При отключенном брэндмауэре - по локалке заходит. При включенном - все права давал, правила создавал, в исключения запихивал - не хочет работать и всё.

А из MD просто делаю запросы к localhost, и записываю в свойства, те значения уже вывожу в меню/на сцены.

Re: OpenHardwareMonitor и элемент для сцены

Добавлено: Ср июн 08, 2016 11:44 am
Roman_13j
nick7zmail, спасибо огромное!!! По localhost:8085 заходит и все отображается!

Re: OpenHardwareMonitor и элемент для сцены

Добавлено: Ср сен 07, 2016 12:41 am
Vermin
Bagir писал(а):Теперь напишем сценарий, который при запуске будет получать нужные нам данные и записывать их, например, в свойства объекта ThisComputer
А что именно в коде отвечает за выбор куда будут записываться данные? как записать в свойства другого объекта(не ThisComputer)?
P.S И как получать не целые числа, а дробные?

Re: OpenHardwareMonitor и элемент для сцены

Добавлено: Ср сен 07, 2016 6:06 am
nick7zmail
Vermin писал(а):А что именно в коде отвечает за выбор куда будут записываться данные? как записать в свойства другого объекта(не ThisComputer)?
P.S И как получать не целые числа, а дробные?
За то, куда записываются свойства отвечает функция

Код: Выделить всё

setGlobal();
//или
sg();
//у которой 2 аргумента
sg(<тут объект.свойство>, <тут значение, которое надо выставить>);
А чтобы записывать дробные - достаточно убрать округления

Код: Выделить всё

round();

Re: OpenHardwareMonitor и элемент для сцены

Добавлено: Ср сен 07, 2016 10:39 pm
Vermin
Чет не могу понять, а как в другой объект записать значения? Можно пример на этом же коде?

Re: OpenHardwareMonitor и элемент для сцены

Добавлено: Чт сен 08, 2016 6:58 am
nick7zmail
Vermin писал(а):Чет не могу понять, а как в другой объект записать значения? Можно пример на этом же коде?
Есть классная штука под названием поиск))
Рабочих примеров уже полно на форуме, с описанием каждого элемента, и инструкциями - как подогнать всё это под вашу систему.
http://majordomo.smartliving.ru/forum/v ... 2155#p2155
http://majordomo.smartliving.ru/forum/v ... 348#p14348

Первая тема чисто про OHM, вторая про настройку домашних страниц и визуализацию...и там и там есть примеры кода.