feat(agent): слать загрузку оперативной памяти ключом M

Прошивка её пока не показывает - на 72x40 нет места под третий
показатель. Это намеренно: неизвестный ключ прошивка игнорирует, поэтому
агента можно обновлять независимо от плат.

Память берётся у железа с именем Total Memory - это физическая память.
У соседнего Virtual Memory датчик называется точно так же, но считает
вместе с файлом подкачки и показывает заниженную цифру: 87% против
фактических 97%.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
oskarvitaliiandClaude Opus 5 committed 2026-09-17 19:04:11 +07:00
1 parent b15421305c
commit 4344fa8873
2 files changed
+24 -2

No files matched your search

+14 -1
View File
@@ -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
}
# Номер порта не хардкодим: он меняется при перетыкании в другой разъём.