Прошивка её пока не показывает - на 72x40 нет места под третий показатель. Это намеренно: неизвестный ключ прошивка игнорирует, поэтому агента можно обновлять независимо от плат. Память берётся у железа с именем Total Memory - это физическая память. У соседнего Virtual Memory датчик называется точно так же, но считает вместе с файлом подкачки и показывает заниженную цифру: 87% против фактических 97%. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Агент CPU Temp
Читает температуру и загрузку процессора и раз в секунду отдаёт их плате
ESP32-C3 по USB-COM строкой вида T=67.0;L=34.
Что нужно установить
1. LibreHardwareMonitor
Скачать со https://github.com/LibreHardwareMonitor/LibreHardwareMonitor/releases
архив LibreHardwareMonitor.zip и распаковать в D:\Soft\LibreHardwareMonitor.
Не брать LibreHardwareMonitor.NET.10.zip: это сборка под .NET 10, а Windows
PowerShell 5.1 работает на .NET Framework и такую сборку не загрузит.
Само приложение запускать не нужно — используются только
LibreHardwareMonitorLib.dll и лежащий рядом HidSharp.dll.
2. Драйвер PawnIO
Скачать со https://github.com/namazso/PawnIO.Setup/releases файл
PawnIO_setup.exe и запустить без аргументов: установщик не принимает
никаких ключей, и на /S или /quiet отвечает кодом 87.
Зачем: с версии 0.9.5 LibreHardwareMonitor читает MSR-регистры процессора через PawnIO, а не через WinRing0, и в архив с программой этот драйвер не входит.
Без PawnIO загрузка CPU читается, а все температуры пустые — даже из консоли администратора. Выглядит как нехватка прав, но причина другая.
Запуск вручную
Нужны права администратора: без них драйвер не открывается.
powershell -ExecutionPolicy Bypass -File "D:\Soft\Arduino\CPU_temp\agent\cpu_temp_agent.ps1" -Echo
Ключ -Echo печатает каждую отправленную строку — только для проверки.
При старте агент сам проверяет, доступна ли температура, и при отказе называет причину, а не крутит молча пустой цикл.
Автозапуск
Задание Планировщика CPU Temp Agent: триггер «при входе в систему», наивысшие
права, скрытое окно.
Регистрация (из консоли администратора):
$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File "D:\Soft\Arduino\CPU_temp\agent\cpu_temp_agent.ps1"'
$trigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME
$set = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit ([TimeSpan]::Zero)
Register-ScheduledTask -TaskName 'CPU Temp Agent' -Action $action -Trigger $trigger -Settings $set -RunLevel Highest -Force
-RunLevel Highest обязателен. Нулевой ExecutionTimeLimit нужен, иначе
Планировщик убьёт агента через трое суток.
Удаление:
Unregister-ScheduledTask -TaskName 'CPU Temp Agent' -Confirm:$false
Перед заливкой прошивки — остановить агента
Плата прошивается через тот же COM-порт, по которому идут данные. Пока агент
держит порт, заливка падает с PermissionError.
Stop-ScheduledTask -TaskName 'CPU Temp Agent'
После заливки задание можно запустить снова: Start-ScheduledTask -TaskName 'CPU Temp Agent'.
Замечания по коду
- Файл
cpu_temp_agent.ps1сохранён в UTF-8 с BOM. Без BOM PowerShell 5.1 читает его как ANSI, кириллица в комментариях превращается в мусор, и скрипт перестаёт разбираться с невнятными ошибками про скобки. - Номер COM-порта не задан жёстко: плата ищется по
VID_303A&PID_1001, потому что номер меняется при перетыкании в другой разъём. - Числа форматируются через
InvariantCulture: в русской локали иначе вышло быT=67,0, иatofна плате прочитал бы67, потеряв дробную часть.