hw 0.2.3

强大而统一的跨平台硬件监控工具
docs.rs failed to build hw-0.2.3
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: hw-0.2.0

APIAPILicense

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 tests
    • 2000: Target value
    • 3000: 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

OHM Monitor Interface CPU Clock Monitoring Example

  1. 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
  1. 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
  1. 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

System Monitor Interface

# 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

AIDA64 Monitor Interface

# Memory Usage Monitoring
hw --api AIDA64 --task check --args RAM Load

# CPU Core Voltage Monitoring
hw --api AIDA64 --task check --args CPU Voltage

X.📖 Click for Rust CoreTemp CPU Voltage Usage

CoreTemp Monitoring

CoreTemp Monitor Interface

# Memory Usage Monitoring
hw --api CoreTemp --task check --args CPU Temperature

# CPU Core Voltage Monitoring
hw --api CoreTemp --task check --args CPU Clock

5. 📖 Click for Rust OSMore Usage

# Get Complete System Information
hw --api OSMore --task OsFullVersion 
# Get Memory Size
hw --api OSMore --task MemoryTotal 
# Get CPU Name
hw --api OSMore --task CpuName
# Get Host Name
hw --api OSMore --task HostName
# Get OS Version
hw --api OSMore --task OsVersion

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 OSMore --task NetManage  --args ping 127.0.0.1 baidu.com 
# Test PING Nodes
hw --api OSMore --task NetManage --args ping-nodes baidu.com 3 -- ~is_connected Ethernet

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 192.168.1.100 255.255.255.0 192.168.1.1 -- "以太网"
# Set DNS
hw --api OSMore --task NetManage  --args set-dns 223.5.5.5 114.114.114.114 "以太网" Ethernet  ~is_connected

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" 
# 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
# Check Drive Status
hw --api Drive --task check-status
# Print Drive Status
hw --api Drive --task print-status
# Print Drive Status Full
hw --api Drive --task print-status --full
# Print Drive Status Nodes
hw --api Drive --task print-status --nodes
# Print Drive Status Nodes Full
hw --api Drive --task print-status --nodes --full

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

16. 📖 Click for Rust Disk Usage

# Get Disk Data
hw --api Disk --task data --args C:
# Get Disk Mount Tree
hw --api Disk --task mount-tree --args C:
# Check Disk Load
hw --api Disk --task check-load --args 10 90

🚀 Development Progress

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

Hardware Type Support Details


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

  1. Hardware Testing

    • Product quality validation
    • Performance benchmarking
    • Stability testing
  2. System Monitoring

    • Server status monitoring
    • Workstation performance analysis
    • Temperature control system monitoring
  3. Development Debugging

    • Hardware driver development
    • Performance optimization analysis
    • Problem diagnosis
  4. 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

LICENSE COPYRIGHT

🤝 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:

  1. Code complies with project standards
  2. Add necessary tests
  3. Update relevant documentation

📜 License

This project is dual-licensed under MIT and Apache 2.0.