190 lines
5.2 KiB
C#
190 lines
5.2 KiB
C#
using System;
|
|
using OpenHardwareMonitor.Hardware;
|
|
using System.IO.Ports;
|
|
using System.Timers;
|
|
|
|
namespace HardwareTempArduino
|
|
{
|
|
class Program
|
|
{
|
|
|
|
//https://www.hackster.io/zakrzu/arduino-pc-monitor-66c07a
|
|
|
|
// cpu: 8 temp reads voor elke core
|
|
// gpu: 1 temp read
|
|
// drives:
|
|
// /hdd/0 l2
|
|
// /hdd/1 c
|
|
// /hdd/2 l1
|
|
// /hdd/3 d
|
|
// /hdd/4 f
|
|
|
|
|
|
static SerialPort serialPort;
|
|
static Timer timer; // timer for sending to arduino
|
|
static Timer cpuGpuTimer;
|
|
static Computer c;
|
|
static float cpuTemp, gpuTemp, l2Temp, cTemp, l1Temp, dTemp, fTemp;
|
|
static bool canWriteTime = true;
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
|
|
setupPort();
|
|
Console.WriteLine("test");
|
|
c = new Computer();
|
|
c.GPUEnabled = true;
|
|
c.CPUEnabled = true;
|
|
c.HDDEnabled = true;
|
|
c.Open();
|
|
serialPort.Write("i");
|
|
|
|
setupTimer();
|
|
|
|
Console.ReadLine();
|
|
}
|
|
|
|
static void setupPort()
|
|
{
|
|
Console.WriteLine("serial ports:");
|
|
foreach (string s in SerialPort.GetPortNames())
|
|
{
|
|
Console.WriteLine(" {0}", s);
|
|
}
|
|
|
|
serialPort = new SerialPort();
|
|
|
|
serialPort.BaudRate = 9600;
|
|
serialPort.PortName = "COM7";
|
|
serialPort.Parity = Parity.None;
|
|
serialPort.Handshake = Handshake.None;
|
|
serialPort.DataBits = 8;
|
|
serialPort.StopBits = StopBits.One;
|
|
serialPort.RtsEnable = true;
|
|
|
|
if (!serialPort.IsOpen)
|
|
{
|
|
try
|
|
{
|
|
serialPort.Open();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
Console.WriteLine("[ERROR] could not open serial port!");
|
|
Console.WriteLine(e.Message);
|
|
return;
|
|
}
|
|
|
|
}
|
|
else Console.WriteLine("could not open serial port!");
|
|
}
|
|
|
|
static void setupTimer()
|
|
{
|
|
timer = new Timer(20000);
|
|
timer.Elapsed += onTimerElapsed;
|
|
timer.AutoReset = true;
|
|
timer.Enabled = true;
|
|
updateTime();
|
|
|
|
cpuGpuTimer = new Timer(10000);
|
|
cpuGpuTimer.Elapsed += onTempTimerElapsed;
|
|
cpuGpuTimer.AutoReset = true;
|
|
cpuGpuTimer.Enabled = true;
|
|
updateSensors();
|
|
}
|
|
|
|
static void onTimerElapsed(Object source, ElapsedEventArgs e)
|
|
{
|
|
|
|
updateTime();
|
|
}
|
|
|
|
static void onTempTimerElapsed(Object source, ElapsedEventArgs e)
|
|
{
|
|
|
|
updateSensors();
|
|
}
|
|
|
|
static void updateTime()
|
|
{
|
|
Console.WriteLine("time is now: " + DateTime.Now.ToString("HH:mm").Replace(":", ""));
|
|
if (canWriteTime)
|
|
serialPort.Write("t" + DateTime.Now.ToString("HH:mm").Replace(":", ""));
|
|
}
|
|
|
|
static void updateSensors()
|
|
{
|
|
Console.WriteLine("updating sensors...");
|
|
|
|
foreach (var h in c.Hardware)
|
|
{
|
|
if (h.HardwareType == HardwareType.GpuAti)
|
|
{
|
|
h.Update();
|
|
|
|
foreach (var s in h.Sensors)
|
|
{
|
|
if (s.SensorType == SensorType.Temperature)
|
|
{
|
|
gpuTemp = s.Value.GetValueOrDefault();
|
|
Console.WriteLine("gpu temp is " + gpuTemp);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (h.HardwareType == HardwareType.CPU)
|
|
{
|
|
h.Update();
|
|
foreach (var s in h.Sensors)
|
|
{
|
|
if (s.SensorType == SensorType.Temperature)
|
|
{
|
|
if (s.Index == 8)
|
|
{
|
|
cpuTemp = s.Value.GetValueOrDefault();
|
|
Console.WriteLine("cpu temp is " + cpuTemp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//Console.WriteLine(h.GetReport());
|
|
|
|
//foreach (var sensor in h.Sensors)
|
|
//{
|
|
// if (sensor.SensorType == SensorType.Temperature)
|
|
// {
|
|
// Console.WriteLine("{0} {1} {2} = {3} ({4})", sensor.Name, sensor.Hardware, sensor.SensorType, sensor.Value, sensor.Index);
|
|
// Console.WriteLine();
|
|
|
|
// }
|
|
|
|
//}
|
|
}
|
|
|
|
try
|
|
{
|
|
|
|
Console.WriteLine("writing to serial --> :" + gpuTemp
|
|
+ ";" + cpuTemp
|
|
+ "e");
|
|
canWriteTime = false;
|
|
serialPort.Write(
|
|
":" + gpuTemp
|
|
+ ";" + cpuTemp
|
|
+ "e");
|
|
canWriteTime = true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
timer.Stop();
|
|
Console.WriteLine("error! " + e.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|