A Python script for CPU power management on Linux servers with Home Assistant integration via MQTT.
- CPU Control: Set governors, turbo boost, and max frequency
- System Metrics: Monitor CPU frequency, usage, temperature, memory, load, and power consumption
- Storage Monitoring: NVMe and HDD/SSD temperature sensors
- Multi-Socket Support: Works with multi-CPU server systems
- Home Assistant Integration: Auto-discovery via MQTT with sensors and controls
- Power Modes: Quick presets for powersave and performance profiles
- Intel & AMD Support: Compatible with both Intel P-State and AMD CPUFreq drivers
- Python 3.6+
- Linux with sysfs CPU frequency scaling support
- Root privileges (for CPU control)
paho-mqtt(optional, for MQTT/Home Assistant integration)
pip install paho-mqttsudo ./server_powerctl.py --status# Enable powersave mode (low frequency, no turbo)
sudo ./server_powerctl.py --power-save enable
# Enable performance mode (max frequency, turbo on)
sudo ./server_powerctl.py --power-save disable
# Set CPU governor
sudo ./server_powerctl.py --set-governor ondemand
# Enable/disable turbo boost
sudo ./server_powerctl.py --set-turbo on
sudo ./server_powerctl.py --set-turbo off
# Set maximum CPU frequency (MHz)
sudo ./server_powerctl.py --set-max-freq 2400sudo ./server_powerctl.py \
--mqtt-broker 192.168.1.100 \
--mqtt-user homeassistant \
--mqtt-password secret \
--interval 2.0| Option | Description |
|---|---|
--status |
Show current system status and exit |
--power-save enable/disable |
Apply powersave or performance mode |
--set-governor GOVERNOR |
Set CPU governor (e.g., powersave, performance, ondemand) |
--set-turbo on/off |
Enable or disable turbo boost |
--set-max-freq MHZ |
Set maximum CPU frequency in MHz |
--mqtt-broker HOST |
MQTT broker address (enables daemon mode) |
--mqtt-port PORT |
MQTT broker port (default: 1883) |
--mqtt-user USER |
MQTT username |
--mqtt-password PASS |
MQTT password |
--ha-discovery-prefix PREFIX |
Home Assistant discovery prefix (default: homeassistant) |
--interval SECONDS |
Update interval for daemon mode (default: 2.0) |
-v, --verbose |
Enable verbose logging |
When running in daemon mode, the script automatically publishes MQTT discovery messages. Home Assistant will create:
- CPU Frequency (MHz)
- CPU Usage (%)
- CPU Temperature (°C)
- Memory Usage (%)
- Load Average
- CPU Power (W)
- CPU Governor
- Turbo Boost State
- Power Mode
- Max Frequency Setting
- NVMe/HDD Temperatures (auto-detected)
- CPU Governor (select): Choose from available governors
- Turbo Boost (switch): Toggle turbo boost on/off
- Max CPU Frequency (number/slider): Set maximum frequency
- Power Mode (select): Quick switch between performance and powersave
Create /etc/systemd/system/server-powerctl.service:
[Unit]
Description=Server Power Controller
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /path/to/server_powerctl.py \
--mqtt-broker 192.168.1.100 \
--mqtt-user homeassistant \
--mqtt-password secret
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetEnable and start:
sudo systemctl daemon-reload
sudo systemctl enable server-powerctl
sudo systemctl start server-powerctlThe Unlicense