diff --git a/CPU_temp/README.md b/CPU_temp/README.md index 3ae7c3b..3d18ca1 100644 --- a/CPU_temp/README.md +++ b/CPU_temp/README.md @@ -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=` для видеокарты, не трогая уже прошитые платы. diff --git a/CPU_temp/agent/cpu_temp_agent.ps1 b/CPU_temp/agent/cpu_temp_agent.ps1 index e073bde..83fdeec 100644 --- a/CPU_temp/agent/cpu_temp_agent.ps1 +++ b/CPU_temp/agent/cpu_temp_agent.ps1 @@ -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 } # Номер порта не хардкодим: он меняется при перетыкании в другой разъём.