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
+10
-1
@@ -299,13 +299,22 @@ Start-ScheduledTask -TaskName 'CPU Temp Agent'
|
||||
Агент шлёт плате по одной строке в секунду, в конце — перевод строки:
|
||||
|
||||
```
|
||||
T=67.0;L=34
|
||||
T=67.0;L=34;M=97
|
||||
```
|
||||
|
||||
| Ключ | Смысл |
|
||||
|---|---|
|
||||
| `T` | температура CPU Package, °C |
|
||||
| `L` | общая загрузка CPU, % |
|
||||
| `M` | загрузка оперативной памяти, % |
|
||||
|
||||
Ключ `M` агент шлёт, а прошивка пока **не показывает** — на экране 72×40 нет
|
||||
места для третьего показателя. Это и есть демонстрация расширяемости: агента
|
||||
обновили, платы не трогали, ничего не сломалось.
|
||||
|
||||
Берётся он у железа с именем `Total Memory` — это физическая память. У соседнего
|
||||
`Virtual Memory` датчик называется точно так же, но считает вместе с файлом
|
||||
подкачки и показывает заниженную цифру.
|
||||
|
||||
Неизвестные ключи прошивка молча игнорирует, поэтому протокол расширяем: можно
|
||||
добавить, например, `G=` для видеокарты, не трогая уже прошитые платы.
|
||||
|
||||
@@ -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