TLDR: Using PowerShell I can display hardware stats on the Asus ROG RYUO cooler without an Asus brand motherboard
So, apparently I'm an idiot. In order to use the hardware monitoring capabilities of the Asus ROG RYUO cooler, you need to have an Asus brand motherboard. I have an ASRock motherboard. I guess simply reading the information from Windows like every other piece of software on the planet is too difficult. Thanks Asus. Anyway...
I decided to see what I could do with the "custom banner" option in the LiveDash software. It lets you type in a text field, hit apply, and it'll display your text on top of a preset background on your watercooler. So of course I immediately think, why not have something dynamically fill this in and apply it automatically.
With process monitor I determined it was writing to the following XML file "C:\Program Files (x86)\LightingService\OledLastProfile.xml" Upon viewing this file, I spotted where it was saving the lines of text. Pretty simple really
Now that I had this figured out, I fired up powershell and hastily slapped together the following bit of code to have it read from WMI and dynamically update the XML file with information about my system. I would have had it write system temps but apparently for my motherboard I can't get that info from WMI. (Please don't judge my code too harshly)
$i = 1
$CPUpercent = get-wmiobject Win32_Processor | select -expandproperty loadpercentage
$RAM = Get-WmiObject Win32_OperatingSystem | select totalvisiblememorysize, freephysicalmemory
$RAMusage = [math]::Round(($RAM.TotalVisibleMemorySize - $RAM.FreePhysicalMemory)/1024/1024,1)
[XML]$XMLfile=Get-Content(“C:\Program Files (x86)\LightingService\OledLastProfile.xml”)
$xmlfile.root.profiles.profile1.main.single.player.setting.text_list.text_string1 = "CPU Load: $CPUpercent %"
$xmlfile.root.profiles.profile1.main.single.player.setting.text_list.text_string2 = "RAM Used: $RAMUsage GB"
$XMLfile.save(“C:\Program Files (x86)\LightingService\OledLastProfile.xml”)
Start-Process -filepath "C:\Program Files (x86)\ASUS\LiveDash\LiveDash.exe"
Start-Sleep -Seconds 1
Stop-Process -Name LiveDash
Start-Sleep -Seconds 4
While($i -eq 1)
With that bit of code, PowerShell is dynamically writing the CPU load percentage and RAM usage to that XML file. When I fire up LiveDash the display immediately updates with the information in the XML. Unfortunately, I cannot determine how to make the OLED refresh without opening LiveDash every time the XML is updated. So, I added the last 4 lines to launch LiveDash, give it 1 second to update the OLED, then kill the LiveDash process before it has a chance to actually open the GUI and steal focus from what I'm working on. I also added a sleep of 4 seconds to the end so the loop has a total of 5 seconds of "sleep" time to not do anything so it doesn't overwhelm LiveDash or anything. Without the sleep in there, it started getting confused and writing weird stuff to the XML and not displaying it correctly.
With that code running in the background, I can fire up a game and see my system stats right on my water cooler! Pretty neat! If anyone has an idea of how to refresh the OLED without firing up the LiveDash software please share.