feat(agent): слать загрузку оперативной памяти ключом M
Прошивка её пока не показывает - на 72x40 нет места под третий показатель. Это намеренно: неизвестный ключ прошивка игнорирует, поэтому агента можно обновлять независимо от плат. Память берётся у железа с именем Total Memory - это физическая память. У соседнего Virtual Memory датчик называется точно так же, но считает вместе с файлом подкачки и показывает заниженную цифру: 87% против фактических 97%. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b15421305c
commit
4344fa8873
2 files changed
+24
-2
No files matched your search
@@ -29,6 +29,7 @@ Add-Type -Path $LhmPath
|
||||
|
||||
$computer = New-Object LibreHardwareMonitor.Hardware.Computer
|
||||
$computer.IsCpuEnabled = $true
|
||||
$computer.IsMemoryEnabled = $true
|
||||
$computer.Open()
|
||||
|
||||
function Get-CpuStats {
|
||||
@@ -36,10 +37,15 @@ function Get-CpuStats {
|
||||
|
||||
$temp = $null
|
||||
$load = $null
|
||||
$mem = $null
|
||||
foreach ($hw in $computer.Hardware) {
|
||||
foreach ($s in $hw.Sensors) {
|
||||
if ($s.SensorType -eq 'Temperature' -and $s.Name -eq 'CPU Package') { $temp = $s.Value }
|
||||
if ($s.SensorType -eq 'Load' -and $s.Name -eq 'CPU Total') { $load = $s.Value }
|
||||
# Имя железа проверяем обязательно: у "Virtual Memory" датчик зовётся
|
||||
# точно так же, но считает физическую память вместе с файлом подкачки
|
||||
# и показывает заниженную цифру.
|
||||
if ($hw.Name -eq 'Total Memory' -and $s.SensorType -eq 'Load' -and $s.Name -eq 'Memory') { $mem = $s.Value }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +54,7 @@ function Get-CpuStats {
|
||||
return @{
|
||||
Temp = $temp
|
||||
Load = $load
|
||||
Mem = $mem
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +80,13 @@ function Assert-SensorsAvailable {
|
||||
# Форматирование только через InvariantCulture: в русской локали вышло бы
|
||||
# "T=67,0", и atof на плате прочитал бы 67, молча потеряв дробную часть.
|
||||
function Format-StatsLine($stats) {
|
||||
return [string]::Format([cultureinfo]::InvariantCulture, 'T={0:F1};L={1}', [double]$stats.Temp, [int][math]::Round([double]$stats.Load))
|
||||
$line = [string]::Format([cultureinfo]::InvariantCulture, 'T={0:F1};L={1}', [double]$stats.Temp, [int][math]::Round([double]$stats.Load))
|
||||
# Память необязательна: если датчика нет, строка просто идёт без ключа M,
|
||||
# и прошивка этого не заметит.
|
||||
if ($null -ne $stats.Mem) {
|
||||
$line += [string]::Format([cultureinfo]::InvariantCulture, ';M={0}', [int][math]::Round([double]$stats.Mem))
|
||||
}
|
||||
return $line
|
||||
}
|
||||
|
||||
# Номер порта не хардкодим: он меняется при перетыкании в другой разъём.
|
||||
|
||||
Reference in new issue
Block a user