Api
Alex, не могли бы вы сделать описание того что и как HardwareMonitor шлет в ардуинку, есть желание приспособить ваш замечательный монитор для мониторинга серверов.
nikitachukov - все же есть в исходниках. (openhardwaremonitor_source, PCdisplay_v.1.3, PCdisplay_v_1.3_1602) В любом случае, Вам нужно будет подключение по ssh или же какое-то серверное api (скрипт на стороне сервера, возвращающий данные по датчикам) или же отправка данных с серверов Вам (т.е. какая-то обратная связь) На Вашей стороне нужен будет какой-то скрипт, принимающий данные и отправляющий их в com-порт.
P.S. - для серверов смотрите, как минимум в сторону
lm-sensors
Делаете парсинг "выхлопа" и все - дело в шляпе
Перефразирую вопрос: Можно ли краткое описание того что и как слать в ардуино?
Если знаете C#, смотрите тут: https://github.com/AlexGyver/PCdisplay/blob/master/openhardwaremonitor_source/GUI/MainForm.cs#L814 (можете вывести в формочку вывод данных, например. Там просто текст, переведенный в байты) Если проще на примере скетча (что врятли, как по мне), то смотрите тут: https://github.com/AlexGyver/PCdisplay/blob/master/PCdisplay_v_1.3_1602/PCdisplay_v_1.3_1602.ino#L307
http://gyazo.sttv.me/grab/484d.png - тут пример того, что отправляется, в виде текста (можете посмотреть подробнее в исходниках по первой ссылке) Описание функции кодирования тут: https://msdn.microsoft.com/ru-ru/library/ds4kkd55(v=vs.110).aspx
Аналог функции на Python:
_str = "test_str"
_bytes = str.encode(_str)
P.S. В общем, отправляется этот массив данных:
{
(int)MaxTemp(computer, HardwareType.CPU),
(int)MaxTemp(computer, HardwareType.GpuAti) + AvgTemp(computer, HardwareType.GpuNvidia), // тут float
(int)MaxTemp(computer, HardwareType.Mainboard),
(int)MaxTemp(computer, HardwareType.HDD),
(int)UsageInPercent(computer, HardwareType.CPU, "CPU Total"),
(int)(UsageInPercent(computer, HardwareType.GpuAti, "GPU Core") + UsageInPercent(computer, HardwareType.GpuNvidia, "GPU Core")), // тут int
(int)UsageInPercent(computer, HardwareType.RAM, "Memory"),
(int)UsageInPercent(computer, HardwareType.GpuAti, "GPU Memory") + UsageInPercent(computer, HardwareType.GpuNvidia, "GPU Memory"), // тут float
// Right group.
settings.GetValue("nMaxFan", 100),
settings.GetValue("nMinFan", 20),
settings.GetValue("nMaxTemp", 100),
settings.GetValue("nMinTemp", 10),
// Flags
settings.GetValue("chkManualFan", false) ? 1 : 0,
settings.GetValue("chkManualColor", false) ? 1 : 0,
// Sliders.
settings.GetValue("sldManualFan", 50),
settings.GetValue("sldManualColor", 500),
settings.GetValue("sldLedBrightness", 50),
settings.GetValue("sldPlotInterval", 5),
settings.GetValue("cboMaxTempSource", 0),
};
P.P.S. - Все это можно перенастроить под свои нужды, естественно. Только поправьте скетч в ардуино (вторая ссылка)
Если знаете C#, смотрите тут: https://github.com/AlexGyver/PCdisplay/blob/master/openhardwaremonitor_source/GUI/MainForm.cs#L814 (можете вывести в формочку вывод данных, например. Там просто текст, переведенный в байты) Если проще на примере скетча (что врятли, как по мне), то смотрите тут: https://github.com/AlexGyver/PCdisplay/blob/master/PCdisplay_v_1.3_1602/PCdisplay_v_1.3_1602.ino#L307
http://gyazo.sttv.me/grab/484d.png - тут пример того, что отправляется, в виде текста (можете посмотреть подробнее в исходниках по первой ссылке) Описание функции кодирования тут: https://msdn.microsoft.com/ru-ru/library/ds4kkd55(v=vs.110).aspx
Аналог функции на Python:
_str = "test_str" _bytes = str.encode(_str)P.S. В общем, отправляется этот массив данных:
{ (int)MaxTemp(computer, HardwareType.CPU), (int)MaxTemp(computer, HardwareType.GpuAti) + AvgTemp(computer, HardwareType.GpuNvidia), // тут float (int)MaxTemp(computer, HardwareType.Mainboard), (int)MaxTemp(computer, HardwareType.HDD), (int)UsageInPercent(computer, HardwareType.CPU, "CPU Total"), (int)(UsageInPercent(computer, HardwareType.GpuAti, "GPU Core") + UsageInPercent(computer, HardwareType.GpuNvidia, "GPU Core")), // тут int (int)UsageInPercent(computer, HardwareType.RAM, "Memory"), (int)UsageInPercent(computer, HardwareType.GpuAti, "GPU Memory") + UsageInPercent(computer, HardwareType.GpuNvidia, "GPU Memory"), // тут float // Right group. settings.GetValue("nMaxFan", 100), settings.GetValue("nMinFan", 20), settings.GetValue("nMaxTemp", 100), settings.GetValue("nMinTemp", 10), // Flags settings.GetValue("chkManualFan", false) ? 1 : 0, settings.GetValue("chkManualColor", false) ? 1 : 0, // Sliders. settings.GetValue("sldManualFan", 50), settings.GetValue("sldManualColor", 500), settings.GetValue("sldLedBrightness", 50), settings.GetValue("sldPlotInterval", 5), settings.GetValue("cboMaxTempSource", 0), };P.P.S. - Все это можно перенастроить под свои нужды, естественно. Только поправьте скетч в ардуино (вторая ссылка) Здравтвуйте! Будьте добры, поскажите пожалуйста, каким конкртено образом нужно изменить код программы чтобы в COM-порт выводились данные, нужные мне? Например, хочу чтобы выводились частоты процессора, следовательно я меняю настройки в MainForm.cs, а дальше что делать? Уже всю голову сломал.
@KirGorXXL добрый день
Как и писал раньше - вам нужно добавить сюда больше данных (те, что нужны) Например тут я добавил среднюю температуру по CPU и частоту (не проверял, но должно работать)

На стороне ардуино вам нужно будет считать это (помните, что вы добавили больше данных, значит должны это учитывать)
Касаемо частоты. Это ПЛОХОЙ пример и наверное можно сделать чуть лучше (я не шарпист), но будет выглядеть примерно так:
float AvgCpuFreq(Computer computer, HardwareType type)
{
var cpus = computer.Hardware.Where(x => x.HardwareType == type).ToArray();
if (cpus.Any())
{
var freqSum = 0.0f;
var freqCnt = 0;
foreach (var cpu in cpus)
{
var freq = cpu.Sensors.Where(x => x.SensorType == SensorType.Clock).ToArray();
foreach(var fq in freq)
{
var freqValue = fq.Value;
if (freqValue != null)
{
freqSum += (float)freqValue;
freqCnt += 1;
}
}
}
return freqSum / freqCnt;
}
return 0.0f;
}
@1271 добрый вечер Спасибо большое за ответ, стало гораздо понятнее! Буду разбираться