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 |
|
| `T` | температура CPU Package, °C |
|
||||||
| `L` | общая загрузка CPU, % |
|
| `L` | общая загрузка CPU, % |
|
||||||
|
| `M` | загрузка оперативной памяти, % |
|
||||||
|
|
||||||
|
Ключ `M` агент шлёт, а прошивка пока **не показывает** — на экране 72×40 нет
|
||||||
|
места для третьего показателя. Это и есть демонстрация расширяемости: агента
|
||||||
|
обновили, платы не трогали, ничего не сломалось.
|
||||||
|
|
||||||
|
Берётся он у железа с именем `Total Memory` — это физическая память. У соседнего
|
||||||
|
`Virtual Memory` датчик называется точно так же, но считает вместе с файлом
|
||||||
|
подкачки и показывает заниженную цифру.
|
||||||
|
|
||||||
Неизвестные ключи прошивка молча игнорирует, поэтому протокол расширяем: можно
|
Неизвестные ключи прошивка молча игнорирует, поэтому протокол расширяем: можно
|
||||||
добавить, например, `G=` для видеокарты, не трогая уже прошитые платы.
|
добавить, например, `G=` для видеокарты, не трогая уже прошитые платы.
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ Add-Type -Path $LhmPath
|
|||||||
|
|
||||||
$computer = New-Object LibreHardwareMonitor.Hardware.Computer
|
$computer = New-Object LibreHardwareMonitor.Hardware.Computer
|
||||||
$computer.IsCpuEnabled = $true
|
$computer.IsCpuEnabled = $true
|
||||||
|
$computer.IsMemoryEnabled = $true
|
||||||
$computer.Open()
|
$computer.Open()
|
||||||
|
|
||||||
function Get-CpuStats {
|
function Get-CpuStats {
|
||||||
@@ -36,10 +37,15 @@ function Get-CpuStats {
|
|||||||
|
|
||||||
$temp = $null
|
$temp = $null
|
||||||
$load = $null
|
$load = $null
|
||||||
|
$mem = $null
|
||||||
foreach ($hw in $computer.Hardware) {
|
foreach ($hw in $computer.Hardware) {
|
||||||
foreach ($s in $hw.Sensors) {
|
foreach ($s in $hw.Sensors) {
|
||||||
if ($s.SensorType -eq 'Temperature' -and $s.Name -eq 'CPU Package') { $temp = $s.Value }
|
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 }
|
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 @{
|
return @{
|
||||||
Temp = $temp
|
Temp = $temp
|
||||||
Load = $load
|
Load = $load
|
||||||
|
Mem = $mem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +80,13 @@ function Assert-SensorsAvailable {
|
|||||||
# Форматирование только через InvariantCulture: в русской локали вышло бы
|
# Форматирование только через InvariantCulture: в русской локали вышло бы
|
||||||
# "T=67,0", и atof на плате прочитал бы 67, молча потеряв дробную часть.
|
# "T=67,0", и atof на плате прочитал бы 67, молча потеряв дробную часть.
|
||||||
function Format-StatsLine($stats) {
|
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