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

Описание настройки чего либо

Модераторы: immortal, newz20

Ответить
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

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

Сообщение Bagir »

Подключаем OpenHardwareMonitor и собираем любые данные о нашей системе. Есть версии для Windows и Linux. Программа не требует установки. Просто поместите ее в автозагрузку сами или включите соответствующую опцию. Получение данных происходит через web сервер, который OpenHardwareMonitor умеет создавать по умолчанию на 8085 порту. Нам нужно включить эту опцию.
Изображение
Теперь напишем сценарий, который при запуске будет получать нужные нам данные и записывать их, например, в свойства объекта ThisComputer. Обращаю Ваше внимание, что для функции segGlobal() не обязательно указывать имя объекта ThisComputer. Если имя не указано, оно будет выбрано по умолчанию.
СценарийSPOILER_SHOW

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

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');
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич

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

Сообщение Bagir »

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

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

<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>
При клике по элементу можно повесить действие на запуск скрипта для обновления данных.
Вложения
Elements01-14-35.zip
(2.01 КБ) 584 скачивания
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Roman_13j
Сообщения: 32
Зарегистрирован: Пт мар 25, 2016 11:34 pm

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

Сообщение Roman_13j »

Здравствуйте! Недавно присоединился к сообществу MajorDomo. Вопрос такой: open hardware monitor не открывается на порту 8085, разрешения через брандмауэр для программы и порта на входящие и исходящие подключения давал, никак не хочет работать:((( Подскажите, пожалуйста, как исправить эту ситуацию???
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург

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

Сообщение nick7zmail »

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

А из MD просто делаю запросы к localhost, и записываю в свойства, те значения уже вывожу в меню/на сцены.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Roman_13j
Сообщения: 32
Зарегистрирован: Пт мар 25, 2016 11:34 pm

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

Сообщение Roman_13j »

nick7zmail, спасибо огромное!!! По localhost:8085 заходит и все отображается!
Vermin
Сообщения: 4
Зарегистрирован: Вт сен 06, 2016 5:56 pm

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

Сообщение Vermin »

Bagir писал(а):Теперь напишем сценарий, который при запуске будет получать нужные нам данные и записывать их, например, в свойства объекта ThisComputer
А что именно в коде отвечает за выбор куда будут записываться данные? как записать в свойства другого объекта(не ThisComputer)?
P.S И как получать не целые числа, а дробные?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург

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

Сообщение nick7zmail »

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

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

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

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

round();
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Vermin
Сообщения: 4
Зарегистрирован: Вт сен 06, 2016 5:56 pm

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

Сообщение Vermin »

Чет не могу понять, а как в другой объект записать значения? Можно пример на этом же коде?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург

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

Сообщение nick7zmail »

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

Первая тема чисто про OHM, вторая про настройку домашних страниц и визуализацию...и там и там есть примеры кода.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить