Skip to content

Instantly share code, notes, and snippets.

@joar
Created May 10, 2015 22:16
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save joar/2a91ff54718e58011f86 to your computer and use it in GitHub Desktop.
Save joar/2a91ff54718e58011f86 to your computer and use it in GitHub Desktop.
Accessing MSI Afterburner remote server manually

Where $ip and $port are your MSI Afterburner Remote Server's IP address and port:

  • Go to $ip:$port/mahm, you will be presented with a HTTP Basic Auth dialog.
  • Enter MSIAfterburner as the username.
  • Enter your security key as the password.

Profit! You'll get an XML file that looks something like the attached xml-example.xml.

<?xml version="1.0" encoding="utf-8"?>
<HardwareMonitor>
<HardwareMonitorHeader>
<signature>1296123981</signature>
<version>131072</version>
<headerSize>32</headerSize>
<entryCount>38</entryCount>
<entrySize>1324</entrySize>
<time>1431295640</time>
<gpuEntryCount>2</gpuEntryCount>
<gpuEntrySize>1304</gpuEntrySize>
</HardwareMonitorHeader>
<HardwareMonitorEntries>
<HardwareMonitorEntry>
<srcName>Framerate</srcName>
<srcUnits>FPS</srcUnits>
<localizedSrcName>Framerate</localizedSrcName>
<localizedSrcUnits>FPS</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>200</maxLimit>
<flags>SHOW_IN_OSD</flags>
<gpu>4294967295</gpu>s
<srcId>80</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 power</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>GPU1 power</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>11</data>
<minLimit>0</minLimit>
<maxLimit>150</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>96</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>GPU1 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>31</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>0</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>GPU1 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>7</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>48</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 FB usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>GPU1 FB usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>11</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>50</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 VID usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>GPU1 VID usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>51</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 BUS usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>GPU1 BUS usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>52</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU2 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>GPU2 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>1</gpu>
<srcId>48</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU2 VID usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>GPU2 VID usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>1</gpu>
<srcId>51</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 fan speed</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>GPU1 fan speed</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>41</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>16</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 fan tachometer</srcName>
<srcUnits>RPM</srcUnits>
<localizedSrcName>GPU1 fan tachometer</localizedSrcName>
<localizedSrcUnits>RPM</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>1685</data>
<minLimit>0</minLimit>
<maxLimit>10000</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>17</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 core clock</srcName>
<srcUnits>MHz</srcUnits>
<localizedSrcName>GPU1 core clock</localizedSrcName>
<localizedSrcUnits>MHz</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>135</data>
<minLimit>0</minLimit>
<maxLimit>1500</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>32</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 memory clock</srcName>
<srcUnits>MHz</srcUnits>
<localizedSrcName>GPU1 memory clock</localizedSrcName>
<localizedSrcUnits>MHz</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>324</data>
<minLimit>0</minLimit>
<maxLimit>5000</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>34</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 memory usage</srcName>
<srcUnits>MB</srcUnits>
<localizedSrcName>GPU1 memory usage</localizedSrcName>
<localizedSrcUnits>MB</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>735.0469</data>
<minLimit>0</minLimit>
<maxLimit>3072</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>49</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 temp limit</srcName>
<srcUnits />
<localizedSrcName>GPU1 temp limit</localizedSrcName>
<localizedSrcUnits />
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>1</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>112</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 power limit</srcName>
<srcUnits />
<localizedSrcName>GPU1 power limit</localizedSrcName>
<localizedSrcUnits />
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>1</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>113</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 voltage limit</srcName>
<srcUnits />
<localizedSrcName>GPU1 voltage limit</localizedSrcName>
<localizedSrcUnits />
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>1</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>114</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 OV max limit</srcName>
<srcUnits />
<localizedSrcName>GPU1 OV max limit</localizedSrcName>
<localizedSrcUnits />
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>1</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>115</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 utilization limit</srcName>
<srcUnits />
<localizedSrcName>GPU1 utilization limit</localizedSrcName>
<localizedSrcUnits />
<recommendedFormat>%.0f</recommendedFormat>
<data>1</data>
<minLimit>0</minLimit>
<maxLimit>1</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>116</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>GPU1 SLI sync limit</srcName>
<srcUnits />
<localizedSrcName>GPU1 SLI sync limit</localizedSrcName>
<localizedSrcUnits />
<recommendedFormat>%.0f</recommendedFormat>
<data>0</data>
<minLimit>0</minLimit>
<maxLimit>1</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>117</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU1 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>CPU1 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>37</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>128</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU2 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>CPU2 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>37</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>1</gpu>
<srcId>128</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU3 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>CPU3 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>31</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>2</gpu>
<srcId>128</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU4 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>CPU4 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>31</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>3</gpu>
<srcId>128</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU5 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>CPU5 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>36</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>4</gpu>
<srcId>128</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU6 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>CPU6 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>36</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>5</gpu>
<srcId>128</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU7 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>CPU7 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>25</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>6</gpu>
<srcId>128</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU8 temperature</srcName>
<srcUnits>C</srcUnits>
<localizedSrcName>CPU8 temperature</localizedSrcName>
<localizedSrcUnits>C</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>25</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>7</gpu>
<srcId>128</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU1 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>CPU1 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>4.285103</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>144</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU2 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>CPU2 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>5.713684</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>1</gpu>
<srcId>144</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU3 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>CPU3 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>9.999425</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>2</gpu>
<srcId>144</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU4 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>CPU4 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>9.999425</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>3</gpu>
<srcId>144</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU5 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>CPU5 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>14.28517</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>4</gpu>
<srcId>144</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU6 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>CPU6 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>7.142264</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>5</gpu>
<srcId>144</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU7 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>CPU7 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>5.667267</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>6</gpu>
<srcId>144</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>CPU8 usage</srcName>
<srcUnits>%</srcUnits>
<localizedSrcName>CPU8 usage</localizedSrcName>
<localizedSrcUnits>%</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>22.56268</data>
<minLimit>0</minLimit>
<maxLimit>100</maxLimit>
<flags>None</flags>
<gpu>7</gpu>
<srcId>144</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>RAM usage</srcName>
<srcUnits>MB</srcUnits>
<localizedSrcName>RAM usage</localizedSrcName>
<localizedSrcUnits>MB</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>10820</data>
<minLimit>0</minLimit>
<maxLimit>8192</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>145</srcId>
</HardwareMonitorEntry>
<HardwareMonitorEntry>
<srcName>Pagefile usage</srcName>
<srcUnits>MB</srcUnits>
<localizedSrcName>Pagefile usage</localizedSrcName>
<localizedSrcUnits>MB</localizedSrcUnits>
<recommendedFormat>%.0f</recommendedFormat>
<data>14516</data>
<minLimit>0</minLimit>
<maxLimit>8192</maxLimit>
<flags>None</flags>
<gpu>0</gpu>
<srcId>146</srcId>
</HardwareMonitorEntry>
</HardwareMonitorEntries>
<HardwareMonitorGpuEntries>
<HardwareMonitorGpuEntry>
<gpuId>VEN_10DE&amp;DEV_13C0&amp;SUBSYS_85041043&amp;REV_A1&amp;BUS_1&amp;DEV_0&amp;FN_0</gpuId>
<family>GM204-A</family>
<device>GeForce GTX 980</device>
<driver>350.12</driver>
<BIOS>84.04.1f.00.02</BIOS>
<memAmount>0</memAmount>
</HardwareMonitorGpuEntry>
<HardwareMonitorGpuEntry>
<gpuId>VEN_8086&amp;DEV_0162&amp;SUBSYS_01621849&amp;REV_09&amp;BUS_0&amp;DEV_2&amp;FN_0</gpuId>
<family />
<device />
<driver />
<BIOS />
<memAmount>0</memAmount>
</HardwareMonitorGpuEntry>
</HardwareMonitorGpuEntries>
</HardwareMonitor>
@intellitour
Copy link

Does this still work? I am willing to make an app better the current one available...

@1RedOne
Copy link

1RedOne commented Jan 3, 2018

It does still work! I'm using this to make a nice multi-gpu monitoring dashboard. Thanks for the heads up, @joar!

Here's how to do this in PowerShell.

  • Install MSIAfterBurner and Remote Server
  • Right click the tray icon, then choose 'Security' and copy the Security Key from there

Use the following PowerShell to hit the endpoint, log in, and then display temperatures

$user = 'MSIAfterburner'
$key = '17cc95b4017d496f82'

#Build a credential object for basic auth
$tempPW = ConvertTo-SecureString $key -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($user, $tempPW)

$RemoteMSIRequest = Invoke-RestMethod -Uri 'http://192.168.0.27:82/mahm' -Credential $credential 

$RemoteMSIRequest.HardwareMonitor.HardwareMonitorEntries.HardwareMonitorEntry | Where srcUnits -eq 'C'

This returns the following output:

srcName           : GPU1 temperature
srcUnits          : C
localizedSrcName  : GPU1 temperature
localizedSrcUnits : C
recommendedFormat : %.0f
data              : 72
minLimit          : 0
maxLimit          : 100
flags             : None
gpu               : 0
srcId             : 0

srcName           : GPU2 temperature
srcUnits          : C
localizedSrcName  : GPU2 temperature
localizedSrcUnits : C
recommendedFormat : %.0f
data              : 60
minLimit          : 0
maxLimit          : 100
flags             : None
gpu               : 1
srcId             : 0

@Izdatyi
Copy link

Izdatyi commented Jan 18, 2018

2018-01-18 16 24 38

@Izdatyi
Copy link

Izdatyi commented Jan 18, 2018

I allways get this error
Default settings

@stefanvladvoinea
Copy link

Do you have some documentation on the service endpoints? What request should I make to let's say increase the memory clock by 10MHz?

@saikon
Copy link

saikon commented Oct 28, 2018

Has the URL changed since 2015 when this was created? I cannot access anything with that /mham.

Just using the : results in:

<error>
<message>Unknown Command</message>
</error>

And using the :/mahm results in:

<error>
<message>Access is denied</message>
</error>

Any ideas what query gives useful data? I also tried switching Monitor and Real time data on and off. That did not change anything.

@saikon
Copy link

saikon commented Oct 28, 2018

To answer my own question:

The dll has been updated. Old one caused the access denied error when there was too much data to be read.
https://forums.guru3d.com/threads/msi-afterburner-net-class-library.339656/#1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment