4 releases
new 0.1.4 | Dec 11, 2024 |
---|---|
0.1.3 | Dec 10, 2024 |
#24 in Windows APIs
411 downloads per month
210KB
4.5K
SLoC
HW Monitor
Powerful and Unified Cross-Platform Hardware Monitoring Tool
English | 简体中文
✨ Features
- 🔄 Multiple Backend Integration - Supports OpenHardwareMonitor, AIDA64, sysinfo and other monitoring solutions
- 🌍 Cross-Platform Support - Full support for Windows, basic support for Linux/MacOS
- 📊 Rich Monitoring Metrics - Comprehensive monitoring of CPU, GPU, Memory, Hard Drive, Motherboard, etc.
- ⚡ Real-time Data Collection - Millisecond-level hardware status monitoring
- 🔌 Unified Interface - Simple command-line tools and Rust API
- 🛠 Extensible Architecture - Easy to extend new monitoring backends
- 📈 Performance Optimization - Low resource usage, efficient data processing
🚀 Quick Start
Install via Cargo
cargo install hw
Build from Source
git clone https://github.com/eternalnight996/hw.git
cd hw
cargo install just
just
Command Differences:
- data: Only returns current sensor values
- print: Returns complete statistics without validation
- check: Performs value range validation and load testing
10
: Number of tests2000
: Target value3000
: Error range (-1000~5000)100
: CPU load percentage
📖 Features
[dependencies]
# All features
hw = {version="0.1"}
# Package all features
hw = {version="0.1",feature=["build","built"]}
# OHM only
hw = {version="0.1", default-features = false, feature=["ohm"]}
# Add cli for command line
# Log supports log and tracing, cli defaults to println output
hw = {version="0.1", default-features = false, feature=["ohm","cli","log"]}
📸 Interface Preview and Command Examples
1. 📖 Click for Rust CLI Usage
2. 📖 Click for Rust OHM CPU Clock Usage
OpenHardwareMonitor Monitoring
CPU Clock Monitoring Example
- data command - Returns current value only
hw --api OS --task data --args CPU Clock
Compiling hw v0.1.2 (D:\MyApp\hw)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.18s
Running `target\x86_64-pc-windows-msvc\debug\hw.exe --api OHM --task data --args CPU Clock`
Started OpenHardwareMonitor.exe with PID: 5332
Loading... (100%/100%)
...
--------------------------------
Average(1068MHz 0.0%) Data:1068
Close Load
=== Summary -> CPU Central Processing Unit ===
--- Sensor -> Clock Frequency MHz ---
Result: PASS
Data: 1068
Target: 0.0 MHz
Average: 1068.0 MHz
Minimum: 901.2 MHz
Maximum: 1101.5 MHz
Count: 1
Error Count: 0
Load: 0.0%
Average Load: 0.0%
Allowed Error: ±0.0
Allowed Range: 0.0 ~ 0.0 MHz
====================
R<{"content":"1068","status":true,"opts":null}>R
- print command - Returns complete statistics
hw --api OHM --task print --full --args CPU Clock
...
R<{"content":"{\"api\":\"OHM\",\"hw_type\":\"CPU\",\"sensor_type\":\"Clock\",\"res\":\"PASS\",\"data\":\"1102\",\"min\":1101.5174560546875,\"max\":1101.5174560546875,\"avg\":1102.0,\"total\":6609.104736328125,\"samples\":6,\"test_secs\":0,\"error_count\":0,\"load\":{\"min\":0.0,\"max\":0.0,\"avg\":0.0,\"total\":0.0,\"status\":[]},\"status\":[...]}","status":true,"opts":null}>R
- check command - Performs value range validation and load testing
hw --api OHM --task check --full --args CPU Clock -- 10 2000 3000 100
...
--- CPU Status at Second 10 ---
CPU Core #1 - Current=2904.0 MHz(Frequency) Error: ±3000.0
CPU Core #6 - Current=2904.0 MHz(Frequency) Error: ±3000.0
CPU Core #5 - Current=2904.0 MHz(Frequency) Error: ±3000.0
CPU Core #4 - Current=2904.0 MHz(Frequency) Error: ±3000.0
CPU Core #3 - Current=2904.0 MHz(Frequency) Error: ±3000.0
CPU Core #2 - Current=2904.0 MHz(Frequency) Error: ±3000.0
--------------------------------
Average(2904MHz 99.0%) Data:2904
Close Load
=== Summary -> CPU Central Processing Unit ===
--- Sensor -> Clock Frequency MHz ---
Result: PASS
Data: 2904
Target: 2000.0 MHz
Average: 2904.0 MHz
Minimum: 2904.0 MHz
Maximum: 2904.0 MHz
Count: 10
Error Count: 0
Load: 100.0%
Average Load: 99.0%
Allowed Error: ±3000.0
Allowed Range: -1000.0 ~ 5000.0 MHz
====================
R<{"content":"{\"api\":\"OHM\",\"hw_type\":\"CPU\",\"sensor_type\":\"Clock\",\"res\":\"PASS\",\"data\":\"2904\",\"min\":2904.000732421875,\"max\":2904.001708984375,\"avg\":2904.0,\"total\":174240.07470703125,\"samples\":60,\"test_secs\":0,\"error_count\":0,\"load\":{\"min\":0.0,\"max\":0.0,\"avg\":99.0,\"total\":5946.0,\"status\":[]},\"status\":[...]}","status":true,"opts":null}>R
# CPU Temperature Monitoring
hw --api OHM --task check --args CPU Temperature
# CPU Frequency Test (5 times, target 3000MHz, error ±2000MHz, 100% load)
hw --api OHM --task check --args CPU Clock -- 5 3000 2000 100
# Fan Speed Test (5 times, target 3000RPM, error ±2000RPM)
hw --api OHM --task check --args ALL Fan -- 5 3000 2000
3.📖 Click for Rust OS CPU Clock Usage
sysinfo Monitoring
# Overall System Status
hw --api OS --task print
# CPU Load Monitoring
hw --api OS --task check --args CPU Load
4.📖 Click for Rust AIDA64 CPU Voltage Usage
AIDA64 Monitoring
# Memory Usage Monitoring
hw --api AIDA64 --task check --args RAM Load
# CPU Core Voltage Monitoring
hw --api AIDA64 --task check --args CPU Voltage
5. 📖 Click for Rust OSMore Usage
# Get Complete System Information
hw --api OSMore --task OsFullVersion
# Get Memory Size
hw --api OSMore --task MemoryTotal
6. 📖 Click for Rust Microsoft Office Usage
# Get Office Version
hw --api OSOffice --task check-with-cache --args V2016 test
7. 📖 Click for Rust Microsoft System Activation Usage
# Activate System
hw --api OSSystem --task active --args XXXXX-XXXXX-XXXXX-XXXXX-XXXXX activation_temp
# Check System Activation Status and Query Activation Code Cache
hw --api OSSystem --task check-with-cache --args activation_temp
8. 📖 Click for Rust Export DLL|SO Dynamic Library Usage
# Export DLL|SO Dynamic Library
hw --api FileInfo --task copy-lib --args target/debug/hw.exe target/debug/_libs
# Print File Nodes
hw --api FileInfo --task print --args target/debug/hw.exe
# Print File Nodes
hw --api FileInfo --task nodes --args target/debug/hw.exe
9. 📖 Click for Rust PING Usage
# Test PING
hw --api NetManage --task ping --args 127.0.0.1 baidu.com 3
# Test PING Nodes
hw --api NetManage --task ping-nodes --args baidu.com 3
10. 📖 Click for Rust Set DHCP Usage
# Set DHCP ~is_connected means the currently connected network card
hw --api OSMore --task NetManage --args dhcp -- ~is_connected
11. 📖 Click for Rust Set Static IP Usage
# Set Static IP
hw --api OSMore --task NetManage --args set-ip "Ethernet" 192.168.1.100 255.255.255.0 192.168.1.1
# Set DNS
hw --api OSMore --task NetManage --args set-dns "Ethernet" 223.5.5.5 114.114.114.114
12. 📖 Click for Rust Desktop Usage
# Desktop Nodes
hw --api OSMore --task Desktop --args nodes
# Print
hw --api OSMore --task Desktop --args print
13. 📖 Click for Rust Drive Usage
# Scan Drives
hw --api Drive --task scan
# Print Drive
hw --api Drive --task print -- =net "*I225-V #6"
hw --api Drive --task print -- "@pci*" "*I225-V #6"
hw --api Drive --task print -- "@pci*" "PCI*" "*E0276CFFFFEEA86B00"
# --full Complete data but more resource consuming, recommended to use = and @ for filtering
hw --api Drive --task print --full -- =net "*I225-V #6"
{
"id": "PCI\\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03\\E0276CFFFFEEA86B00",
"drive_node": "1:",
"name": "Intel(R) Ethernet Controller (3) I225-V #6",
"inf_file": "c:\\drivers\\lan.intel\\pro2500\\e2f68.inf",
"inf_section": "E15F3_3.10.0.1..17763",
"driver_descript": "Intel(R) Ethernet Controller (3) I225-V #6",
"manufacturer_name": "Intel",
"provider_name": "Intel",
"driver_date": "2021/1/6",
"driver_version": "1.0.2.13",
"driver_node_rank": "16719872",
"driver_node_flags": "00003044",
"signed": false
}
# Drive Nodes
hw --api Drive --task nodes -- =net
# Export Drive
hw --api Drive --task export --args oem6.inf D:\\drives
hw --api Drive --task export --args oem*.inf .
# Restart Drive
hw --api Drive --task restart -- =net "Intel(R) Ethernet Controller (3) I225-V #5"
hw --api Drive --task restart -- "@PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03\E0276CFFFFEEA86A00"
# Enable Drive
hw --api Drive --task enable -- =net "Intel(R) Ethernet Controller (3) I225-V #5"
# Disable Drive
hw --api Drive --task disable -- "@PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03\E0276CFFFFEEA86A00"
# Delete Drive
hw --api Drive --task delete -- "@PCI\VEN_8086&DEV_15F3&SUBSYS_00008086&REV_03\E0276CFFFFEEA86A00"
# Add Drive
hw --api Drive --task add --args D:\\drives\\oem6.inf /install
# Add Drive Folder
hw --api Drive --task add-folder --args D:\\drives /install
14. 📖 Click for Rust Sync Time Usage
# Sync Time
hw --api OSMore --task NetManage --args sync-datetime time.windows.com
15. 📖 Click for Rust Network Interface Usage
# "~Less100" Speed less than 100
# "~100" Speed greater than or equal to 100
# "~1000" Speed greater than or equal to 1000
# "~Big1000" Speed greater than or equal to 10000
# "~is_connected" Currently connected
# "~has_dhcp_ip" Has DHCP IP
# Check MAC Duplication and Initialize
hw --api OSMore --task NetInterface --args check-mac "*I225-V #1" -- ~has_dhcp_ip
# Network Interface
hw --api OSMore --task NetInterface --args print -- ~has_dhcp_ip
# Network Interface Nodes
hw --api OSMore --task NetInterface --args nodes -- ~has_dhcp_ip
🚀 Development Progress
Backend | Windows | Linux | MacOS | Status | Description | Supported Features |
---|---|---|---|---|---|---|
OHM |
✓100% |
-0% |
-0% |
✓Completed |
Get hardware sensor data All features completed |
HardwareType,SensorType |
AIDA64 |
✓100% |
-0% |
-0% |
✓Completed |
Get hardware sensor data All features completed |
HardwareType,SensorType |
OS |
⚡10% |
⚡10% |
⚡10% |
🔄Testing |
Interface Rust system cross-platform basic functions available Support for more information retrieval |
CPU,RAM |
OSMore |
⚡70% |
⚡70% |
⚡70% |
✓Completed |
Mainly used for getting more information and management | MemoryTotal,CpuCoreCount,OsVersion OsFullVersion,KernelVersion,HostName,Uptime CpuUsage,MemoryUsage,CpuArch,UserNames, NetInterface,NetManage[Network Management(DHCP,PING,Sync Time,Static IP Configuration)],Desktop,Drive, |
Drive |
✓100% |
⚡0% |
⚡0% |
✓Completed |
Interface with PNPUTIL and devcon | scan,add-folder,add,delete,delete-find, print,nodes,restart,enable,disable,remove,export |
FileInfo |
✓100% |
⚡99% |
⚡99% |
✓Completed |
Get file dependencies dll or so, support one-click export dependencies | copy-lib,print,nodes |
OSSystem |
✓100% |
-0% |
-0% |
✓Completed |
System | check,check-with-cache,activate,deactivate,kms,clear-kms,clear-cache,cache-kms |
OSOffice |
✓90% |
-0% |
-0% |
✓Completed |
Office | check,check-with-cache,activate,kms,clear-kms,clear-cache,cache-kms |
Note:
- OpenHardwareMonitor (OHM) and AIDA64 only support Windows platform
- sysinfo supports cross-platform but has limited functionality
- Specific sensor support may vary by hardware
Sensor Type Support Details
Sensor Type | Unit | Format | Description |
---|---|---|---|
Clock | MHz | {value} MHz | Processor, memory clock frequency |
Temperature | °C | {value} °C | CPU, GPU, motherboard temperature |
Load | % | {value}% | Processor load, memory usage |
Fan | RPM | {value} RPM | Fan speed |
Voltage | V | {value} V | Various voltage values |
Power | W | {value} W | Power consumption |
Flow | L/h | {value} L/h | Liquid cooling flow rate |
Control | % | {value}% | Fan control level |
Level | % | {value}% | Battery level |
Data | B | {value} B | Data size |
GBData | GB | {value} GB | Large capacity data |
Throughput | B/s | {value} B/s | Data throughput |
DataRate | B/s | {value} B/s | Data transfer rate |
SmallData | B | {value} B | Small data |
GBSmallData | GB | {value} GB | Large capacity small data packets |
FSB | MHz | {value} MHz | Front Side Bus frequency |
Multiplexer | MHz | {value} MHz | Multiplier |
ClockAverage | MHz | {value} MHz | Average clock frequency |
Hardware Type Support Details
Hardware Type | Description | Common Sensors |
---|---|---|
CPU | Central Processing Unit | Clock, Temperature, Load, Power |
RAM | Memory | Data, Load, Clock |
Mainboard | Motherboard | Temperature, Voltage, Fan |
GpuNvidia | NVIDIA Graphics Card | Clock, Temperature, Load, Fan |
GpuAti | AMD/ATI Graphics Card | Clock, Temperature, Load, Fan |
HDD | Hard Disk Drive | Temperature, Load, Data |
SuperIO | Super I/O Chip | Fan, Temperature, Voltage |
TBalancer | T-Balancer Device | Fan, Flow, Temperature |
Heatmaster | Heatmaster Device | Fan, Flow, Temperature |
Third-Party Interface Versions
- OpenHardwareMonitor: v0.9.6
- AIDA64: v7.40.7100
- sysinfo: v0.33
Notes on Third-Party Applications
When using OHM or AIDA64 interface, the program first checks if the process exists;
If not, it checks if OpenHardwareMonitor.exe
or aida64.exe
exists in the current directory
📊 Performance Benchmarks
🦊 Projects Using This Tool
AUTOTEST2.exe
🔭 Why Choose This Tool?
In the field of hardware monitoring, we often face these challenges:
- Large differences in monitoring interfaces across platforms
- Complex sensor data acquisition on Windows
- Rust support
- Lack of unified data access methods
- Cumbersome switching between multiple monitoring tools
- Limited automated testing support
This tool aims to solve these problems by providing:
🎯 Unified Access Interface
- Command Line Tool: Simple and intuitive CLI commands
- Rust API: Native Rust programming interface
- WMI Support: WMI query capability for Windows platform
- Rust Support: Direct LIB calls from Rust
- Unified Data Format: Standardized data output
💻 Seamless Multi-Platform Support
- Windows: Complete sensor support (OHM/AIDA64)
- Linux: Basic system information monitoring (sysinfo)
- MacOS: Basic system information monitoring (sysinfo)
🔌 Rich Integration Capabilities
- Automated Testing: Support for automated hardware testing scenarios
- Data Collection: Flexible data collection and export
- Monitoring Alerts: Configurable threshold monitoring
- Extension Interface: Support for custom monitoring backends
🛠️ Ready to Use
- Zero Configuration: Minimal configuration requirements
- Quick Deployment: Single executable file
- Backward Compatible: Maintains API stability
- Complete Documentation: Detailed usage instructions
📊 Typical Use Cases
-
Hardware Testing
- Product quality validation
- Performance benchmarking
- Stability testing
-
System Monitoring
- Server status monitoring
- Workstation performance analysis
- Temperature control system monitoring
-
Development Debugging
- Hardware driver development
- Performance optimization analysis
- Problem diagnosis
-
Automation Integration
- CI/CD pipeline integration
- Automated test scripts
- Monitoring system integration
💡 Design Philosophy:
- Simplicity first
- Unified interface standards
- Cross-platform compatibility
- Extensible architecture
🙋 Reference Projects and Resources
License
🤝 Contributing
We welcome any form of contribution!
- Submit Issues to report bugs or suggest new features
- Submit Pull Requests to improve code
- Improve project documentation
- Share usage experiences
Before submitting a PR, please ensure:
- Code complies with project standards
- Add necessary tests
- Update relevant documentation
📜 License
This project is dual-licensed under MIT and Apache 2.0.
Dependencies
~8–50MB
~793K SLoC